Source restructure. yaz-marcdump part of installation
authorAdam Dickmeiss <adam@indexdata.dk>
Mon, 27 Oct 2003 12:21:21 +0000 (12:21 +0000)
committerAdam Dickmeiss <adam@indexdata.dk>
Mon, 27 Oct 2003 12:21:21 +0000 (12:21 +0000)
312 files changed:
CHANGELOG
Makefile.am
README
asn/Makefile.am [deleted file]
asn/proto.c [deleted file]
asn/prt-acc.c [deleted file]
asn/prt-acc.h [deleted file]
asn/prt-add.c [deleted file]
asn/prt-add.h [deleted file]
asn/prt-arc.c [deleted file]
asn/prt-arc.h [deleted file]
asn/prt-dat.c [deleted file]
asn/prt-dat.h [deleted file]
asn/prt-dia.c [deleted file]
asn/prt-dia.h [deleted file]
asn/prt-esp.c [deleted file]
asn/prt-esp.h [deleted file]
asn/prt-exd.c [deleted file]
asn/prt-exd.h [deleted file]
asn/prt-exp.c [deleted file]
asn/prt-exp.h [deleted file]
asn/prt-ext.h [deleted file]
asn/prt-grs.c [deleted file]
asn/prt-grs.h [deleted file]
asn/prt-proto.h [deleted file]
asn/prt-rsc.c [deleted file]
asn/prt-rsc.h [deleted file]
asn/prt-univ.c [deleted file]
asn/prt-univ.h [deleted file]
asn/test.c [deleted file]
ccl/.cvsignore [deleted file]
ccl/LICENSE [deleted file]
ccl/Makefile.am [deleted file]
ccl/README [deleted file]
ccl/bib1 [deleted file]
ccl/cclerrms.c [deleted file]
ccl/cclfind.c [deleted file]
ccl/cclptree.c [deleted file]
ccl/cclqfile.c [deleted file]
ccl/cclqual.c [deleted file]
ccl/cclsh.c [deleted file]
ccl/cclstr.c [deleted file]
ccl/ccltoken.c [deleted file]
ccl/tstccl.c [deleted file]
client/Makefile.am
comstack/.cvsignore [deleted file]
comstack/Makefile.am [deleted file]
comstack/comstack.c [deleted file]
comstack/tcpip.c [deleted file]
comstack/unix.c [deleted file]
comstack/waislen.c [deleted file]
comstack/xmosi.c [deleted file]
configure.in
cql/.cvsignore [deleted file]
cql/Makefile.am [deleted file]
cql/cql.y [deleted file]
cql/cql2pqf.c [deleted file]
cql/cql2xcql.c [deleted file]
cql/cqlstdio.c [deleted file]
cql/cqlstrer.c [deleted file]
cql/cqlstring.c [deleted file]
cql/cqltransform.c [deleted file]
cql/cqlutil.c [deleted file]
cql/lexer.c [deleted file]
cql/xcqlutil.c [deleted file]
doc/Makefile.am
doc/yaz-asncomp-man.xml [new file with mode: 0644]
doc/yaz-asncomp.sgml [deleted file]
doc/yaz-client-man.xml [new file with mode: 0644]
doc/yaz-client.sgml [deleted file]
doc/yaz-config-man.xml [new file with mode: 0644]
doc/yaz-config.sgml [deleted file]
doc/yaz-man.sgml [deleted file]
doc/yaz-man.xml [new file with mode: 0644]
doc/yaz-marcdump-man.xml [new file with mode: 0644]
doc/yaz-ztest-man.xml [new file with mode: 0644]
doc/yaz-ztest.sgml [deleted file]
doc/zoomsh-man.xml [new file with mode: 0644]
doc/zoomsh.sgml [deleted file]
ill/.cvsignore [deleted file]
ill/Makefile.am [deleted file]
ill/ill-get.c [deleted file]
ill/ill.tcl [deleted file]
ill/ill9702.asn [deleted file]
ill/item-req.asn [deleted file]
lib/.cvsignore [deleted file]
lib/Makefile.am [deleted file]
lib/x.c [deleted file]
odr/.cvsignore [deleted file]
odr/Makefile.am [deleted file]
odr/ber_any.c [deleted file]
odr/ber_bit.c [deleted file]
odr/ber_bool.c [deleted file]
odr/ber_int.c [deleted file]
odr/ber_len.c [deleted file]
odr/ber_null.c [deleted file]
odr/ber_oct.c [deleted file]
odr/ber_oid.c [deleted file]
odr/ber_tag.c [deleted file]
odr/dumpber.c [deleted file]
odr/odr-priv.h [deleted file]
odr/odr.c [deleted file]
odr/odr_any.c [deleted file]
odr/odr_bit.c [deleted file]
odr/odr_bool.c [deleted file]
odr/odr_choice.c [deleted file]
odr/odr_cons.c [deleted file]
odr/odr_enum.c [deleted file]
odr/odr_int.c [deleted file]
odr/odr_mem.c [deleted file]
odr/odr_null.c [deleted file]
odr/odr_oct.c [deleted file]
odr/odr_oid.c [deleted file]
odr/odr_seq.c [deleted file]
odr/odr_tag.c [deleted file]
odr/odr_use.c [deleted file]
odr/odr_util.c [deleted file]
odr/tstodr.asn [deleted file]
odr/tstodr.c [deleted file]
retrieval/.cvsignore [deleted file]
server/.cvsignore [deleted file]
server/Makefile.am [deleted file]
server/eventl.c [deleted file]
server/eventl.h [deleted file]
server/requestq.c [deleted file]
server/service.c [deleted file]
server/service.h [deleted file]
server/seshigh.c [deleted file]
server/session.h [deleted file]
server/statserv.c [deleted file]
server/tcpdchk.c [deleted file]
src/.cvsignore [new file with mode: 0644]
src/Makefile.am [new file with mode: 0644]
src/atoin.c [new file with mode: 0644]
src/ber_any.c [new file with mode: 0644]
src/ber_bit.c [new file with mode: 0644]
src/ber_bool.c [new file with mode: 0644]
src/ber_int.c [new file with mode: 0644]
src/ber_len.c [new file with mode: 0644]
src/ber_null.c [new file with mode: 0644]
src/ber_oct.c [new file with mode: 0644]
src/ber_oid.c [new file with mode: 0644]
src/ber_tag.c [new file with mode: 0644]
src/cclerrms.c [new file with mode: 0644]
src/cclfind.c [new file with mode: 0644]
src/cclptree.c [new file with mode: 0644]
src/cclqfile.c [new file with mode: 0644]
src/cclqual.c [new file with mode: 0644]
src/cclstr.c [new file with mode: 0644]
src/ccltoken.c [new file with mode: 0644]
src/charconv.sgm [new file with mode: 0644]
src/charconv.tcl [new file with mode: 0755]
src/charconv_cjk.xml [new file with mode: 0644]
src/charneg-3.asn [new file with mode: 0644]
src/charneg.c [new file with mode: 0644]
src/comstack.c [new file with mode: 0644]
src/cql.y [new file with mode: 0644]
src/cqlstdio.c [new file with mode: 0644]
src/cqlstrer.c [new file with mode: 0644]
src/cqlstring.c [new file with mode: 0644]
src/cqltransform.c [new file with mode: 0644]
src/cqlutil.c [new file with mode: 0644]
src/datetime.asn [new file with mode: 0644]
src/diagbib1.c [new file with mode: 0644]
src/dumpber.c [new file with mode: 0644]
src/esadmin.asn [new file with mode: 0644]
src/esupdate.asn [new file with mode: 0644]
src/eventl.c [new file with mode: 0644]
src/eventl.h [new file with mode: 0644]
src/grs1disp.c [new file with mode: 0644]
src/ill-get.c [new file with mode: 0644]
src/ill.tcl [new file with mode: 0644]
src/ill9702.asn [new file with mode: 0644]
src/item-req.asn [new file with mode: 0644]
src/lexer.h [new file with mode: 0644]
src/log.c [new file with mode: 0644]
src/logrpn.c [new file with mode: 0644]
src/marcdisp.c [new file with mode: 0644]
src/matchstr.c [new file with mode: 0644]
src/mterm2.asn [new file with mode: 0644]
src/nmem.c [new file with mode: 0644]
src/nmemsdup.c [new file with mode: 0644]
src/oclcui.asn [new file with mode: 0644]
src/odr-priv.h [new file with mode: 0644]
src/odr.c [new file with mode: 0644]
src/odr_any.c [new file with mode: 0644]
src/odr_bit.c [new file with mode: 0644]
src/odr_bool.c [new file with mode: 0644]
src/odr_choice.c [new file with mode: 0644]
src/odr_cons.c [new file with mode: 0644]
src/odr_enum.c [new file with mode: 0644]
src/odr_int.c [new file with mode: 0644]
src/odr_mem.c [new file with mode: 0644]
src/odr_null.c [new file with mode: 0644]
src/odr_oct.c [new file with mode: 0644]
src/odr_oid.c [new file with mode: 0644]
src/odr_seq.c [new file with mode: 0644]
src/odr_tag.c [new file with mode: 0644]
src/odr_use.c [new file with mode: 0644]
src/odr_util.c [new file with mode: 0644]
src/oid.c [new file with mode: 0644]
src/opacdisp.c [new file with mode: 0644]
src/options.c [new file with mode: 0644]
src/otherinfo.c [new file with mode: 0644]
src/pquery.c [new file with mode: 0644]
src/prt-ext.c [new file with mode: 0644]
src/query.c [new file with mode: 0644]
src/readconf.c [new file with mode: 0644]
src/requestq.c [new file with mode: 0644]
src/service.c [new file with mode: 0644]
src/service.h [new file with mode: 0644]
src/seshigh.c [new file with mode: 0644]
src/session.h [new file with mode: 0644]
src/siconv.c [new file with mode: 0644]
src/soap.c [new file with mode: 0644]
src/sortspec.c [new file with mode: 0644]
src/srw.c [new file with mode: 0644]
src/statserv.c [new file with mode: 0644]
src/tcpdchk.c [new file with mode: 0644]
src/tcpip.c [new file with mode: 0644]
src/tpath.c [new file with mode: 0644]
src/univres.asn [new file with mode: 0644]
src/unix.c [new file with mode: 0644]
src/version.c [new file with mode: 0644]
src/waislen.c [new file with mode: 0644]
src/wrbuf.c [new file with mode: 0644]
src/xcqlutil.c [new file with mode: 0644]
src/xmalloc.c [new file with mode: 0644]
src/yaz-ccl.c [new file with mode: 0644]
src/z.tcl [new file with mode: 0644]
src/z3950oid.c [new file with mode: 0644]
src/z3950v3.asn [new file with mode: 0644]
src/zgdu.c [new file with mode: 0644]
src/zget.c [new file with mode: 0644]
src/zoom-c.c [new file with mode: 0644]
src/zoom-opt.c [new file with mode: 0644]
src/zoom-p.h [new file with mode: 0644]
srw/.cvsignore [deleted file]
srwapps/.cvsignore [deleted file]
tab/.cvsignore [deleted file]
test/Makefile.am [new file with mode: 0644]
test/tstccl.c [new file with mode: 0644]
test/tsticonv.c [new file with mode: 0644]
test/tstmatchstr.c [new file with mode: 0644]
test/tstnmem.c [new file with mode: 0644]
test/tstodr.asn [new file with mode: 0644]
test/tstodr.c [new file with mode: 0644]
test/tstwrbuf.c [new file with mode: 0644]
util/Makefile.am
util/atoin.c [deleted file]
util/cclsh.c [new file with mode: 0644]
util/charconv.sgm [deleted file]
util/charconv.tcl [deleted file]
util/charconv_cjk.xml [deleted file]
util/cql2pqf.c [new file with mode: 0644]
util/cql2xcql.c [new file with mode: 0644]
util/cvs-date.tcl [deleted file]
util/log.c [deleted file]
util/marcdisp.c [deleted file]
util/matchstr.c [deleted file]
util/nmem.c [deleted file]
util/nmemsdup.c [deleted file]
util/oid.c [deleted file]
util/options.c [deleted file]
util/readconf.c [deleted file]
util/siconv.c [deleted file]
util/srwtst.c [new file with mode: 0644]
util/tpath.c [deleted file]
util/tsticonv.c [deleted file]
util/tstmatchstr.c [deleted file]
util/tstnmem.c [deleted file]
util/tstwrbuf.c [deleted file]
util/version.c [deleted file]
util/wrbuf.c [deleted file]
util/xmalloc.c [deleted file]
yaz-config.in
z39.50/.cvsignore [deleted file]
z39.50/Makefile.am [deleted file]
z39.50/charneg-3.asn [deleted file]
z39.50/comp.sh [deleted file]
z39.50/datetime.asn [deleted file]
z39.50/esadmin.asn [deleted file]
z39.50/esupdate.asn [deleted file]
z39.50/mterm2.asn [deleted file]
z39.50/oclcui.asn [deleted file]
z39.50/prt-ext.c [deleted file]
z39.50/univres.asn [deleted file]
z39.50/z.tcl [deleted file]
z39.50/z3950v3.asn [deleted file]
zoom/Makefile.am
ztest/Makefile.am
zutil/.cvsignore [deleted file]
zutil/Makefile.am [deleted file]
zutil/charneg.c [deleted file]
zutil/diagbib1.c [deleted file]
zutil/grs1disp.c [deleted file]
zutil/logrpn.c [deleted file]
zutil/opacdisp.c [deleted file]
zutil/otherinfo.c [deleted file]
zutil/pquery.c [deleted file]
zutil/query.c [deleted file]
zutil/soap.c [deleted file]
zutil/sortspec.c [deleted file]
zutil/srw.c [deleted file]
zutil/srwtst.c [deleted file]
zutil/yaz-ccl.c [deleted file]
zutil/z3950oid.c [deleted file]
zutil/zgdu.c [deleted file]
zutil/zget.c [deleted file]
zutil/zoom-c.c [deleted file]
zutil/zoom-opt.c [deleted file]
zutil/zoom-p.h [deleted file]

index 84511c9..19e1430 100644 (file)
--- a/CHANGELOG
+++ b/CHANGELOG
@@ -2,6 +2,18 @@ Possible compatibility problems with earlier versions marked with '*'.
 
 --- (IN PROGRESS)
 
 
 --- (IN PROGRESS)
 
+Major restructure of YAZ source. All source in libyaz is in src directory.
+Programs in client (yaz-client), ztest (yaz-ztest), zoom (zoom programs),
+util (utility programs such as ASN.1 compiler, yaz-marcdump). 
+
+Added man page for utility yaz-marcdump (used to be called marcdump).
+yaz-marcdump is installed by 'make install'.
+
+Fixed a memory leak in Generic Frontend Server that occurred when decoding
+of incoming package failed.
+
+Fixed a potential DOS attack vulnerability in COMSTACK/ODR.
+
 Change prototype of odr_perror: add const to message string.
 
 New function yaz_log_reopen which reopens log file (for log rotate, etc.)
 Change prototype of odr_perror: add const to message string.
 
 New function yaz_log_reopen which reopens log file (for log rotate, etc.)
@@ -14,7 +26,7 @@ assuming that blocking=1 or 0 is used.
 
 Fix bad reference in UNIX comstack in function cs_addrstr.
 
 
 Fix bad reference in UNIX comstack in function cs_addrstr.
 
-Fix for AIX compile.
+Fix for compilation on AIX.
 
 The generic front-end server (server/seshigh.c) now supports returning
 Init diagnostics to the client in User-information-field, in
 
 The generic front-end server (server/seshigh.c) now supports returning
 Init diagnostics to the client in User-information-field, in
index d61b8d9..b29227d 100644 (file)
@@ -1,10 +1,10 @@
 ## Copyright (C) 1994-2003, Index Data
 ## All rights reserved.
 ## Copyright (C) 1994-2003, Index Data
 ## All rights reserved.
-## $Id: Makefile.am,v 1.22 2003-05-06 12:07:33 adam Exp $
+## $Id: Makefile.am,v 1.23 2003-10-27 12:21:21 adam Exp $
 
 AUTOMAKE_OPTIONS = foreign 
 
 
 AUTOMAKE_OPTIONS = foreign 
 
-SUBDIRS = util odr comstack z39.50 ill zutil ccl cql server include lib client ztest zoom doc etc
+SUBDIRS = src include test util client ztest zoom doc etc
 
 aclocaldir=$(datadir)/aclocal
 
 
 aclocaldir=$(datadir)/aclocal
 
diff --git a/README b/README
index eae60c3..a8bc9f2 100644 (file)
--- a/README
+++ b/README
@@ -1,4 +1,4 @@
-YAZ toolkit - $Id: README,v 1.43 2003-02-20 21:23:47 adam Exp $
+YAZ toolkit - $Id: README,v 1.44 2003-10-27 12:21:21 adam Exp $
 
 Copyright (C) 1995-2003, Index Data ApS.
 See the file LICENSE for details.
 
 Copyright (C) 1995-2003, Index Data ApS.
 See the file LICENSE for details.
@@ -24,52 +24,18 @@ File organisation:
 
 doc      Documentation.
 
 
 doc      Documentation.
 
-util     Various little utility functions. Logging, memory debugging,
-        primitive ISO 2709 presentation for the yaz-client, etc. You'll
-        find the ASN.1 Compiler for YAZ here as well (yaz-comp).
+src      Source for the YAZ library.
 
 
-odr      Open Data Representation. This module implements the BER
-        encoding rules.
-
-z39.50   codecs for the Z39.50 protocol. This module does the same job
-         as the old 'asn' module except that the source files are
-         auto-generated using an YAZ' ASN.1 Compiler (yaz-comp).
-
-zutil    This module implements a collection of Z39.50 and SRW utilities,
-        such as query parsing, etc.
-
-ill      Codecs for the ISO ILL protocol.
-
-comstack This module implements the transport transparency
-        stack (COMSTACK). The comstack implements a generic interface
-        for exchanging BER-encoded records over a network. It supports
-        the 'American' mode of exchanging the records straight over
-        TCP/IP, and uses Peter Furniss' XTIMOSI package over RFC1006.
-        Look for documentation in the file comstack.man.
-
-zoom     An implementation of Mike Taylors Z39.50 Object Oriented
-         Model : ZOOM. If you'd like to build Z39.50 client applications
-         in C this may be good start. You'll find example programs in 
-         this directory too.
-
-server   This is the implementation of the Z39.50 server frontend. It
-        provides event-handling and server managament functions,
-        and calls the backend primitives (best documentation of these
-        is in the file include/yaz/backend.h).
-
-ccl      CCL parser.
-
-cql      CQL parser.
+util     Utility programs, ASN.1 compiler, MARC dump utility, and others.
 
 client   A demonstration client for testing the protocol. It's bug'n
          ugly. But, it supports many features.
 
 ztest    A demonstration server that implements a backend.
 
 
 client   A demonstration client for testing the protocol. It's bug'n
          ugly. But, it supports many features.
 
 ztest    A demonstration server that implements a backend.
 
-include/yaz The various header files.
+etc      Various configuration files.
 
 
-lib      The libraries. Primarily libyaz.la. The makefile gathers the
-         libraries from previous modules into libyaz.la.
+include/yaz The various header files.
 
 To get more information or assistance, send mail to yaz-help@indexdata.dk.
 Even better, sign on to the YAZ mailing list here:
 
 To get more information or assistance, send mail to yaz-help@indexdata.dk.
 Even better, sign on to the YAZ mailing list here:
diff --git a/asn/Makefile.am b/asn/Makefile.am
deleted file mode 100644 (file)
index ab975b6..0000000
+++ /dev/null
@@ -1,12 +0,0 @@
-## $Id: Makefile.am,v 1.7 2002-09-11 21:25:57 adam Exp $
-
-noinst_LTLIBRARIES=libasn.la
-
-libasn_la_SOURCES = proto.c prt-rsc.c prt-acc.c prt-exp.c prt-grs.c prt-exd.c \
-       prt-dia.c prt-esp.c prt-arc.c prt-add.c prt-dat.c prt-univ.c
-
-pkginclude_HEADERS = \
-       prt-acc.h prt-add.h prt-arc.h prt-dat.h prt-dia.h prt-esp.h prt-exd.h \
-       prt-exp.h prt-ext.h prt-grs.h prt-proto.h prt-rsc.h prt-univ.h
-
-AM_CPPFLAGS=-I$(top_srcdir)/include
diff --git a/asn/proto.c b/asn/proto.c
deleted file mode 100644 (file)
index 0097d2b..0000000
+++ /dev/null
@@ -1,1840 +0,0 @@
-/*
- * Copyright (c) 1995-1999, Index Data
- * See the file LICENSE for details.
- * Sebastian Hammer, Adam Dickmeiss
- *
- * $Log: proto.c,v $
- * Revision 1.61  1999-11-30 13:47:10  adam
- * Improved installation. Moved header files to include/yaz.
- *
- * Revision 1.60  1999/06/11 16:45:59  adam
- * Fixed minor bug in ScanRequest encoder.
- *
- * Revision 1.59  1999/04/21 11:46:00  adam
- * Fixed bug in {en,de}coder for OtherInformation.
- *
- * Revision 1.58  1999/04/20 09:56:47  adam
- * Added 'name' paramter to encoder/decoder routines (typedef Odr_fun).
- * Modified all encoders/decoders to reflect this change.
- *
- * Revision 1.57  1998/10/20 13:55:37  quinn
- * Fixed Scan bug in asn and client
- *
- * Revision 1.56  1998/08/19 16:10:04  adam
- * Changed som member names of DeleteResultSetRequest/Response.
- *
- * Revision 1.55  1998/02/11 11:53:32  adam
- * Changed code so that it compiles as C++.
- *
- * Revision 1.54  1996/11/11 13:14:46  adam
- * Fixed tagging bug in z_ProximityOperator.
- *
- * Revision 1.53  1996/10/09 15:54:55  quinn
- * Added SearchInfoReport
- *
- * Revision 1.52  1996/10/08  12:56:57  adam
- * Bug fix: tagging of type 101 query.
- *
- * Revision 1.51  1996/07/26  14:07:21  quinn
- * Small
- *
- * Revision 1.50  1996/07/26  13:36:15  quinn
- * Various smallish
- *
- * Revision 1.49  1996/07/06  19:58:28  quinn
- * System headerfiles gathered in yconfig
- *
- * Revision 1.48  1996/06/10  08:53:33  quinn
- * Added Summary,OPAC,ResourceReport
- *
- * Revision 1.47  1996/05/29  15:47:50  quinn
- * Fixed in bug DiagRecs decoder. Thanks to Linda Harris.
- *
- * Revision 1.46  1996/04/10  11:39:42  quinn
- * Fixed bug in UserInfo
- *
- * Revision 1.45  1996/02/23  10:00:25  quinn
- * Fixes to SCAN
- *
- * Revision 1.44  1996/02/20  12:51:41  quinn
- * Completed SCAN. Fixed problems with EXTERNAL.
- *
- * Revision 1.43  1996/02/10  12:22:49  quinn
- * Work on SCAN
- *
- * Revision 1.42  1996/01/22  09:46:31  quinn
- * Added Sort PDU. Moved StringList to main protocol file.
- *
- * Revision 1.41  1996/01/10  15:21:24  quinn
- * Added links to access control PDUs
- *
- * Revision 1.40  1996/01/02  11:46:40  quinn
- * Changed 'operator' to 'roperator' to avoid C++ conflict.
- *
- * Revision 1.39  1995/09/29  17:11:53  quinn
- * Smallish
- *
- * Revision 1.38  1995/09/27  15:02:40  quinn
- * Modified function heads & prototypes.
- *
- * Revision 1.37  1995/08/21  09:10:15  quinn
- * Smallish fixes to suppport new formats.
- *
- * Revision 1.36  1995/08/15  11:59:39  quinn
- * Updated External
- *
- * Revision 1.35  1995/08/10  08:53:59  quinn
- * Added Explain
- *
- * Revision 1.34  1995/06/19  17:01:48  quinn
- * This should bring us in sync with the version distributed as 1.0b
- *
- * Revision 1.33  1995/06/19  13:39:56  quinn
- * *** empty log message ***
- *
- * Revision 1.32  1995/06/19  12:37:28  quinn
- * Fixed a bug in the compspec.
- *
- * Revision 1.31  1995/06/16  13:15:56  quinn
- * Fixed Defaultdiagformat.
- *
- * Revision 1.30  1995/06/15  15:42:01  quinn
- * Fixed some v3 bugs
- *
- * Revision 1.29  1995/06/15  07:44:49  quinn
- * Moving to v3.
- *
- * Revision 1.28  1995/06/14  15:26:35  quinn
- * *** empty log message ***
- *
- * Revision 1.27  1995/06/07  14:36:22  quinn
- * Added CLOSE
- *
- * Revision 1.26  1995/06/02  09:49:13  quinn
- * Adding access control
- *
- * Revision 1.25  1995/05/25  11:00:08  quinn
- * *** empty log message ***
- *
- * Revision 1.24  1995/05/22  13:58:18  quinn
- * Fixed an ODR_NULLVAL.
- *
- * Revision 1.23  1995/05/22  11:30:18  quinn
- * Adding Z39.50-1992 stuff to proto.c. Adding zget.c
- *
- * Revision 1.22  1995/05/17  08:40:56  quinn
- * Added delete. Fixed some sequence_begins. Smallish.
- *
- * Revision 1.21  1995/05/16  08:50:24  quinn
- * License, documentation, and memory fixes
- *
- * Revision 1.20  1995/05/15  11:55:25  quinn
- * Smallish.
- *
- * Revision 1.19  1995/04/11  11:58:35  quinn
- * Fixed bug.
- *
- * Revision 1.18  1995/04/11  11:52:02  quinn
- * Fixed possible buf in proto.c
- *
- * Revision 1.17  1995/04/10  10:22:22  quinn
- * Added SCAN.
- *
- * Revision 1.16  1995/03/30  10:26:43  quinn
- * Added Term structure
- *
- * Revision 1.15  1995/03/30  09:08:39  quinn
- * Added Resource control protocol
- *
- * Revision 1.14  1995/03/29  08:06:13  quinn
- * Added a few v3 elements
- *
- * Revision 1.13  1995/03/20  11:26:52  quinn
- * *** empty log message ***
- *
- * Revision 1.12  1995/03/20  09:45:09  quinn
- * Working towards v3
- *
- * Revision 1.11  1995/03/17  10:17:25  quinn
- * Added memory management.
- *
- * Revision 1.10  1995/03/15  11:17:40  quinn
- * Fixed some return-checks from choice.. need better ay to handle those..
- *
- * Revision 1.9  1995/03/15  08:37:06  quinn
- * Fixed protocol bugs.
- *
- * Revision 1.8  1995/03/14  16:59:24  quinn
- * Fixed OPTIONAL flag in attributeelement
- *
- * Revision 1.7  1995/03/07  16:29:33  quinn
- * Added authentication stuff.
- *
- * Revision 1.6  1995/03/01  14:46:03  quinn
- * Fixed protocol bug in 8777query.
- *
- * Revision 1.5  1995/02/14  11:54:22  quinn
- * Fixing include.
- *
- * Revision 1.4  1995/02/10  15:54:30  quinn
- * Small adjustments.
- *
- * Revision 1.3  1995/02/09  15:51:39  quinn
- * Works better now.
- *
- * Revision 1.2  1995/02/06  21:26:07  quinn
- * Repaired this evening's damages..
- *
- * Revision 1.1  1995/02/06  16:44:47  quinn
- * First hack at Z/SR protocol
- *
- */
-
-#include <yaz/odr.h>
-
-#include <yaz/proto.h>
-
-/* ---------------------- GLOBAL DEFS ------------------- */
-
-/*
- * We'll use a general octetstring here, since string operations are
- * clumsy on long strings.
- */
-int z_SUTRS(ODR o, Odr_oct **p, int opt, const char *name)
-{
-    return odr_implicit(o, odr_octetstring, p, ODR_UNIVERSAL,
-       ODR_GENERALSTRING, opt);
-}
-
-int z_ReferenceId(ODR o, Z_ReferenceId **p, int opt, const char *name)
-{
-    return odr_implicit(o, odr_octetstring, (Odr_oct**) p, ODR_CONTEXT, 2,
-                       opt);
-}
-
-int z_DatabaseName(ODR o, Z_DatabaseName **p, int opt, const char *name)
-{
-    return odr_implicit(o, odr_visiblestring, (char **) p, ODR_CONTEXT, 105,
-       opt);
-}
-
-int z_ResultSetId(ODR o, char **p, int opt, const char *name)
-{
-    return odr_implicit(o, odr_visiblestring, (char **) p, ODR_CONTEXT, 31,
-       opt);
-}
-
-int z_ElementSetName(ODR o, char **p, int opt, const char *name)
-{
-    return odr_implicit(o, odr_visiblestring, p, ODR_CONTEXT, 103, opt);
-}
-
-int z_UserInformationField(ODR o, Z_External **p, int opt, const char *name)
-{
-    return odr_explicit(o, z_External, (Z_External **)p, ODR_CONTEXT,
-       11, opt);
-}
-
-int z_InternationalString(ODR o, char **p, int opt, const char *name)
-{
-    return odr_generalstring(o, p, opt, 0);
-}
-
-int z_InfoCategory(ODR o, Z_InfoCategory **p, int opt, const char *name)
-{
-    if (!odr_sequence_begin(o, p, sizeof(**p), 0))
-       return opt && odr_ok(o);
-    return
-       odr_implicit(o, odr_oid, &(*p)->categoryTypeId, ODR_CONTEXT, 1, 1) &&
-       odr_implicit(o, odr_integer, &(*p)->categoryValue, ODR_CONTEXT, 2,
-                    0) &&
-       odr_sequence_end(o);
-}
-
-int z_OtherInformationUnit(ODR o, Z_OtherInformationUnit **p, int opt,
-                          const char *name)
-{
-    static Odr_arm arm[] =
-    {
-       {ODR_IMPLICIT, ODR_CONTEXT, 2, Z_OtherInfo_characterInfo,
-        odr_visiblestring, 0},
-       {ODR_IMPLICIT, ODR_CONTEXT, 3, Z_OtherInfo_binaryInfo,
-        (Odr_fun)odr_octetstring, 0},
-       {ODR_IMPLICIT, ODR_CONTEXT, 4, Z_OtherInfo_externallyDefinedInfo,
-        (Odr_fun)z_External, 0},
-       {ODR_IMPLICIT, ODR_CONTEXT, 5, Z_OtherInfo_oid,
-        (Odr_fun)odr_oid, 0},
-       {-1, -1, -1, -1, 0, 0}
-    };
-
-    if (!odr_sequence_begin(o, p, sizeof(**p), name))
-       return opt && odr_ok(o);
-    return
-       odr_implicit(o, z_InfoCategory, &(*p)->category, ODR_CONTEXT, 1, 1) &&
-       odr_choice(o, arm, &(*p)->information, &(*p)->which, name) &&
-       odr_sequence_end(o);
-}
-    
-int z_OtherInformation(ODR o, Z_OtherInformation **p, int opt,
-                      const char *name)
-{
-    if (!odr_initmember (o, p, sizeof(**p)))
-       return opt && odr_ok(o);
-    odr_implicit_settag(o, ODR_CONTEXT, 201);
-    if (odr_sequence_of(o, (Odr_fun)z_OtherInformationUnit, &(*p)->list,
-       &(*p)->num_elements, name))
-       return 1;
-    *p = 0;
-    return opt && odr_ok(o);
-}
-
-int z_StringOrNumeric(ODR o, Z_StringOrNumeric **p, int opt, const char *name)
-{
-    static Odr_arm arm[] =
-    {
-       {ODR_IMPLICIT, ODR_CONTEXT, 1, Z_StringOrNumeric_string,
-        odr_visiblestring, 0},
-       {ODR_IMPLICIT, ODR_CONTEXT, 2, Z_StringOrNumeric_numeric,
-        (Odr_fun)odr_integer, 0},
-       {-1, -1, -1, -1, 0, 0}
-    };
-
-    if (o->direction == ODR_DECODE)
-       *p = (Z_StringOrNumeric *)odr_malloc(o, sizeof(**p));
-    else if (!*p)
-       return opt;
-    if (odr_choice(o, arm, &(*p)->u, &(*p)->which, 0))
-       return 1;
-    *p = 0;
-    return opt && odr_ok(o);
-}
-
-/*
- * check tagging!!
- */
-int z_Unit(ODR o, Z_Unit **p, int opt, const char *name)
-{
-    if (!odr_sequence_begin(o, p, sizeof(**p), 0))
-       return opt && odr_ok(o);
-    return
-       odr_explicit(o, z_InternationalString, &(*p)->unitSystem, ODR_CONTEXT,
-           1, 1) &&
-       odr_explicit(o, z_StringOrNumeric, &(*p)->unitType, ODR_CONTEXT,
-           2, 1) &&
-       odr_explicit(o, z_StringOrNumeric, &(*p)->unit, ODR_CONTEXT, 3, 1) &&
-       odr_implicit(o, odr_integer, &(*p)->scaleFactor, ODR_CONTEXT, 4, 1) &&
-       odr_sequence_end(o);
-}
-
-int z_IntUnit(ODR o, Z_IntUnit **p, int opt, const char *name)
-{
-    if (!odr_sequence_begin(o, p, sizeof(**p), 0))
-       return opt && odr_ok(o);
-    return
-       odr_implicit(o, odr_integer, &(*p)->value, ODR_CONTEXT, 1, 0) &&
-       odr_implicit(o, z_Unit, &(*p)->unitUsed, ODR_CONTEXT, 2, 0) &&
-       odr_sequence_end(o);
-}
-
-int z_StringList(ODR o, Z_StringList **p, int opt, const char *name)
-{
-    if (o->direction == ODR_DECODE)
-       *p = (Z_StringList *)odr_malloc(o, sizeof(**p));
-    else if (!*p)
-       return opt;
-    if (odr_sequence_of(o, (Odr_fun)z_InternationalString, &(*p)->strings,
-       &(*p)->num_strings, 0))
-       return 1;
-    *p = 0;
-    return opt && odr_ok(o);
-}
-
-/* ---------------------- INITIALIZE SERVICE ------------------- */
-
-#if 1
-int z_NSRAuthentication(ODR o, Z_NSRAuthentication **p, int opt,
-                       const char *name)
-{
-    if (!odr_sequence_begin(o, p, sizeof(**p), 0))
-       return opt && odr_ok(o);
-    return
-       odr_visiblestring(o, &(*p)->user, 0, 0) &&
-       odr_visiblestring(o, &(*p)->password, 0, 0) &&
-       odr_visiblestring(o, &(*p)->account, 0, 0) &&
-       odr_sequence_end(o);
-}
-#endif
-
-int z_IdPass(ODR o, Z_IdPass **p, int opt, const char *name)
-{
-    if (!odr_sequence_begin(o, p, sizeof(**p), 0))
-       return opt && odr_ok(o);
-    return
-       odr_implicit(o, odr_visiblestring, &(*p)->groupId, ODR_CONTEXT, 0,
-                    1) &&
-       odr_implicit(o, odr_visiblestring, &(*p)->userId, ODR_CONTEXT, 1, 1) &&
-       odr_implicit(o, odr_visiblestring, &(*p)->password, ODR_CONTEXT, 2,
-           1) &&
-       odr_sequence_end(o);
-}
-
-int z_StrAuthentication(ODR o, char **p, int opt, const char *name)
-{
-    return odr_visiblestring(o, p, opt, 0);
-}
-
-int z_IdAuthentication(ODR o, Z_IdAuthentication **p, int opt,
-                      const char *name)
-{
-    static Odr_arm arm[] =
-    {
-       {-1, -1, -1, Z_IdAuthentication_open, z_StrAuthentication, 0},
-       {-1, -1, -1, Z_IdAuthentication_idPass, (Odr_fun)z_IdPass, 0},
-       {-1, -1, -1, Z_IdAuthentication_anonymous, (Odr_fun)odr_null, 0},
-       {-1, -1, -1, Z_IdAuthentication_other, (Odr_fun)z_External, 0},
-       {-1, -1, -1, -1, 0, 0}
-    };
-
-    if (o->direction == ODR_DECODE)
-       *p = (Z_IdAuthentication *)odr_malloc(o, sizeof(**p));
-    else if (!*p)
-       return opt;
-
-    if (odr_choice(o, arm, &(*p)->u, &(*p)->which, 0))
-       return 1;
-    *p = 0;
-    return opt && odr_ok(o);
-}
-
-int z_InitRequest(ODR o, Z_InitRequest **p, int opt, const char *name)
-{
-    Z_InitRequest *pp;
-
-    if (!odr_sequence_begin(o, p, sizeof(**p), 0))
-       return opt && odr_ok(o);
-    pp = *p;
-    return
-       z_ReferenceId(o, &pp->referenceId, 1, 0) &&
-       odr_implicit(o, odr_bitstring, &pp->protocolVersion,
-                    ODR_CONTEXT, 3, 0) &&
-       odr_implicit(o, odr_bitstring, &pp->options, ODR_CONTEXT, 4, 0) &&
-       odr_implicit(o, odr_integer, &pp->preferredMessageSize, ODR_CONTEXT,
-                    5, 0) &&
-       odr_implicit(o, odr_integer, &pp->maximumRecordSize,
-                    ODR_CONTEXT, 6, 0) &&
-       odr_explicit(o, z_IdAuthentication, &pp->idAuthentication,
-                    ODR_CONTEXT, 7, 1) &&
-       odr_implicit(o, odr_visiblestring, &pp->implementationId,
-                    ODR_CONTEXT, 110, 1) &&
-       odr_implicit(o, odr_visiblestring, &pp->implementationName,
-                    ODR_CONTEXT, 111, 1) &&
-       odr_implicit(o, odr_visiblestring, &pp->implementationVersion,
-           ODR_CONTEXT, 112, 1) &&
-       z_UserInformationField(o, &pp->userInformationField, 1, 0) &&
-       z_OtherInformation(o, &(*p)->otherInfo, 1, 0) &&
-       odr_sequence_end(o);
-}
-
-int z_InitResponse(ODR o, Z_InitResponse **p, int opt, const char *name)
-{
-    Z_InitResponse *pp;
-
-    if (!odr_sequence_begin(o, p, sizeof(**p), 0))
-       return opt && odr_ok(o);
-    pp = *p;
-    return
-       z_ReferenceId(o, &pp->referenceId, 1, 0) &&
-       odr_implicit(o, odr_bitstring, &pp->protocolVersion,
-                    ODR_CONTEXT, 3, 0) &&
-       odr_implicit(o, odr_bitstring, &pp->options, ODR_CONTEXT, 4, 0) &&
-       odr_implicit(o, odr_integer, &pp->preferredMessageSize,
-                    ODR_CONTEXT, 5, 0) &&
-       odr_implicit(o, odr_integer, &pp->maximumRecordSize,
-                    ODR_CONTEXT, 6, 0) &&
-       odr_implicit(o, odr_bool, &pp->result, ODR_CONTEXT, 12, 0) &&
-       odr_implicit(o, odr_visiblestring, &pp->implementationId,
-                    ODR_CONTEXT, 110, 1) &&
-       odr_implicit(o, odr_visiblestring, &pp->implementationName,
-                    ODR_CONTEXT, 111, 1) &&
-       odr_implicit(o, odr_visiblestring, &pp->implementationVersion,
-                    ODR_CONTEXT, 112, 1) &&
-       z_UserInformationField(o, &pp->userInformationField, 1, 0) &&
-       z_OtherInformation(o, &(*p)->otherInfo, 1, 0) &&
-       odr_sequence_end(o);
-}
-
-/* ------------------ RESOURCE CONTROL ----------------*/
-
-int z_TriggerResourceControlRequest(ODR o, Z_TriggerResourceControlRequest **p,
-                                   int opt, const char *name)
-{
-    if (!odr_sequence_begin(o, p, sizeof(**p), 0))
-       return opt && odr_ok(o);
-    return
-       z_ReferenceId(o, &(*p)->referenceId, 1, 0) &&
-       odr_implicit(o, odr_integer, &(*p)->requestedAction, ODR_CONTEXT,
-           46, 0) &&
-       odr_implicit(o, odr_oid, &(*p)->prefResourceReportFormat,
-           ODR_CONTEXT, 47, 1) &&
-       odr_implicit(o, odr_bool, &(*p)->resultSetWanted, ODR_CONTEXT,
-           48, 1) &&
-       z_OtherInformation(o, &(*p)->otherInfo, 1, 0) &&
-       odr_sequence_end(o);
-}
-
-int z_ResourceControlRequest(ODR o, Z_ResourceControlRequest **p, int opt,
-                            const char *name)
-{
-    if (!odr_sequence_begin(o, p, sizeof(**p), 0))
-       return opt && odr_ok(o);
-    return
-       z_ReferenceId(o, &(*p)->referenceId, 1, 0) &&
-       odr_implicit(o, odr_bool, &(*p)->suspendedFlag, ODR_CONTEXT, 39, 1)&&
-       odr_explicit(o, z_External, &(*p)->resourceReport, ODR_CONTEXT,
-           40, 1) &&
-       odr_implicit(o, odr_integer, &(*p)->partialResultsAvailable,
-           ODR_CONTEXT, 41, 1) &&
-       odr_implicit(o, odr_bool, &(*p)->responseRequired, ODR_CONTEXT,
-           42, 0) &&
-       odr_implicit(o, odr_bool, &(*p)->triggeredRequestFlag,
-           ODR_CONTEXT, 43, 1) &&
-       z_OtherInformation(o, &(*p)->otherInfo, 1, 0) &&
-       odr_sequence_end(o);
-}
-
-int z_ResourceControlResponse(ODR o, Z_ResourceControlResponse **p, int opt,
-                             const char *name)
-{
-    if (!odr_sequence_begin(o, p, sizeof(**p), 0))
-       return opt && odr_ok(o);
-    return
-       z_ReferenceId(o, &(*p)->referenceId, 1, 0) &&
-       odr_implicit(o, odr_bool, &(*p)->continueFlag, ODR_CONTEXT, 44, 0) &&
-       odr_implicit(o, odr_bool, &(*p)->resultSetWanted, ODR_CONTEXT,
-           45, 1) &&
-       z_OtherInformation(o, &(*p)->otherInfo, 1, 0) &&
-       odr_sequence_end(o);
-}
-
-/* ------------------------ SEARCH SERVICE ----------------------- */
-
-int z_DatabaseSpecificUnit(ODR o, Z_DatabaseSpecificUnit **p, int opt,
-                          const char *name)
-{
-    if (!odr_sequence_begin(o, p, sizeof(**p), 0))
-       return opt && odr_ok(o);
-    return
-       z_DatabaseName(o, &(*p)->databaseName, 0, 0) &&
-       z_ElementSetName(o, &(*p)->elementSetName, 0, 0) &&
-       odr_sequence_end(o);
-}
-
-int z_DatabaseSpecific(ODR o, Z_DatabaseSpecific **p, int opt,
-                      const char *name)
-{
-    if (o->direction == ODR_DECODE)
-       *p = (Z_DatabaseSpecific *)odr_malloc(o, sizeof(**p));
-    else if (!*p)
-       return opt;
-
-    odr_implicit_settag(o, ODR_CONTEXT, 1);
-    if (odr_sequence_of(o, (Odr_fun)z_DatabaseSpecificUnit, &(*p)->elements,
-       &(*p)->num_elements, 0))
-       return 1;
-    *p = 0;
-    return 0;
-}
-
-int z_ElementSetNames(ODR o, Z_ElementSetNames **p, int opt, const char *name)
-{
-    static Odr_arm arm[] =
-    {
-       {ODR_IMPLICIT, ODR_CONTEXT, 0, Z_ElementSetNames_generic,
-           z_ElementSetName, 0},
-       {ODR_IMPLICIT, ODR_CONTEXT, 1, Z_ElementSetNames_databaseSpecific,
-           (Odr_fun)z_DatabaseSpecific, 0},
-       {-1, -1, -1, -1, 0}
-    };
-
-    if (o->direction == ODR_DECODE)
-       *p = (Z_ElementSetNames *)odr_malloc(o, sizeof(**p));
-    else if (!*p)
-       return opt && odr_ok(o);
-
-    if (odr_choice(o, arm, &(*p)->u, &(*p)->which, 0))
-       return 1;
-    *p = 0;
-    return 0;
-}
-
-/* ----------------------- RPN QUERY -----------------------*/
-
-int z_ComplexAttribute(ODR o, Z_ComplexAttribute **p, int opt,
-                      const char *name)
-{
-    if (!odr_sequence_begin(o, p, sizeof(**p), 0))
-       return opt && odr_ok(o);
-    return
-       odr_implicit_settag(o, ODR_CONTEXT, 1) &&
-       odr_sequence_of(o, (Odr_fun)z_StringOrNumeric, &(*p)->list,
-           &(*p)->num_list, 0) &&
-       odr_implicit_settag(o, ODR_CONTEXT, 2) &&
-       (odr_sequence_of(o, (Odr_fun)odr_integer, &(*p)->semanticAction,
-           &(*p)->num_semanticAction, 0) || odr_ok(o)) &&
-       odr_sequence_end(o);
-}
-
-int z_AttributeElement(ODR o, Z_AttributeElement **p, int opt,
-                      const char *name)
-{
-    static Odr_arm arm[] =
-    {
-       {ODR_IMPLICIT, ODR_CONTEXT, 121, Z_AttributeValue_numeric,
-           (Odr_fun)odr_integer, 0},
-       {ODR_IMPLICIT, ODR_CONTEXT, 224, Z_AttributeValue_complex,
-           (Odr_fun)z_ComplexAttribute, 0},
-       {-1, -1, -1, -1, 0, 0}
-    };
-    if (!odr_sequence_begin(o, p, sizeof(**p), 0))
-       return opt && odr_ok(o);
-    return
-       odr_implicit(o, odr_oid, &(*p)->attributeSet, ODR_CONTEXT, 1, 1) &&
-       odr_implicit(o, odr_integer, &(*p)->attributeType, ODR_CONTEXT,
-           120, 0) &&
-       odr_choice(o, arm, &(*p)->value, &(*p)->which, 0) &&
-       odr_sequence_end(o);
-}
-
-int z_Term(ODR o, Z_Term **p, int opt, const char *name)
-{
-    static Odr_arm arm[] =
-    {
-       {ODR_IMPLICIT, ODR_CONTEXT, 45, Z_Term_general,
-        (Odr_fun)odr_octetstring, 0},
-       {ODR_IMPLICIT, ODR_CONTEXT, 215, Z_Term_numeric,
-        (Odr_fun)odr_integer, 0},
-       {ODR_IMPLICIT, ODR_CONTEXT, 216, Z_Term_characterString,
-           odr_visiblestring, 0},
-       {ODR_IMPLICIT, ODR_CONTEXT, 217, Z_Term_oid, (Odr_fun)odr_oid, 0},
-       {ODR_IMPLICIT, ODR_CONTEXT, 218, Z_Term_dateTime, odr_cstring, 0},
-       {ODR_IMPLICIT, ODR_CONTEXT, 219, Z_Term_external,
-        (Odr_fun) z_External, 0},
-       /* add intUnit here */
-       {ODR_IMPLICIT, ODR_CONTEXT, 221, Z_Term_null, (Odr_fun)odr_null, 0},
-       {-1, -1, -1, -1, 0, 0}
-    };
-
-    if (o->direction ==ODR_DECODE)
-       *p = (Z_Term *)odr_malloc(o, sizeof(**p));
-    else if (!*p)
-       return opt;
-    if (odr_choice(o, arm, &(*p)->u, &(*p)->which, 0))
-       return 1;
-    *p = 0;
-    return opt && odr_ok(o);
-}
-
-int z_AttributesPlusTerm(ODR o, Z_AttributesPlusTerm **p, int opt,
-                        const char *name)
-{
-    if (!(odr_implicit_settag(o, ODR_CONTEXT, 102) &&
-       odr_sequence_begin(o, p, sizeof(**p), 0)))
-       return opt && odr_ok(o);
-    return
-       odr_implicit_settag(o, ODR_CONTEXT, 44) &&
-       odr_sequence_of(o, (Odr_fun)z_AttributeElement, &(*p)->attributeList,
-           &(*p)->num_attributes, 0) &&
-       z_Term(o, &(*p)->term, 0, 0) &&
-       odr_sequence_end(o);
-}
-
-int z_ResultSetPlusAttributes(ODR o, Z_ResultSetPlusAttributes **p, int opt,
-                             const char *name)
-{
-    if (!(odr_implicit_settag(o, ODR_CONTEXT, 214) &&
-       odr_sequence_begin(o, p, sizeof(**p), 0)))
-       return opt && odr_ok(o);
-    return
-       z_ResultSetId(o, &(*p)->resultSet, 0, 0) &&
-       odr_implicit_settag(o, ODR_CONTEXT, 44) &&
-       odr_sequence_of(o, (Odr_fun)z_AttributeElement, &(*p)->attributeList,
-           &(*p)->num_attributes, 0) &&
-       odr_sequence_end(o);
-}
-
-int z_ProximityOperator(ODR o, Z_ProximityOperator **p, int opt,
-                       const char *name)
-{
-    static Odr_arm arm[] =
-    {
-       {ODR_IMPLICIT, ODR_CONTEXT, 1, Z_ProxCode_known,
-        (Odr_fun)odr_integer, 0},
-       {ODR_IMPLICIT, ODR_CONTEXT, 2, Z_ProxCode_private,
-        (Odr_fun)odr_integer, 0},
-       {-1, -1, -1, -1, 0, 0}
-    };
-
-    if (!odr_sequence_begin(o, p, sizeof(**p), 0))
-       return opt && odr_ok(o);
-    return
-       odr_implicit(o, odr_bool, &(*p)->exclusion, ODR_CONTEXT, 1, 1) &&
-       odr_implicit(o, odr_integer, &(*p)->distance, ODR_CONTEXT, 2, 0) &&
-       odr_implicit(o, odr_bool, &(*p)->ordered, ODR_CONTEXT, 3, 0) &&
-       odr_implicit(o, odr_integer, &(*p)->relationType, ODR_CONTEXT, 4, 0) &&
-       odr_constructed_begin(o, &(*p)->proximityUnitCode,
-                             ODR_CONTEXT, 5, 0) &&
-       odr_choice(o, arm, &(*p)->proximityUnitCode, &(*p)->which, 0) &&
-       odr_constructed_end(o) &&
-       odr_sequence_end(o);
-}
-
-int z_Operator(ODR o, Z_Operator **p, int opt, const char *name)
-{
-    static Odr_arm arm[] =
-    {
-       {ODR_IMPLICIT, ODR_CONTEXT, 0, Z_Operator_and, (Odr_fun)odr_null, 0},
-       {ODR_IMPLICIT, ODR_CONTEXT, 1, Z_Operator_or, (Odr_fun)odr_null, 0},
-       {ODR_IMPLICIT, ODR_CONTEXT, 2, Z_Operator_and_not,
-        (Odr_fun)odr_null, 0},
-       {ODR_IMPLICIT, ODR_CONTEXT, 3, Z_Operator_prox,
-        (Odr_fun)z_ProximityOperator, 0},
-       {-1, -1, -1, -1, 0, 0}
-    };
-
-    if (!*p && o->direction != ODR_DECODE)
-       return opt;
-    if (!odr_constructed_begin(o, p, ODR_CONTEXT, 46, 0))
-       return opt && odr_ok(o);
-    if (o->direction == ODR_DECODE)
-       *p = (Z_Operator *)odr_malloc(o, sizeof(**p));
-
-    if (odr_choice(o, arm, &(*p)->u, &(*p)->which, 0) &&
-       odr_constructed_end(o))
-       return 1;
-    *p = 0;
-    return opt && odr_ok(o);
-}
-
-int z_Operand(ODR o, Z_Operand **p, int opt, const char *name)
-{
-    static Odr_arm arm[] =
-    {
-       {-1, -1, -1, Z_Operand_APT, (Odr_fun)z_AttributesPlusTerm, 0},
-       {-1, -1, -1, Z_Operand_resultSetId, (Odr_fun)z_ResultSetId, 0},
-       {-1, -1, -1, Z_Operand_resultAttr,
-        (Odr_fun)z_ResultSetPlusAttributes, 0},
-       {-1, -1, -1, -1, 0, 0}
-    };
-
-    if (o->direction == ODR_DECODE)
-       *p = (Z_Operand *)odr_malloc(o, sizeof(**p));
-    else if (!*p)
-       return opt;
-    if (odr_choice(o, arm, &(*p)->u, &(*p)->which, 0))
-       return 1;
-    *p = 0;
-    return opt && odr_ok(o);
-}
-
-int z_RPNStructure(ODR o, Z_RPNStructure **p, int opt, const char *name);
-
-int z_Complex(ODR o, Z_Complex **p, int opt, const char *name)
-{
-    if (!odr_sequence_begin(o, p, sizeof(**p), 0))
-       return opt && odr_ok(o);
-    return
-       z_RPNStructure(o, &(*p)->s1, 0, 0) &&
-       z_RPNStructure(o, &(*p)->s2, 0, 0) &&
-       z_Operator(o, &(*p)->roperator, 0, 0) &&
-       odr_sequence_end(o);
-}
-
-int z_RPNStructure(ODR o, Z_RPNStructure **p, int opt, const char *name)
-{
-    static Odr_arm arm[] = 
-    {
-       {ODR_EXPLICIT, ODR_CONTEXT, 0, Z_RPNStructure_simple,
-        (Odr_fun)z_Operand, 0},
-       {ODR_IMPLICIT, ODR_CONTEXT, 1, Z_RPNStructure_complex,
-        (Odr_fun)z_Complex, 0},
-       {-1 -1, -1, -1, 0, 0}
-    };
-
-    if (o->direction == ODR_DECODE)
-       *p = (Z_RPNStructure *)odr_malloc(o, sizeof(**p));
-    else if (!*p)
-       return opt;
-    if (odr_choice(o, arm, &(*p)->u, &(*p)->which, 0))
-       return 1;
-    *p = 0;
-    return opt && odr_ok(o);
-}
-
-int z_RPNQuery(ODR o, Z_RPNQuery **p, int opt, const char *name)
-{
-    if (!odr_sequence_begin(o, p, sizeof(**p), 0))
-       return opt && odr_ok(o);
-    return
-       odr_oid(o, &(*p)->attributeSetId, 0, 0) &&
-       z_RPNStructure(o, &(*p)->RPNStructure, 0, 0) &&
-       odr_sequence_end(o);
-}
-
-/* -----------------------END RPN QUERY ----------------------- */
-
-int z_Query(ODR o, Z_Query **p, int opt, const char *name)
-{
-    static Odr_arm arm[] = 
-    {
-       {ODR_IMPLICIT, ODR_CONTEXT, 1, Z_Query_type_1,
-        (Odr_fun)z_RPNQuery, 0},
-       {ODR_EXPLICIT, ODR_CONTEXT, 2, Z_Query_type_2,
-        (Odr_fun)odr_octetstring, 0},
-       {ODR_IMPLICIT, ODR_CONTEXT, 101, Z_Query_type_101,
-        (Odr_fun)z_RPNQuery, 0},
-       {-1, -1, -1, -1, 0, 0}
-    };
-
-    if (o->direction == ODR_DECODE)
-       *p = (Z_Query *)odr_malloc(o, sizeof(**p));
-    else if (!*p)
-       return opt;
-    if (odr_choice(o, arm, &(*p)->u, &(*p)->which, 0))
-       return 1;
-    *p = 0;
-    return opt && odr_ok(o);
-}
-
-int z_SearchRequest(ODR o, Z_SearchRequest **p, int opt, const char *name)
-{
-    Z_SearchRequest *pp;
-
-    if (!odr_sequence_begin(o, p, sizeof(**p), 0))
-       return opt && odr_ok(o);
-    pp = *p;
-    return
-       z_ReferenceId(o, &pp->referenceId, 1, 0) &&
-       odr_implicit(o, odr_integer, &pp->smallSetUpperBound, ODR_CONTEXT,
-           13, 0) &&
-       odr_implicit(o, odr_integer, &pp->largeSetLowerBound, ODR_CONTEXT,
-           14, 0) &&
-       odr_implicit(o, odr_integer, &pp->mediumSetPresentNumber, ODR_CONTEXT,
-           15, 0) &&
-       odr_implicit(o, odr_bool, &pp->replaceIndicator, ODR_CONTEXT, 16, 1) &&
-       odr_implicit(o, odr_visiblestring, &pp->resultSetName, ODR_CONTEXT,
-           17, 9) &&
-       odr_implicit_settag(o, ODR_CONTEXT, 18) &&
-       odr_sequence_of(o, z_DatabaseName, &pp->databaseNames,
-           &pp->num_databaseNames, 0) &&
-       odr_explicit(o, z_ElementSetNames, &pp->smallSetElementSetNames,
-           ODR_CONTEXT, 100, 1) &&
-       odr_explicit(o, z_ElementSetNames, &pp->mediumSetElementSetNames,
-           ODR_CONTEXT, 101, 1) &&
-       odr_implicit(o, odr_oid, &pp->preferredRecordSyntax,
-           ODR_CONTEXT, 104, 1) &&
-       odr_explicit(o, z_Query, &pp->query, ODR_CONTEXT, 21, 0) &&
-       odr_implicit_tag(o, z_OtherInformation, &(*p)->additionalSearchInfo,
-           ODR_CONTEXT, 203, 1, 0) &&
-       z_OtherInformation(o, &(*p)->otherInfo, 1, 0) &&
-       odr_sequence_end(o);
-}
-
-/* ------------------------ RECORD ------------------------- */
-
-int z_DatabaseRecord(ODR o, Z_DatabaseRecord **p, int opt, const char *name)
-{
-    return z_External(o, (Z_External **) p, opt, 0);
-}
-
-int z_DefaultDiagFormat(ODR o, Z_DefaultDiagFormat **p, int opt,
-                       const char *name)
-{
-    static Odr_arm arm[] =
-    {
-       {-1, -1, -1, Z_DiagForm_v2AddInfo, odr_visiblestring, 0},
-       {-1, -1, -1, Z_DiagForm_v3AddInfo, z_InternationalString, 0},
-       {ODR_IMPLICIT, ODR_CONTEXT, ODR_VISIBLESTRING, Z_DiagForm_v2AddInfo,
-           odr_visiblestring, 0}, /* To cater to a bug in the CNIDR servers */
-       {-1, -1, -1, -1, 0, 0}
-    };
-    if (!odr_sequence_begin(o, p, sizeof(**p), 0))
-       return opt && odr_ok(o);
-    return
-       odr_oid(o, &(*p)->diagnosticSetId, 1, 0) && /* SHOULD NOT BE OPT! */
-       odr_integer(o, &(*p)->condition, 0, 0) &&
-       /*
-        * I no longer recall what server tagged the addinfo.. but it isn't
-        * hurting anyone, so...
-        * We need to turn it into a choice, or something, because of
-        * that damn generalstring in v3.
-        */
-       odr_choice(o, arm, &(*p)->addinfo, &(*p)->which, 0) &&
-       odr_sequence_end(o);
-}
-
-int z_DiagRec(ODR o, Z_DiagRec **p, int opt, const char *name)
-{
-    static Odr_arm arm[] = 
-    {
-       {-1, -1, -1, Z_DiagRec_defaultFormat, (Odr_fun)z_DefaultDiagFormat, 0},
-       {-1, -1, -1, Z_DiagRec_externallyDefined, (Odr_fun)z_External, 0},
-       {-1, -1, -1, -1, 0, 0}
-    };
-
-    if (o->direction == ODR_DECODE)
-       *p = (Z_DiagRec *)odr_malloc(o, sizeof(**p));
-    else if (!*p)
-       return opt;
-    if (odr_choice(o, arm, &(*p)->u, &(*p)->which, 0))
-       return 1;
-    *p = 0;
-    return opt && odr_ok(o);
-}
-
-int z_DiagRecs(ODR o, Z_DiagRecs **p, int opt, const char *name)
-{
-    if (o->direction == ODR_DECODE)
-       *p = (Z_DiagRecs *)odr_malloc(o, sizeof(**p));
-    else if (!*p)
-       return opt;
-
-       if (odr_sequence_of(o, (Odr_fun)z_DiagRec, &(*p)->diagRecs,
-       &(*p)->num_diagRecs, 0))
-       return 1;
-    *p = 0;
-    return opt && odr_ok(o);
-}
-
-int z_NamePlusRecord(ODR o, Z_NamePlusRecord **p, int opt, const char *name)
-{
-    static Odr_arm arm[] =
-    {
-       {ODR_EXPLICIT, ODR_CONTEXT, 1, Z_NamePlusRecord_databaseRecord,
-           (Odr_fun)z_DatabaseRecord, 0},
-       {ODR_EXPLICIT, ODR_CONTEXT, 2, Z_NamePlusRecord_surrogateDiagnostic,
-           (Odr_fun)z_DiagRec, 0},
-       {-1, -1, -1, -1, 0, 0}
-    };
-
-    if (!odr_sequence_begin(o, p, sizeof(**p), 0))
-       return opt && odr_ok(o);
-    return
-       odr_implicit(o, z_DatabaseName, &(*p)->databaseName, ODR_CONTEXT,
-           0, 1) &&
-       odr_constructed_begin(o, &(*p)->u, ODR_CONTEXT, 1, 0) &&
-       odr_choice(o, arm, &(*p)->u, &(*p)->which, 0) &&
-       odr_constructed_end(o) &&
-       odr_sequence_end(o);
-}
-
-int z_NamePlusRecordList(ODR o, Z_NamePlusRecordList **p, int opt,
-                        const char *name)
-{
-    if (o->direction == ODR_DECODE)
-       *p = (Z_NamePlusRecordList *)odr_malloc(o, sizeof(**p));
-    else if (!*p)
-       return opt;
-    if (odr_sequence_of(o, (Odr_fun)z_NamePlusRecord, &(*p)->records,
-       &(*p)->num_records, 0))
-       return 1;
-    *p = 0;
-    return 0;
-}
-
-int z_Records(ODR o, Z_Records **p, int opt, const char *name)
-{
-    static Odr_arm arm[] = 
-    {
-       {ODR_IMPLICIT, ODR_CONTEXT, 28, Z_Records_DBOSD,
-        (Odr_fun)z_NamePlusRecordList, 0},
-       {ODR_IMPLICIT, ODR_CONTEXT, 130, Z_Records_NSD,
-        (Odr_fun)z_DiagRec, 0},
-       {ODR_IMPLICIT, ODR_CONTEXT, 205, Z_Records_multipleNSD,
-           (Odr_fun)z_DiagRecs, 0},
-       {-1, -1, -1, -1, 0, 0}
-    };
-
-    if (o->direction == ODR_DECODE)
-       *p = (Z_Records *)odr_malloc(o, sizeof(**p));
-    else if (!*p)
-       return opt;
-    if (odr_choice(o, arm, &(*p)->u, &(*p)->which, 0))
-       return 1;
-    *p = 0;
-    return opt && odr_ok(o);
-}
-
-/* ------------------------ ACCESS CTRL SERVICE ----------------------- */
-
-int z_AccessControlRequest(ODR o, Z_AccessControlRequest **p, int opt,
-                          const char *name)
-{
-    static Odr_arm arm[] = 
-    {
-       {ODR_IMPLICIT, ODR_CONTEXT, 37, Z_AccessRequest_simpleForm,
-           (Odr_fun)odr_octetstring, 0},
-       {ODR_EXPLICIT, ODR_CONTEXT, 0, Z_AccessRequest_externallyDefined,
-           (Odr_fun)z_External, 0},
-       {-1, -1, -1, -1, 0, 0}
-    };
-    if (!odr_sequence_begin(o, p, sizeof(**p), 0))
-       return opt && odr_ok(o);
-    return
-       z_ReferenceId(o, &(*p)->referenceId, 1, 0) &&
-       odr_choice(o, arm, &(*p)->u, &(*p)->which, 0) &&
-       z_OtherInformation(o, &(*p)->otherInfo, 1, 0) &&
-       odr_sequence_end(o);
-}
-
-int z_AccessControlResponse(ODR o, Z_AccessControlResponse **p, int opt,
-                           const char *name)
-{
-    static Odr_arm arm[] = 
-    {
-       {ODR_IMPLICIT, ODR_CONTEXT, 38, Z_AccessResponse_simpleForm,
-           (Odr_fun)odr_octetstring, 0},
-       {ODR_EXPLICIT, ODR_CONTEXT, 0, Z_AccessResponse_externallyDefined,
-           (Odr_fun)z_External, 0},
-       {-1, -1, -1, -1, 0, 0}
-    };
-    if (!odr_sequence_begin(o, p, sizeof(**p), 0))
-       return opt && odr_ok(o);
-    return
-       z_ReferenceId(o, &(*p)->referenceId, 1, 0) &&
-       odr_choice(o, arm, &(*p)->u, &(*p)->which, 0) &&
-       odr_explicit(o, z_DiagRec, &(*p)->diagnostic, ODR_CONTEXT, 223, 1) &&
-       z_OtherInformation(o, &(*p)->otherInfo, 1, 0) &&
-       odr_sequence_end(o);
-}
-
-/* ------------------------ SCAN SERVICE -------------------- */
-
-int z_AttributeList(ODR o, Z_AttributeList **p, int opt, const char *name)
-{
-    if (o->direction == ODR_DECODE)
-       *p = (Z_AttributeList *)odr_malloc(o, sizeof(**p));
-    else if (!*p)
-       return opt;
-
-    odr_implicit_settag(o, ODR_CONTEXT, 44);
-    if (odr_sequence_of(o, (Odr_fun)z_AttributeElement, &(*p)->attributes,
-       &(*p)->num_attributes, 0))
-       return 1;
-    *p = 0;
-    return opt && odr_ok(o);
-}
-
-/*
- * This is a temporary hack. We don't know just *what* old version of the
- * protocol willow uses, so we'll just patiently wait for them to update
- */
-static int willow_scan = 0;
-
-int z_WillowAttributesPlusTerm(ODR o, Z_AttributesPlusTerm **p, int opt,
-                              const char *name)
-{
-    if (!*p && o->direction != ODR_DECODE)
-       return opt;
-    if (!odr_constructed_begin(o, p, ODR_CONTEXT, 4, 0))
-    {
-       o->t_class = -1;
-       return opt && odr_ok(o);
-    }
-    if (!odr_constructed_begin(o, p, ODR_CONTEXT, 1, 0))
-       return 0;
-    if (!odr_constructed_begin(o, p, ODR_UNIVERSAL, ODR_SEQUENCE, 0))
-       return 0;
-    if (!odr_implicit_settag(o, ODR_CONTEXT, 44))
-       return 0;
-    if (o->direction == ODR_DECODE)
-       *p = (Z_AttributesPlusTerm*)odr_malloc(o, sizeof(**p));
-    if (!odr_sequence_of(o, (Odr_fun)z_AttributeElement, &(*p)->attributeList,
-       &(*p)->num_attributes, 0))
-       return 0;
-    if (!odr_sequence_end(o) || !odr_sequence_end(o))
-       return 0;
-    if (!z_Term(o, &(*p)->term, 0, 0))
-       return 0;
-    if (!odr_constructed_end(o))
-       return 0;
-    willow_scan = 1;
-    return 1;
-}
-
-int z_AlternativeTerm(ODR o, Z_AlternativeTerm **p, int opt, const char *name)
-{
-    if (o->direction == ODR_DECODE)
-       *p = (Z_AlternativeTerm *)odr_malloc(o, sizeof(**p));
-    else if (!*p)
-    {
-       o->t_class = -1;
-       return opt && odr_ok(o);
-    }
-
-    if (odr_sequence_of(o, (Odr_fun)z_AttributesPlusTerm, &(*p)->terms,
-       &(*p)->num_terms, 0))
-       return 1;
-    *p = 0;
-    return opt && !o->error;
-}
-
-int z_ByDatabase(ODR o, Z_ByDatabase **p, int opt, const char *name)
-{
-    if (!odr_sequence_begin(o, p, sizeof(**p), 0))
-       return opt && odr_ok(o);
-    return
-        z_DatabaseName(o, &(*p)->db, 1, 0) &&
-       odr_implicit(o, odr_integer, &(*p)->num, ODR_CONTEXT, 1, 1) &&
-       z_OtherInformation(o, &(*p)->otherDbInfo, 1, 0) &&
-       odr_sequence_end(o);
-}
-
-int z_ByDatabaseList(ODR o, Z_ByDatabaseList **p, int opt, const char *name)
-{
-    if (!odr_initmember(o, p, sizeof(**p)))
-       return opt && odr_ok(o);
-    if (odr_sequence_of(o, (Odr_fun)z_ByDatabase, &(*p)->elements,
-                       &(*p)->num_elements, 0))
-       return 1;
-    *p = 0;
-    return opt && odr_ok(o);
-}
-
-int z_ScanOccurrences(ODR o, Z_ScanOccurrences **p, int opt, const char *name)
-{
-    Odr_arm arm[] =
-    {
-       {ODR_EXPLICIT, ODR_CONTEXT, 2, Z_ScanOccurrences_global,
-        (Odr_fun)odr_integer, 0},
-       {ODR_EXPLICIT, ODR_CONTEXT, 3, Z_ScanOccurrences_byDatabase,
-           (Odr_fun)z_ByDatabaseList, 0},
-       {-1, -1, -1, -1, 0, 0}
-    };
-
-    if (!odr_initmember(o, p, sizeof(**p)))
-       return opt && odr_ok(o);
-    if (odr_choice(o, arm, &(*p)->u, &(*p)->which, 0))
-       return 1;
-    *p = 0;
-    return opt && odr_ok(o);
-}
-
-int z_OccurrenceByAttributesElem(ODR o, Z_OccurrenceByAttributesElem **p,
-    int opt, const char *name)
-{
-    if (!odr_sequence_begin(o, p, sizeof(**p), 0))
-       return opt && odr_ok(o);
-    return
-        odr_explicit(o, z_AttributeList, &(*p)->attributes, ODR_CONTEXT,
-           1, 1) &&
-       z_ScanOccurrences(o, &(*p)->occurrences, 1, 0) &&
-       z_OtherInformation(o, &(*p)->otherOccurInfo, 1, 0) &&
-       odr_sequence_end(o);
-}
-
-int z_OccurrenceByAttributes(ODR o, Z_OccurrenceByAttributes **p, int opt, const char *name)
-{
-    if (!odr_initmember(o, p, sizeof(**p)))
-       return opt && odr_ok(o);
-    if (!odr_sequence_of(o, (Odr_fun)z_OccurrenceByAttributesElem,
-                        &(*p)->elements, &(*p)->num_elements, 0))
-       return 1;
-    *p = 0;
-    return opt && odr_ok(o);
-}
-
-int z_TermInfo(ODR o, Z_TermInfo **p, int opt, const char *name)
-{
-    if (!odr_sequence_begin(o, p, sizeof(**p), 0))
-       return opt && odr_ok(o);
-    return
-       (willow_scan ? 
-           odr_implicit(o, z_Term, &(*p)->term, ODR_CONTEXT, 1, 0) :
-           z_Term(o, &(*p)->term, 0, 0)) &&
-       odr_implicit(o, z_InternationalString, &(*p)->displayTerm, ODR_CONTEXT,
-           0, 1) &&
-       z_AttributeList(o, &(*p)->suggestedAttributes, 1, 0) &&
-       odr_implicit(o, z_AlternativeTerm, &(*p)->alternativeTerm,
-           ODR_CONTEXT, 4, 1) &&
-       odr_implicit(o, odr_integer, &(*p)->globalOccurrences, ODR_CONTEXT,
-           2, 1) &&
-       odr_implicit(o, z_OccurrenceByAttributes, &(*p)->byAttributes,
-           ODR_CONTEXT, 3, 1) &&
-       z_OtherInformation(o, &(*p)->otherTermInfo, 1, 0) &&
-       odr_sequence_end(o);
-}
-
-int z_Entry(ODR o, Z_Entry **p, int opt, const char *name)
-{
-    static Odr_arm arm[] =
-    {
-       {ODR_IMPLICIT, ODR_CONTEXT, 1, Z_Entry_termInfo,
-        (Odr_fun)z_TermInfo, 0},
-       {ODR_EXPLICIT, ODR_CONTEXT, 2, Z_Entry_surrogateDiagnostic,
-           (Odr_fun)z_DiagRec, 0},
-       {-1, -1, -1, -1, 0, 0}
-    };
-
-    if (o->direction == ODR_DECODE)
-       *p = (Z_Entry *)odr_malloc(o, sizeof(**p));
-    else if (!*p)
-       return opt;
-
-    if (odr_choice(o, arm, &(*p)->u, &(*p)->which, 0))
-       return 1;
-    *p = 0;
-    return opt && odr_ok(o);
-}
-
-int z_ListEntries (ODR o, Z_ListEntries **p, int opt, const char *name)
-{
-    if (!odr_sequence_begin (o, p, sizeof(**p), 0))
-       return opt && odr_ok (o);
-    return
-       odr_implicit_settag (o, ODR_CONTEXT, 1) &&
-       (odr_sequence_of(o, (Odr_fun) z_Entry, &(*p)->entries,
-                        &(*p)->num_entries, 0) || odr_ok(o)) &&
-       odr_implicit_settag (o, ODR_CONTEXT, 2) &&
-       (odr_sequence_of(o, (Odr_fun) z_DiagRec,
-                        &(*p)->nonsurrogateDiagnostics,
-                        &(*p)->num_nonsurrogateDiagnostics, 0) 
-        || odr_ok(o)) &&
-       odr_sequence_end (o);
-}
-
-int z_ScanRequest(ODR o, Z_ScanRequest **p, int opt, const char *name)
-{
-    if (!odr_sequence_begin(o, p, sizeof(**p), 0))
-       return opt && odr_ok(o);
-    willow_scan = 0;
-    return
-       z_ReferenceId(o, &(*p)->referenceId, 1, 0) &&
-       odr_implicit_settag(o, ODR_CONTEXT, 3) &&
-       odr_sequence_of(o, z_DatabaseName, &(*p)->databaseNames,
-                       &(*p)->num_databaseNames, 0) &&
-       odr_oid(o, &(*p)->attributeSet, 1, 0) &&
-       (z_AttributesPlusTerm(o, &(*p)->termListAndStartPoint, 1, 0) ?
-        ((*p)->termListAndStartPoint ? 1 : 
-         z_WillowAttributesPlusTerm(o, &(*p)->termListAndStartPoint, 0, 0))
-        : 0) &&
-       odr_implicit(o, odr_integer, &(*p)->stepSize, ODR_CONTEXT, 5, 1) &&
-       odr_implicit(o, odr_integer, &(*p)->numberOfTermsRequested,
-                    ODR_CONTEXT, 6, 0) &&
-       odr_implicit(o, odr_integer, &(*p)->preferredPositionInResponse,
-                    ODR_CONTEXT, 7, 1) &&
-       z_OtherInformation(o, &(*p)->otherInfo, 1, "otherInfo") &&
-       odr_sequence_end(o);
-}
-
-int z_ScanResponse(ODR o, Z_ScanResponse **p, int opt, const char *name)
-{
-    if (!odr_sequence_begin(o, p, sizeof(**p), 0))
-       return opt && odr_ok(o);
-    return
-       z_ReferenceId(o, &(*p)->referenceId, 1, 0) &&
-       odr_implicit(o, odr_integer, &(*p)->stepSize, ODR_CONTEXT, 3, 1) &&
-       odr_implicit(o, odr_integer, &(*p)->scanStatus, ODR_CONTEXT, 4, 0) &&
-       odr_implicit(o, odr_integer, &(*p)->numberOfEntriesReturned,
-                    ODR_CONTEXT, 5, 0) &&
-       odr_implicit(o, odr_integer, &(*p)->positionOfTerm,
-                    ODR_CONTEXT, 6, 1) &&
-       odr_implicit(o, z_ListEntries, &(*p)->entries, ODR_CONTEXT, 7, 1) &&
-       odr_implicit(o, odr_oid, &(*p)->attributeSet, ODR_CONTEXT, 8, 1) &&
-       z_OtherInformation(o, &(*p)->otherInfo, 1, 0) &&
-       odr_sequence_end(o);
-}
-
-/* ------------------------ SEARCHRESPONSE ----------------*/
-
-int z_NumberOfRecordsReturned(ODR o, int **p, int opt, const char *name)
-{
-    return odr_implicit(o, odr_integer, p, ODR_CONTEXT, 24, opt);
-}
-
-int z_NextResultSetPosition(ODR o, int **p, int opt, const char *name)
-{
-    return odr_implicit(o, odr_integer, p, ODR_CONTEXT, 25, opt);
-}
-
-int z_PresentStatus(ODR o, int **p, int opt, const char *name)
-{
-    return odr_implicit(o, odr_integer, p, ODR_CONTEXT, 27, opt);
-}
-
-int z_SearchResponse(ODR o, Z_SearchResponse **p, int opt, const char *name)
-{
-    Z_SearchResponse *pp;
-
-    if (!odr_sequence_begin(o, p, sizeof(**p), 0))
-       return opt && odr_ok(o);
-    pp = *p;
-    return
-       z_ReferenceId(o, &pp->referenceId, 1, 0) &&
-       odr_implicit(o, odr_integer, &pp->resultCount, ODR_CONTEXT, 23, 0) &&
-       z_NumberOfRecordsReturned(o, &pp->numberOfRecordsReturned, 0, 0) &&
-       z_NextResultSetPosition(o, &pp->nextResultSetPosition, 0, 0) &&
-       odr_implicit(o, odr_bool, &pp->searchStatus, ODR_CONTEXT, 22, 0) &&
-       odr_implicit(o, odr_integer, &pp->resultSetStatus,
-                    ODR_CONTEXT, 26, 1) &&
-       z_PresentStatus(o, &pp->presentStatus, 1, 0) &&
-       z_Records(o, &pp->records, 1, 0) &&
-       odr_implicit(o, z_OtherInformation, &(*p)->additionalSearchInfo,
-                    ODR_CONTEXT, 203, 1) &&
-       z_OtherInformation(o, &(*p)->otherInfo, 1, 0) &&
-       odr_sequence_end(o);
-}
-
-/* --------------------- PRESENT SERVICE ---------------------- */
-
-int z_ElementSpec(ODR o, Z_ElementSpec **p, int opt, const char *name)
-{
-    static Odr_arm arm[] =
-    {
-       {ODR_IMPLICIT, ODR_CONTEXT, 1, Z_ElementSpec_elementSetName,
-           odr_visiblestring, 0},
-       {ODR_IMPLICIT, ODR_CONTEXT, 2, Z_ElementSpec_externalSpec,
-           (Odr_fun)z_External, 0},
-       {-1, -1, -1, -1, 0, 0}
-    };
-
-    if (o->direction == ODR_DECODE)
-       *p = (Z_ElementSpec *)odr_malloc(o, sizeof(**p));
-    else if (!*p)
-       return opt;
-
-    if (odr_choice(o, arm, &(*p)->u, &(*p)->which, 0))
-       return 1;
-    *p = 0;
-    return opt && odr_ok(o);
-}
-
-int z_Specification(ODR o, Z_Specification **p, int opt, const char *name)
-{
-    if (!odr_sequence_begin(o, p, sizeof(**p), 0))
-       return opt && odr_ok(o);
-    return
-       odr_implicit(o, odr_oid, &(*p)->schema, ODR_CONTEXT, 1, 1) &&
-       z_ElementSpec(o, &(*p)->elementSpec, 1, 0) &&
-       odr_sequence_end(o);
-}
-
-int z_DbSpecific(ODR o, Z_DbSpecific **p, int opt, const char *name)
-{
-    if (!odr_sequence_begin(o, p, sizeof(**p), 0))
-       return opt && odr_ok(o);
-    return
-       odr_explicit(o, z_DatabaseName, &(*p)->databaseName, ODR_CONTEXT,
-           1, 0) &&
-       odr_implicit(o, z_Specification, &(*p)->spec, ODR_CONTEXT, 2, 0) &&
-       odr_sequence_end(o);
-}
-
-int z_CompSpec(ODR o, Z_CompSpec **p, int opt, const char *name)
-{
-    if (!odr_sequence_begin(o, p, sizeof(**p), 0))
-       return opt && odr_ok(o);
-    return
-       odr_implicit(o, odr_bool, &(*p)->selectAlternativeSyntax, ODR_CONTEXT,
-                    1, 0) &&
-       odr_implicit(o, z_Specification, &(*p)->generic, ODR_CONTEXT, 2, 1) &&
-       odr_implicit_settag(o, ODR_CONTEXT, 3) &&
-       (odr_sequence_of(o, (Odr_fun)z_DbSpecific, &(*p)->dbSpecific,
-                        &(*p)->num_dbSpecific, 0) || odr_ok(o)) &&
-       odr_implicit_settag(o, ODR_CONTEXT, 4) &&
-       (odr_sequence_of(o, (Odr_fun)odr_oid, &(*p)->recordSyntax,
-                        &(*p)->num_recordSyntax, 0) || odr_ok(o)) &&
-       odr_sequence_end(o);
-}
-
-int z_RecordComposition(ODR o, Z_RecordComposition **p, int opt,
-                       const char *name)
-{
-    static Odr_arm arm[] =
-    {
-       {ODR_EXPLICIT, ODR_CONTEXT, 19, Z_RecordComp_simple,
-        (Odr_fun)z_ElementSetNames, 0},
-       {ODR_IMPLICIT, ODR_CONTEXT, 209, Z_RecordComp_complex,
-        (Odr_fun)z_CompSpec, 0},
-       {-1, -1, -1, -1, 0, 0}
-    };
-    
-    if (o->direction == ODR_DECODE)
-       *p = (Z_RecordComposition *)odr_malloc(o, sizeof(**p));
-    else if (!*p)
-       return opt;
-    
-    if (odr_choice(o, arm, &(*p)->u, &(*p)->which, 0))
-       return 1;
-    *p = 0;
-    return opt && odr_ok(o);
-}
-
-int z_Range(ODR o, Z_Range **p, int opt, const char *name)
-{
-    if (!odr_sequence_begin(o, p, sizeof(**p), 0))
-       return opt && odr_ok(o);
-    return
-       odr_implicit(o, odr_integer, &(*p)->startingPosition,
-                    ODR_CONTEXT, 1, 0) &&
-       odr_implicit(o, odr_integer, &(*p)->numberOfRecords,
-                    ODR_CONTEXT, 2, 0) &&
-       odr_sequence_end(o);
-}
-
-int z_PresentRequest(ODR o, Z_PresentRequest **p, int opt, const char *name)
-{
-    Z_PresentRequest *pp;
-    
-    if (!odr_sequence_begin(o, p, sizeof(**p), 0))
-       return opt && odr_ok(o);
-    pp = *p;
-    return
-       z_ReferenceId(o, &pp->referenceId, 1, 0) &&
-       z_ResultSetId(o, &pp->resultSetId, 0, 0) &&
-       odr_implicit(o, odr_integer, &pp->resultSetStartPoint,
-                    ODR_CONTEXT, 30, 0) &&
-       odr_implicit(o, odr_integer, &pp->numberOfRecordsRequested,
-                    ODR_CONTEXT, 29, 0) &&
-       odr_implicit_settag(o, ODR_CONTEXT, 212) &&
-       (odr_sequence_of(o, (Odr_fun)z_Range, &(*p)->additionalRanges,
-                        &(*p)->num_ranges, 0) || odr_ok(o)) &&
-       z_RecordComposition(o, &(*p)->recordComposition, 1, 0) &&
-       odr_implicit(o, odr_oid, &(*p)->preferredRecordSyntax, ODR_CONTEXT,
-                    104, 1) &&
-       odr_implicit(o, odr_integer, &(*p)->maxSegmentCount, ODR_CONTEXT,
-                    204, 1) &&
-       odr_implicit(o, odr_integer, &(*p)->maxRecordSize, ODR_CONTEXT,
-                    206, 1) &&
-       odr_implicit(o, odr_integer, &(*p)->maxSegmentSize, ODR_CONTEXT,
-                    207, 1) &&
-       z_OtherInformation(o, &(*p)->otherInfo, 1, 0) &&
-       odr_sequence_end(o);
-}
-
-int z_PresentResponse(ODR o, Z_PresentResponse **p, int opt, const char *name)
-{
-    Z_PresentResponse *pp;
-
-    if (!odr_sequence_begin(o, p, sizeof(**p), 0))
-       return opt && odr_ok(o);
-    pp = *p;
-    return
-       z_ReferenceId(o, &pp->referenceId, 1, 0) &&
-       z_NumberOfRecordsReturned(o, &pp->numberOfRecordsReturned, 0, 0) &&
-       z_NextResultSetPosition(o, &pp->nextResultSetPosition, 0, 0) &&
-       z_PresentStatus(o, &pp->presentStatus, 0, 0) &&
-       z_Records(o, &pp->records, 1, 0) &&
-       z_OtherInformation(o, &(*p)->otherInfo, 1, 0) &&
-       odr_sequence_end(o);
-}
-
-/* ----------------------DELETE -------------------------- */
-
-int z_DeleteSetStatus(ODR o, int **p, int opt, const char *name)
-{
-    return odr_implicit(o, odr_integer, p, ODR_CONTEXT, 33, opt);
-}
-
-int z_ListStatus(ODR o, Z_ListStatus **p, int opt, const char *name)
-{
-    if (!odr_sequence_begin(o, p, sizeof(**p), 0))
-       return opt && odr_ok(o);
-    return
-       z_ResultSetId(o, &(*p)->id, 0, 0) &&
-       z_DeleteSetStatus(o, &(*p)->status, 0, 0) &&
-       odr_sequence_end(o);
-}
-
-int z_DeleteResultSetRequest(ODR o, Z_DeleteResultSetRequest **p, int opt,
-                            const char *name)
-{
-    if (!odr_sequence_begin(o, p, sizeof(**p), 0))
-       return opt && odr_ok(o);
-    return
-       z_ReferenceId(o, &(*p)->referenceId, 1, 0) &&
-       odr_implicit(o, odr_integer, &(*p)->deleteFunction, ODR_CONTEXT, 32,
-           0) &&
-       (odr_sequence_of(o, z_ResultSetId, &(*p)->resultSetList,
-                        &(*p)->num_resultSetList, 0) || odr_ok(o)) &&
-       z_OtherInformation(o, &(*p)->otherInfo, 1, 0) &&
-       odr_sequence_end(o);
-}
-
-int z_ListStatuses (ODR o, Z_ListStatuses **p, int opt, const char *name)
-{
-    if (!odr_initmember (o, p, sizeof(**p)))
-        return opt && odr_ok(o);
-    if (odr_sequence_of (o, (Odr_fun) z_ListStatus, &(*p)->elements,
-                        &(*p)->num, 0))
-        return 1;
-    *p = 0;
-    return opt && odr_ok(o);
-}
-
-int z_DeleteResultSetResponse(ODR o, Z_DeleteResultSetResponse **p, int opt,
-                             const char *name)
-{
-    if (!odr_sequence_begin(o, p, sizeof(**p), 0))
-       return opt && odr_ok(o);
-    return
-       z_ReferenceId(o, &(*p)->referenceId, 1, 0) &&
-       odr_implicit(o, z_DeleteSetStatus, &(*p)->deleteOperationStatus,
-                    ODR_CONTEXT, 0, 0) &&
-        odr_implicit (o, z_ListStatuses,
-                     &(*p)->deleteListStatuses, ODR_CONTEXT, 1, 1) &&
-       odr_implicit(o, odr_integer, &(*p)->numberNotDeleted, ODR_CONTEXT,
-                    34, 1) &&
-        odr_implicit (o, z_ListStatuses,
-                     &(*p)->bulkStatuses, ODR_CONTEXT, 35, 1) &&
-       odr_implicit(o, odr_visiblestring, &(*p)->deleteMessage, ODR_CONTEXT,
-                    36, 1) &&
-       z_OtherInformation(o, &(*p)->otherInfo, 1, 0) &&
-       odr_sequence_end(o);
-}
-
-/* ------------------------ SEGMENT SERVICE -------------- */
-
-int z_Segment(ODR o, Z_Segment **p, int opt, const char *name)
-{
-    if (!odr_sequence_begin(o, p, sizeof(**p), 0))
-       return opt && odr_ok(o);
-    return
-       z_ReferenceId(o, &(*p)->referenceId, 1, 0) &&
-       odr_implicit(o, odr_integer, &(*p)->numberOfRecordsReturned,
-                    ODR_CONTEXT, 24, 0) &&
-       odr_implicit_settag(o, ODR_CONTEXT, 0) &&
-       odr_sequence_of(o, (Odr_fun)z_NamePlusRecord, &(*p)->segmentRecords,
-                       &(*p)->num_segmentRecords, 0) &&
-       z_OtherInformation(o, &(*p)->otherInfo, 1, 0) &&
-       odr_sequence_end(o);
-}
-
-/* ------------------------ CLOSE SERVICE ---------------- */
-
-int z_Close(ODR o, Z_Close **p, int opt, const char *name)
-{
-    if (!odr_sequence_begin(o, p, sizeof(**p), 0))
-       return opt && odr_ok(o);
-    return
-       z_ReferenceId(o, &(*p)->referenceId, 1, 0) &&
-       odr_implicit(o, odr_integer, &(*p)->closeReason, ODR_CONTEXT, 211, 0)
-       &&
-       odr_implicit(o, odr_visiblestring, &(*p)->diagnosticInformation,
-                    ODR_CONTEXT, 3, 1) &&
-       odr_implicit(o, odr_oid, &(*p)->resourceReportFormat, ODR_CONTEXT,
-                    4, 1) &&
-       odr_implicit(o, z_External, &(*p)->resourceReport, ODR_CONTEXT,
-                    5, 1) &&
-       z_OtherInformation(o, &(*p)->otherInfo, 1, 0) &&
-       odr_sequence_end(o);
-}
-
-/* ------------------------ APDU ------------------------- */
-
-int z_Permissions(ODR o, Z_Permissions **p, int opt, const char *name)
-{
-    if (!odr_sequence_begin(o, p, sizeof(**p), 0))
-        return opt && odr_ok(o);
-    return
-        odr_implicit(o, z_InternationalString, &(*p)->userId, ODR_CONTEXT,
-                    1, 0) &&
-       odr_implicit_settag(o, ODR_CONTEXT, 2) &&
-       odr_sequence_of(o, (Odr_fun)odr_integer, &(*p)->allowableFunctions,
-                       &(*p)->num_allowableFunctions, 0) &&
-       odr_sequence_end(o);
-}
-
-int z_ExtendedServicesRequest(ODR o, Z_ExtendedServicesRequest **p, int opt,
-                             const char *name)
-{
-    if (!odr_sequence_begin(o, p, sizeof(**p), 0))
-        return opt && odr_ok(o);
-    return
-        z_ReferenceId(o, &(*p)->referenceId, 1, 0) &&
-        odr_implicit(o, odr_integer, &(*p)->function, ODR_CONTEXT, 3, 0) &&
-        odr_implicit(o, odr_oid, &(*p)->packageType, ODR_CONTEXT, 4, 0) &&
-        odr_implicit(o, z_InternationalString, &(*p)->packageName,
-                    ODR_CONTEXT, 5, 1) &&
-        odr_implicit(o, z_InternationalString, &(*p)->userId,
-                    ODR_CONTEXT, 6, 1) &&
-        odr_implicit(o, z_IntUnit, &(*p)->retentionTime,
-                    ODR_CONTEXT, 7, 1) &&
-        odr_implicit(o, z_Permissions, &(*p)->permissions,
-                    ODR_CONTEXT, 8, 1) &&
-        odr_implicit(o, z_InternationalString, &(*p)->description,
-                    ODR_CONTEXT, 9, 1) &&
-        odr_implicit(o, z_External, &(*p)->taskSpecificParameters,
-                    ODR_CONTEXT, 10, 1) &&
-        odr_implicit(o, odr_integer, &(*p)->waitAction,
-                    ODR_CONTEXT, 11, 0) &&
-        z_ElementSetName(o, &(*p)->elements, 1, 0) &&
-        z_OtherInformation(o, &(*p)->otherInfo, 1, 0) &&
-        odr_sequence_end(o);
-}
-
-int z_ExtendedServicesResponse(ODR o, Z_ExtendedServicesResponse **p, int opt,
-                              const char *name)
-{
-    if (!odr_sequence_begin(o, p, sizeof(**p), 0))
-        return opt && odr_ok(o);
-    return
-        z_ReferenceId(o, &(*p)->referenceId, 1, 0) &&
-        odr_implicit(o, odr_integer, &(*p)->operationStatus, ODR_CONTEXT,
-                    3, 0) &&
-       odr_implicit_settag(o, ODR_CONTEXT, 4) &&
-       (odr_sequence_of(o, (Odr_fun)z_DiagRec, &(*p)->diagnostics,
-                        &(*p)->num_diagnostics, 0) || odr_ok(o)) &&
-        odr_implicit(o, z_External, &(*p)->taskPackage, ODR_CONTEXT, 5, 1) &&
-        z_OtherInformation(o, &(*p)->otherInfo, 1, 0) &&
-        odr_sequence_end(o);
-}
-
-/* ------------------------ SORT ------------------------- */
-
-int z_SortAttributes(ODR o, Z_SortAttributes **p, int opt, const char *name)
-{
-    if (!odr_sequence_begin(o, p, sizeof(**p), 0))
-       return opt && odr_ok(o);
-    return
-        odr_oid(o, &(*p)->id, 0, 0) &&
-       z_AttributeList(o, &(*p)->list, 0, 0) &&
-       odr_sequence_end(o);
-}
-
-int z_SortKey(ODR o, Z_SortKey **p, int opt, const char *name)
-{
-    static Odr_arm arm[] =
-    {
-       {ODR_IMPLICIT, ODR_CONTEXT, 0, Z_SortKey_sortField,
-        z_InternationalString, 0},
-       {ODR_IMPLICIT, ODR_CONTEXT, 1, Z_SortKey_elementSpec,
-        (Odr_fun)z_Specification, 0},
-       {ODR_IMPLICIT, ODR_CONTEXT, 2, Z_SortKey_sortAttributes,
-        (Odr_fun)z_SortAttributes, 0},
-       {-1, -1, -1, -1, 0}
-    };
-
-    if (!odr_initmember(o, p, sizeof(**p)))
-       return opt && odr_ok(o);
-    if (odr_choice(o, arm, &(*p)->u, &(*p)->which, 0))
-       return 1;
-    *p = 0;
-    return opt && odr_ok(o);
-}
-
-int z_SortDbSpecific(ODR o, Z_SortDbSpecific **p, int opt, const char *name)
-{
-    if (!odr_sequence_begin(o, p, sizeof(**p), 0))
-       return opt && odr_ok(o);
-    return
-        z_DatabaseName(o, &(*p)->databaseName, 0, 0) &&
-       z_SortKey(o, &(*p)->dbSort, 0, 0) &&
-       odr_sequence_end(o);
-}
-
-int z_SortDbSpecificList(ODR o, Z_SortDbSpecificList **p, int opt,
-                        const char *name)
-{
-    if (!odr_initmember(o, p, sizeof(**p)))
-       return opt && odr_ok(o);
-    if (odr_sequence_of(o, (Odr_fun)z_SortDbSpecific, &(*p)->dbSpecific,
-                       &(*p)->num_dbSpecific, 0))
-       return 1;
-    *p = 0;
-    return opt && odr_ok(o);
-}
-
-int z_SortElement(ODR o, Z_SortElement **p, int opt, const char *name)
-{
-    static Odr_arm arm[] =
-    {
-       {ODR_EXPLICIT, ODR_CONTEXT, 1, Z_SortElement_generic,
-        (Odr_fun)z_SortKey, 0},
-       {ODR_IMPLICIT, ODR_CONTEXT, 2, Z_SortElement_databaseSpecific,
-        (Odr_fun)z_SortDbSpecificList, 0},
-       {-1, -1, -1, -1, 0, 0}
-    };
-    
-    if (!odr_initmember(o, p, sizeof(**p)))
-       return opt && odr_ok(o);
-    if (odr_choice(o, arm, &(*p)->u, &(*p)->which, 0))
-       return 1;
-    *p = 0;
-    return opt && odr_ok(o);
-}
-
-int z_SortMissingValueAction(ODR o, Z_SortMissingValueAction **p, int opt,
-                            const char *name)
-{
-    static Odr_arm arm[] =
-    {
-       {ODR_IMPLICIT, ODR_CONTEXT, 1, Z_SortMissingValAct_abort,
-        (Odr_fun)odr_null, 0},
-       {ODR_IMPLICIT, ODR_CONTEXT, 2, Z_SortMissingValAct_null,
-        (Odr_fun)odr_null, 0},
-       {ODR_IMPLICIT, ODR_CONTEXT, 3, Z_SortMissingValAct_valData,
-        (Odr_fun)odr_octetstring, 0},
-       {-1, -1, -1, -1, 0, 0}
-    };
-    
-    if (!odr_initmember(o, p, sizeof(**p)))
-       return opt && odr_ok(o);
-    if (odr_choice(o, arm, &(*p)->u, &(*p)->which, 0))
-       return 1;
-    *p = 0;
-    return opt && odr_ok(o);
-}
-
-int z_SortKeySpec(ODR o, Z_SortKeySpec **p, int opt, const char *name)
-{
-    if (!odr_sequence_begin(o, p, sizeof(**p), 0))
-       return opt && odr_ok(o);
-    return
-        z_SortElement(o, &(*p)->sortElement, 0, 0) &&
-       odr_implicit(o, odr_integer, &(*p)->sortRelation, ODR_CONTEXT, 1, 0) &&
-       odr_implicit(o, odr_integer, &(*p)->caseSensitivity,
-                    ODR_CONTEXT, 2, 0) &&
-       odr_explicit(o, z_SortMissingValueAction, &(*p)->missingValueAction,
-                    ODR_CONTEXT, 3, 1) &&
-       odr_sequence_end(o);
-}
-
-int z_SortResponse(ODR o, Z_SortResponse **p, int opt, const char *name)
-{
-    if (!odr_sequence_begin(o, p, sizeof(**p), 0))
-       return opt && odr_ok(o);
-    return
-        z_ReferenceId(o, &(*p)->referenceId, 1, 0) &&
-       odr_implicit(o, odr_integer, &(*p)->sortStatus, ODR_CONTEXT,
-                    3, 0) &&
-       odr_implicit(o, odr_integer, &(*p)->resultSetStatus, ODR_CONTEXT,
-                    4, 1) &&
-       odr_implicit(o, z_DiagRecs, &(*p)->diagnostics, ODR_CONTEXT, 5, 1) &&
-       z_OtherInformation(o, &(*p)->otherInfo, 1, 0) &&
-       odr_sequence_end(o);
-}
-
-int z_SortKeySpecList(ODR o, Z_SortKeySpecList **p, int opt, const char *name)
-{
-    if (!odr_initmember(o, p, sizeof(**p)))
-       return opt && odr_ok(o);
-    if (odr_sequence_of(o, (Odr_fun)z_SortKeySpec, &(*p)->specs,
-                       &(*p)->num_specs, 0))
-       return 1;
-    *p = 0;
-    return opt && odr_ok(o);
-}
-
-int z_SortRequest(ODR o, Z_SortRequest **p, int opt, const char *name)
-{
-    if (!odr_sequence_begin(o, p, sizeof(**p), 0))
-       return opt && odr_ok(o);
-    return
-        z_ReferenceId(o, &(*p)->referenceId, 1, 0) &&
-       odr_implicit(o, z_StringList, &(*p)->inputResultSetNames, 
-                    ODR_CONTEXT, 3, 0) &&
-       odr_implicit(o, z_InternationalString, &(*p)->sortedResultSetName,
-                    ODR_CONTEXT, 4, 0) &&
-       odr_implicit(o, z_SortKeySpecList, &(*p)->sortSequence, ODR_CONTEXT,
-                    5, 0) &&
-       z_OtherInformation(o, &(*p)->otherInfo, 1, 0) &&
-       odr_sequence_end(o);
-}
-
-/* ---------------------- Resource Report ---------------- */
-
-int z_ResourceReportRequest(ODR o, Z_ResourceReportRequest **p, int opt,
-                           const char *name)
-{
-    if (!odr_sequence_begin(o, p, sizeof(**p), 0))
-       return opt && odr_ok(o);
-    return
-        z_ReferenceId(o, &(*p)->referenceId, 1, 0) &&
-       odr_implicit(o, z_ReferenceId, &(*p)->opId, ODR_CONTEXT, 210, 1) &&
-       odr_implicit(o, odr_oid, &(*p)->prefResourceReportFormat, ODR_CONTEXT,
-                    49, 1) &&
-       z_OtherInformation(o, &(*p)->otherInfo, 1, 0) &&
-       odr_sequence_end(o);
-}
-
-int z_ResourceReportResponse(ODR o, Z_ResourceReportResponse **p, int opt,
-                            const char *name)
-{
-    if (!odr_sequence_begin(o, p, sizeof(**p), 0))
-       return opt && odr_ok(o);
-    return
-        z_ReferenceId(o, &(*p)->referenceId, 1, 0) &&
-       odr_implicit(o, odr_integer, &(*p)->resourceReportStatus,
-                    ODR_CONTEXT, 50, 0) &&
-       odr_explicit(o, z_External, &(*p)->resourceReport, ODR_CONTEXT,
-                    51, 1) &&
-       z_OtherInformation(o, &(*p)->otherInfo, 1, 0) &&
-       odr_sequence_end(o);
-}
-
-/* ------------------------ APDU ------------------------- */
-
-int z_APDU(ODR o, Z_APDU **p, int opt, const char *name)
-{
-    static Odr_arm arm[] =
-    {
-       {ODR_IMPLICIT, ODR_CONTEXT, 20, Z_APDU_initRequest,
-        (Odr_fun)z_InitRequest, 0},
-       {ODR_IMPLICIT, ODR_CONTEXT, 21, Z_APDU_initResponse,
-        (Odr_fun)z_InitResponse, 0},
-       {ODR_IMPLICIT, ODR_CONTEXT, 22, Z_APDU_searchRequest,
-        (Odr_fun)z_SearchRequest, 0},
-       {ODR_IMPLICIT, ODR_CONTEXT, 23, Z_APDU_searchResponse,
-        (Odr_fun)z_SearchResponse, 0},
-       {ODR_IMPLICIT, ODR_CONTEXT, 24, Z_APDU_presentRequest,
-        (Odr_fun)z_PresentRequest, 0},
-       {ODR_IMPLICIT, ODR_CONTEXT, 25, Z_APDU_presentResponse,
-        (Odr_fun)z_PresentResponse, 0},
-       {ODR_IMPLICIT, ODR_CONTEXT, 26, Z_APDU_deleteResultSetRequest,
-        (Odr_fun)z_DeleteResultSetRequest, 0},
-       {ODR_IMPLICIT, ODR_CONTEXT, 27, Z_APDU_deleteResultSetResponse,
-        (Odr_fun)z_DeleteResultSetResponse, 0},
-       {ODR_IMPLICIT, ODR_CONTEXT, 28, Z_APDU_accessControlRequest,
-        (Odr_fun)z_AccessControlRequest, 0},
-       {ODR_IMPLICIT, ODR_CONTEXT, 29, Z_APDU_accessControlResponse,
-        (Odr_fun)z_AccessControlResponse, 0},
-       {ODR_IMPLICIT, ODR_CONTEXT, 30, Z_APDU_resourceControlRequest,
-        (Odr_fun)z_ResourceControlRequest, 0},
-       {ODR_IMPLICIT, ODR_CONTEXT, 31, Z_APDU_resourceControlResponse,
-        (Odr_fun)z_ResourceControlResponse, 0},
-       {ODR_IMPLICIT, ODR_CONTEXT, 32, Z_APDU_triggerResourceControlRequest,
-        (Odr_fun)z_TriggerResourceControlRequest, 0},
-       {ODR_IMPLICIT, ODR_CONTEXT, 33, Z_APDU_resourceReportRequest,
-        (Odr_fun)z_ResourceReportRequest, 0},
-       {ODR_IMPLICIT, ODR_CONTEXT, 34, Z_APDU_resourceReportResponse,
-        (Odr_fun)z_ResourceReportResponse, 0},
-       {ODR_IMPLICIT, ODR_CONTEXT, 35, Z_APDU_scanRequest,
-        (Odr_fun)z_ScanRequest, 0},
-       {ODR_IMPLICIT, ODR_CONTEXT, 36, Z_APDU_scanResponse,
-        (Odr_fun)z_ScanResponse, 0},
-       {ODR_IMPLICIT, ODR_CONTEXT, 43, Z_APDU_sortRequest,
-        (Odr_fun)z_SortRequest, 0},
-       {ODR_IMPLICIT, ODR_CONTEXT, 44, Z_APDU_sortResponse,
-        (Odr_fun)z_SortResponse, 0},
-       {ODR_IMPLICIT, ODR_CONTEXT, 45, Z_APDU_segmentRequest,
-        (Odr_fun)z_Segment, 0},
-       {ODR_IMPLICIT, ODR_CONTEXT, 46, Z_APDU_extendedServicesRequest,
-        (Odr_fun)z_ExtendedServicesRequest, 0},
-       {ODR_IMPLICIT, ODR_CONTEXT, 47, Z_APDU_extendedServicesResponse,
-        (Odr_fun)z_ExtendedServicesResponse},
-       {ODR_IMPLICIT, ODR_CONTEXT, 48, Z_APDU_close,
-        (Odr_fun)z_Close, 0},
-       {-1, -1, -1, -1, 0, 0}
-    };
-    
-    if (o->direction == ODR_DECODE)
-       *p = (Z_APDU *)odr_malloc(o, sizeof(**p));
-    odr_setlenlen(o, 5);
-    if (!odr_choice(o, arm, &(*p)->u, &(*p)->which, name))
-    {
-       if (o->direction == ODR_DECODE)
-           *p = 0;
-       return opt && odr_ok(o);
-    }
-    return 1;
-}
diff --git a/asn/prt-acc.c b/asn/prt-acc.c
deleted file mode 100644 (file)
index 0e3817f..0000000
+++ /dev/null
@@ -1,202 +0,0 @@
-/*
- * Copyright (c) 1995-1999, Index Data.
- * See the file LICENSE for details.
- * Sebastian Hammer, Adam Dickmeiss
- *
- * $Log: prt-acc.c,v $
- * Revision 1.9  1999-11-30 13:47:11  adam
- * Improved installation. Moved header files to include/yaz.
- *
- * Revision 1.8  1999/04/20 09:56:47  adam
- * Added 'name' paramter to encoder/decoder routines (typedef Odr_fun).
- * Modified all encoders/decoders to reflect this change.
- *
- * Revision 1.7  1998/02/11 11:53:32  adam
- * Changed code so that it compiles as C++.
- *
- * Revision 1.6  1998/01/05 09:04:57  adam
- * Fixed bugs in encoders/decoders - Not operator (!) missing.
- *
- * Revision 1.5  1995/09/29 17:11:53  quinn
- * Smallish
- *
- * Revision 1.4  1995/09/27  15:02:41  quinn
- * Modified function heads & prototypes.
- *
- * Revision 1.3  1995/08/15  11:59:41  quinn
- * Updated External
- *
- * Revision 1.2  1995/06/05  10:52:05  quinn
- * Fixed some negligences.
- *
- * Revision 1.1  1995/06/02  09:49:15  quinn
- * Adding access control
- *
- *
- */
-
-#include <yaz/proto.h>
-
-int z_Encryption1(ODR o, Z_Encryption1 **p, int opt, const char *name)
-{
-    if (!odr_sequence_begin(o, p, sizeof(**p), 0))
-       return opt && odr_ok(o);
-    return
-       odr_implicit(o, odr_octetstring, &(*p)->cryptType,
-                    ODR_CONTEXT, 1, 1) &&
-       odr_implicit(o, odr_octetstring, &(*p)->credential,
-                    ODR_CONTEXT, 2, 1) &&
-       odr_implicit(o, odr_octetstring, &(*p)->data, ODR_CONTEXT, 3, 0) &&
-       odr_sequence_end(o);
-}
-
-int z_EnumeratedPrompt1(ODR o, Z_EnumeratedPrompt1 **p, int opt,
-                       const char *name)
-{
-    if (!odr_sequence_begin(o, p, sizeof(**p), 0))
-       return opt && odr_ok(o);
-    return
-       odr_implicit(o, odr_integer, &(*p)->type, ODR_CONTEXT, 1, 0) &&
-       odr_implicit(o, odr_visiblestring, &(*p)->suggestedString, ODR_CONTEXT,
-                    2, 1) &&
-       odr_sequence_end(o);
-}
-
-int z_PromptId1(ODR o, Z_PromptId1 **p, int opt, const char *name)
-{
-    static Odr_arm arm[] =
-    {
-       {ODR_IMPLICIT, ODR_CONTEXT, 1, Z_PromptId1_enumeratedPrompt,
-        (Odr_fun)z_EnumeratedPrompt1, 0},
-       {ODR_IMPLICIT, ODR_CONTEXT, 2, Z_PromptId1_nonEnumeratedPrompt,
-        odr_visiblestring, 0},
-       {-1, -1, -1, -1, 0, 0}
-    };
-    
-    if (o->direction == ODR_DECODE)
-       *p = (Z_PromptId1 *)odr_malloc(o, sizeof(**p));
-    else if (!*p)
-       return opt;
-    if (odr_choice(o, arm, &(*p)->u, &(*p)->which, 0))
-       return 1;
-    *p = 0;
-    return opt && odr_ok(o);
-}
-
-int z_PromptInfo1(ODR o, Z_PromptInfo1 **p, int opt, const char *name)
-{
-    static Odr_arm arm[] =
-    {
-       {ODR_IMPLICIT, ODR_CONTEXT, 1, Z_Challenge1_character,
-        odr_visiblestring, 0},
-       {ODR_IMPLICIT, ODR_CONTEXT, 2, Z_Challenge1_encrypted,
-        (Odr_fun)z_Encryption1, 0},
-       {-1, -1, -1, -1, 0, 0}
-    };
-    
-    if (o->direction == ODR_DECODE)
-       *p = (Z_PromptInfo1 *)odr_malloc(o, sizeof(**p));
-    else if (!*p)
-       return opt;
-    if (odr_choice(o, arm, &(*p)->u, &(*p)->which, 0))
-       return 1;
-    *p = 0;
-    return opt && odr_ok(o);
-}
-
-int z_ChallengeUnit1(ODR o, Z_ChallengeUnit1 **p, int opt, const char *name)
-{
-    if (!odr_sequence_begin(o, p, sizeof(**p), 0))
-       return opt && odr_ok(o);
-    return
-       odr_explicit(o, z_PromptId1, &(*p)->promptId, ODR_CONTEXT, 1, 0) &&
-       odr_implicit(o, odr_visiblestring, &(*p)->defaultResponse,
-                    ODR_CONTEXT, 2, 1) &&
-       odr_explicit(o, z_PromptInfo1, &(*p)->promptInfo,
-                    ODR_CONTEXT, 3, 1) &&
-       odr_implicit(o, odr_visiblestring, &(*p)->regExpr,
-                    ODR_CONTEXT, 4, 1) &&
-       odr_implicit(o, odr_null, &(*p)->responseRequired,
-                    ODR_CONTEXT, 5, 1) &&
-       odr_implicit_settag(o, ODR_CONTEXT, 6) &&
-       (odr_sequence_of(o, odr_visiblestring, &(*p)->allowedValues,
-                        &(*p)->num_values, 0) || odr_ok(o)) &&
-       odr_implicit(o, odr_null, &(*p)->shouldSave, ODR_CONTEXT, 7, 1) &&
-       odr_implicit(o, odr_integer, &(*p)->dataType, ODR_CONTEXT, 8, 1) &&
-       odr_implicit(o, z_External, &(*p)->diagnostic, ODR_CONTEXT, 9, 1) &&
-       odr_sequence_end(o);
-}
-
-int z_Challenge1(ODR o, Z_Challenge1 **p, int opt, const char *name)
-{
-    if (o->direction == ODR_ENCODE)
-       *p = (Z_Challenge1 *)odr_malloc(o, sizeof(**p));
-    else if (!*p)
-       return opt;
-    if (odr_sequence_of(o, (Odr_fun)z_ChallengeUnit1, &(*p)->list,
-                       &(*p)->num_challenges, 0))
-       return 1;
-    *p = 0;
-    return opt && odr_ok(o);
-}
-
-int z_ResponseUnit1(ODR o, Z_ResponseUnit1 **p, int opt, const char *name)
-{
-    static Odr_arm arm[] = 
-    {
-       {ODR_IMPLICIT, ODR_CONTEXT, 1, Z_Response1_string,
-        odr_visiblestring, 0},
-       {ODR_IMPLICIT, ODR_CONTEXT, 2, Z_Response1_accept,
-        (Odr_fun)odr_bool, 0},
-       {ODR_IMPLICIT, ODR_CONTEXT, 3, Z_Response1_acknowledge,
-        (Odr_fun)odr_null, 0},
-       {ODR_EXPLICIT, ODR_CONTEXT, 4, Z_Response1_diagnostic,
-        (Odr_fun)z_DiagRec, 0},
-       {ODR_IMPLICIT, ODR_CONTEXT, 5, Z_Response1_encrypted,
-        (Odr_fun)z_Encryption1, 0},
-       {-1, -1, -1, -1, 0, 0}
-    };
-    
-    if (!odr_sequence_begin(o, p, sizeof(**p), 0))
-       return opt && odr_ok(o);
-    return
-       odr_explicit(o, z_PromptId1, &(*p)->promptId, ODR_CONTEXT, 1, 0) &&
-       odr_constructed_begin(o, p, ODR_CONTEXT, 2, 0) &&
-       odr_choice(o, arm, &(*p)->u, &(*p)->which, 0) &&
-       odr_constructed_end(o) &&
-       odr_sequence_end(o);
-}
-
-int z_Response1(ODR o, Z_Response1 **p, int opt, const char *name)
-{
-    if (o->direction == ODR_ENCODE)
-       *p = (Z_Response1 *)odr_malloc(o, sizeof(**p));
-    else if (!*p)
-       return opt;
-    if (odr_sequence_of(o, (Odr_fun)z_ResponseUnit1, &(*p)->list,
-                       &(*p)->num_responses, 0))
-       return 1;
-    *p = 0;
-    return opt && odr_ok(o);
-}
-
-int z_PromptObject1(ODR o, Z_PromptObject1 **p, int opt, const char *name)
-{
-    static Odr_arm arm[] =
-    {
-       {ODR_IMPLICIT, ODR_CONTEXT, 1, Z_PromptObject1_challenge,
-        (Odr_fun)z_Challenge1, 0},
-       {ODR_IMPLICIT, ODR_CONTEXT, 2, Z_PromptObject1_response,
-        (Odr_fun)z_Response1, 0},
-       {-1, -1, -1, -1, 0, 0}
-    };
-    
-    if (o->direction == ODR_DECODE)
-       *p = (Z_PromptObject1 *)odr_malloc(o, sizeof(**p));
-    else if (!*p)
-       return opt;
-    if (odr_choice(o, arm, &(*p)->u, &(*p)->which, 0))
-       return 1;
-    *p = 0;
-    return opt && odr_ok(o);
-}
diff --git a/asn/prt-acc.h b/asn/prt-acc.h
deleted file mode 100644 (file)
index 214b4c7..0000000
+++ /dev/null
@@ -1,184 +0,0 @@
-/*
- * Copyright (c) 1995, Index Data.
- *
- * Permission to use, copy, modify, distribute, and sell this software and
- * its documentation, in whole or in part, for any purpose, is hereby granted,
- * provided that:
- *
- * 1. This copyright and permission notice appear in all copies of the
- * software and its documentation. Notices of copyright or attribution
- * which appear at the beginning of any file must remain unchanged.
- *
- * 2. The name of Index Data or the individual authors may not be used to
- * endorse or promote products derived from this software without specific
- * prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED "AS IS" AND WITHOUT WARRANTY OF ANY KIND,
- * EXPRESS, IMPLIED, OR OTHERWISE, INCLUDING WITHOUT LIMITATION, ANY
- * WARRANTY OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.
- * IN NO EVENT SHALL INDEX DATA BE LIABLE FOR ANY SPECIAL, INCIDENTAL,
- * INDIRECT OR CONSEQUENTIAL DAMAGES OF ANY KIND, OR ANY DAMAGES
- * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER OR
- * NOT ADVISED OF THE POSSIBILITY OF DAMAGE, AND ON ANY THEORY OF
- * LIABILITY, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE
- * OF THIS SOFTWARE.
- *
- * $Log: prt-acc.h,v $
- * Revision 1.1  2000-10-03 12:55:50  adam
- * Removed several auto-generated files from CVS.
- *
- * Revision 1.1  1999/11/30 13:47:11  adam
- * Improved installation. Moved header files to include/yaz.
- *
- * Revision 1.9  1999/04/20 09:56:48  adam
- * Added 'name' paramter to encoder/decoder routines (typedef Odr_fun).
- * Modified all encoders/decoders to reflect this change.
- *
- * Revision 1.8  1997/09/01 08:49:51  adam
- * New windows NT/95 port using MSV5.0. To export DLL functions the
- * YAZ_EXPORT modifier was added. Defined in yconfig.h.
- *
- * Revision 1.7  1997/05/14 06:53:46  adam
- * C++ support.
- *
- * Revision 1.6  1996/01/02 08:57:35  quinn
- * Changed enums in the ASN.1 .h files to #defines. Changed oident.class to oclass
- *
- * Revision 1.5  1995/09/29  17:12:09  quinn
- * Smallish
- *
- * Revision 1.4  1995/09/27  15:02:49  quinn
- * Modified function heads & prototypes.
- *
- * Revision 1.3  1995/08/17  12:45:16  quinn
- * Fixed minor problems with GRS-1. Added support in c&s.
- *
- * Revision 1.2  1995/08/15  12:00:13  quinn
- * Updated External
- *
- * Revision 1.1  1995/06/02  09:49:49  quinn
- * Add access control
- *
- *
- */
-
-#ifndef PRT_ACC_H
-#define PRT_ACC_H
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-typedef struct Z_Encryption1
-{
-    Odr_oct *cryptType;       /* OPTIONAL */
-    Odr_oct *credential;      /* OPTIONAL */
-    Odr_oct *data;
-} Z_Encryption1;
-
-typedef struct Z_EnumeratedPrompt1
-{
-    int *type;
-#define Z_Prompt1_groupId        0
-#define Z_Prompt1_userId         1
-#define Z_Prompt1_password       2
-#define Z_Prompt1_newPassword    3
-#define Z_Prompt1_copyright      4
-    char *suggestedString;       /* OPTIONAL */
-} Z_EnumeratedPrompt1;
-
-typedef struct Z_PromptId1
-{
-    int which;
-#define Z_PromptId1_enumeratedPrompt 0
-#define Z_PromptId1_nonEnumeratedPrompt 1
-    union
-    {
-       Z_EnumeratedPrompt1 *enumeratedPrompt;
-       char *nonEnumeratedPrompt;
-    } u;
-} Z_PromptId1;
-
-typedef struct Z_PromptInfo1
-{
-    int which;
-#define Z_Challenge1_character 0
-#define Z_Challenge1_encrypted 1
-    union
-    {
-       char *character;
-       Z_Encryption1 *encrypted;
-    } u;
-} Z_PromptInfo1;
-
-typedef struct Z_ChallengeUnit1
-{
-    Z_PromptId1 *promptId;
-    char *defaultResponse;           /* OPTIONAL */
-    Z_PromptInfo1 *promptInfo;       /* OPTIONAL */
-    char *regExpr;                   /* OPTIONAL */
-    Odr_null *responseRequired;      /* OPTIONAL */
-    int num_values;
-    char **allowedValues;            /* OPTIONAL */
-    Odr_null *shouldSave;            /* OPTIONAL */
-    int *dataType;                   /* OPTIONAL */
-#define Z_ChalDataType_integer       1
-#define Z_ChalDataType_date          2
-#define Z_ChalDataType_float         3
-#define Z_ChalDataType_alphaNumeric  4
-#define Z_ChalDataType_urlUrn        5
-#define Z_ChalDataType_boolean       6
-    Z_External *diagnostic;        /* OPTIONAL */
-} Z_ChallengeUnit1;
-
-typedef struct Z_Challenge1
-{
-    int num_challenges;
-    Z_ChallengeUnit1 **list;
-} Z_Challenge1;
-
-typedef struct Z_ResponseUnit1
-{
-    Z_PromptId1 *promptId;
-    int which;
-#define Z_Response1_string 0
-#define Z_Response1_accept 1
-#define Z_Response1_acknowledge 2
-#define Z_Response1_diagnostic 3
-#define Z_Response1_encrypted 4
-    union
-    {
-       char *string;
-       bool_t *accept;
-       Odr_null *acknowledge;
-       Z_DiagRec *diagnostic;
-       Z_Encryption1 *encrypted;
-    } u;
-} Z_ResponseUnit1;
-
-typedef struct Z_Response1
-{
-    int num_responses;
-    Z_ResponseUnit1 **list;
-} Z_Response1;
-
-typedef struct Z_PromptObject1
-{
-    int which;
-#define Z_PromptObject1_challenge 0
-#define Z_PromptObject1_response 1
-    union
-    {
-       Z_Challenge1 *challenge;
-       Z_Response1 *response;
-    } u;
-} Z_PromptObject1;
-
-YAZ_EXPORT int z_PromptObject1(ODR o, Z_PromptObject1 **p, int opt,
-                              const char *name);
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif
diff --git a/asn/prt-add.c b/asn/prt-add.c
deleted file mode 100644 (file)
index dc18e3f..0000000
+++ /dev/null
@@ -1,142 +0,0 @@
-/*
- * Copyright (c) 1995-1999, Index Data
- * See the file LICENSE for details.
- * Sebastian Hammer, Adam Dickmeiss
- *
- * $Log: prt-add.c,v $
- * Revision 1.6  1999-11-30 13:47:11  adam
- * Improved installation. Moved header files to include/yaz.
- *
- * Revision 1.5  1999/04/20 09:56:47  adam
- * Added 'name' paramter to encoder/decoder routines (typedef Odr_fun).
- * Modified all encoders/decoders to reflect this change.
- *
- * Revision 1.4  1998/02/11 11:53:32  adam
- * Changed code so that it compiles as C++.
- *
- * Revision 1.3  1998/01/05 09:04:57  adam
- * Fixed bugs in encoders/decoders - Not operator (!) missing.
- *
- * Revision 1.2  1997/04/30 08:52:02  quinn
- * Null
- *
- * Revision 1.1  1996/10/10  11:52:18  quinn
- * Added SearchResult additionalInfo
- *
- *
- */
-
-#include <yaz/proto.h>
-
-int z_ResultsByDBList (ODR o, Z_ResultsByDBList **p, int opt, const char *name)
-{
-    if (!odr_initmember (o, p, sizeof(**p)))
-        return opt && odr_ok(o);
-    if (odr_sequence_of (o, z_DatabaseName, &(*p)->elements,
-        &(*p)->num, 0))
-        return 1;
-    *p = 0;
-    return opt && odr_ok(o);
-}
-
-int z_ResultsByDB_elem (ODR o, Z_ResultsByDB_elem **p, int opt,
-                       const char *name)
-{
-    static Odr_arm arm[] = {
-        {ODR_IMPLICIT, ODR_CONTEXT, 1, Z_ResultsByDB_all,
-        (Odr_fun)odr_null, 0},
-        {ODR_IMPLICIT, ODR_CONTEXT, 2, Z_ResultsByDB_list,
-        (Odr_fun)z_ResultsByDBList, 0},
-        {-1, -1, -1, -1, 0, 0}
-    };
-    if (!odr_sequence_begin (o, p, sizeof(**p), 0))
-        return opt && odr_ok (o);
-    return
-        odr_constructed_begin (o, &(*p)->u, ODR_CONTEXT, 1, 0) &&
-        odr_choice (o, arm, &(*p)->u, &(*p)->which, 0) &&
-        odr_constructed_end (o) &&
-        odr_implicit (o, odr_integer,
-                     &(*p)->count, ODR_CONTEXT, 2, 1) &&
-        odr_implicit (o, z_InternationalString,
-                     &(*p)->resultSetName, ODR_CONTEXT, 3, 1) &&
-        odr_sequence_end (o);
-}
-
-int z_ResultsByDB (ODR o, Z_ResultsByDB **p, int opt, const char *name)
-{
-    if (!odr_initmember (o, p, sizeof(**p)))
-        return opt && odr_ok(o);
-    if (odr_sequence_of (o, (Odr_fun)z_ResultsByDB_elem, &(*p)->elements,
-                        &(*p)->num, 0))
-        return 1;
-    *p = 0;
-    return opt && odr_ok(o);
-}
-
-int z_QueryExpressionTerm (ODR o, Z_QueryExpressionTerm **p, int opt,
-                          const char *name)
-{
-    if (!odr_sequence_begin (o, p, sizeof(**p), 0))
-        return opt && odr_ok (o);
-    return
-        odr_explicit (o, z_Term,
-                     &(*p)->queryTerm, ODR_CONTEXT, 1, 0) &&
-        odr_implicit (o, z_InternationalString,
-                     &(*p)->termComment, ODR_CONTEXT, 2, 1) &&
-        odr_sequence_end (o);
-}
-
-int z_QueryExpression (ODR o, Z_QueryExpression **p, int opt,
-                      const char *name)
-{
-    static Odr_arm arm[] = {
-        {ODR_IMPLICIT, ODR_CONTEXT, 1, Z_QueryExpression_term,
-         (Odr_fun)z_QueryExpressionTerm, 0},
-        {ODR_EXPLICIT, ODR_CONTEXT, 2, Z_QueryExpression_query,
-        (Odr_fun)z_Query, 0},
-        {-1, -1, -1, -1, 0, 0}
-    };
-    if (!odr_initmember(o, p, sizeof(**p)))
-        return opt && odr_ok(o);
-    if (odr_choice(o, arm, &(*p)->u, &(*p)->which, 0))
-        return 1;
-    *p = 0;
-    return opt && odr_ok(o);
-}
-
-int z_SearchInfoReport_elem (ODR o, Z_SearchInfoReport_elem **p, int opt,
-                            const char *name)
-{
-    if (!odr_sequence_begin (o, p, sizeof(**p), 0))
-        return opt && odr_ok (o);
-    return
-        odr_implicit (o, z_InternationalString,
-                     &(*p)->subqueryId, ODR_CONTEXT, 1, 1) &&
-        odr_implicit (o, odr_bool,
-                     &(*p)->fullQuery, ODR_CONTEXT, 2, 0) &&
-        odr_explicit (o, z_QueryExpression,
-                     &(*p)->subqueryExpression, ODR_CONTEXT, 3, 1) &&
-        odr_explicit (o, z_QueryExpression,
-                     &(*p)->subqueryInterpretation, ODR_CONTEXT, 4, 1) &&
-        odr_explicit (o, z_QueryExpression,
-                     &(*p)->subqueryRecommendation, ODR_CONTEXT, 5, 1) &&
-        odr_implicit (o, odr_integer,
-                     &(*p)->subqueryCount, ODR_CONTEXT, 6, 1) &&
-        odr_implicit (o, z_IntUnit,
-                     &(*p)->subqueryWeight, ODR_CONTEXT, 7, 1) &&
-        odr_implicit (o, z_ResultsByDB,
-                     &(*p)->resultsByDB, ODR_CONTEXT, 8, 1) &&
-        odr_sequence_end (o);
-}
-
-int z_SearchInfoReport (ODR o, Z_SearchInfoReport **p, int opt,
-                       const char *name)
-{
-    if (!odr_initmember (o, p, sizeof(**p)))
-        return opt && odr_ok(o);
-    if (odr_sequence_of (o, (Odr_fun)z_SearchInfoReport_elem, &(*p)->elements,
-                        &(*p)->num, 0))
-        return 1;
-    *p = 0;
-    return opt && odr_ok(o);
-}
diff --git a/asn/prt-add.h b/asn/prt-add.h
deleted file mode 100644 (file)
index e942d7b..0000000
+++ /dev/null
@@ -1,123 +0,0 @@
-/*
- * Copyright (c) 1995, Index Data.
- *
- * Permission to use, copy, modify, distribute, and sell this software and
- * its documentation, in whole or in part, for any purpose, is hereby granted,
- * provided that:
- *
- * 1. This copyright and permission notice appear in all copies of the
- * software and its documentation. Notices of copyright or attribution
- * which appear at the beginning of any file must remain unchanged.
- *
- * 2. The name of Index Data or the individual authors may not be used to
- * endorse or promote products derived from this software without specific
- * prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED "AS IS" AND WITHOUT WARRANTY OF ANY KIND,
- * EXPRESS, IMPLIED, OR OTHERWISE, INCLUDING WITHOUT LIMITATION, ANY
- * WARRANTY OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.
- * IN NO EVENT SHALL INDEX DATA BE LIABLE FOR ANY SPECIAL, INCIDENTAL,
- * INDIRECT OR CONSEQUENTIAL DAMAGES OF ANY KIND, OR ANY DAMAGES
- * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER OR
- * NOT ADVISED OF THE POSSIBILITY OF DAMAGE, AND ON ANY THEORY OF
- * LIABILITY, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE
- * OF THIS SOFTWARE.
- *
- * $Log: prt-add.h,v $
- * Revision 1.1  2000-10-03 12:55:50  adam
- * Removed several auto-generated files from CVS.
- *
- * Revision 1.1  1999/11/30 13:47:11  adam
- * Improved installation. Moved header files to include/yaz.
- *
- * Revision 1.4  1999/04/20 09:56:48  adam
- * Added 'name' paramter to encoder/decoder routines (typedef Odr_fun).
- * Modified all encoders/decoders to reflect this change.
- *
- * Revision 1.3  1997/05/14 06:53:46  adam
- * C++ support.
- *
- * Revision 1.2  1997/04/30 08:52:09  quinn
- * Null
- *
- * Revision 1.1  1996/10/10  11:51:58  quinn
- * Added SerchResult additional info
- *
- *
- */
-
-#ifndef PRT_ADD_H
-#define PRT_ADD_H
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-typedef struct Z_QueryExpressionTerm
-{
-    Z_Term *queryTerm;
-    char *termComment;              /* OPTIONAL */
-} Z_QueryExpressionTerm;
-
-typedef struct Z_QueryExpression
-{
-    int which;
-#define Z_QueryExpression_term 1
-#define Z_QueryExpression_query 2
-    union {
-       Z_QueryExpressionTerm *term;
-       Z_Query *query;
-    } u;
-} Z_QueryExpression;
-
-typedef struct Z_ResultsByDBList
-{
-    int num;
-    Z_DatabaseName **elements;
-} Z_ResultsByDBList;
-
-typedef struct Z_ResultsByDB_elem
-{
-    int which;
-#define Z_ResultsByDB_all 1
-#define Z_ResultsByDB_list 2
-    union {
-        Odr_null *all;
-        Z_ResultsByDBList *list;
-    } u;
-    int *count;                           /* OPTIONAL */
-    char *resultSetName; /* OPTIONAL */
-} Z_ResultsByDB_elem;
-
-typedef struct Z_ResultsByDB
-{
-    int num;
-    Z_ResultsByDB_elem **elements;
-} Z_ResultsByDB;
-
-typedef struct Z_SearchInfoReport_elem
-{
-    char *subqueryId;                          /* OPTIONAL */
-    bool_t *fullQuery;
-    Z_QueryExpression *subqueryExpression;     /* OPTIONAL */
-    Z_QueryExpression *subqueryInterpretation; /* OPTIONAL */
-    Z_QueryExpression *subqueryRecommendation; /* OPTIONAL */
-    int *subqueryCount;                        /* OPTIONAL */
-    Z_IntUnit *subqueryWeight;                 /* OPTIONAL */
-    Z_ResultsByDB *resultsByDB;                /* OPTIONAL */
-} Z_SearchInfoReport_elem;
-
-typedef struct Z_SearchInfoReport
-{
-    int num;
-    Z_SearchInfoReport_elem **elements;
-} Z_SearchInfoReport;
-
-int z_SearchInfoReport (ODR o, Z_SearchInfoReport **p, int opt,
-                       const char *name);
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif
diff --git a/asn/prt-arc.c b/asn/prt-arc.c
deleted file mode 100644 (file)
index a3974c7..0000000
+++ /dev/null
@@ -1,197 +0,0 @@
-/*
- * Copyright (c) 1995-1999, Index Data.
- * See the file LICENSE for details.
- * Sebastian Hammer, Adam Dickmeiss
- *
- * $Log: prt-arc.c,v $
- * Revision 1.4  1999-11-30 13:47:11  adam
- * Improved installation. Moved header files to include/yaz.
- *
- * Revision 1.3  1999/04/20 09:56:47  adam
- * Added 'name' paramter to encoder/decoder routines (typedef Odr_fun).
- * Modified all encoders/decoders to reflect this change.
- *
- * Revision 1.2  1998/02/11 11:53:32  adam
- * Changed code so that it compiles as C++.
- *
- * Revision 1.1  1996/06/10 08:55:20  quinn
- * Added Summary, OPAC
- *
- *
- */
-
-#include <yaz/proto.h>
-
-/* ----------------------- Summary Record --------------- */
-
-int z_FormatSpec(ODR o, Z_FormatSpec **p, int opt, const char *name)
-{
-    if (!odr_sequence_begin(o, p, sizeof(**p), 0))
-       return opt && odr_ok(o);
-    return
-        odr_implicit(o, z_InternationalString, &(*p)->type,
-                    ODR_CONTEXT, 1, 0) &&
-       odr_implicit(o, odr_integer, &(*p)->size, ODR_CONTEXT, 2, 1) &&
-       odr_implicit(o, odr_integer, &(*p)->bestPosn, ODR_CONTEXT, 3, 1) &&
-       odr_sequence_end(o);
-}
-
-int z_BriefBib(ODR o, Z_BriefBib **p, int opt, const char *name)
-{
-    if (!odr_sequence_begin(o, p, sizeof(**p), 0))
-       return opt && odr_ok(o);
-    return
-        odr_implicit(o, z_InternationalString, &(*p)->title,
-                    ODR_CONTEXT, 1, 0) &&
-       odr_implicit(o, z_InternationalString, &(*p)->author,
-                    ODR_CONTEXT, 2, 1) &&
-       odr_implicit(o, z_InternationalString, &(*p)->callNumber,
-                    ODR_CONTEXT, 3, 1) &&
-       odr_implicit(o, z_InternationalString, &(*p)->recordType,
-                    ODR_CONTEXT, 4, 1) &&
-       odr_implicit(o, z_InternationalString, &(*p)->bibliographicLevel,
-                    ODR_CONTEXT, 5, 1) &&
-       odr_implicit_settag(o, ODR_CONTEXT, 6) &&
-       (odr_sequence_of(o, (Odr_fun)z_FormatSpec, &(*p)->format,
-                        &(*p)->num_format, 0) ||
-        odr_ok(o)) &&
-       odr_implicit(o, z_InternationalString, &(*p)->publicationPlace,
-                    ODR_CONTEXT, 7, 1) &&
-       odr_implicit(o, z_InternationalString, &(*p)->publicationDate,
-                    ODR_CONTEXT, 8, 1) &&
-       odr_implicit(o, z_InternationalString, &(*p)->targetSystemKey,
-                    ODR_CONTEXT, 9, 1) &&
-       odr_implicit(o, z_InternationalString, &(*p)->satisfyingElement,
-                    ODR_CONTEXT, 10, 1) &&
-       odr_implicit(o, odr_integer, &(*p)->rank,
-                    ODR_CONTEXT, 11, 1) &&
-       odr_implicit(o, z_InternationalString, &(*p)->documentId,
-                    ODR_CONTEXT, 12, 1) &&
-       odr_implicit(o, z_InternationalString, &(*p)->abstract,
-                    ODR_CONTEXT, 13, 1) &&
-       z_OtherInformation(o, &(*p)->otherInfo, 1, 0) &&
-       odr_sequence_end(o);
-}
-
-/* ----------------------- Summary Record --------------- */
-
-int z_CircRecord(ODR o, Z_CircRecord **p, int opt, const char *name)
-{
-    if (!odr_sequence_begin(o, p, sizeof(**p), 0))
-       return opt && odr_ok(o);
-    return
-        odr_implicit(o, odr_bool, &(*p)->availableNow, ODR_CONTEXT, 1, 0) &&
-        odr_implicit(o, z_InternationalString, &(*p)->availabilityDate,
-                    ODR_CONTEXT, 2, 1) &&
-        odr_implicit(o, z_InternationalString, &(*p)->availableThru,
-                    ODR_CONTEXT, 3, 1) &&
-        odr_implicit(o, z_InternationalString, &(*p)->restrictions,
-                    ODR_CONTEXT, 4, 1) &&
-        odr_implicit(o, z_InternationalString, &(*p)->itemId,
-                    ODR_CONTEXT, 5, 1) &&
-       odr_implicit(o, odr_bool, &(*p)->renewable, ODR_CONTEXT, 6, 0) &&
-       odr_implicit(o, odr_bool, &(*p)->onHold, ODR_CONTEXT, 7, 0) &&
-        odr_implicit(o, z_InternationalString, &(*p)->enumAndChron,
-                    ODR_CONTEXT, 8, 1) &&
-        odr_implicit(o, z_InternationalString, &(*p)->midspine,
-                    ODR_CONTEXT, 9, 1) &&
-        odr_implicit(o, z_InternationalString, &(*p)->temporaryLocation,
-                    ODR_CONTEXT, 10, 1) &&
-       odr_sequence_end(o);
-}
-
-int z_Volume(ODR o, Z_Volume **p, int opt, const char *name)
-{
-    if (!odr_sequence_begin(o, p, sizeof(**p), 0))
-       return opt && odr_ok(o);
-    return
-        odr_implicit(o, z_InternationalString, &(*p)->enumeration,
-                    ODR_CONTEXT, 1, 1) &&
-        odr_implicit(o, z_InternationalString, &(*p)->chronology,
-                    ODR_CONTEXT, 2, 1) &&
-        odr_implicit(o, z_InternationalString, &(*p)->enumAndChron,
-                    ODR_CONTEXT, 3, 1) &&
-       odr_sequence_end(o);
-}
-
-int z_HoldingsAndCircData(ODR o, Z_HoldingsAndCircData **p, int opt,
-                         const char *name)
-{
-    if (!odr_sequence_begin(o, p, sizeof(**p), 0))
-       return opt && odr_ok(o);
-    return
-        odr_implicit(o, z_InternationalString, &(*p)->typeOfRecord,
-                    ODR_CONTEXT, 1, 1) &&
-        odr_implicit(o, z_InternationalString, &(*p)->encodingLevel,
-                    ODR_CONTEXT, 2, 1) &&
-        odr_implicit(o, z_InternationalString, &(*p)->format,
-                    ODR_CONTEXT, 3, 1) &&
-        odr_implicit(o, z_InternationalString, &(*p)->receiptAcqStatus,
-                    ODR_CONTEXT, 4, 1) &&
-        odr_implicit(o, z_InternationalString, &(*p)->generalRetention,
-                    ODR_CONTEXT, 5, 1) &&
-        odr_implicit(o, z_InternationalString, &(*p)->completeness,
-                    ODR_CONTEXT, 6, 1) &&
-        odr_implicit(o, z_InternationalString, &(*p)->dateOfReport,
-                    ODR_CONTEXT, 7, 1) &&
-        odr_implicit(o, z_InternationalString, &(*p)->nucCode,
-                    ODR_CONTEXT, 8, 1) &&
-        odr_implicit(o, z_InternationalString, &(*p)->localLocation,
-                    ODR_CONTEXT, 9, 1) &&
-        odr_implicit(o, z_InternationalString, &(*p)->shelvingLocation,
-                    ODR_CONTEXT, 10, 1) &&
-        odr_implicit(o, z_InternationalString, &(*p)->callNumber,
-                    ODR_CONTEXT, 11, 1) &&
-        odr_implicit(o, z_InternationalString, &(*p)->shelvingData,
-                    ODR_CONTEXT, 12, 1) &&
-        odr_implicit(o, z_InternationalString, &(*p)->copyNumber,
-                    ODR_CONTEXT, 13, 1) &&
-        odr_implicit(o, z_InternationalString, &(*p)->publicNote,
-                    ODR_CONTEXT, 14, 1) &&
-        odr_implicit(o, z_InternationalString, &(*p)->reproductionNote,
-                    ODR_CONTEXT, 15, 1) &&
-        odr_implicit(o, z_InternationalString, &(*p)->termsUseRepro,
-                    ODR_CONTEXT, 16, 1) &&
-        odr_implicit(o, z_InternationalString, &(*p)->enumAndChron,
-                    ODR_CONTEXT, 17, 1) &&
-       odr_implicit_settag(o, ODR_CONTEXT, 18) &&
-       (odr_sequence_of(o, (Odr_fun)z_Volume, &(*p)->volumes,
-                        &(*p)->num_volumes, 0) ||
-        odr_ok(o)) &&
-       odr_implicit_settag(o, ODR_CONTEXT, 19) &&
-       (odr_sequence_of(o, (Odr_fun)z_CircRecord, &(*p)->circulationData,
-                        &(*p)->num_circulationData, 0) || odr_ok(o)) &&
-       odr_sequence_end(o);
-}
-
-int z_HoldingsRecord(ODR o, Z_HoldingsRecord **p, int opt, const char *name)
-{
-    static Odr_arm arm[] =
-    {
-       {ODR_IMPLICIT, ODR_CONTEXT, 1, Z_HoldingsRecord_marcHoldingsRecord,
-        (Odr_fun)z_External, 0},
-       {ODR_IMPLICIT, ODR_CONTEXT, 2, Z_HoldingsRecord_holdingsAndCirc,
-        (Odr_fun)z_HoldingsAndCircData, 0},
-       {-1, -1, -1, -1, 0, 0}
-    };
-    
-    if (!odr_initmember(o, p, sizeof(**p)))
-       return opt && odr_ok(o);
-    if (odr_choice(o, arm, &(*p)->u, &(*p)->which, 0))
-       return 1;
-    *p = 0;
-    return opt && odr_ok(o);
-}
-
-int z_OPACRecord(ODR o, Z_OPACRecord **p, int opt, const char *name)
-{
-    if (!odr_sequence_begin(o, p, sizeof(**p), 0))
-       return opt && odr_ok(o);
-    return
-        odr_implicit(o, z_External, &(*p)->bibliographicRecord,
-                    ODR_CONTEXT, 1, 1) &&
-       odr_implicit_settag(o, ODR_CONTEXT, 2) &&
-       (odr_sequence_of(o, (Odr_fun)z_HoldingsRecord, &(*p)->holdingsData,
-                        &(*p)->num_holdingsData, 0) || odr_ok(o)) &&
-       odr_sequence_end(o);
-}
diff --git a/asn/prt-arc.h b/asn/prt-arc.h
deleted file mode 100644 (file)
index df159c7..0000000
+++ /dev/null
@@ -1,138 +0,0 @@
-/*
- * Copyright (c) 1995,1996 Index Data.
- *
- * Permission to use, copy, modify, distribute, and sell this software and
- * its documentation, in whole or in part, for any purpose, is hereby granted,
- * provided that:
- *
- * 1. This copyright and permission notice appear in all copies of the
- * software and its documentation. Notices of copyright or attribution
- * which appear at the beginning of any file must remain unchanged.
- *
- * 2. The names of Index Data or the individual authors may not be used to
- * endorse or promote products derived from this software without specific
- * prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED "AS IS" AND WITHOUT WARRANTY OF ANY KIND,
- * EXPRESS, IMPLIED, OR OTHERWISE, INCLUDING WITHOUT LIMITATION, ANY
- * WARRANTY OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.
- * IN NO EVENT SHALL INDEX DATA BE LIABLE FOR ANY SPECIAL, INCIDENTAL,
- * INDIRECT OR CONSEQUENTIAL DAMAGES OF ANY KIND, OR ANY DAMAGES
- * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER OR
- * NOT ADVISED OF THE POSSIBILITY OF DAMAGE, AND ON ANY THEORY OF
- * LIABILITY, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE
- * OF THIS SOFTWARE.
- *
- */
-
-#ifndef PRT_ARC_H
-#define PRT_ARC_H
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/* ------------------- Summary Record --------------------- */
-
-typedef struct Z_FormatSpec
-{
-    char *type;
-    int *size;                    /* OPTIONAL */
-    int *bestPosn;                /* OPTIONAL */
-} Z_FormatSpec;
-
-typedef struct Z_BriefBib
-{
-    char *title;
-    char *author;                  /* OPTIONAL */
-    char *callNumber;              /* OPTIONAL */
-    char *recordType;              /* OPTIONAL */
-    char *bibliographicLevel;      /* OPTIONAL */
-    int num_format;
-    Z_FormatSpec **format;         /* OPTIONAL */
-    char *publicationPlace;        /* OPTIONAL */
-    char *publicationDate;         /* OPTIONAL */
-    char *targetSystemKey;         /* OPTIONAL */
-    char *satisfyingElement;       /* OPTIONAL */
-    int *rank;                     /* OPTIONAL */
-    char *documentId;              /* OPTIONAL */
-    char *abstract;                /* OPTIONAL */
-    Z_OtherInformation *otherInfo; /* OPTIONAL */
-} Z_BriefBib;
-
-/* ------------------- OPAC Record --------------------- */
-
-typedef struct Z_CircRecord
-{
-    bool_t *availableNow;
-    char *availabilityDate;        /* OPTIONAL */
-    char *availableThru;           /* OPTIONAL */
-    char *restrictions;            /* OPTIONAL */
-    char *itemId;                  /* OPTIONAL */
-    bool_t *renewable;
-    bool_t *onHold;
-    char *enumAndChron;            /* OPTIONAL */
-    char *midspine;                /* OPTIONAL */
-    char *temporaryLocation;       /* OPTIONAL */
-} Z_CircRecord;
-
-typedef struct Z_Volume
-{
-    char *enumeration;             /* OPTIONAL */
-    char *chronology;              /* OPTIONAL */
-    char *enumAndChron;            /* OPTIONAL */
-} Z_Volume;
-
-typedef struct Z_HoldingsAndCircData
-{
-    char *typeOfRecord;            /* OPTIONAL */
-    char *encodingLevel;           /* OPTIONAL */
-    char *format;                  /* OPTIONAL */
-    char *receiptAcqStatus;        /* OPTIONAL */
-    char *generalRetention;        /* OPTIONAL */
-    char *completeness;            /* OPTIONAL */
-    char *dateOfReport;            /* OPTIONAL */
-    char *nucCode;                 /* OPTIONAL */
-    char *localLocation;           /* OPTIONAL */
-    char *shelvingLocation;        /* OPTIONAL */
-    char *callNumber;              /* OPTIONAL */
-    char *shelvingData;            /* OPTIONAL */
-    char *copyNumber;              /* OPTIONAL */
-    char *publicNote;              /* OPTIONAL */
-    char *reproductionNote;        /* OPTIONAL */
-    char *termsUseRepro;           /* OPTIONAL */
-    char *enumAndChron;            /* OPTIONAL */
-    int num_volumes;
-    Z_Volume **volumes;            /* OPTIONAL */
-    int num_circulationData;
-    Z_CircRecord **circulationData;/* OPTIONAL */
-} Z_HoldingsAndCircData;
-
-typedef struct Z_HoldingsRecord
-{
-    int which;
-#define Z_HoldingsRecord_marcHoldingsRecord    0
-#define Z_HoldingsRecord_holdingsAndCirc       1
-    union
-    {
-       Z_External *marcHoldingsRecord;
-       Z_HoldingsAndCircData *holdingsAndCirc;
-    } u;
-} Z_HoldingsRecord;
-
-typedef struct Z_OPACRecord
-{
-    Z_External *bibliographicRecord;   /* OPTIONAL */
-    int num_holdingsData;
-    Z_HoldingsRecord **holdingsData;   /* OPTIONAL */
-} Z_OPACRecord;
-
-YAZ_EXPORT int z_BriefBib(ODR o, Z_BriefBib **p, int opt, const char *name);
-YAZ_EXPORT int z_OPACRecord(ODR o, Z_OPACRecord **p, int opt,
-                           const char *name);
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif
diff --git a/asn/prt-dat.c b/asn/prt-dat.c
deleted file mode 100644 (file)
index c396b99..0000000
+++ /dev/null
@@ -1,190 +0,0 @@
-/*
- * This file is part of the YAZ toolkit:
- * Copyright (c) 1998-1999, Index Data.
- * See the file LICENSE for details.
- * Sebastian Hammer, Adam Dickmeiss
- *
- * Contribution by Ronald van Der Meer (RVDM):
- *  Databasix Information Systems B.V., Utrecht, The Netherlands.
- *
- * $Log: prt-dat.c,v $
- * Revision 1.4  1999-11-30 13:47:11  adam
- * Improved installation. Moved header files to include/yaz.
- *
- * Revision 1.3  1999/04/20 09:56:47  adam
- * Added 'name' paramter to encoder/decoder routines (typedef Odr_fun).
- * Modified all encoders/decoders to reflect this change.
- *
- * Revision 1.2  1998/02/11 11:53:32  adam
- * Changed code so that it compiles as C++.
- *
- * Revision 1.1  1998/02/10 15:31:46  adam
- * Implemented date and time structure. Changed the Update Extended
- * Service.
- *
- */
-
-#include <yaz/proto.h>
-
-int z_MonthAndDay(ODR o, Z_MonthAndDay **p, int opt, const char *name)
-{
-    if (!odr_sequence_begin(o, p, sizeof(**p), 0))
-       return opt && odr_ok(o);
-    return
-       odr_implicit(o, odr_integer, &(*p)->month, ODR_CONTEXT, 2, 0) &&
-       odr_implicit(o, odr_integer, &(*p)->day, ODR_CONTEXT, 3, 1) &&
-       odr_sequence_end(o);
-}
-
-int z_Quarter(ODR o, Z_Quarter **p, int opt, const char *name)
-{
-    static Odr_arm arm[] =
-    {
-       {ODR_IMPLICIT, ODR_CONTEXT, 1, Z_Quarter_first,
-        (Odr_fun)odr_null, 0},
-       {ODR_IMPLICIT, ODR_CONTEXT, 2, Z_Quarter_second,
-        (Odr_fun)odr_null, 0},
-       {ODR_IMPLICIT, ODR_CONTEXT, 3, Z_Quarter_third,
-        (Odr_fun)odr_null, 0},
-       {ODR_IMPLICIT, ODR_CONTEXT, 4, Z_Quarter_fourth,
-        (Odr_fun)odr_null, 0},
-       {-1, -1, -1, -1, 0, 0}
-    };
-    
-    if (!odr_initmember(o, p, sizeof(**p)))
-       return opt && odr_ok(o);
-    if (odr_choice(o, arm, &(*p)->u, &(*p)->which, 0))
-       return 1;
-    *p = 0;
-    return opt && odr_ok(o);
-}
-
-int z_Season(ODR o, Z_Season **p, int opt, const char *name)
-{
-    static Odr_arm arm[] =
-    {
-       {ODR_IMPLICIT, ODR_CONTEXT, 1, Z_Season_winter,
-        (Odr_fun)odr_null, 0},
-       {ODR_IMPLICIT, ODR_CONTEXT, 2, Z_Season_spring,
-        (Odr_fun)odr_null, 0},
-       {ODR_IMPLICIT, ODR_CONTEXT, 3, Z_Season_summer,
-        (Odr_fun)odr_null, 0},
-       {ODR_IMPLICIT, ODR_CONTEXT, 4, Z_Season_autumn,
-        (Odr_fun)odr_null, 0},
-       {-1, -1, -1, -1, 0, 0}
-    };
-
-    if (!odr_initmember(o, p, sizeof(**p)))
-       return opt && odr_ok(o);
-    if (odr_choice(o, arm, &(*p)->u, &(*p)->which, 0))
-       return 1;
-    *p = 0;
-    return opt && odr_ok(o);
-}
-
-int z_PartOfYear(ODR o, Z_PartOfYear **p, int opt, const char *name)
-{
-    static Odr_arm arm[] =
-    {
-       {ODR_IMPLICIT, ODR_CONTEXT, 1, Z_PartOfYear_monthAndDay,
-        (Odr_fun) z_MonthAndDay, 0},
-       {ODR_IMPLICIT, ODR_CONTEXT, 2, Z_PartOfYear_julianDay,
-        (Odr_fun) odr_integer, 0},
-       {ODR_IMPLICIT, ODR_CONTEXT, 3, Z_PartOfYear_weekNumber,
-        (Odr_fun) odr_integer, 0},
-       {ODR_IMPLICIT, ODR_CONTEXT, 4, Z_PartOfYear_quarter,
-        (Odr_fun) z_Quarter, 0},
-       {ODR_IMPLICIT, ODR_CONTEXT, 5, Z_PartOfYear_season,
-        (Odr_fun) z_Season, 0},
-       {-1, -1, -1, -1, 0, 0}
-    };
-    
-    if (!odr_initmember(o, p, sizeof(**p)))
-       return opt && odr_ok(o);
-    if (odr_choice(o, arm, &(*p)->u, &(*p)->which, 0))
-       return 1;
-    *p = 0;
-    return opt && odr_ok(o);
-}
-
-int z_Era(ODR o, Z_Era **p, int opt, const char *name)
-{
-    static Odr_arm arm[] =
-    {
-       {ODR_IMPLICIT, ODR_CONTEXT, 1, Z_Era_decade, (Odr_fun)odr_null, 0},
-       {ODR_IMPLICIT, ODR_CONTEXT, 2, Z_Era_century, (Odr_fun)odr_null, 0},
-       {ODR_IMPLICIT, ODR_CONTEXT, 3, Z_Era_millennium, (Odr_fun)odr_null, 0},
-       {-1, -1, -1, -1, 0, 0}
-    };
-    
-    if (!odr_initmember(o, p, sizeof(**p)))
-       return opt && odr_ok(o);
-    if (odr_choice(o, arm, &(*p)->u, &(*p)->which, 0))
-       return 1;
-    *p = 0;
-    return opt && odr_ok(o);
-}
-
-int z_DateFlags(ODR o, Z_DateFlags **p, int opt, const char *name)
-{
-    if (!odr_sequence_begin(o, p, sizeof(**p), 0))
-       return opt && odr_ok(o);
-    return
-       odr_implicit(o, odr_null, &(*p)->circa, ODR_CONTEXT, 1, 1) &&
-       odr_implicit(o, z_Era, &(*p)->era, ODR_CONTEXT, 2, 1) &&
-       odr_sequence_end(o);
-}
-
-int z_Date(ODR o, Z_Date **p, int opt, const char *name)
-{
-    if (!odr_sequence_begin(o, p, sizeof(**p), 0))
-       return opt && odr_ok(o);
-    return
-       odr_implicit(o, odr_integer, &(*p)->year, ODR_CONTEXT, 1, 0) &&
-       odr_implicit(o, z_PartOfYear, &(*p)->partOfYear, ODR_CONTEXT, 1, 1) &&
-       odr_implicit(o, z_DateFlags, &(*p)->flags, ODR_CONTEXT, 2, 1) &&
-       odr_sequence_end(o);
-}
-
-int z_Zone(ODR o, Z_Zone **p, int opt, const char *name)
-{
-    static Odr_arm arm[] =
-    {
-       {ODR_IMPLICIT, ODR_CONTEXT, 1, Z_Zone_local, (Odr_fun)odr_null, 0},
-       {ODR_IMPLICIT, ODR_CONTEXT, 2, Z_Zone_utc, (Odr_fun)odr_null, 0},
-       {ODR_IMPLICIT, ODR_CONTEXT, 3, Z_Zone_utcOffset,
-        (Odr_fun)odr_integer, 0},
-       {-1, -1, -1, -1, 0, 0}
-    };
-    
-    if (!odr_initmember(o, p, sizeof(**p)))
-       return opt && odr_ok(o);
-    if (odr_choice(o, arm, &(*p)->u, &(*p)->which, 0))
-       return 1;
-    *p = 0;
-    return opt && odr_ok(o);
-}
-
-int z_Time(ODR o, Z_Time **p, int opt, const char *name)
-{
-    if (!odr_sequence_begin(o, p, sizeof(**p), 0))
-       return opt && odr_ok(o);
-    return
-       odr_implicit(o, odr_integer, &(*p)->hour, ODR_CONTEXT, 1, 0) &&
-       odr_implicit(o, odr_integer, &(*p)->minute, ODR_CONTEXT, 2, 1) &&
-       odr_implicit(o, odr_integer, &(*p)->second, ODR_CONTEXT, 3, 1) &&
-       odr_implicit(o, z_IntUnit, &(*p)->partOfSecond, ODR_CONTEXT, 4, 1) &&
-       odr_implicit(o, z_Zone, &(*p)->zone, ODR_CONTEXT, 5, 1) &&
-       odr_sequence_end(o);
-}
-
-int z_DateTime(ODR o, Z_DateTime **p, int opt, const char *name)
-{
-    if (!odr_sequence_begin(o, p, sizeof(**p), 0))
-       return opt && odr_ok(o);
-    return
-       odr_implicit(o, z_Date, &(*p)->z3950Date, ODR_CONTEXT, 1, 1) &&
-       odr_implicit(o, z_Time, &(*p)->z3950Time, ODR_CONTEXT, 2, 1) &&
-       odr_sequence_end(o);
-}
-
diff --git a/asn/prt-dat.h b/asn/prt-dat.h
deleted file mode 100644 (file)
index 9e3d9b1..0000000
+++ /dev/null
@@ -1,154 +0,0 @@
-/*
- * This file is part of the YAZ toolkit:
- * Copyright (c) 1998, Index Data.
- * See the file LICENSE for details.
- * Sebastian Hammer, Adam Dickmeiss
- *
- * Contribution by Ronald van Der Meer (RVDM):
- *  Databasix Information Systems B.V., Utrecht, The Netherlands.
- *
- * $Log: prt-dat.h,v $
- * Revision 1.1  2000-10-03 12:55:50  adam
- * Removed several auto-generated files from CVS.
- *
- * Revision 1.1  1999/11/30 13:47:11  adam
- * Improved installation. Moved header files to include/yaz.
- *
- * Revision 1.2  1999/04/20 09:56:48  adam
- * Added 'name' paramter to encoder/decoder routines (typedef Odr_fun).
- * Modified all encoders/decoders to reflect this change.
- *
- * Revision 1.1  1998/02/10 15:31:52  adam
- * Implemented date and time structure. Changed the Update Extended
- * Service.
- *
- */
-
-#ifndef __PRT_DAT_H
-#define __PRT_DAT_H
-
-#include <yaz/yconfig.h>
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-typedef struct Z_MonthAndDay
-{
-    int *month;
-    int *day;                               /* OPTIONAL */
-} Z_MonthAndDay;
-
-typedef struct Z_Quarter
-{
-    int which;
-#define Z_Quarter_first                0
-#define Z_Quarter_second       1
-#define Z_Quarter_third                2
-#define Z_Quarter_fourth       3
-    union
-    {
-       Odr_null *first;
-       Odr_null *second;
-       Odr_null *third;
-       Odr_null *fourth;
-    } u;
-} Z_Quarter;
-
-typedef struct Z_Season
-{
-    int which;
-#define Z_Season_winter                0
-#define Z_Season_spring                1
-#define Z_Season_summer                2
-#define Z_Season_autumn                3
-    union
-    {
-       Odr_null *winter;
-       Odr_null *spring;
-       Odr_null *summer;
-       Odr_null *autumn;
-    } u;
-} Z_Season;
-
-typedef struct Z_PartOfYear
-{
-    int which;
-#define Z_PartOfYear_monthAndDay       0
-#define Z_PartOfYear_julianDay         1
-#define Z_PartOfYear_weekNumber                2
-#define Z_PartOfYear_quarter           3
-#define Z_PartOfYear_season            4
-    union
-    {
-       Z_MonthAndDay *monthAndDay;
-       int *julianDay; 
-       int *weekNumber; 
-       Z_Quarter *quarter;
-       Z_Season *season;
-    } u;
-} Z_PartOfYear;
-
-typedef struct Z_Era
-{
-    int which;
-#define Z_Era_decade           0
-#define Z_Era_century          1
-#define Z_Era_millennium       2
-    union
-    {
-       Odr_null *decade;
-       Odr_null *century;
-       Odr_null *millennium;
-    } u;
-} Z_Era;
-
-typedef struct Z_DateFlags
-{
-    Odr_null *circa;                        /* OPTIONAL */
-    Z_Era *era;                             /* OPTIONAL */
-} Z_DateFlags;
-
-typedef struct Z_Date
-{
-    int *year;
-    Z_PartOfYear *partOfYear;               /* OPTIONAL */
-    Z_DateFlags *flags;                     /* OPTIONAL */
-} Z_Date;
-
-typedef struct Z_Zone
-{
-    int which;
-#define Z_Zone_local           0
-#define Z_Zone_utc             1
-#define Z_Zone_utcOffset       2
-    union
-    {
-       Odr_null *local;
-       Odr_null *utc;
-       int *utcOffset;
-    } u;
-} Z_Zone;
-
-typedef struct Z_Time
-{
-    int *hour;
-    int *minute;                            /* OPTIONAL */
-    int *second;                            /* OPTIONAL */
-    Z_IntUnit *partOfSecond;                /* OPTIONAL */
-    Z_Zone *zone;                           /* OPTIONAL */
-} Z_Time;
-
-typedef struct Z_DateTime
-{
-    Z_Date *z3950Date;                      /* OPTIONAL */
-    Z_Time *z3950Time;                      /* OPTIONAL */
-} Z_DateTime;
-
-YAZ_EXPORT int z_DateTime(ODR o, Z_DateTime **p, int opt, const char *name);
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif
diff --git a/asn/prt-dia.c b/asn/prt-dia.c
deleted file mode 100644 (file)
index e8de2c9..0000000
+++ /dev/null
@@ -1,420 +0,0 @@
-/*
- * Copyright (c) 1995-1999, Index Data.
- * See the file LICENSE for details.
- * Sebastian Hammer, Adam Dickmeiss
- *
- * $Log: prt-dia.c,v $
- * Revision 1.7  1999-11-30 13:47:11  adam
- * Improved installation. Moved header files to include/yaz.
- *
- * Revision 1.6  1999/04/20 09:56:47  adam
- * Added 'name' paramter to encoder/decoder routines (typedef Odr_fun).
- * Modified all encoders/decoders to reflect this change.
- *
- * Revision 1.5  1998/02/11 11:53:32  adam
- * Changed code so that it compiles as C++.
- *
- * Revision 1.4  1996/01/22 09:46:34  quinn
- * Added Sort PDU. Moved StringList to main protocol file.
- *
- * Revision 1.3  1995/09/29  17:11:54  quinn
- * Smallish
- *
- * Revision 1.2  1995/09/27  15:02:41  quinn
- * Modified function heads & prototypes.
- *
- * Revision 1.1  1995/08/29  11:19:31  quinn
- * Added Diagnostic Format
- *
- *
- */
-
-#include <yaz/proto.h>
-
-int z_TooMany(ODR o, Z_TooMany **p, int opt, const char *name)
-{
-    if (!odr_sequence_begin(o, p, sizeof(**p), 0))
-       return opt && odr_ok(o);
-    return
-        odr_implicit(o, odr_integer, &(*p)->tooManyWhat, ODR_CONTEXT, 1, 0) &&
-       odr_implicit(o, odr_integer, &(*p)->max, ODR_CONTEXT, 2, 1) &&
-       odr_sequence_end(o);
-}
-
-int z_BadSpec(ODR o, Z_BadSpec **p, int opt, const char *name)
-{
-    if (!odr_sequence_begin(o, p, sizeof(**p), 0))
-       return opt && odr_ok(o);
-    return
-        odr_implicit(o, z_Specification, &(*p)->spec, ODR_CONTEXT, 1, 0) &&
-       odr_implicit(o, z_DatabaseName, &(*p)->db, ODR_CONTEXT, 2, 1) &&
-       odr_implicit_settag(o, ODR_CONTEXT, 3) &&
-       (odr_sequence_of(o, (Odr_fun)z_Specification, &(*p)->goodOnes,
-           &(*p)->num_goodOnes, 0) || odr_ok(o)) &&
-       odr_sequence_end(o);
-}
-
-int z_DbUnavailWhy(ODR o, Z_DbUnavailWhy **p, int opt, const char *name)
-{
-    if (!odr_sequence_begin(o, p, sizeof(**p), 0))
-       return opt && odr_ok(o);
-    return
-        odr_implicit(o, odr_integer, &(*p)->reasonCode, ODR_CONTEXT, 1, 1) &&
-       odr_implicit(o, z_InternationalString, &(*p)->message, ODR_CONTEXT,
-           2, 1) &&
-       odr_sequence_end(o);
-}
-
-int z_DbUnavail(ODR o, Z_DbUnavail **p, int opt, const char *name)
-{
-    if (!odr_sequence_begin(o, p, sizeof(**p), 0))
-       return opt && odr_ok(o);
-    return
-        odr_implicit(o, z_DatabaseName, &(*p)->db, ODR_CONTEXT, 1, 0) &&
-       odr_implicit(o, z_DbUnavailWhy, &(*p)->why, ODR_CONTEXT, 2, 0) &&
-       odr_sequence_end(o);
-}
-
-int z_Attribute(ODR o, Z_Attribute **p, int opt, const char *name)
-{
-    if (!odr_sequence_begin(o, p, sizeof(**p), 0))
-       return opt && odr_ok(o);
-    return
-        odr_implicit(o, odr_oid, &(*p)->id, ODR_CONTEXT, 1, 0) &&
-       odr_implicit(o, odr_integer, &(*p)->type, ODR_CONTEXT, 2, 1) &&
-       odr_implicit(o, odr_integer, &(*p)->value, ODR_CONTEXT, 3, 1) &&
-       odr_explicit(o, z_Term, &(*p)->term, ODR_CONTEXT, 4, 1) &&
-       odr_sequence_end(o);
-}
-
-int z_AttCombo(ODR o, Z_AttCombo **p, int opt, const char *name)
-{
-    if (!odr_sequence_begin(o, p, sizeof(**p), 0))
-       return opt && odr_ok(o);
-    return
-       odr_implicit(o, z_AttributeList, &(*p)->unsupportedCombination,
-           ODR_CONTEXT, 1, 0) &&
-       odr_implicit_settag(o, ODR_CONTEXT, 2) &&
-       (odr_sequence_of(o, (Odr_fun)z_AttributeList, &(*p)->alternatives,
-           &(*p)->num_alternatives, 0) || odr_ok(o)) &&
-       odr_sequence_end(o);
-}
-
-int z_DiagTerm(ODR o, Z_DiagTerm **p, int opt, const char *name)
-{
-    if (!odr_sequence_begin(o, p, sizeof(**p), 0))
-       return opt && odr_ok(o);
-    return
-       odr_implicit(o, odr_integer, &(*p)->problem, ODR_CONTEXT, 1, 1) &&
-       odr_explicit(o, z_Term, &(*p)->term, ODR_CONTEXT, 2, 0) &&
-       odr_sequence_end(o);
-}
-
-int z_Proximity(ODR o, Z_Proximity **p, int opt, const char *name)
-{
-    static Odr_arm arm[] =
-    {
-       {ODR_IMPLICIT, ODR_CONTEXT, 1, Z_Proximity_resultSets,
-        (Odr_fun)odr_null, 0},
-       {ODR_IMPLICIT, ODR_CONTEXT, 2, Z_Proximity_badSet,
-           (Odr_fun)z_InternationalString, 0},
-       {ODR_IMPLICIT, ODR_CONTEXT, 3, Z_Proximity_relation,
-        (Odr_fun)odr_integer, 0},
-       {ODR_IMPLICIT, ODR_CONTEXT, 4, Z_Proximity_unit,
-        (Odr_fun)odr_integer, 0},
-       {ODR_IMPLICIT, ODR_CONTEXT, 5, Z_Proximity_distance,
-        (Odr_fun)odr_integer, 0},
-       {ODR_EXPLICIT, ODR_CONTEXT, 6, Z_Proximity_attributes,
-        (Odr_fun)z_AttributeList, 0},
-       {ODR_IMPLICIT, ODR_CONTEXT, 7, Z_Proximity_ordered,
-        (Odr_fun)odr_null, 0},
-       {ODR_IMPLICIT, ODR_CONTEXT, 8, Z_Proximity_exclusion,
-        (Odr_fun)odr_null, 0},
-       {-1, -1, -1, -1, 0, 0}
-    };
-    
-    if (o->direction == ODR_DECODE)
-       *p = (Z_Proximity *)odr_malloc(o, sizeof(**p));
-    else if (!*p)
-       return opt;
-    if (odr_choice(o, arm, &(*p)->u, &(*p)->which, 0))
-       return 1;
-    *p = 0;
-    return opt && odr_ok(o);
-}
-
-int z_AttrListList(ODR o, Z_AttrListList **p, int opt, const char *name)
-{
-    if (o->direction == ODR_DECODE)
-       *p = (Z_AttrListList *)odr_malloc(o, sizeof(**p));
-    else if (!*p)
-       return opt;
-    if (odr_sequence_of(o, (Odr_fun)z_AttributeList, &(*p)->lists,
-                       &(*p)->num_lists, 0))
-       return 1;
-    *p = 0;
-    return opt && odr_ok(o);
-}
-
-int z_Scan(ODR o, Z_Scan **p, int opt, const char *name)
-{
-    static Odr_arm arm[] =
-    {
-       {ODR_IMPLICIT, ODR_CONTEXT, 0, Z_ScanD_nonZeroStepSize,
-        (Odr_fun)odr_null, 0},
-       {ODR_IMPLICIT, ODR_CONTEXT, 1, Z_ScanD_specifiedStepSize,
-        (Odr_fun)odr_null, 0},
-       {ODR_IMPLICIT, ODR_CONTEXT, 3, Z_ScanD_termList1,
-        (Odr_fun)odr_null, 0},
-       {ODR_IMPLICIT, ODR_CONTEXT, 4, Z_ScanD_termList2,
-        (Odr_fun)z_AttrListList, 0},
-       {ODR_IMPLICIT, ODR_CONTEXT, 5, Z_ScanD_posInResponse,
-        (Odr_fun)odr_integer, 0},
-       {ODR_IMPLICIT, ODR_CONTEXT, 6, Z_ScanD_resources,
-        (Odr_fun)odr_null, 0},
-       {ODR_IMPLICIT, ODR_CONTEXT, 7, Z_ScanD_endOfList,
-        (Odr_fun)odr_null, 0},
-       {-1, -1, -1, -1, 0, 0}
-    };
-    
-    if (o->direction == ODR_DECODE)
-       *p = (Z_Scan *)odr_malloc(o, sizeof(**p));
-    else if (!*p)
-       return opt;
-    if (odr_choice(o, arm, &(*p)->u, &(*p)->which, 0))
-       return 1;
-    *p = 0;
-    return opt && odr_ok(o);
-}
-
-int z_Sort(ODR o, Z_Sort **p, int opt, const char *name)
-{
-    static Odr_arm arm[] =
-    {
-       {ODR_IMPLICIT, ODR_CONTEXT, 0, Z_SortD_sequence,
-        (Odr_fun)odr_null, 0},
-       {ODR_IMPLICIT, ODR_CONTEXT, 1, Z_SortD_noRsName,
-        (Odr_fun)odr_null, 0},
-       {ODR_IMPLICIT, ODR_CONTEXT, 2, Z_SortD_tooMany,
-        (Odr_fun)odr_integer, 0},
-       {ODR_IMPLICIT, ODR_CONTEXT, 3, Z_SortD_incompatible,
-        (Odr_fun)odr_null, 0},
-       {ODR_IMPLICIT, ODR_CONTEXT, 4, Z_SortD_generic,
-        (Odr_fun)odr_null, 0},
-       {ODR_IMPLICIT, ODR_CONTEXT, 5, Z_SortD_dbSpecific,
-        (Odr_fun)odr_null, 0},
-#if 0
-       {ODR_EXPLICIT, ODR_CONTEXT, 6, Z_SortD_sortElement,
-        (Odr_fun)z_SortElement, 0},
-#endif
-       {ODR_IMPLICIT, ODR_CONTEXT, 7, Z_SortD_key,
-        (Odr_fun)odr_integer, 0},
-       {ODR_IMPLICIT, ODR_CONTEXT, 8, Z_SortD_action,
-        (Odr_fun)odr_null, 0},
-       {ODR_IMPLICIT, ODR_CONTEXT, 9, Z_SortD_illegal,
-        (Odr_fun)odr_integer, 0},
-       {ODR_IMPLICIT, ODR_CONTEXT, 10, Z_SortD_inputTooLarge,
-        (Odr_fun)z_StringList, 0},
-       {ODR_IMPLICIT, ODR_CONTEXT, 11, Z_SortD_aggregateTooLarge,
-        (Odr_fun)odr_null, 0},
-       {-1, -1, -1, -1, 0, 0}
-    };
-
-    if (o->direction == ODR_DECODE)
-       *p = (Z_Sort *)odr_malloc(o, sizeof(**p));
-    else if (!*p)
-       return opt;
-    if (odr_choice(o, arm, &(*p)->u, &(*p)->which, 0))
-       return 1;
-    *p = 0;
-    return opt && odr_ok(o);
-}
-
-int z_Segmentation(ODR o, Z_Segmentation **p, int opt, const char *name)
-{
-    static Odr_arm arm[] =
-    {
-       {ODR_IMPLICIT, ODR_CONTEXT, 0, Z_SegmentationD_segments,
-        (Odr_fun)odr_null, 0},
-       {-1, -1, -1, -1, 0, 0}
-    };
-
-    if (o->direction == ODR_DECODE)
-       *p = (Z_Segmentation *)odr_malloc(o, sizeof(**p));
-    else if (!*p)
-       return opt;
-    if (odr_choice(o, arm, &(*p)->u, &(*p)->which, 0))
-       return 1;
-    *p = 0;
-    return opt && odr_ok(o);
-}
-
-int z_ExtServices(ODR o, Z_ExtServices **p, int opt, const char *name)
-{
-    static Odr_arm arm[] =
-    {
-       {ODR_IMPLICIT, ODR_CONTEXT, 0, Z_ExtServicesD_req,
-        (Odr_fun)odr_integer, 0},
-       {ODR_IMPLICIT, ODR_CONTEXT, 1, Z_ExtServicesD_permission,
-        (Odr_fun)odr_integer, 0},
-       {ODR_IMPLICIT, ODR_CONTEXT, 2, Z_ExtServicesD_immediate,
-        (Odr_fun)odr_integer, 0},
-       {-1, -1, -1, -1, 0, 0}
-    };
-    
-    if (o->direction == ODR_DECODE)
-       *p = (Z_ExtServices *)odr_malloc(o, sizeof(**p));
-    else if (!*p)
-       return opt;
-    if (odr_choice(o, arm, &(*p)->u, &(*p)->which, 0))
-       return 1;
-    *p = 0;
-    return opt && odr_ok(o);
-}
-
-int z_OidList(ODR o, Z_OidList **p, int opt, const char *name)
-{
-    if (o->direction == ODR_DECODE)
-       *p = (Z_OidList *)odr_malloc(o, sizeof(**p));
-    else if (!*p)
-       return opt;
-    if (odr_sequence_of(o, (Odr_fun)odr_oid, &(*p)->oids, &(*p)->num_oids, 0))
-       return 1;
-    *p = 0;
-    return opt && odr_ok(o);
-}
-
-int z_AccessCtrl(ODR o, Z_AccessCtrl **p, int opt, const char *name)
-{
-    static Odr_arm arm[] =
-    {
-       {ODR_IMPLICIT, ODR_CONTEXT, 1, Z_AccessCtrlD_noUser,
-        (Odr_fun)odr_null, 0},
-       {ODR_IMPLICIT, ODR_CONTEXT, 2, Z_AccessCtrlD_refused,
-        (Odr_fun)odr_null, 0},
-       {ODR_IMPLICIT, ODR_CONTEXT, 3, Z_AccessCtrlD_simple,
-        (Odr_fun)odr_null, 0},
-       {ODR_IMPLICIT, ODR_CONTEXT, 4, Z_AccessCtrlD_oid,
-        (Odr_fun)z_OidList, 0},
-       {ODR_IMPLICIT, ODR_CONTEXT, 5, Z_AccessCtrlD_alternative,
-        (Odr_fun)z_OidList, 0},
-       {ODR_IMPLICIT, ODR_CONTEXT, 6, Z_AccessCtrlD_pwdInv,
-        (Odr_fun)odr_null, 0},
-       {ODR_IMPLICIT, ODR_CONTEXT, 7, Z_AccessCtrlD_pwdExp,
-        (Odr_fun)odr_null, 0},
-       {-1, -1, -1, -1, 0, 0}
-    };
-
-    if (o->direction == ODR_DECODE)
-       *p = (Z_AccessCtrl *)odr_malloc(o, sizeof(**p));
-    else if (!*p)
-       return opt;
-    if (odr_choice(o, arm, &(*p)->u, &(*p)->which, 0))
-       return 1;
-    *p = 0;
-    return opt && odr_ok(o);
-}
-
-int z_RecordSyntax(ODR o, Z_RecordSyntax **p, int opt, const char *name)
-{
-    if (!odr_sequence_begin(o, p, sizeof(**p), 0))
-       return opt && odr_ok(o);
-    return
-       odr_implicit(o, odr_oid, &(*p)->unsupportedSyntax,
-                    ODR_CONTEXT, 1, 0) &&
-       odr_implicit_settag(o, ODR_CONTEXT, 2) &&
-       (odr_sequence_of(o, (Odr_fun)odr_oid, &(*p)->suggestedAlternatives,
-                        &(*p)->num_suggestedAlternatives, 0) || odr_ok(o)) &&
-       odr_sequence_end(o);
-}
-
-int z_DiagFormat(ODR o, Z_DiagFormat **p, int opt, const char *name)
-{
-    static Odr_arm arm[] =
-    {
-       {ODR_IMPLICIT, ODR_CONTEXT, 1000, Z_DiagFormat_tooMany,
-        (Odr_fun)z_TooMany, 0},
-       {ODR_IMPLICIT, ODR_CONTEXT, 1001, Z_DiagFormat_badSpec,
-        (Odr_fun)z_BadSpec, 0},
-       {ODR_IMPLICIT, ODR_CONTEXT, 1002, Z_DiagFormat_dbUnavail,
-        (Odr_fun)z_DbUnavail, 0},
-       {ODR_IMPLICIT, ODR_CONTEXT, 1003, Z_DiagFormat_unSupOp,
-        (Odr_fun)odr_integer, 0},
-       {ODR_IMPLICIT, ODR_CONTEXT, 1004, Z_DiagFormat_attribute,
-        (Odr_fun)z_Attribute, 0},
-       {ODR_IMPLICIT, ODR_CONTEXT, 1005, Z_DiagFormat_attCombo,
-        (Odr_fun)z_AttCombo, 0},
-       {ODR_IMPLICIT, ODR_CONTEXT, 1006, Z_DiagFormat_term,
-        (Odr_fun)z_DiagTerm, 0},
-       {ODR_EXPLICIT, ODR_CONTEXT, 1007, Z_DiagFormat_proximity,
-        (Odr_fun)z_Proximity, 0},
-       {ODR_EXPLICIT, ODR_CONTEXT, 1008, Z_DiagFormat_scan,
-        (Odr_fun)z_Scan, 0},
-       {ODR_EXPLICIT, ODR_CONTEXT, 1009, Z_DiagFormat_sort,
-        (Odr_fun)z_Sort, 0},
-       {ODR_EXPLICIT, ODR_CONTEXT, 1010, Z_DiagFormat_segmentation,
-        (Odr_fun)z_Segmentation, 0},
-       {ODR_EXPLICIT, ODR_CONTEXT, 1011, Z_DiagFormat_extServices,
-        (Odr_fun)z_ExtServices, 0},
-       {ODR_EXPLICIT, ODR_CONTEXT, 1012, Z_DiagFormat_accessCtrl,
-        (Odr_fun)z_AccessCtrl, 0},
-       {ODR_IMPLICIT, ODR_CONTEXT, 1013, Z_DiagFormat_recordSyntax,
-        (Odr_fun)z_RecordSyntax, 0},
-       {-1, -1, -1, -1, 0, 0}
-    };
-
-    if (o->direction == ODR_DECODE)
-       *p = (Z_DiagFormat *)odr_malloc(o, sizeof(**p));
-    else if (!*p)
-       return opt;
-    if (odr_choice(o, arm, &(*p)->u, &(*p)->which, 0))
-       return 1;
-    *p = 0;
-    return opt && odr_ok(o);
-}
-
-int z_Diagnostic(ODR o, Z_Diagnostic **p, int opt, const char *name)
-{
-    static Odr_arm arm[] =
-    {
-       {ODR_IMPLICIT, ODR_CONTEXT, 1, Z_Diagnostic_defaultDiagRec,
-        (Odr_fun)z_DefaultDiagFormat, 0},
-       {ODR_EXPLICIT, ODR_CONTEXT, 2, Z_Diagnostic_explicitDiagnostic,
-        (Odr_fun)z_DiagFormat, 0},
-       {-1, -1, -1, -1, 0, 0}
-    };
-    
-    if (o->direction == ODR_DECODE)
-       *p = (Z_Diagnostic *)odr_malloc(o, sizeof(**p));
-    else if (!*p)
-       return opt;
-    if (odr_choice(o, arm, &(*p)->u, &(*p)->which, 0))
-       return 1;
-    *p = 0;
-    return opt && odr_ok(o);
-}
-
-int z_DiagnosticUnit(ODR o, Z_DiagnosticUnit **p, int opt, const char *name)
-{
-    if (!odr_sequence_begin(o, p, sizeof(**p), 0))
-       return opt && odr_ok(o);
-    return
-       odr_explicit(o, z_Diagnostic, &(*p)->diagnostic, ODR_CONTEXT, 1, 1) &&
-       odr_implicit(o, z_InternationalString, &(*p)->message,
-                    ODR_CONTEXT, 2, 1) &&
-       odr_sequence_end(o);
-}
-
-int z_DiagnosticFormat(ODR o, Z_DiagnosticFormat **p, int opt,
-                      const char *name)
-{
-    if (o->direction == ODR_DECODE)
-       *p = (Z_DiagnosticFormat *)odr_malloc(o, sizeof(**p));
-    else if (!*p)
-       return opt;
-    if (odr_sequence_of(o, (Odr_fun)z_DiagnosticUnit, &(*p)->diagnostics,
-       &(*p)->num_diagnostics, 0))
-       return 1;
-    *p = 0;
-    return opt && odr_ok(o);
-}
diff --git a/asn/prt-dia.h b/asn/prt-dia.h
deleted file mode 100644 (file)
index 88dc8a0..0000000
+++ /dev/null
@@ -1,333 +0,0 @@
-/*
- * Copyright (c) 1995-1998, Index Data.
- *
- * Permission to use, copy, modify, distribute, and sell this software and
- * its documentation, in whole or in part, for any purpose, is hereby granted,
- * provided that:
- *
- * 1. This copyright and permission notice appear in all copies of the
- * software and its documentation. Notices of copyright or attribution
- * which appear at the beginning of any file must remain unchanged.
- *
- * 2. The names of Index Data or the individual authors may not be used to
- * endorse or promote products derived from this software without specific
- * prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED "AS IS" AND WITHOUT WARRANTY OF ANY KIND,
- * EXPRESS, IMPLIED, OR OTHERWISE, INCLUDING WITHOUT LIMITATION, ANY
- * WARRANTY OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.
- * IN NO EVENT SHALL INDEX DATA BE LIABLE FOR ANY SPECIAL, INCIDENTAL,
- * INDIRECT OR CONSEQUENTIAL DAMAGES OF ANY KIND, OR ANY DAMAGES
- * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER OR
- * NOT ADVISED OF THE POSSIBILITY OF DAMAGE, AND ON ANY THEORY OF
- * LIABILITY, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE
- * OF THIS SOFTWARE.
- *
- */
-
-#ifndef PRT_DIA_H
-#define PRT_DIA_H
-
-#include <yaz/yconfig.h>
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-typedef struct Z_TooMany
-{
-    int *tooManyWhat;
-#define Z_TooMany_argumentWords        1
-#define Z_TooMany_truncatedWords       2
-#define Z_TooMany_booleanOperators     3
-#define Z_TooMany_incompleteSubfields  4
-#define Z_TooMany_characters           5
-#define Z_TooMany_recordsRetrieved     6
-#define Z_TooMany_databasesSpecified   7
-#define Z_TooMany_resultSetsCreated    8
-#define Z_TooMany_indexTermsProcessed  9
-    int *max;                    /* OPTIONAL */
-} Z_TooMany;
-
-typedef struct Z_BadSpec
-{
-    Z_Specification *spec;
-    char *db;                    /* OPTIONAL */
-    int num_goodOnes;
-    Z_Specification **goodOnes;  /* OPTIONAL */
-} Z_BadSpec;
-
-typedef struct Z_DbUnavailWhy
-{
-    int *reasonCode;             /* OPTIONAL */
-#define Z_DbUnavail_doesNotExist         0
-#define Z_DbUnavail_existsButUnavail     1
-#define Z_DbUnavail_locked               2
-#define Z_DbUnavail_accessDenied         3
-    char *message;               /* OPTIONAL */
-} Z_DbUnavailWhy;
-
-typedef struct Z_DbUnavail
-{
-    char *db;
-    Z_DbUnavailWhy *why;         /* OPTIONAL */
-} Z_DbUnavail;
-
-typedef struct Z_Attribute
-{
-    Odr_oid *id;
-    int *type;                   /* OPTIONAL */
-    int *value;                  /* OPTIONAL */
-    Z_Term *term;                /* OPTIONAL */
-} Z_Attribute;
-
-typedef struct Z_AttCombo
-{
-    Z_AttributeList *unsupportedCombination;
-    int num_alternatives;
-    Z_AttributeList **alternatives;    /* OPTIONAL */
-} Z_AttCombo;
-
-typedef struct Z_DiagTerm 
-{
-    int *problem;                /* OPTIONAL */
-#define Z_DiagtermProb_codedValue     1
-#define Z_DiagtermProb_unparsable     2
-#define Z_DiagtermProb_tooShort       3
-#define Z_DiagtermProb_type           4
-    Z_Term *term;
-} Z_DiagTerm;
-
-typedef struct Z_Proximity
-{
-    int which;
-#define Z_Proximity_resultSets 0
-#define Z_Proximity_badSet 1
-#define Z_Proximity_relation 2
-#define Z_Proximity_unit 3
-#define Z_Proximity_distance 4
-#define Z_Proximity_attributes 5
-#define Z_Proximity_ordered 6
-#define Z_Proximity_exclusion 7
-    union
-    {
-       Odr_null *resultSets;
-       char *badSet;
-       int *relation;
-       int *unit;
-       int *distance;
-       Z_AttributeList *attributes;
-       Odr_null *ordered;
-       Odr_null *exclusion;
-    } u;
-} Z_Proximity;
-
-typedef struct Z_AttrListList
-{
-    int num_lists;
-    Z_AttributeList *lists;
-} Z_AttrListList;
-
-typedef struct Z_Scan
-{
-    int which;
-#define Z_ScanD_nonZeroStepSize 0
-#define Z_ScanD_specifiedStepSize 1
-#define Z_ScanD_termList1 2
-#define Z_ScanD_termList2 3
-#define Z_ScanD_posInResponse 4
-#define Z_ScanD_resources 5
-#define Z_ScanD_endOfList 6
-    union
-    {
-       Odr_null *nonZeroStepSize;
-       Odr_null *specifiedStepSize;
-       Odr_null *termList1;
-       Z_AttrListList *termList2;
-       int *posInResponse;
-#define Z_ScanPosInRsp_mustBeOne         1
-#define Z_ScanPosInRsp_mustBePositive    2
-#define Z_ScanPosInRsp_mustBeNonNegative 3
-#define Z_ScanPosInRsp_other             4
-       Odr_null *resources;
-       Odr_null *endOfList;
-    } u;
-} Z_Scan;
-
-typedef struct Z_Sort
-{
-    int which;
-#define Z_SortD_sequence 0
-#define Z_SortD_noRsName 1
-#define Z_SortD_tooMany 2
-#define Z_SortD_incompatible 3
-#define Z_SortD_generic 4
-#define Z_SortD_dbSpecific 5
-#define Z_SortD_sortElement 6
-#define Z_SortD_key 7
-#define Z_SortD_action 8
-#define Z_SortD_illegal 9
-#define Z_SortD_inputTooLarge 10
-#define Z_SortD_aggregateTooLarge 11
-    union
-    {
-       Odr_null *sequence;
-       Odr_null *noRsName;
-       int *tooMany;
-       Odr_null *incompatible;
-       Odr_null *generic;
-       Odr_null *dbSpecific;
-       int *key;
-#define Z_SortKey_tooMany       1
-#define Z_SortKey_duplicate     2
-       Odr_null *action;
-       int *illegal;
-#define Z_SortIllegal_relation  1
-#define Z_SortIllegal_case      2
-#define Z_SortIllegal_action    3
-#define Z_SortIllegal_sort      4
-       Z_StringList *inputTooLarge;
-       Odr_null *aggregateTooLarge;
-    } u;
-} Z_Sort;
-
-typedef struct Z_Segmentation
-{
-    int which;
-#define Z_SegmentationD_segments 0
-    union
-    {
-       Odr_null *segments;
-    } u;
-} Z_Segmentation;
-
-typedef struct Z_ExtServices
-{
-    int which;
-#define Z_ExtServicesD_req 0
-#define Z_ExtServicesD_permission 1
-#define Z_ExtServicesD_immediate 2
-    union
-    {
-       int *req;
-#define Z_ExtSrvReq_nameInUse           1
-#define Z_ExtSrvReq_noSuchname          2
-#define Z_ExtSrvReq_quota               3
-#define Z_ExtSrvReq_type                4
-       int *permission;
-#define Z_ExtSrvPerm_id                 1
-#define Z_ExtSrvPerm_modifyDelete       2
-       int *immediate;
-#define Z_ExtSrvImm_failed              1
-#define Z_ExtSrvImm_service             2
-#define Z_ExtSrvImm_parameters          3
-    } u;
-} Z_ExtServices;
-
-typedef struct Z_OidList
-{
-    int num_oids;
-    Odr_oid **oids;
-} Z_OidList;
-
-typedef struct Z_AccessCtrl
-{
-    int which;
-#define Z_AccessCtrlD_noUser 0
-#define Z_AccessCtrlD_refused 1
-#define Z_AccessCtrlD_simple 2
-#define Z_AccessCtrlD_oid 3
-#define Z_AccessCtrlD_alternative 4
-#define Z_AccessCtrlD_pwdInv 5
-#define Z_AccessCtrlD_pwdExp 6
-    union
-    {
-       Odr_null *noUser;
-       Odr_null *refused;
-       Odr_null *simple;
-       Z_OidList *oid;
-       Z_OidList *alternative;
-       Odr_null *pwdInv;
-       Odr_null *pwdExp;
-    } u;
-} Z_AccessCtrl;
-
-typedef struct Z_RecordSyntax
-{
-    Odr_oid *unsupportedSyntax;
-    int num_suggestedAlternatives;           /* OPTIONAL */
-    Odr_oid **suggestedAlternatives;           /* OPTIONAL */
-} Z_RecordSyntax;
-
-typedef struct Z_DiagFormat
-{
-    int which;
-#define Z_DiagFormat_tooMany 0
-#define Z_DiagFormat_badSpec 1
-#define Z_DiagFormat_dbUnavail 2
-#define Z_DiagFormat_unSupOp 3
-#define Z_DiagFormat_attribute 4
-#define Z_DiagFormat_attCombo 5
-#define Z_DiagFormat_term 6
-#define Z_DiagFormat_proximity 7
-#define Z_DiagFormat_scan 8
-#define Z_DiagFormat_sort 9
-#define Z_DiagFormat_segmentation 10
-#define Z_DiagFormat_extServices 11
-#define Z_DiagFormat_accessCtrl 12
-#define Z_DiagFormat_recordSyntax 13
-    union
-    {
-       Z_TooMany *tooMany;
-       Z_BadSpec *badSpec;
-       Z_DbUnavail *dbUnavail;
-       int *unSupOp;
-#define Z_UnSupOp_and             0
-#define Z_UnSupOp_or              1
-#define Z_UnSupOp_and_not         2
-#define Z_UnSupOp_prox            3
-       Z_Attribute *attribute;
-       Z_AttributeList *attCombo;
-       Z_DiagTerm *term;
-       Z_Proximity *proximity;
-       Z_Scan *scan;
-       Z_Sort *sort;
-       Z_Segmentation *segmentation;
-       Z_ExtServices *extServices;
-       Z_AccessCtrl *accessCtrl;
-       Z_RecordSyntax *recordSyntax;
-    } u;
-} Z_DiagFormat;
-
-typedef struct Z_Diagnostic
-{
-    int which;
-#define Z_Diagnostic_defaultDiagRec 0
-#define Z_Diagnostic_explicitDiagnostic 1
-    union 
-    {
-       Z_DefaultDiagFormat *defaultDiagRec;
-       Z_DiagFormat *explicitDiagnostic;
-    } u;
-} Z_Diagnostic;
-
-typedef struct Z_DiagnosticUnit
-{
-    Z_Diagnostic *diagnostic;                    /* OPTIONAL */
-    char *message;                               /* OPTIONAL */
-} Z_DiagnosticUnit;
-
-typedef struct Z_DiagnosticFormat
-{
-    int num_diagnostics;
-    Z_DiagnosticUnit **diagnostics;
-} Z_DiagnosticFormat;
-
-YAZ_EXPORT int z_DiagnosticFormat(ODR o, Z_DiagnosticFormat **p, int opt,
-                                 const char *name);
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif
diff --git a/asn/prt-esp.c b/asn/prt-esp.c
deleted file mode 100644 (file)
index f731a80..0000000
+++ /dev/null
@@ -1,211 +0,0 @@
-/*
- * Copyright (c) 1995-1999, Index Data.
- * See the file LICENSE for details.
- * Sebastian Hammer, Adam Dickmeiss
- *
- * $Log: prt-esp.c,v $
- * Revision 1.5  1999-11-30 13:47:11  adam
- * Improved installation. Moved header files to include/yaz.
- *
- * Revision 1.4  1999/04/20 09:56:47  adam
- * Added 'name' paramter to encoder/decoder routines (typedef Odr_fun).
- * Modified all encoders/decoders to reflect this change.
- *
- * Revision 1.3  1998/02/11 11:53:32  adam
- * Changed code so that it compiles as C++.
- *
- * Revision 1.2  1998/02/10 15:31:46  adam
- * Implemented date and time structure. Changed the Update Extended
- * Service.
- *
- * Revision 1.1  1995/10/12 10:34:37  quinn
- * Added Espec-1.
- *
- *
- */
-
-#include <yaz/proto.h>
-
-int z_OccurValues(ODR o, Z_OccurValues **p, int opt, const char *name)
-{
-    if (!odr_sequence_begin(o, p, sizeof(**p), 0))
-       return opt && odr_ok(o);
-    return
-       odr_implicit(o, odr_integer, &(*p)->start, ODR_CONTEXT, 1, 0) &&
-       odr_implicit(o, odr_integer, &(*p)->howMany, ODR_CONTEXT, 2, 1) &&
-       odr_sequence_end(o);
-}
-
-int z_Occurrences(ODR o, Z_Occurrences **p, int opt, const char *name)
-{
-    static Odr_arm arm[] =
-    {
-       {ODR_IMPLICIT, ODR_CONTEXT, 1, Z_Occurrences_all,
-        (Odr_fun)odr_null, 0},
-       {ODR_IMPLICIT, ODR_CONTEXT, 2, Z_Occurrences_last,
-        (Odr_fun)odr_null, 0},
-       {ODR_IMPLICIT, ODR_CONTEXT, 3, Z_Occurrences_values,
-        (Odr_fun)z_OccurValues, 0},
-       {-1, -1, -1, -1, 0, 0}
-    };
-    
-    if (o->direction == ODR_DECODE)
-       *p = (Z_Occurrences *)odr_malloc(o, sizeof(**p));
-    else if (!*p)
-       return opt;
-    if (odr_choice(o, arm, &(*p)->u, &(*p)->which, 0))
-       return 1;
-    *p = 0;
-    return opt && odr_ok(o);
-}
-
-int z_SpecificTag(ODR o, Z_SpecificTag **p, int opt, const char *name)
-{
-    if (!odr_sequence_begin(o, p, sizeof(**p), 0))
-       return opt && odr_ok(o);
-    return
-        odr_implicit(o, odr_oid, &(*p)->schemaId, ODR_CONTEXT, 0, 1) &&
-        odr_implicit(o, odr_integer, &(*p)->tagType, ODR_CONTEXT, 1, 1) &&
-       odr_explicit(o, z_StringOrNumeric, &(*p)->tagValue, ODR_CONTEXT,
-                    2, 0) &&
-       odr_explicit(o, z_Occurrences, &(*p)->occurrences,
-                    ODR_CONTEXT, 3, 1) &&
-       odr_sequence_end(o);
-}
-
-int z_ETagUnit(ODR o, Z_ETagUnit **p, int opt, const char *name)
-{
-    static Odr_arm arm[] =
-    {
-       {ODR_IMPLICIT, ODR_CONTEXT, 1, Z_ETagUnit_specificTag,
-        (Odr_fun)z_SpecificTag, 0},
-       {ODR_EXPLICIT, ODR_CONTEXT, 2, Z_ETagUnit_wildThing,
-        (Odr_fun)z_Occurrences, 0},
-       {ODR_IMPLICIT, ODR_CONTEXT, 3, Z_ETagUnit_wildPath,
-        (Odr_fun)odr_null, 0},
-       {-1, -1, -1 -1, 0, 0}
-    };
-    
-    if (o->direction == ODR_DECODE)
-       *p = (Z_ETagUnit *)odr_malloc(o, sizeof(**p));
-    else if (!*p)
-       return opt;
-    if (odr_choice(o, arm, &(*p)->u, &(*p)->which, 0))
-       return 1;
-    *p = 0;
-    return opt && odr_ok(o);
-}
-
-int z_ETagPath(ODR o, Z_ETagPath **p, int opt, const char *name)
-{
-    if (o->direction == ODR_DECODE)
-       *p = (Z_ETagPath *)odr_malloc(o, sizeof(**p));
-    else if (!*p)
-       return opt;
-    if (odr_sequence_of(o, (Odr_fun)z_ETagUnit, &(*p)->tags,
-                       &(*p)->num_tags, 0))
-       return 1;
-    *p = 0;
-    return opt && odr_ok(o);
-}
-
-int z_SimpleElement(ODR o, Z_SimpleElement **p, int opt, const char *name)
-{
-    if (!odr_sequence_begin(o, p, sizeof(**p), 0))
-       return opt && odr_ok(o);
-    return
-       odr_implicit(o, z_ETagPath, &(*p)->path, ODR_CONTEXT, 1, 0) &&
-       odr_implicit(o, z_Variant, &(*p)->variantRequest,
-                    ODR_CONTEXT, 2, 1) &&
-       odr_sequence_end(o);
-}
-
-int z_CompoPrimitives(ODR o, Z_CompoPrimitives **p, int opt, const char *name)
-{
-    if (o->direction == ODR_DECODE)
-       *p = (Z_CompoPrimitives *)odr_malloc(o, sizeof(**p));
-    else if (!*p)
-       return opt;
-    if (odr_sequence_of(o, z_InternationalString, &(*p)->primitives,
-                       &(*p)->num_primitives, 0))
-       return 1;
-    *p = 0;
-    return opt && odr_ok(o);
-}
-
-int z_CompoSpecs(ODR o, Z_CompoSpecs **p, int opt, const char *name)
-{
-    if (o->direction == ODR_DECODE)
-       *p = (Z_CompoSpecs *)odr_malloc(o, sizeof(**p));
-    else if (!*p)
-       return opt;
-    if (odr_sequence_of(o, (Odr_fun)z_SimpleElement, &(*p)->specs,
-                       &(*p)->num_specs, 0))
-       return 1;
-    *p = 0;
-    return opt && odr_ok(o);
-}
-
-int z_CompositeElement(ODR o, Z_CompositeElement **p, int opt,
-                      const char *name)
-{
-    static Odr_arm arm[] =
-    {
-       {ODR_IMPLICIT, ODR_CONTEXT, 1, Z_CompoElement_primitives,
-        (Odr_fun)z_CompoPrimitives, 0},
-       {ODR_IMPLICIT, ODR_CONTEXT, 2, Z_CompoElement_specs,
-        (Odr_fun)z_CompoSpecs, 0},
-       {-1, -1, -1, -1, 0, 0}
-    };
-    
-    if (!odr_sequence_begin(o, p, sizeof(**p), 0))
-       return opt && odr_ok(o);
-    return
-        odr_constructed_begin(o, &(*p)->elementList, ODR_CONTEXT, 1, 0) &&
-       odr_choice(o, arm, &(*p)->elementList, &(*p)->which, 0) &&
-       odr_constructed_end(o) &&
-       odr_implicit(o, z_ETagPath, &(*p)->deliveryTag, ODR_CONTEXT, 2, 0) &&
-       odr_implicit(o, z_Variant, &(*p)->variantRequest, ODR_CONTEXT, 3, 1) &&
-       odr_sequence_end(o);
-}
-
-int z_ElementRequest(ODR o, Z_ElementRequest **p, int opt, const char *name)
-{
-    static Odr_arm arm[] =
-    {
-       {ODR_IMPLICIT, ODR_CONTEXT, 1, Z_ERequest_simpleElement,
-        (Odr_fun)z_SimpleElement, 0},
-       {ODR_IMPLICIT, ODR_CONTEXT, 2, Z_ERequest_compositeElement,
-        (Odr_fun)z_CompositeElement, 0},
-       {-1, -1, -1 -1, 0, 0}
-    };
-    
-    if (o->direction == ODR_DECODE)
-       *p = (Z_ElementRequest *)odr_malloc(o, sizeof(**p));
-    else if (!*p)
-       return opt;
-    if (odr_choice(o, arm, &(*p)->u, &(*p)->which, 0))
-       return 1;
-    *p = 0;
-    return opt && odr_ok(o);
-}
-
-int z_Espec1(ODR o, Z_Espec1 **p, int opt, const char *name)
-{
-    if (!odr_sequence_begin(o, p, sizeof(**p), 0))
-       return opt && odr_ok(o);
-    return
-        odr_implicit_settag(o, ODR_CONTEXT, 1) &&
-       (odr_sequence_of(o, z_InternationalString, &(*p)->elementSetNames,
-                        &(*p)->num_elementSetNames, 0) || odr_ok(o)) &&
-       odr_implicit(o, odr_oid, &(*p)->defaultVariantSetId,
-                    ODR_CONTEXT, 2, 1) &&
-       odr_implicit(o, z_Variant, &(*p)->defaultVariantRequest,
-                    ODR_CONTEXT, 3, 1) &&
-       odr_implicit(o, odr_integer, &(*p)->defaultTagType,
-                    ODR_CONTEXT, 4, 1) &&
-       odr_implicit_settag(o, ODR_CONTEXT, 5) &&
-       (odr_sequence_of(o, (Odr_fun)z_ElementRequest, &(*p)->elements,
-                        &(*p)->num_elements, 0) || odr_ok(o)) &&
-       odr_sequence_end(o);
-}
diff --git a/asn/prt-esp.h b/asn/prt-esp.h
deleted file mode 100644 (file)
index 86bf403..0000000
+++ /dev/null
@@ -1,146 +0,0 @@
-/*
- * Copyright (c) 1995, Index Data.
- *
- * Permission to use, copy, modify, distribute, and sell this software and
- * its documentation, in whole or in part, for any purpose, is hereby granted,
- * provided that:
- *
- * 1. This copyright and permission notice appear in all copies of the
- * software and its documentation. Notices of copyright or attribution
- * which appear at the beginning of any file must remain unchanged.
- *
- * 2. The names of Index Data or the individual authors may not be used to
- * endorse or promote products derived from this software without specific
- * prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED "AS IS" AND WITHOUT WARRANTY OF ANY KIND,
- * EXPRESS, IMPLIED, OR OTHERWISE, INCLUDING WITHOUT LIMITATION, ANY
- * WARRANTY OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.
- * IN NO EVENT SHALL INDEX DATA BE LIABLE FOR ANY SPECIAL, INCIDENTAL,
- * INDIRECT OR CONSEQUENTIAL DAMAGES OF ANY KIND, OR ANY DAMAGES
- * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER OR
- * NOT ADVISED OF THE POSSIBILITY OF DAMAGE, AND ON ANY THEORY OF
- * LIABILITY, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE
- * OF THIS SOFTWARE.
- *
- */
-
-#ifndef PRT_ESP_H
-#define PRT_ESP_H
-
-#include <yaz/yconfig.h>
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-typedef struct Z_OccurValues
-{
-    int *start;
-    int *howMany;                     /* OPTIONAL */
-} Z_OccurValues;
-
-typedef struct Z_Occurrences
-{
-    int which;
-#define Z_Occurrences_all 0
-#define Z_Occurrences_last 1
-#define Z_Occurrences_values 2
-    union
-    {
-       Odr_null *all;
-       Odr_null *last;
-       Z_OccurValues *values;
-    } u;
-} Z_Occurrences;
-
-typedef struct Z_SpecificTag
-{
-    Odr_oid *schemaId;                      /* OPTIONAL */
-    int *tagType;                           /* OPTIONAL */
-    Z_StringOrNumeric *tagValue;
-    Z_Occurrences *occurrences;             /* OPTIONAL */
-} Z_SpecificTag;
-
-typedef struct Z_ETagUnit
-{
-    int which;
-#define Z_ETagUnit_specificTag 0
-#define Z_ETagUnit_wildThing 1
-#define Z_ETagUnit_wildPath 2
-    union
-    {
-       Z_SpecificTag *specificTag;
-       Z_Occurrences *wildThing;
-       Odr_null *wildPath;
-    } u;
-} Z_ETagUnit;
-
-typedef struct Z_ETagPath
-{
-    int num_tags;
-    Z_ETagUnit **tags;
-} Z_ETagPath;
-
-typedef struct Z_SimpleElement
-{
-    Z_ETagPath *path;
-    Z_Variant *variantRequest;           /* OPTIONAL */
-} Z_SimpleElement;
-
-typedef struct Z_CompoPrimitives
-{
-    int num_primitives;
-    char **primitives;
-} Z_CompoPrimitives;
-
-typedef struct Z_CompoSpecs
-{
-    int num_specs;
-    Z_SimpleElement **specs;
-} Z_CompoSpecs;
-
-typedef struct Z_CompositeElement
-{
-    int which;
-#define Z_CompoElement_primitives 0
-#define Z_CompoElement_specs 1
-    union
-    {
-       Z_CompoPrimitives *primitives;
-       Z_CompoSpecs *specs;
-    } elementList;
-    Z_ETagPath *deliveryTag;
-    Z_Variant *variantRequest;
-} Z_CompositeElement;
-
-typedef struct Z_ElementRequest
-{
-    int which;
-#define Z_ERequest_simpleElement 0
-#define Z_ERequest_compositeElement 1
-    union
-    {
-       Z_SimpleElement *simpleElement;
-       Z_CompositeElement *compositeElement;
-    } u;
-} Z_ElementRequest;
-
-typedef struct Z_Espec1
-{
-    int num_elementSetNames;
-    char **elementSetNames;               /* OPTIONAL */
-    Odr_oid *defaultVariantSetId;         /* OPTIONAL */
-    Z_Variant *defaultVariantRequest;     /* OPTIONAL */
-    int *defaultTagType;                  /* OPTIONAL */
-    int num_elements;
-    Z_ElementRequest **elements;           /* OPTIONAL */
-} Z_Espec1;
-
-YAZ_EXPORT int z_Espec1(ODR o, Z_Espec1 **p, int opt, const char *name);
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif
diff --git a/asn/prt-exd.c b/asn/prt-exd.c
deleted file mode 100644 (file)
index 05de183..0000000
+++ /dev/null
@@ -1,414 +0,0 @@
-/*
- * Copyright (c) 1995-1999, Index Data.
- * See the file LICENSE for details.
- * Sebastian Hammer, Adam Dickmeiss
- *
- * $Log: prt-exd.c,v $
- * Revision 1.11  1999-11-30 13:47:11  adam
- * Improved installation. Moved header files to include/yaz.
- *
- * Revision 1.10  1999/05/26 13:49:12  adam
- * DB Update implemented in client (very basic).
- *
- * Revision 1.9  1999/04/20 09:56:48  adam
- * Added 'name' paramter to encoder/decoder routines (typedef Odr_fun).
- * Modified all encoders/decoders to reflect this change.
- *
- * Revision 1.8  1998/02/11 11:53:32  adam
- * Changed code so that it compiles as C++.
- *
- * Revision 1.7  1998/02/10 15:31:46  adam
- * Implemented date and time structure. Changed the Update Extended
- * Service.
- *
- * Revision 1.6  1998/01/05 09:04:57  adam
- * Fixed bugs in encoders/decoders - Not operator (!) missing.
- *
- * Revision 1.5  1997/04/30 08:52:02  quinn
- * Null
- *
- * Revision 1.4  1996/10/10  12:35:12  quinn
- * Added Update extended service.
- *
- * Revision 1.3  1995/09/29  17:11:54  quinn
- * Smallish
- *
- * Revision 1.2  1995/09/27  15:02:41  quinn
- * Modified function heads & prototypes.
- *
- * Revision 1.1  1995/08/21  09:16:32  quinn
- * Added Extended services + Item Order
- *
- *
- */
-
-#include <yaz/proto.h>
-
-int z_TaskPackage(ODR o, Z_TaskPackage **p, int opt, const char *name)
-{
-    if (!odr_sequence_begin(o, p, sizeof(**p), 0))
-        return opt && odr_ok(o);
-    return
-        odr_implicit(o, odr_oid, &(*p)->packageType, ODR_CONTEXT, 1, 0) &&
-        odr_implicit(o, z_InternationalString, &(*p)->packageName,
-                    ODR_CONTEXT, 2, 1) &&
-        odr_implicit(o, z_InternationalString, &(*p)->userId,
-                    ODR_CONTEXT, 3, 1) &&
-        odr_implicit(o, z_IntUnit, &(*p)->retentionTime, ODR_CONTEXT, 4, 1) &&
-        odr_implicit(o, z_Permissions, &(*p)->permissions,
-                    ODR_CONTEXT, 5, 1) &&
-        odr_implicit(o, z_InternationalString, &(*p)->description,
-                    ODR_CONTEXT, 6, 1) &&
-        odr_implicit(o, odr_octetstring, &(*p)->targetReference,
-                    ODR_CONTEXT, 7, 0) &&
-        odr_implicit(o, odr_generalizedtime, &(*p)->creationDateTime,
-                    ODR_CONTEXT, 8, 1) &&
-        odr_implicit(o, odr_integer, &(*p)->taskStatus,
-                    ODR_CONTEXT, 9, 0) &&
-       odr_implicit_settag(o, ODR_CONTEXT, 10) &&
-       (odr_sequence_of(o, (Odr_fun)z_DiagRec, &(*p)->packageDiagnostics,
-                        &(*p)->num_packageDiagnostics, 0) || odr_ok(o)) &&
-        odr_implicit(o, z_External, &(*p)->taskSpecificParameters,
-                    ODR_CONTEXT, 11, 0) &&
-       odr_sequence_end(o);
-}
-
-/* ----------------------- ITEM ORDER --------------------- */
-
-int z_IOTargetPart(ODR o, Z_IOTargetPart **p, int opt, const char *name)
-{
-    if (!odr_sequence_begin(o, p, sizeof(**p), 0))
-       return opt && odr_ok(o);
-    return
-       odr_implicit(o, z_External, &(*p)->itemRequest, ODR_CONTEXT, 1, 1) &&
-       odr_implicit(o, z_External, &(*p)->statusOrErrorReport, ODR_CONTEXT,
-           2, 0) &&
-       odr_implicit(o, odr_integer, &(*p)->auxiliaryStatus, ODR_CONTEXT,
-           3, 1) &&
-       odr_sequence_end(o);
-}
-
-int z_IOResultSetItem(ODR o, Z_IOResultSetItem **p, int opt, const char *name)
-{
-    if (!odr_sequence_begin(o, p, sizeof(**p), 0))
-       return opt && odr_ok(o);
-    return
-       odr_implicit(o, z_InternationalString, &(*p)->resultSetId, ODR_CONTEXT,
-           1, 0) &&
-       odr_implicit(o, odr_integer, &(*p)->item, ODR_CONTEXT, 2, 1) &&
-       odr_sequence_end(o);
-}
-
-int z_IOOriginPartNotToKeep(ODR o, Z_IOOriginPartNotToKeep **p, int opt,
-                           const char *name)
-{
-    if (!odr_sequence_begin(o, p, sizeof(**p), 0))
-       return opt && odr_ok(o);
-    return
-       odr_implicit(o, z_IOResultSetItem, &(*p)->resultSetItem, ODR_CONTEXT,
-           1, 0) &&
-       odr_implicit(o, z_External, &(*p)->itemRequest, ODR_CONTEXT, 2, 1) &&
-       odr_sequence_end(o);
-}
-
-int z_IOContact(ODR o, Z_IOContact **p, int opt, const char *name)
-{
-    if (!odr_sequence_begin(o, p, sizeof(**p), 0))
-       return opt && odr_ok(o);
-    return
-       odr_implicit(o, z_InternationalString, &(*p)->name, ODR_CONTEXT,
-           1, 1) &&
-       odr_implicit(o, z_InternationalString, &(*p)->phone, ODR_CONTEXT,
-           2, 1) &&
-       odr_implicit(o, z_InternationalString, &(*p)->email, ODR_CONTEXT,
-           3, 1) &&
-       odr_sequence_end(o);
-}
-
-int z_IOCreditCardInfo(ODR o, Z_IOCreditCardInfo **p, int opt,
-                      const char *name)
-{
-    if (!odr_sequence_begin(o, p, sizeof(**p), 0))
-       return opt && odr_ok(o);
-    return
-       odr_implicit(o, z_InternationalString, &(*p)->nameOnCard, ODR_CONTEXT,
-           1, 0) &&
-       odr_implicit(o, z_InternationalString, &(*p)->expirationDate,
-           ODR_CONTEXT, 2, 0) &&
-       odr_implicit(o, z_InternationalString, &(*p)->cardNumber, ODR_CONTEXT,
-           3, 0) &&
-       odr_sequence_end(o);
-}
-
-int z_IOBilling(ODR o, Z_IOBilling **p, int opt, const char *name)
-{
-    static Odr_arm arm[] =
-    {
-       {ODR_IMPLICIT, ODR_CONTEXT, 0, Z_IOBilling_billInvoice,
-        (Odr_fun)odr_null, 0},
-       {ODR_IMPLICIT, ODR_CONTEXT, 1, Z_IOBilling_prepay,
-        (Odr_fun)odr_null, 0},
-       {ODR_IMPLICIT, ODR_CONTEXT, 2, Z_IOBilling_depositAccount,
-        (Odr_fun)odr_null, 0},
-       {ODR_IMPLICIT, ODR_CONTEXT, 3, Z_IOBilling_creditCard,
-        (Odr_fun)z_IOCreditCardInfo, 0},
-       {ODR_IMPLICIT, ODR_CONTEXT, 4, Z_IOBilling_cardInfoPreviouslySupplied,
-        (Odr_fun)odr_null, 0},
-       {ODR_IMPLICIT, ODR_CONTEXT, 5, Z_IOBilling_privateKnown,
-        (Odr_fun)odr_null, 0},
-       {ODR_IMPLICIT, ODR_CONTEXT, 6, Z_IOBilling_privateNotKnown,
-        (Odr_fun)z_External, 0},
-       {-1, -1, -1, -1, 0, 0}
-    };
-    
-    if (!odr_sequence_begin(o, p, sizeof(**p), 0))
-       return opt && odr_ok(o);
-    return
-        odr_constructed_begin(o, &(*p)->paymentMethod,
-                             ODR_CONTEXT, 1, 0) &&
-       odr_choice(o, arm, &(*p)->paymentMethod, &(*p)->which, 0) &&
-       odr_constructed_end(o) &&
-       odr_implicit(o, z_InternationalString, &(*p)->customerReference,
-                    ODR_CONTEXT, 2, 1) &&
-       odr_implicit(o, z_InternationalString, &(*p)->customerPONumber,
-                    ODR_CONTEXT, 3, 1) &&
-       odr_sequence_end(o);
-}
-
-int z_IOOriginPartToKeep(ODR o, Z_IOOriginPartToKeep **p, int opt,
-                        const char *name)
-{
-    if (!odr_sequence_begin(o, p, sizeof(**p), 0))
-       return opt && odr_ok(o);
-    return
-        odr_implicit(o, z_External, &(*p)->supplDescription,
-                    ODR_CONTEXT, 1, 1) &&
-       odr_implicit(o, z_IOContact, &(*p)->contact, ODR_CONTEXT, 2, 1) &&
-       odr_implicit(o, z_IOBilling, &(*p)->addlBilling,
-                    ODR_CONTEXT, 3, 1) &&
-       odr_sequence_end(o);
-}
-
-int z_IORequest(ODR o, Z_IORequest **p, int opt, const char *name)
-{
-    if (!odr_sequence_begin(o, p, sizeof(**p), 0))
-       return opt && odr_ok(o);
-    return 
-       odr_implicit(o, z_IOOriginPartToKeep, &(*p)->toKeep,
-                    ODR_CONTEXT, 1, 1) &&
-       odr_implicit(o, z_IOOriginPartNotToKeep, &(*p)->notToKeep,
-                    ODR_CONTEXT, 2, 0) &&
-       odr_sequence_end(o);
-}
-
-int z_IOTaskPackage(ODR o, Z_IOTaskPackage **p, int opt, const char *name)
-{
-    if (!odr_sequence_begin(o, p, sizeof(**p), 0))
-       return opt && odr_ok(o);
-    return
-        odr_implicit(o, z_IOOriginPartToKeep, &(*p)->originPart,
-                    ODR_CONTEXT, 1, 1) &&
-       odr_implicit(o, z_IOTargetPart, &(*p)->targetPart,
-                    ODR_CONTEXT, 2, 0) &&
-       odr_sequence_end(o);
-}
-
-int z_ItemOrder(ODR o, Z_ItemOrder **p, int opt, const char *name)
-{
-    static Odr_arm arm[] =
-    {
-       {ODR_IMPLICIT, ODR_CONTEXT, 1, Z_ItemOrder_esRequest,
-        (Odr_fun)z_IORequest, 0},
-       {ODR_IMPLICIT, ODR_CONTEXT, 2, Z_ItemOrder_taskPackage,
-        (Odr_fun)z_IOTaskPackage, 0},
-       {-1, -1, -1, -1, 0, 0}
-    };
-    
-    if (o->direction == ODR_DECODE)
-       *p = (Z_ItemOrder *)odr_malloc(o, sizeof(**p));
-    else if (!*p)
-       return opt;
-    if (odr_choice(o, arm, &(*p)->u, &(*p)->which, 0))
-       return 1;
-    *p = 0;
-    return opt && odr_ok(o);
-}
-
-/* ----------------------- ITEM UPDATE -------------------- */
-
-int z_IUSuppliedRecordsId (ODR o, Z_IUSuppliedRecordsId **p, int opt,
-                          const char *name)
-{
-    static Odr_arm arm[] = {
-        {ODR_IMPLICIT, ODR_CONTEXT, 1, Z_IUSuppliedRecordsId_timeStamp,
-         odr_generalizedtime, 0},
-        {ODR_IMPLICIT, ODR_CONTEXT, 2, Z_IUSuppliedRecordsId_versionNumber,
-         z_InternationalString, 0},
-        {ODR_IMPLICIT, ODR_CONTEXT, 3, Z_IUSuppliedRecordsId_previousVersion,
-         (Odr_fun)odr_external, 0},
-        {-1, -1, -1, -1, 0, 0}
-    };
-    if (!odr_initmember(o, p, sizeof(**p)))
-        return opt && odr_ok(o);
-    if (odr_choice(o, arm, &(*p)->u, &(*p)->which, 0))
-        return 1;
-    *p = 0;
-    return opt && odr_ok(o);
-}
-
-int z_IUCorrelationInfo (ODR o, Z_IUCorrelationInfo **p, int opt,
-                        const char *name)
-{
-    if (!odr_sequence_begin (o, p, sizeof(**p), 0))
-        return opt && odr_ok (o);
-    return
-        odr_implicit (o, z_InternationalString,
-                     &(*p)->note, ODR_CONTEXT, 1, 1) &&
-        odr_implicit (o, odr_integer,
-                     &(*p)->id, ODR_CONTEXT, 2, 1) &&
-        odr_sequence_end (o);
-}
-
-int z_IUSuppliedRecords_elem (ODR o, Z_IUSuppliedRecords_elem **p, int opt,
-                             const char *name)
-{
-    static Odr_arm arm[] = {
-        {ODR_IMPLICIT, ODR_CONTEXT, 1, Z_IUSuppliedRecords_number,
-         (Odr_fun)odr_integer, 0},
-        {ODR_IMPLICIT, ODR_CONTEXT, 2, Z_IUSuppliedRecords_string,
-         (Odr_fun)z_InternationalString, 0},
-        {ODR_IMPLICIT, ODR_CONTEXT, 3, Z_IUSuppliedRecords_opaque,
-         (Odr_fun)odr_octetstring, 0},
-        {-1, -1, -1, -1, 0, 0}
-    };
-    if (!odr_sequence_begin (o, p, sizeof(**p), 0))
-        return opt && odr_ok (o);
-    return
-        ((odr_constructed_begin (o, &(*p)->u, ODR_CONTEXT, 1, 0) &&
-         odr_choice (o, arm, &(*p)->u, &(*p)->which, 0) &&
-         odr_constructed_end (o)) || odr_ok(o)) &&
-        odr_explicit (o, z_IUSuppliedRecordsId,
-                     &(*p)->supplementalId, ODR_CONTEXT, 2, 1) &&
-        odr_implicit (o, z_IUCorrelationInfo,
-                     &(*p)->correlationInfo, ODR_CONTEXT, 3, 1) &&
-        odr_implicit (o, z_External,
-                     &(*p)->record, ODR_CONTEXT, 4, 0) &&
-        odr_sequence_end (o);
-}
-
-int z_IUSuppliedRecords (ODR o, Z_IUSuppliedRecords **p, int opt,
-                        const char *name)
-{
-    if (!odr_initmember (o, p, sizeof(**p)))
-        return opt && odr_ok(o);
-    if (odr_sequence_of (o, (Odr_fun)z_IUSuppliedRecords_elem, &(*p)->elements,
-                        &(*p)->num, 0))
-        return 1;
-    *p = 0;
-    return opt && odr_ok(o);
-}
-
-int z_IUTaskPackageRecordStructure (ODR o, Z_IUTaskPackageRecordStructure **p,
-                                   int opt, const char *name)
-{
-    static Odr_arm arm[] = {
-        {ODR_IMPLICIT, ODR_CONTEXT, 1, Z_IUTaskPackageRecordStructure_record,
-         (Odr_fun)odr_external, 0},
-        {ODR_EXPLICIT, ODR_CONTEXT, 2,
-        Z_IUTaskPackageRecordStructure_surrogateDiagnostics,
-         (Odr_fun)z_DiagRecs, 0},
-        {-1, -1, -1, -1, 0, 0}
-    };
-    if (!odr_sequence_begin (o, p, sizeof(**p), 0))
-        return opt && odr_ok (o);
-    return
-        ((odr_constructed_begin (o, &(*p)->u, ODR_CONTEXT, 1, 0) &&
-         odr_choice (o, arm, &(*p)->u, &(*p)->which, 0) &&
-         odr_constructed_end (o)) || odr_ok(o)) &&
-        odr_implicit (o, z_IUCorrelationInfo,
-                     &(*p)->correlationInfo, ODR_CONTEXT, 2, 1) &&
-        odr_implicit (o, odr_integer,
-                     &(*p)->recordStatus, ODR_CONTEXT, 3, 0) &&
-       odr_implicit (o, z_DiagRecs, 
-                     &(*p)->supplementalDiagnostics, ODR_CONTEXT, 4, 1) &&
-        odr_sequence_end (o);
-}
-
-int z_IUOriginPartToKeep (ODR o, Z_IUOriginPartToKeep **p, int opt,
-                         const char *name)
-{
-    if (!odr_sequence_begin (o, p, sizeof(**p), 0))
-        return opt && odr_ok (o);
-    return
-        odr_implicit (o, odr_integer,
-                     &(*p)->action, ODR_CONTEXT, 1, 0) &&
-        odr_implicit (o, z_InternationalString,
-                     &(*p)->databaseName, ODR_CONTEXT, 2, 0) &&
-        odr_implicit (o, odr_oid,
-                     &(*p)->schema, ODR_CONTEXT, 3, 1) &&
-        odr_implicit (o, z_InternationalString,
-                     &(*p)->elementSetName, ODR_CONTEXT, 4, 1) &&
-       odr_implicit (o, odr_external,
-                     &(*p)->actionQualifier, ODR_CONTEXT, 5, 1) &&
-        odr_sequence_end (o);
-}
-
-int z_IUTargetPart (ODR o, Z_IUTargetPart **p, int opt, const char *name)
-{
-    if (!odr_sequence_begin (o, p, sizeof(**p), 0))
-        return opt && odr_ok (o);
-    return
-        odr_implicit (o, odr_integer,
-                     &(*p)->updateStatus, ODR_CONTEXT, 1, 0) &&
-        odr_implicit_settag (o, ODR_CONTEXT, 2) &&
-        (odr_sequence_of(o, (Odr_fun)z_DiagRec, &(*p)->globalDiagnostics,
-                        &(*p)->num_globalDiagnostics, 0) || odr_ok(o)) &&
-        odr_implicit_settag (o, ODR_CONTEXT, 3) &&
-        odr_sequence_of(o, (Odr_fun)z_IUTaskPackageRecordStructure,
-                       &(*p)->taskPackageRecords,
-                       &(*p)->num_taskPackageRecords, 0) &&
-        odr_sequence_end (o);
-}
-
-int z_IUUpdateEsRequest (ODR o, Z_IUUpdateEsRequest **p, int opt,
-                        const char *name)
-{
-    if (!odr_sequence_begin (o, p, sizeof(**p), 0))
-        return opt && odr_ok (o);
-    return
-        odr_explicit (o, z_IUOriginPartToKeep,
-                     &(*p)->toKeep, ODR_CONTEXT, 1, 0) &&
-        odr_explicit (o, z_IUSuppliedRecords,
-                     &(*p)->notToKeep, ODR_CONTEXT, 2, 0) &&
-        odr_sequence_end (o);
-}
-
-int z_IUUpdateTaskPackage (ODR o, Z_IUUpdateTaskPackage **p, int opt,
-                          const char *name)
-{
-    if (!odr_sequence_begin (o, p, sizeof(**p), 0))
-        return opt && odr_ok (o);
-    return
-        odr_explicit (o, z_IUOriginPartToKeep,
-                     &(*p)->originPart, ODR_CONTEXT, 1, 0) &&
-        odr_explicit (o, z_IUTargetPart,
-                     &(*p)->targetPart, ODR_CONTEXT, 2, 0) &&
-        odr_sequence_end (o);
-}
-
-int z_IUUpdate (ODR o, Z_IUUpdate **p, int opt, const char *name)
-{
-    static Odr_arm arm[] = {
-        {ODR_IMPLICIT, ODR_CONTEXT, 1, Z_IUUpdate_esRequest,
-         (Odr_fun)z_IUUpdateEsRequest, 0},
-        {ODR_IMPLICIT, ODR_CONTEXT, 2, Z_IUUpdate_taskPackage,
-         (Odr_fun)z_IUUpdateTaskPackage, 0},
-        {-1, -1, -1, -1, 0, 0}
-    };
-    if (!odr_initmember(o, p, sizeof(**p)))
-        return opt && odr_ok(o);
-    if (odr_choice(o, arm, &(*p)->u, &(*p)->which, 0))
-        return 1;
-    *p = 0;
-    return opt && odr_ok(o);
-}
diff --git a/asn/prt-exd.h b/asn/prt-exd.h
deleted file mode 100644 (file)
index d5b1a2a..0000000
+++ /dev/null
@@ -1,268 +0,0 @@
-/*
- * Copyright (c) 1995-1998, Index Data.
- *
- * Permission to use, copy, modify, distribute, and sell this software and
- * its documentation, in whole or in part, for any purpose, is hereby granted,
- * provided that:
- *
- * 1. This copyright and permission notice appear in all copies of the
- * software and its documentation. Notices of copyright or attribution
- * which appear at the beginning of any file must remain unchanged.
- *
- * 2. The names of Index Data or the individual authors may not be used to
- * endorse or promote products derived from this software without specific
- * prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED "AS IS" AND WITHOUT WARRANTY OF ANY KIND,
- * EXPRESS, IMPLIED, OR OTHERWISE, INCLUDING WITHOUT LIMITATION, ANY
- * WARRANTY OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.
- * IN NO EVENT SHALL INDEX DATA BE LIABLE FOR ANY SPECIAL, INCIDENTAL,
- * INDIRECT OR CONSEQUENTIAL DAMAGES OF ANY KIND, OR ANY DAMAGES
- * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER OR
- * NOT ADVISED OF THE POSSIBILITY OF DAMAGE, AND ON ANY THEORY OF
- * LIABILITY, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE
- * OF THIS SOFTWARE.
- *
- */
-
-#ifndef PRT_EXD_H
-#define PRT_EXD_H
-
-#include <yaz/yconfig.h>
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-typedef struct Z_TaskPackage
-{
-    Odr_oid *packageType;                 
-    char *packageName;                      /* OPTIONAL */
-    char *userId;                           /* OPTIONAL */
-    Z_IntUnit *retentionTime;               /* OPTIONAL */
-    Z_Permissions *permissions;             /* OPTIONAL */
-    char *description;                      /* OPTIONAL */
-    Odr_oct *targetReference;             
-    char *creationDateTime;    /* OPTIONAL */
-    int *taskStatus;                      
-#define Z_TaskPackage_pending             0
-#define Z_TaskPackage_active              1
-#define Z_TaskPackage_complete            2
-#define Z_TaskPackage_aborted             3
-    int num_packageDiagnostics;
-    Z_DiagRec **packageDiagnostics;         /* OPTIONAL */
-    Z_External *taskSpecificParameters;   
-} Z_TaskPackage;
-
-int z_TaskPackage(ODR o, Z_TaskPackage **p, int opt, const char *name);
-
-/* ----------------------- ITEM ORDER ------------------------- */
-
-typedef struct Z_IOTargetPart
-{
-    Z_External *itemRequest;                   /* OPTIONAL */
-    Z_External *statusOrErrorReport;
-    int *auxiliaryStatus;                      /* OPTIONAL */
-#define Z_IOTargetPart_notReceived        1
-#define Z_IOTargetPart_loanQueue          2
-#define Z_IOTargetPart_forwarded          3
-#define Z_IOTargetPart_unfilledCopyright  4
-#define Z_IOTargetPart_filledCopyright    1
-} Z_IOTargetPart;
-
-typedef struct Z_IOResultSetItem
-{
-    char *resultSetId;
-    int *item;
-} Z_IOResultSetItem;
-
-typedef struct Z_IOOriginPartNotToKeep
-{
-    Z_IOResultSetItem *resultSetItem;          /* OPTIONAL */
-    Z_External *itemRequest;                   /* OPTIONAL */
-} Z_IOOriginPartNotToKeep;
-
-typedef struct Z_IOContact
-{
-    char *name;                                /* OPTIONAL */
-    char *phone;                               /* OPTIONAL */
-    char *email;                               /* OPTIONAL */
-} Z_IOContact;
-
-typedef struct Z_IOCreditCardInfo
-{
-    char *nameOnCard;
-    char *expirationDate;
-    char *cardNumber;
-} Z_IOCreditCardInfo;
-
-typedef struct Z_IOBilling
-{
-    int which;
-#define Z_IOBilling_billInvoice 0
-#define Z_IOBilling_prepay 1
-#define Z_IOBilling_depositAccount 2
-#define Z_IOBilling_creditCard 3
-#define Z_IOBilling_cardInfoPreviouslySupplied 4
-#define Z_IOBilling_privateKnown 5
-#define Z_IOBilling_privateNotKnown 6
-    union
-    {
-       Odr_null *noinfo;
-       Z_IOCreditCardInfo *creditCard;
-       Z_External *privateNotKnown;
-    } paymentMethod;
-    char *customerReference;                        /* OPTIONAL */
-    char *customerPONumber;                         /* OPTIONAL */
-} Z_IOBilling;
-
-typedef struct Z_IOOriginPartToKeep
-{
-    Z_External *supplDescription;              /* OPTIONAL */
-    Z_IOContact *contact;                      /* OPTIONAL */
-    Z_IOBilling *addlBilling;                  /* OPTIONAL */
-} Z_IOOriginPartToKeep;
-
-typedef struct Z_IORequest
-{
-    Z_IOOriginPartToKeep *toKeep;              /* OPTIONAL */
-    Z_IOOriginPartNotToKeep *notToKeep;
-} Z_IORequest;
-
-typedef struct Z_IOTaskPackage
-{
-    Z_IOOriginPartToKeep *originPart;          /* OPTIONAL */
-    Z_IOTargetPart *targetPart;
-} Z_IOTaskPackage;
-
-typedef struct Z_ItemOrder
-{
-    int which;
-#define Z_ItemOrder_esRequest 0
-#define Z_ItemOrder_taskPackage 1
-    union
-    {
-       Z_IORequest *esRequest;
-       Z_IOTaskPackage *taskPackage;
-    } u;
-} Z_ItemOrder;
-
-int z_ItemOrder(ODR o, Z_ItemOrder **p, int opt, const char *name);
-
-/* ----------------------- ITEM UPDATE ------------------------ */
-
-typedef struct Z_IUSuppliedRecordsId
-{
-    int which;
-#define Z_IUSuppliedRecordsId_timeStamp 1
-#define Z_IUSuppliedRecordsId_versionNumber 2
-#define Z_IUSuppliedRecordsId_previousVersion 3
-    union {
-        char *timeStamp;
-        char *versionNumber;
-        Odr_external *previousVersion;
-    } u;
-} Z_IUSuppliedRecordsId;
-
-typedef struct Z_IUCorrelationInfo
-{
-    char *note; /* OPTIONAL */
-    int *id; /* OPTIONAL */
-} Z_IUCorrelationInfo;
-
-typedef struct Z_IUSuppliedRecords_elem
-{
-    int which;
-#define Z_IUSuppliedRecords_number 1
-#define Z_IUSuppliedRecords_string 2
-#define Z_IUSuppliedRecords_opaque 3
-    union {
-        int *number;
-        char *string;
-        Odr_oct *opaque;
-    } u; /* OPTIONAL */
-    Z_IUSuppliedRecordsId *supplementalId; /* OPTIONAL */
-    Z_IUCorrelationInfo *correlationInfo;    /* OPTIONAL */
-    Z_External *record;
-} Z_IUSuppliedRecords_elem;
-
-typedef struct Z_IUSuppliedRecords
-{
-    int num;
-    Z_IUSuppliedRecords_elem **elements;
-} Z_IUSuppliedRecords;
-
-typedef struct Z_IUOriginPartToKeep
-{
-    int *action;
-#define Z_IUOriginPartToKeep_recordInsert 1
-#define Z_IUOriginPartToKeep_recordReplace 2
-#define Z_IUOriginPartToKeep_recordDelete 3
-#define Z_IUOriginPartToKeep_elementUpdate 4
-#define Z_IUOriginPartToKeep_specialUpdate 5
-    char *databaseName;
-    Odr_oid *schema;               /* OPTIONAL */
-    char *elementSetName;          /* OPTIONAL */
-    Odr_external *actionQualifier; /* OPTIONAL */
-} Z_IUOriginPartToKeep;
-
-typedef struct Z_IUTaskPackageRecordStructure
-{
-    int which;
-#define Z_IUTaskPackageRecordStructure_record 1
-#define Z_IUTaskPackageRecordStructure_surrogateDiagnostics 2
-    union {
-        Odr_external *record;
-        Z_DiagRecs *surrogateDiagnostics;
-    } u; /* OPTIONAL */
-    Z_IUCorrelationInfo *correlationInfo; /* OPTIONAL */
-    int *recordStatus;
-#define Z_IUTaskPackageRecordStructureS_success 1
-#define Z_IUTaskPackageRecordStructureS_queued 2
-#define Z_IUTaskPackageRecordStructureS_inProcess 3
-#define Z_IUTaskPackageRecordStructureS_failure 4
-    Z_DiagRecs *supplementalDiagnostics;  /* OPTIONAL */
-} Z_IUTaskPackageRecordStructure;
-
-typedef struct Z_IUTargetPart
-{
-    int *updateStatus;
-#define Z_IUTargetPart_success 1
-#define Z_IUTargetPart_partial 2
-#define Z_IUTargetPart_failure 3
-    int num_globalDiagnostics;
-    Z_DiagRec **globalDiagnostics; /* OPTIONAL */
-    int num_taskPackageRecords;
-    Z_IUTaskPackageRecordStructure **taskPackageRecords;
-} Z_IUTargetPart;
-
-typedef struct Z_IUUpdateEsRequest
-{
-    Z_IUOriginPartToKeep *toKeep;
-    Z_IUSuppliedRecords *notToKeep;
-} Z_IUUpdateEsRequest;
-
-typedef struct Z_IUUpdateTaskPackage
-{
-    Z_IUOriginPartToKeep *originPart;
-    Z_IUTargetPart *targetPart;
-} Z_IUUpdateTaskPackage;
-
-typedef struct Z_IUUpdate
-{
-    int which;
-#define Z_IUUpdate_esRequest 1
-#define Z_IUUpdate_taskPackage 2
-    union {
-        Z_IUUpdateEsRequest *esRequest;
-        Z_IUUpdateTaskPackage *taskPackage;
-    } u;
-} Z_IUUpdate;
-
-YAZ_EXPORT int z_IUUpdate(ODR o, Z_IUUpdate **p, int opt, const char *name);
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif
diff --git a/asn/prt-exp.c b/asn/prt-exp.c
deleted file mode 100644 (file)
index 9e9243f..0000000
+++ /dev/null
@@ -1,1565 +0,0 @@
-/*
- * Copyright (c) 1995-1999, Index Data.
- * See the file LICENSE for details.
- * Sebastian Hammer, Adam Dickmeiss
- *
- * $Log: prt-exp.c,v $
- * Revision 1.13  1999-11-30 13:47:11  adam
- * Improved installation. Moved header files to include/yaz.
- *
- * Revision 1.12  1999/04/20 09:56:48  adam
- * Added 'name' paramter to encoder/decoder routines (typedef Odr_fun).
- * Modified all encoders/decoders to reflect this change.
- *
- * Revision 1.11  1999/03/18 12:57:13  adam
- * Fixed bug in TargetInfo encoder/decoder.
- *
- * Revision 1.10  1998/05/18 13:06:52  adam
- * Changed the way attribute sets are handled by the retriaval module.
- * Extended Explain conversion / schema.
- * Modified server and client to work with ASN.1 compiled protocol handlers.
- *
- * Revision 1.9  1998/02/11 11:53:32  adam
- * Changed code so that it compiles as C++.
- *
- * Revision 1.8  1996/01/02 11:46:41  quinn
- * Changed 'operator' to 'roperator' to avoid C++ conflict.
- *
- * Revision 1.7  1995/12/14  16:28:07  quinn
- * More explain stuff.
- *
- * Revision 1.6  1995/12/14  11:09:09  quinn
- * Fixed bug in tagging.
- *
- * Revision 1.5  1995/12/05  11:15:50  quinn
- * Work.
- *
- * Revision 1.4  1995/09/29  17:11:54  quinn
- * Smallish
- *
- * Revision 1.3  1995/09/27  15:02:42  quinn
- * Modified function heads & prototypes.
- *
- * Revision 1.2  1995/08/15  11:59:43  quinn
- * Updated External
- *
- * Revision 1.1  1995/08/10  08:54:02  quinn
- * Added Explain
- *
- *
- */
-
-#include <yaz/proto.h>
-
-int z_LanguageCode(ODR o, char **p, int opt, const char *name);
-int z_CommonInfo(ODR o, Z_CommonInfo **p, int opt, const char *name);
-int z_HumanStringUnit(ODR o, Z_HumanStringUnit **p, int opt, const char *name);
-int z_HumanString(ODR o, Z_HumanString **p, int opt, const char *name);
-int z_IconObjectUnit(ODR o, Z_IconObjectUnit **p, int opt, const char *name);
-int z_IconObject(ODR o, Z_IconObject **p, int opt, const char *name);
-int z_ContactInfo(ODR o, Z_ContactInfo **p, int opt, const char *name);
-int z_NetworkAddressIA(ODR o, Z_NetworkAddressIA **p, int opt,
-                      const char *name);
-int z_NetworkAddressOPA(ODR o, Z_NetworkAddressOPA **p, int opt,
-                       const char *name);
-int z_NetworkAddressOther(ODR o, Z_NetworkAddressOther **p, int opt,
-                         const char *name);
-int z_NetworkAddress(ODR o, Z_NetworkAddress **p, int opt, const char *name);
-int z_AccessInfo(ODR o, Z_AccessInfo **p, int opt, const char *name);
-int z_QueryTypeDetails(ODR o, Z_QueryTypeDetails **p, int opt,
-                      const char *name);
-int z_PrivateCapOperator(ODR o, Z_PrivateCapOperator **p, int opt,
-                        const char *name);
-int z_PrivateCapabilities(ODR o, Z_PrivateCapabilities **p, int opt,
-                         const char *name);
-int z_RpnCapabilities(ODR o, Z_RpnCapabilities **p, int opt, const char *name);
-int z_Iso8777Capabilities(ODR o, Z_Iso8777Capabilities **p, int opt,
-                         const char *name);
-int z_ProxSupportPrivate(ODR o, Z_ProxSupportPrivate **p, int opt,
-                        const char *name);
-int z_ProxSupportUnit(ODR o, Z_ProxSupportUnit **p, int opt, const char *name);
-int z_ProximitySupport(ODR o, Z_ProximitySupport **p, int opt,
-                      const char *name);
-int z_SearchKey(ODR o, Z_SearchKey **p, int opt, const char *name);
-int z_AccessRestrictionsUnit(ODR o, Z_AccessRestrictionsUnit **p, int opt,
-                            const char *name);
-int z_AccessRestrictions(ODR o, Z_AccessRestrictions **p, int opt,
-                        const char *name);
-int z_CostsOtherCharge(ODR o, Z_CostsOtherCharge **p, int opt,
-                      const char *name);
-int z_Costs(ODR o, Z_Costs **p, int opt, const char *name);
-int z_Charge(ODR o, Z_Charge **p, int opt, const char *name);
-int z_DatabaseList(ODR o, Z_DatabaseList **p, int opt, const char *name);
-int z_AttributeCombinations(ODR o, Z_AttributeCombinations **p, int opt,
-                           const char *name);
-int z_AttributeCombination(ODR o, Z_AttributeCombination **p, int opt,
-                          const char *name);
-int z_AttributeValueList(ODR o, Z_AttributeValueList **p, int opt,
-                        const char *name);
-int z_AttributeOccurrence(ODR o, Z_AttributeOccurrence **p, int opt,
-                         const char *name);
-int z_AttributeValue(ODR o, Z_AttributeValue **p, int opt, const char *name);
-int z_TargetInfo(ODR o, Z_TargetInfo **p, int opt, const char *name);
-int z_DatabaseInfo(ODR o, Z_DatabaseInfo **p, int opt, const char *name);
-int z_TagTypeMapping(ODR o, Z_TagTypeMapping **p, int opt, const char *name);
-int z_SchemaInfo(ODR o, Z_SchemaInfo **p, int opt, const char *name);
-int z_ElementInfo(ODR o, Z_ElementInfo **p, int opt, const char *name);
-int z_PathUnit(ODR o, Z_PathUnit **p, int opt, const char *name);
-int z_Path(ODR o, Z_Path **p, int opt, const char *name);
-int z_ElementInfoList(ODR o, Z_Path **p, int opt, const char *name);
-int z_ElementDataType(ODR o, Z_ElementDataType **p, int opt, const char *name);
-int z_TagSetInfoElements(ODR o, Z_TagSetInfoElements **p, int opt,
-                        const char *name);
-int z_TagSetInfo(ODR o, Z_TagSetInfo **p, int opt, const char *name);
-int z_RecordSyntaxInfo(ODR o, Z_RecordSyntaxInfo **p, int opt,
-                      const char *name);
-int z_AttributeSetInfo(ODR o, Z_AttributeSetInfo **p, int opt,
-                      const char *name);
-int z_AttributeType(ODR o, Z_AttributeType **p, int opt, const char *name);
-int z_AttributeDescription(ODR o, Z_AttributeDescription **p, int opt,
-                          const char *name);
-int z_TermListElement(ODR o, Z_TermListElement **p, int opt, const char *name);
-int z_TermListInfo(ODR o, Z_TermListInfo **p, int opt, const char *name);
-int z_ExtendedServicesInfo(ODR o, Z_ExtendedServicesInfo **p, int opt,
-                          const char *name);
-int z_AttributeDetails(ODR o, Z_AttributeDetails **p, int opt,
-                      const char *name);
-int z_AttributeSetDetails(ODR o, Z_AttributeSetDetails **p, int opt,
-                         const char *name);
-int z_AttributeTypeDetails(ODR o, Z_AttributeTypeDetails **p, int opt,
-                          const char *name);
-int z_OmittedAttributeInterpretation(ODR o,
-                                    Z_OmittedAttributeInterpretation **p,
-                                    int opt, const char *name);
-int z_EScanInfo(ODR o, Z_EScanInfo **p, int opt, const char *name);
-int z_TermListDetails(ODR o, Z_TermListDetails **p, int opt, const char *name);
-int z_ElementSetDetails(ODR o, Z_ElementSetDetails **p, int opt,
-                       const char *name);
-int z_RetrievalRecordDetails(ODR o, Z_RetrievalRecordDetails **p, int opt,
-                            const char *name);
-int z_PerElementDetails(ODR o, Z_PerElementDetails **p, int opt,
-                       const char *name);
-int z_RecordTag(ODR o, Z_RecordTag **p, int opt, const char *name);
-int z_SortDetails(ODR o, Z_SortDetails **p, int opt, const char *name);
-int z_SortKeyDetails(ODR o, Z_SortKeyDetails **p, int opt, const char *name);
-int z_ProcessingInformation(ODR o, Z_ProcessingInformation **p, int opt,
-                           const char *name);
-int z_VariantSetInfo(ODR o, Z_VariantSetInfo **p, int opt, const char *name);
-int z_VariantClass(ODR o, Z_VariantClass **p, int opt, const char *name);
-int z_VariantType(ODR o, Z_VariantType **p, int opt, const char *name);
-int z_VariantValue(ODR o, Z_VariantValue **p, int opt, const char *name);
-int z_ValueSetEnumerated(ODR o, Z_ValueSetEnumerated **p, int opt,
-                        const char *name);
-int z_ValueSet(ODR o, Z_ValueSet **p, int opt, const char *name);
-int z_ValueRange(ODR o, Z_ValueRange **p, int opt, const char *name);
-int z_ValueDescription(ODR o, Z_ValueDescription **p, int opt,
-                      const char *name);
-int z_UnitInfo(ODR o, Z_UnitInfo **p, int opt, const char *name);
-int z_UnitType(ODR o, Z_UnitType **p, int opt, const char *name);
-int z_Units(ODR o, Z_Units **p, int opt, const char *name);
-int z_CategoryList(ODR o, Z_CategoryList **p, int opt, const char *name);
-int z_CategoryInfo(ODR o, Z_CategoryInfo **p, int opt, const char *name);
-int z_ExplainRecord(ODR o, Z_ExplainRecord **p, int opt, const char *name);
-
-int z_LanguageCode(ODR o, char **p, int opt, const char *name)
-{
-    return z_InternationalString(o, p, opt, 0);
-}
-
-int z_CommonInfo(ODR o, Z_CommonInfo **p, int opt, const char *name)
-{
-    if (!odr_sequence_begin(o, p, sizeof(**p), 0))
-        return opt && odr_ok(o);
-    return
-        odr_implicit(o, odr_generalizedtime, &(*p)->dateAdded,
-                    ODR_CONTEXT, 0, 1) &&
-        odr_implicit(o, odr_generalizedtime, &(*p)->dateChanged,
-                    ODR_CONTEXT, 1, 1) &&
-        odr_implicit(o, odr_generalizedtime, &(*p)->expiry,
-                    ODR_CONTEXT, 2, 1) &&
-        odr_implicit(o, z_LanguageCode, &(*p)->humanStringLanguage,
-                    ODR_CONTEXT, 3, 1) &&
-        z_OtherInformation(o, &(*p)->otherInfo, 1, 0) &&
-        odr_sequence_end(o);
-}
-
-int z_HumanStringUnit(ODR o, Z_HumanStringUnit **p, int opt, const char *name)
-{
-    if (!odr_sequence_begin(o, p, sizeof(**p), 0))
-        return opt && odr_ok(o);
-    return
-        odr_implicit(o, z_LanguageCode, &(*p)->language, ODR_CONTEXT, 0, 1) &&
-        odr_implicit(o, z_InternationalString, &(*p)->text, ODR_CONTEXT,
-                    1, 0) &&
-        odr_sequence_end(o);
-}
-
-int z_HumanString(ODR o, Z_HumanString **p, int opt, const char *name)
-{
-    if (!odr_initmember(o, p, sizeof(**p)))
-       return opt && odr_ok(o);
-    if (odr_sequence_of(o, (Odr_fun)z_HumanStringUnit, &(*p)->strings,
-                       &(*p)->num_strings, 0))
-       return 1;
-    *p = 0;
-    return opt && odr_ok(o);
-}
-
-int z_IconObjectUnit(ODR o, Z_IconObjectUnit **p, int opt, const char *name)
-{
-    static Odr_arm arm[] = 
-    {
-       {ODR_IMPLICIT, ODR_CONTEXT, 1, Z_IconObjectUnit_ianaType,
-        z_InternationalString, 0},
-       {ODR_IMPLICIT, ODR_CONTEXT, 2, Z_IconObjectUnit_z3950type,
-        z_InternationalString, 0},
-       {ODR_IMPLICIT, ODR_CONTEXT, 3, Z_IconObjectUnit_otherType,
-        z_InternationalString, 0},
-       {-1, -1, -1, -1, 0, 0}
-    };
-
-    if (!odr_sequence_begin(o, p, sizeof(**p), 0))
-        return opt && odr_ok(o);
-    return
-       odr_constructed_begin(o, &(*p)->bodyType, ODR_CONTEXT, 1, 0) &&
-       odr_choice(o, arm, &(*p)->bodyType, &(*p)->which, 0) &&
-       odr_constructed_end(o) &&
-        odr_implicit(o, odr_octetstring, &(*p)->content, ODR_CONTEXT, 2, 0) &&
-        odr_sequence_end(o);
-}
-
-int z_IconObject(ODR o, Z_IconObject **p, int opt, const char *name)
-{
-    if (!odr_initmember(o, p, sizeof(**p)))
-       return opt && odr_ok(o);
-    if (odr_sequence_of(o, (Odr_fun)z_IconObjectUnit, &(*p)->elements,
-       &(*p)->num, 0))
-       return 1;
-    *p = 0;
-    return opt && odr_ok(o);
-}
-
-int z_ContactInfo(ODR o, Z_ContactInfo **p, int opt, const char *name)
-{
-    if (!odr_sequence_begin(o, p, sizeof(**p), 0))
-        return opt && odr_ok(o);
-    return
-        odr_implicit(o, z_InternationalString, &(*p)->name,
-                    ODR_CONTEXT, 0, 1) &&
-        odr_implicit(o, z_HumanString, &(*p)->description,
-                    ODR_CONTEXT, 1, 1) &&
-        odr_implicit(o, z_HumanString, &(*p)->address,
-                    ODR_CONTEXT, 2, 1) &&
-        odr_implicit(o, z_InternationalString, &(*p)->email,
-                    ODR_CONTEXT, 3, 1) &&
-        odr_implicit(o, z_InternationalString, &(*p)->phone,
-                    ODR_CONTEXT, 4, 1) &&
-       odr_sequence_end(o);
-}
-
-int z_NetworkAddressIA(ODR o, Z_NetworkAddressIA **p, int opt,
-                      const char *name)
-{
-    if (!odr_sequence_begin(o, p, sizeof(**p), 0))
-       return opt;
-    return
-        odr_implicit(o, z_InternationalString, &(*p)->hostAddress,
-                    ODR_CONTEXT, 0, 0) &&
-        odr_implicit(o, odr_integer, &(*p)->port, ODR_CONTEXT, 1, 0) &&
-       odr_sequence_end(o);
-}
-
-int z_NetworkAddressOPA(ODR o, Z_NetworkAddressOPA **p, int opt,
-                       const char *name)
-{
-    if (!odr_sequence_begin(o, p, sizeof(**p), 0))
-       return opt;
-    return
-        odr_implicit(o, z_InternationalString, &(*p)->pSel,
-                    ODR_CONTEXT, 0, 0) &&
-        odr_implicit(o, z_InternationalString, &(*p)->sSel,
-                    ODR_CONTEXT, 1, 1) &&
-        odr_implicit(o, z_InternationalString, &(*p)->tSel,
-                    ODR_CONTEXT, 2, 1) &&
-        odr_implicit(o, z_InternationalString, &(*p)->nSap,
-                    ODR_CONTEXT, 3, 0) &&
-       odr_sequence_end(o);
-}
-
-int z_NetworkAddressOther(ODR o, Z_NetworkAddressOther **p, int opt,
-                         const char *name)
-{
-    if (!odr_sequence_begin(o, p, sizeof(**p), 0))
-       return opt;
-    return
-        odr_implicit(o, z_InternationalString, &(*p)->type,
-                    ODR_CONTEXT, 0, 0) &&
-        odr_implicit(o, z_InternationalString, &(*p)->address,
-                    ODR_CONTEXT, 1, 0) &&
-       odr_sequence_end(o);
-}
-
-int z_NetworkAddress(ODR o, Z_NetworkAddress **p, int opt, const char *name)
-{
-    static Odr_arm arm[] =
-    {
-       {ODR_IMPLICIT, ODR_CONTEXT, 0, Z_NetworkAddress_iA,
-        (Odr_fun)z_NetworkAddressIA, 0},
-       {ODR_IMPLICIT, ODR_CONTEXT, 1, Z_NetworkAddress_oPA,
-        (Odr_fun)z_NetworkAddressOPA, 0},
-       {ODR_IMPLICIT, ODR_CONTEXT, 2, Z_NetworkAddress_other,
-           (Odr_fun)z_NetworkAddressOther, 0},
-       {-1, -1, -1, -1, 0, 0}
-    };
-
-    if (!odr_initmember(o, p, sizeof(**p)))
-       return opt && odr_ok(o);
-    if (odr_choice(o, arm, &(*p)->u, &(*p)->which, 0))
-       return 1;
-    *p = 0;
-    return opt && odr_ok(o);
-}
-
-int z_AccessInfo(ODR o, Z_AccessInfo **p, int opt, const char *name)
-{
-    if (!odr_sequence_begin(o, p, sizeof(**p), 0))
-        return opt && odr_ok(o);
-    return
-       odr_implicit_settag(o, ODR_CONTEXT, 0) &&
-       (odr_sequence_of(o, (Odr_fun)z_QueryTypeDetails,
-                        &(*p)->queryTypesSupported,
-                        &(*p)->num_queryTypesSupported, 0) || odr_ok(o)) &&
-       odr_implicit_settag(o, ODR_CONTEXT, 1) &&
-       (odr_sequence_of(o, (Odr_fun)odr_oid, &(*p)->diagnosticsSets,
-                        &(*p)->num_diagnosticsSets, 0) || odr_ok(o)) &&
-       odr_implicit_settag(o, ODR_CONTEXT, 2) &&
-       (odr_sequence_of(o, (Odr_fun)odr_oid, &(*p)->attributeSetIds,
-                        &(*p)->num_attributeSetIds, 0) || odr_ok(o)) &&
-       odr_implicit_settag(o, ODR_CONTEXT, 3) &&
-       (odr_sequence_of(o, (Odr_fun)odr_oid, &(*p)->schemas,
-                        &(*p)->num_schemas, 0) ||
-        odr_ok(o)) &&
-       odr_implicit_settag(o, ODR_CONTEXT, 4) &&
-       (odr_sequence_of(o, (Odr_fun)odr_oid, &(*p)->recordSyntaxes,
-                        &(*p)->num_recordSyntaxes, 0) || odr_ok(o)) &&
-       odr_implicit_settag(o, ODR_CONTEXT, 5) &&
-       (odr_sequence_of(o, (Odr_fun)odr_oid, &(*p)->resourceChallenges,
-                        &(*p)->num_resourceChallenges, 0) || odr_ok(o)) &&
-        odr_implicit(o, z_AccessRestrictions, &(*p)->restrictedAccess,
-                    ODR_CONTEXT, 6, 1) &&
-        odr_implicit(o, z_Costs, &(*p)->costInfo, ODR_CONTEXT, 8, 1) &&
-       odr_implicit_settag(o, ODR_CONTEXT, 9) &&
-       (odr_sequence_of(o, (Odr_fun)odr_oid, &(*p)->variantSets,
-                        &(*p)->num_variantSets, 0) || odr_ok(o)) &&
-       odr_implicit_settag(o, ODR_CONTEXT, 10) &&
-       (odr_sequence_of(o, (Odr_fun)z_ElementSetName, &(*p)->elementSetNames,
-                        &(*p)->num_elementSetNames, 0) || odr_ok(o)) &&
-       odr_implicit_settag(o, ODR_CONTEXT, 11) &&
-       (odr_sequence_of(o, (Odr_fun)z_InternationalString, &(*p)->unitSystems,
-                        &(*p)->num_unitSystems, 0) || odr_ok(o)) &&
-       odr_sequence_end(o);
-}
-
-int z_QueryTypeDetails(ODR o, Z_QueryTypeDetails **p, int opt,
-                      const char *name)
-{
-    static Odr_arm arm[] =
-    {
-       {ODR_IMPLICIT, ODR_CONTEXT, 0, Z_QueryTypeDetails_private,
-        (Odr_fun)z_PrivateCapabilities, 0},
-       {ODR_IMPLICIT, ODR_CONTEXT, 1, Z_QueryTypeDetails_rpn,
-        (Odr_fun)z_RpnCapabilities, 0},
-       {ODR_IMPLICIT, ODR_CONTEXT, 2, Z_QueryTypeDetails_iso8777,
-        (Odr_fun)z_Iso8777Capabilities, 0},
-       {ODR_IMPLICIT, ODR_CONTEXT, 3, Z_QueryTypeDetails_z39_58,
-        (Odr_fun)z_HumanString, 0},
-       {ODR_IMPLICIT, ODR_CONTEXT, 4, Z_QueryTypeDetails_erpn,
-        (Odr_fun)z_RpnCapabilities, 0},
-       {ODR_IMPLICIT, ODR_CONTEXT, 5, Z_QueryTypeDetails_rankedList,
-        (Odr_fun)z_HumanString, 0},
-       {-1, -1, -1, -1, 0, 0}
-    };
-
-    if (!odr_initmember(o, p, sizeof(**p)))
-       return opt && odr_ok(o);
-    if (odr_choice(o, arm, &(*p)->u, &(*p)->which, 0))
-       return 1;
-    *p = 0;
-    return opt && odr_ok(o);
-}
-
-int z_PrivateCapOperator(ODR o, Z_PrivateCapOperator **p, int opt,
-                        const char *name)
-{
-    if (!odr_sequence_begin(o, p, sizeof(**p), 0))
-        return opt && odr_ok(o);
-    return
-        odr_implicit(o, z_InternationalString, &(*p)->roperator,
-                    ODR_CONTEXT, 0, 0) &&
-        odr_implicit(o, z_HumanString, &(*p)->description,
-                    ODR_CONTEXT, 1, 1) &&
-       odr_sequence_end(o);
-}
-
-int z_PrivateCapabilities(ODR o, Z_PrivateCapabilities **p, int opt,
-                         const char *name)
-{
-    if (!odr_sequence_begin(o, p, sizeof(**p), 0))
-       return opt && odr_ok(o);
-    return
-       odr_implicit_settag(o, ODR_CONTEXT, 0) &&
-       (odr_sequence_of(o, (Odr_fun)z_PrivateCapOperator, &(*p)->operators,
-                        &(*p)->num_operators, 0) || odr_ok(o)) &&
-       odr_implicit_settag(o, ODR_CONTEXT, 1) &&
-       (odr_sequence_of(o, (Odr_fun)z_SearchKey, &(*p)->searchKeys,
-                        &(*p)->num_searchKeys, 0) || odr_ok(o)) &&
-       odr_implicit_settag(o, ODR_CONTEXT, 2) &&
-       (odr_sequence_of(o, (Odr_fun)z_HumanString, &(*p)->description,
-                        &(*p)->num_description, 0) || odr_ok(o)) &&
-        odr_sequence_end(o);
-}
-
-int z_RpnCapabilities(ODR o, Z_RpnCapabilities **p, int opt, const char *name)
-{
-    if (!odr_sequence_begin(o, p, sizeof(**p), 0))
-        return opt && odr_ok(o);
-    return
-       odr_implicit_settag(o, ODR_CONTEXT, 0) &&
-       (odr_sequence_of(o, (Odr_fun)odr_integer, &(*p)->operators,
-                        &(*p)->num_operators, 0) || odr_ok(o)) &&
-        odr_implicit(o, odr_bool, &(*p)->resultSetAsOperandSupported,
-                    ODR_CONTEXT, 1, 0) &&
-        odr_implicit(o, odr_bool, &(*p)->restrictionOperandSupported,
-                    ODR_CONTEXT, 2, 0) &&
-        odr_implicit(o, z_ProximitySupport, &(*p)->proximity, ODR_CONTEXT,
-                    3, 1) &&
-        odr_sequence_end(o);
-}
-
-int z_Iso8777Capabilities(ODR o, Z_Iso8777Capabilities **p, int opt,
-                         const char *name)
-{
-    if (!odr_sequence_begin(o, p, sizeof(**p), 0))
-        return opt && odr_ok(o);
-    return
-       odr_implicit_settag(o, ODR_CONTEXT, 0) &&
-       odr_sequence_of(o, (Odr_fun)z_SearchKey, &(*p)->searchKeys,
-                       &(*p)->num_searchKeys, 0) &&
-        odr_implicit(o, z_HumanString, &(*p)->restrictions, ODR_CONTEXT,
-                    1, 1) &&
-        odr_sequence_end(o);
-}
-
-int z_ProxSupportPrivate(ODR o, Z_ProxSupportPrivate **p, int opt,
-                        const char *name)
-{
-    if (!odr_sequence_begin(o, p, sizeof(**p), 0))
-       return opt && odr_ok(o);
-    return
-       odr_implicit(o, odr_integer, &(*p)->unit, ODR_CONTEXT, 0, 0) &&
-       odr_implicit(o, z_HumanString, &(*p)->description,
-                    ODR_CONTEXT, 1, 1) &&
-       odr_sequence_end(o);
-}
-
-int z_ProxSupportUnit(ODR o, Z_ProxSupportUnit **p, int opt, const char *name)
-{
-    static Odr_arm arm[] =
-    {
-       {ODR_IMPLICIT, ODR_CONTEXT, 1, Z_ProxSupportUnit_known,
-        (Odr_fun)odr_integer, 0},
-       {ODR_IMPLICIT, ODR_CONTEXT, 2, Z_ProxSupportUnit_private,
-        (Odr_fun)z_ProxSupportPrivate, 0},
-       {-1, -1, -1, -1, 0, 0}
-    };
-    
-    if (!odr_initmember(o, p, sizeof(**p)))
-       return opt && odr_ok(o);
-    if (odr_choice(o, arm, &(*p)->u, &(*p)->which, 0))
-       return 1;
-    *p = 0;
-    return opt && odr_ok(o);
-}
-
-int z_ProximitySupport(ODR o, Z_ProximitySupport **p, int opt,
-                      const char *name)
-{
-    if (!odr_sequence_begin(o, p, sizeof(**p), 0))
-        return opt && odr_ok(o);
-    return
-       odr_implicit(o, odr_bool, &(*p)->anySupport, ODR_CONTEXT, 0, 0) &&
-       odr_implicit_settag(o, ODR_CONTEXT, 1) &&
-       (odr_sequence_of(o, (Odr_fun)z_ProxSupportUnit, &(*p)->unitsSupported,
-                        &(*p)->num_unitsSupported, 0) || odr_ok(o)) &&
-        odr_sequence_end(o);
-}
-
-int z_SearchKey(ODR o, Z_SearchKey **p, int opt, const char *name)
-{
-    if (!odr_sequence_begin(o, p, sizeof(**p), 0))
-        return opt && odr_ok(o);
-    return
-        odr_implicit(o, z_InternationalString, &(*p)->searchKey,
-                    ODR_CONTEXT, 0, 0) &&
-        odr_implicit(o, z_HumanString, &(*p)->description,
-                    ODR_CONTEXT, 1, 1) &&
-        odr_sequence_end(o);
-}
-
-int z_AccessRestrictionsUnit(ODR o, Z_AccessRestrictionsUnit **p, int opt,
-                            const char *name)
-{
-    if (!odr_sequence_begin(o, p, sizeof(**p), 0))
-        return opt && odr_ok(o);
-    return
-        odr_explicit(o, odr_integer, &(*p)->accessType, ODR_CONTEXT, 0, 0) &&
-        odr_implicit(o, z_HumanString, &(*p)->accessText, ODR_CONTEXT, 1, 1) &&
-       odr_implicit_settag(o, ODR_CONTEXT, 2) &&
-       (odr_sequence_of(o, (Odr_fun)odr_oid, &(*p)->accessChallenges,
-                        &(*p)->num_accessChallenges, 0) || odr_ok(o)) &&
-        odr_sequence_end(o);
-}
-
-int z_AccessRestrictions(ODR o, Z_AccessRestrictions **p, int opt,
-                        const char *name)
-{
-    if (!odr_initmember(o, p, sizeof(**p)))
-       return opt && odr_ok(o);
-    if (odr_sequence_of(o, (Odr_fun)z_AccessRestrictionsUnit, &(*p)->elements,
-                       &(*p)->num, 0))
-       return 1;
-    *p = 0;
-    return opt && odr_ok(o);
-}
-
-int z_CostsOtherCharge(ODR o, Z_CostsOtherCharge **p, int opt,
-                      const char *name)
-{
-    if (!odr_sequence_begin(o, p, sizeof(**p), 0))
-       return opt && odr_ok(o);
-    return
-        odr_implicit(o, z_HumanString, &(*p)->forWhat, ODR_CONTEXT, 1, 0) &&
-        odr_implicit(o, z_Charge, &(*p)->charge, ODR_CONTEXT, 2, 1) &&
-        odr_sequence_end(o);
-}
-
-int z_Costs(ODR o, Z_Costs **p, int opt, const char *name)
-{
-    if (!odr_sequence_begin(o, p, sizeof(**p), 0))
-        return opt && odr_ok(o);
-    return
-        odr_implicit(o, z_Charge, &(*p)->connectCharge, ODR_CONTEXT, 0, 1) &&
-        odr_implicit(o, z_Charge, &(*p)->connectTime, ODR_CONTEXT, 1, 1) &&
-        odr_implicit(o, z_Charge, &(*p)->displayCharge, ODR_CONTEXT, 2, 1) &&
-        odr_implicit(o, z_Charge, &(*p)->searchCharge, ODR_CONTEXT, 3, 1) &&
-        odr_implicit(o, z_Charge, &(*p)->subscriptCharge, ODR_CONTEXT, 4, 1) &&
-       odr_implicit_settag(o, ODR_CONTEXT, 5) &&
-       (odr_sequence_of(o, (Odr_fun)z_CostsOtherCharge, &(*p)->otherCharges,
-                        &(*p)->num_otherCharges, 0) || odr_ok(o)) &&
-        odr_sequence_end(o);
-}
-
-int z_Charge(ODR o, Z_Charge **p, int opt, const char *name)
-{
-    if (!odr_sequence_begin(o, p, sizeof(**p), 0))
-        return opt && odr_ok(o);
-    return
-        odr_implicit(o, z_IntUnit, &(*p)->cost, ODR_CONTEXT, 1, 0) &&
-        odr_implicit(o, z_Unit, &(*p)->perWhat, ODR_CONTEXT, 2, 1) &&
-        odr_implicit(o, z_HumanString, &(*p)->text, ODR_CONTEXT, 3, 1) &&
-        odr_sequence_end(o);
-}
-
-int z_DatabaseList(ODR o, Z_DatabaseList **p, int opt, const char *name)
-{
-    if (!odr_initmember(o, p, sizeof(**p)))
-       return opt && odr_ok(o);
-    if (odr_sequence_of(o, z_DatabaseName, &(*p)->databases,
-       &(*p)->num_databases, 0))
-       return 1;
-    *p = 0;
-    return opt && odr_ok(o);
-}
-
-int z_AttributeCombinations(ODR o, Z_AttributeCombinations **p, int opt,
-                           const char *name)
-{
-    if (!odr_sequence_begin(o, p, sizeof(**p), 0))
-        return opt && odr_ok(o);
-    return
-        odr_implicit(o, odr_oid, &(*p)->defaultAttributeSet,
-                    ODR_CONTEXT, 0, 0) &&
-       odr_implicit_settag(o, ODR_CONTEXT, 1) &&
-       odr_sequence_of(o, (Odr_fun)z_AttributeCombination,
-                       &(*p)->legalCombinations,
-                       &(*p)->num_legalCombinations, 0) &&
-        odr_sequence_end(o);
-}
-
-int z_AttributeCombination(ODR o, Z_AttributeCombination **p, int opt,
-                          const char *name)
-{
-    if (!odr_initmember(o, p, sizeof(**p)))
-       return opt && odr_ok(o);
-    if (odr_sequence_of(o, (Odr_fun)z_AttributeOccurrence, &(*p)->occurrences,
-                       &(*p)->num_occurrences, 0))
-       return 1;
-    *p = 0;
-    return opt && odr_ok(o);
-}
-
-int z_AttributeValueList(ODR o, Z_AttributeValueList **p, int opt,
-                        const char *name)
-{
-    if (!odr_initmember(o, p, sizeof(**p)))
-       return opt && odr_ok(o);
-    if (odr_sequence_of(o, (Odr_fun)z_StringOrNumeric, &(*p)->attributes,
-                       &(*p)->num_attributes, 0))
-       return 1;
-    *p = 0;
-    return opt && odr_ok(o);
-}
-
-int z_AttributeOccurrence(ODR o, Z_AttributeOccurrence **p, int opt,
-                         const char *name)
-{
-    static Odr_arm arm[] =
-    {
-       {ODR_IMPLICIT, ODR_CONTEXT, 3, Z_AttributeOcc_any_or_none,
-        (Odr_fun)odr_null, 0},
-       {ODR_IMPLICIT, ODR_CONTEXT, 4, Z_AttributeOcc_specific,
-        (Odr_fun)z_AttributeValueList, 0},
-       {-1, -1, -1, -1, 0, 0}
-    };
-    
-    if (!odr_sequence_begin(o, p, sizeof(**p), 0))
-        return opt && odr_ok(o);
-    return
-        odr_implicit(o, odr_oid, &(*p)->attributeSet, ODR_CONTEXT, 0, 1) &&
-        odr_implicit(o, odr_integer, &(*p)->attributeType,
-                    ODR_CONTEXT, 1, 0) &&
-        odr_implicit(o, odr_null, &(*p)->mustBeSupplied, ODR_CONTEXT, 2, 1) &&
-       odr_choice(o, arm, &(*p)->attributeValues, &(*p)->which, 0) &&
-        odr_sequence_end(o);
-}
-
-int z_AttributeValue(ODR o, Z_AttributeValue **p, int opt, const char *name)
-{
-    if (!odr_sequence_begin(o, p, sizeof(**p), 0))
-        return opt && odr_ok(o);
-    return
-        odr_explicit(o, z_StringOrNumeric, &(*p)->value, ODR_CONTEXT, 0, 0) &&
-        odr_implicit(o, z_HumanString, &(*p)->description,
-                    ODR_CONTEXT, 1, 1) &&
-       odr_implicit_settag(o, ODR_CONTEXT, 2) &&
-       (odr_sequence_of(o, (Odr_fun)z_StringOrNumeric, &(*p)->subAttributes,
-                        &(*p)->num_subAttributes, 0) || odr_ok(o)) &&
-       odr_implicit_settag(o, ODR_CONTEXT, 3) &&
-       (odr_sequence_of(o, (Odr_fun)z_StringOrNumeric, &(*p)->superAttributes,
-                        &(*p)->num_superAttributes, 0) || odr_ok(o)) &&
-        odr_implicit(o, odr_null, &(*p)->partialSupport, ODR_CONTEXT, 4, 1) &&
-       odr_sequence_end(o);
-}
-
-
-
-int z_TargetInfo(ODR o, Z_TargetInfo **p, int opt, const char *name)
-{
-    if (!odr_sequence_begin(o, p, sizeof(**p), 0))
-        return opt && odr_ok(o);
-    return
-        odr_implicit(o, z_CommonInfo, &(*p)->commonInfo,
-                    ODR_CONTEXT, 0, 1) &&
-       odr_implicit(o, z_InternationalString, &(*p)->name,
-                    ODR_CONTEXT, 1, 0) &&
-        odr_implicit(o, z_HumanString, &(*p)->recentNews,
-                    ODR_CONTEXT, 2, 1) &&
-        odr_implicit(o, z_IconObject, &(*p)->icon,
-                    ODR_CONTEXT, 3, 1) &&
-        odr_implicit(o, odr_bool, &(*p)->namedResultSets,
-                    ODR_CONTEXT, 4, 0) &&
-        odr_implicit(o, odr_bool, &(*p)->multipleDBsearch,
-                    ODR_CONTEXT, 5, 0) &&
-        odr_implicit(o, odr_integer, &(*p)->maxResultSets,
-                    ODR_CONTEXT, 6, 1) &&
-        odr_implicit(o, odr_integer, &(*p)->maxResultSize,
-                    ODR_CONTEXT, 7, 1) &&
-        odr_implicit(o, odr_integer, &(*p)->maxTerms,
-                    ODR_CONTEXT, 8, 1) &&
-        odr_implicit(o, z_IntUnit, &(*p)->timeoutInterval,
-                    ODR_CONTEXT, 9, 1) &&
-        odr_implicit(o, z_HumanString, &(*p)->welcomeMessage,
-                    ODR_CONTEXT, 10, 1) &&
-        odr_implicit(o, z_ContactInfo, &(*p)->contactInfo,
-                    ODR_CONTEXT, 11, 1) &&
-        odr_implicit(o, z_HumanString, &(*p)->description,
-                    ODR_CONTEXT, 12, 1) &&
-       odr_implicit_settag(o, ODR_CONTEXT, 13) &&
-       (odr_sequence_of(o, z_InternationalString, &(*p)->nicknames,
-                        &(*p)->num_nicknames, 0) || odr_ok(o)) &&
-        odr_implicit(o, z_HumanString, &(*p)->usageRest,
-                    ODR_CONTEXT, 14, 1) &&
-        odr_implicit(o, z_HumanString, &(*p)->paymentAddr,
-                    ODR_CONTEXT, 15, 1) &&
-        odr_implicit(o, z_HumanString, &(*p)->hours, ODR_CONTEXT, 16, 1) &&
-       odr_implicit_settag(o, ODR_CONTEXT, 17) &&
-       (odr_sequence_of(o, (Odr_fun)z_DatabaseList, &(*p)->dbCombinations,
-                        &(*p)->num_dbCombinations, 0) || odr_ok(o)) &&
-       odr_implicit_settag(o, ODR_CONTEXT, 18) &&
-       (odr_sequence_of(o, (Odr_fun)z_NetworkAddress, &(*p)->addresses,
-                        &(*p)->num_addresses, 0) || odr_ok(o)) &&
-        odr_implicit_settag (o, ODR_CONTEXT, 101) &&
-        (odr_sequence_of(o, (Odr_fun) z_InternationalString, &(*p)->languages,
-                        &(*p)->num_languages, 0) || odr_ok(o)) &&
-        odr_implicit(o, z_AccessInfo, &(*p)->commonAccessInfo,
-                    ODR_CONTEXT, 19, 1) &&
-        odr_sequence_end(o);
-}
-
-int z_DatabaseInfo(ODR o, Z_DatabaseInfo **p, int opt, const char *name)
-{
-    static Odr_arm arm[] =
-    {
-       {ODR_IMPLICIT, ODR_CONTEXT, 0, Z_DatabaseInfo_actualNumber,
-        (Odr_fun)odr_integer, 0},
-       {ODR_IMPLICIT, ODR_CONTEXT, 1, Z_DatabaseInfo_approxNumber,
-        (Odr_fun)odr_integer, 0},
-       {-1, -1, -1, -1, 0, 0}
-    };
-
-    if (!odr_sequence_begin(o, p, sizeof(**p), 0))
-        return opt && odr_ok(o);
-    return
-        odr_implicit(o, z_CommonInfo, &(*p)->commonInfo, ODR_CONTEXT, 0, 1) &&
-        odr_implicit(o, z_DatabaseName, &(*p)->name, ODR_CONTEXT, 1, 0) &&
-        odr_implicit(o, odr_null, &(*p)->explainDatabase, ODR_CONTEXT, 2, 1) &&
-       odr_implicit_settag(o, ODR_CONTEXT, 3) &&
-       (odr_sequence_of(o, z_DatabaseName, &(*p)->nicknames,
-           &(*p)->num_nicknames, 0) || odr_ok(o)) &&
-        odr_implicit(o, z_IconObject, &(*p)->icon, ODR_CONTEXT, 4, 1) &&
-        odr_implicit(o, odr_bool, &(*p)->userFee, ODR_CONTEXT, 5, 0) &&
-        odr_implicit(o, odr_bool, &(*p)->available, ODR_CONTEXT, 6, 0) &&
-        odr_implicit(o, z_HumanString, &(*p)->titleString,
-                    ODR_CONTEXT, 7, 1) &&
-       odr_implicit_settag(o, ODR_CONTEXT, 8) &&
-       (odr_sequence_of(o, (Odr_fun)z_HumanString, &(*p)->keywords,
-                        &(*p)->num_keywords, 0) || odr_ok(o)) &&
-        odr_implicit(o, z_HumanString, &(*p)->description,
-                    ODR_CONTEXT, 9, 1) &&
-        odr_implicit(o, z_DatabaseList, &(*p)->associatedDbs,
-                    ODR_CONTEXT, 10, 1) &&
-        odr_implicit(o, z_DatabaseList, &(*p)->subDbs, ODR_CONTEXT, 11, 1) &&
-        odr_implicit(o, z_HumanString, &(*p)->disclaimers,
-                    ODR_CONTEXT, 12, 1) &&
-        odr_implicit(o, z_HumanString, &(*p)->news, ODR_CONTEXT, 13, 1) &&
-       ((odr_constructed_begin(o, &(*p)->u.actualNumber,
-                               ODR_CONTEXT, 14, 0) &&
-         odr_choice(o, arm, &(*p)->u.actualNumber, &(*p)->which, 0) &&
-         odr_constructed_end(o)) || odr_ok(o)) &&
-        odr_implicit(o, z_HumanString, &(*p)->defaultOrder,
-                    ODR_CONTEXT, 15, 1) &&
-        odr_implicit(o, odr_integer, &(*p)->avRecordSize,
-                    ODR_CONTEXT, 16, 1) &&
-        odr_implicit(o, odr_integer, &(*p)->maxRecordSize,
-                    ODR_CONTEXT, 17, 1) &&
-        odr_implicit(o, z_HumanString, &(*p)->hours, ODR_CONTEXT, 18, 1) &&
-        odr_implicit(o, z_HumanString, &(*p)->bestTime, ODR_CONTEXT, 19, 1) &&
-        odr_implicit(o, odr_generalizedtime, &(*p)->lastUpdate,
-                    ODR_CONTEXT, 20, 1) &&
-        odr_implicit(o, z_IntUnit, &(*p)->updateInterval,
-                    ODR_CONTEXT, 21, 1) &&
-        odr_implicit(o, z_HumanString, &(*p)->coverage, ODR_CONTEXT, 22, 1) &&
-        odr_implicit(o, odr_bool, &(*p)->proprietary, ODR_CONTEXT, 23, 1) &&
-        odr_implicit(o, z_HumanString, &(*p)->copyrightText,
-                    ODR_CONTEXT, 24, 1) &&
-        odr_implicit(o, z_HumanString, &(*p)->copyrightNotice,
-                    ODR_CONTEXT, 25, 1) &&
-        odr_implicit(o, z_ContactInfo, &(*p)->producerContactInfo,
-                    ODR_CONTEXT, 26, 1) &&
-        odr_implicit(o, z_ContactInfo, &(*p)->supplierContactInfo,
-                    ODR_CONTEXT, 27, 1) &&
-        odr_implicit(o, z_ContactInfo, &(*p)->submissionContactInfo,
-                    ODR_CONTEXT, 28, 1) &&
-        odr_implicit(o, z_AccessInfo, &(*p)->accessInfo, ODR_CONTEXT, 29, 1) &&
-        odr_sequence_end(o);
-}
-
-int z_TagTypeMapping(ODR o, Z_TagTypeMapping **p, int opt, const char *name)
-{
-    if (!odr_sequence_begin(o, p, sizeof(**p), 0))
-       return opt;
-    return
-       odr_implicit(o, odr_integer, &(*p)->tagType, ODR_CONTEXT, 0, 0) &&
-       odr_implicit(o, odr_oid, &(*p)->tagSet, ODR_CONTEXT, 1, 1) &&
-       odr_implicit(o, odr_null, &(*p)->defaultTagType, ODR_CONTEXT, 2, 1) &&
-       odr_sequence_end(o);
-}
-
-int z_SchemaInfo(ODR o, Z_SchemaInfo **p, int opt, const char *name)
-{
-    if (!odr_sequence_begin(o, p, sizeof(**p), 0))
-        return opt && odr_ok(o);
-    return
-        odr_implicit(o, z_CommonInfo, &(*p)->commonInfo, ODR_CONTEXT, 0, 1) &&
-        odr_implicit(o, odr_oid, &(*p)->schema, ODR_CONTEXT, 1, 0) &&
-        odr_implicit(o, z_InternationalString, &(*p)->name, ODR_CONTEXT,
-           2, 0) &&
-        odr_implicit(o, z_HumanString, &(*p)->description,
-                    ODR_CONTEXT, 3, 1) &&
-       odr_implicit_settag(o, ODR_CONTEXT, 4) &&
-       (odr_sequence_of(o, (Odr_fun)z_TagTypeMapping, &(*p)->tagTypeMapping,
-                        &(*p)->num_tagTypeMapping, 0) || odr_ok(o)) &&
-       odr_implicit_settag(o, ODR_CONTEXT, 5) &&
-       (odr_sequence_of(o, (Odr_fun)z_ElementInfo, &(*p)->recordStructure,
-                        &(*p)->num_recordStructure, 0) || odr_ok(o)) &&
-        odr_sequence_end(o);
-}
-
-int z_ElementInfo(ODR o, Z_ElementInfo **p, int opt, const char *name)
-{
-    if (!odr_sequence_begin(o, p, sizeof(**p), 0))
-        return opt && odr_ok(o);
-    return
-        odr_implicit(o, z_InternationalString, &(*p)->elementName,
-                    ODR_CONTEXT, 1, 0) &&
-        odr_implicit(o, z_Path, &(*p)->elementTagPath, ODR_CONTEXT, 2, 0) &&
-        odr_explicit(o, z_ElementDataType, &(*p)->dataType,
-                    ODR_CONTEXT, 3, 1) &&
-        odr_implicit(o, odr_bool, &(*p)->required, ODR_CONTEXT, 4, 0) &&
-        odr_implicit(o, odr_bool, &(*p)->repeatable, ODR_CONTEXT, 5, 0) &&
-        odr_implicit(o, z_HumanString, &(*p)->description,
-                    ODR_CONTEXT, 6, 1) &&
-        odr_sequence_end(o);
-}
-
-int z_PathUnit(ODR o, Z_PathUnit **p, int opt, const char *name)
-{
-    if (!odr_sequence_begin(o, p, sizeof(**p), 0))
-       return opt;
-    return
-       odr_implicit(o, odr_integer, &(*p)->tagType, ODR_CONTEXT, 1, 0) &&
-       odr_explicit(o, z_StringOrNumeric, &(*p)->tagValue,
-                    ODR_CONTEXT, 2, 0) &&
-       odr_sequence_end(o);
-}
-
-int z_Path(ODR o, Z_Path **p, int opt, const char *name)
-{
-    if (!odr_initmember(o, p, sizeof(**p)))
-       return opt && odr_ok(o);
-    odr_implicit_settag(o, ODR_CONTEXT, 201);
-    if (odr_sequence_of(o, (Odr_fun)z_OtherInformationUnit, &(*p)->list,
-                       &(*p)->num, 0))
-       return 1;
-    *p = 0;
-    return opt && odr_ok(o);
-}
-
-int z_ElementInfoList(ODR o, Z_Path **p, int opt, const char *name)
-{
-    if (!odr_initmember(o, p, sizeof(**p)))
-       return opt && odr_ok(o);
-    odr_implicit_settag(o, ODR_CONTEXT, 201);
-    if (odr_sequence_of(o, (Odr_fun)z_OtherInformationUnit, &(*p)->list,
-                       &(*p)->num, 0))
-       return 1;
-    *p = 0;
-    return opt && odr_ok(o);
-}
-
-int z_ElementDataType(ODR o, Z_ElementDataType **p, int opt, const char *name)
-{
-    static Odr_arm arm[] =
-    {
-       {ODR_IMPLICIT, ODR_CONTEXT, 0, Z_ElementDataType_primitive,
-        (Odr_fun)odr_integer, 0},
-       {ODR_IMPLICIT, ODR_CONTEXT, 1, Z_ElementDataType_structured,
-        (Odr_fun)z_ElementInfoList, 0},
-       {-1, -1, -1, -1, 0, 0}
-    };
-    
-    if (!odr_initmember(o, p, sizeof(**p)))
-       return opt && odr_ok(o);
-    if (odr_choice(o, arm, &(*p)->u, &(*p)->which, 0))
-       return 1;
-    *p = 0;
-    return opt && odr_ok(o);
-}
-
-int z_TagSetInfoElements(ODR o, Z_TagSetInfoElements **p, int opt,
-                        const char *name)
-{
-    if (!odr_sequence_begin(o, p, sizeof(**p), 0))
-       return opt;
-    return
-       odr_implicit(o, z_InternationalString, &(*p)->elementname,
-                    ODR_CONTEXT, 1, 0) &&
-       odr_implicit_settag(o, ODR_CONTEXT, 2) &&
-       (odr_sequence_of(o, z_InternationalString, &(*p)->nicknames,
-                        &(*p)->num_nicknames, 0) || odr_ok(o)) &&
-       odr_explicit(o, z_StringOrNumeric, &(*p)->elementTag,
-                    ODR_CONTEXT, 3, 0) &&
-       odr_implicit(o, z_HumanString, &(*p)->description,
-                    ODR_CONTEXT, 4, 1) &&
-       odr_implicit(o, odr_integer, &(*p)->dataType, ODR_CONTEXT, 5, 1) &&
-       z_OtherInformation(o, &(*p)->otherTagInfo, 1, 0) &&
-       odr_sequence_end(o);
-}
-
-int z_TagSetInfo(ODR o, Z_TagSetInfo **p, int opt, const char *name)
-{
-    if (!odr_sequence_begin(o, p, sizeof(**p), 0))
-        return opt && odr_ok(o);
-    return
-        odr_implicit(o, z_CommonInfo, &(*p)->commonInfo, ODR_CONTEXT, 0, 1) &&
-        odr_implicit(o, odr_oid, &(*p)->tagSet, ODR_CONTEXT, 1, 0) &&
-        odr_implicit(o, z_InternationalString, &(*p)->name,
-                    ODR_CONTEXT, 2, 0) &&
-        odr_implicit(o, z_HumanString, &(*p)->description,
-                    ODR_CONTEXT, 3, 1) &&
-       odr_implicit_settag(o, ODR_CONTEXT, 4) &&
-       (odr_sequence_of(o, (Odr_fun)z_TagSetInfoElements, &(*p)->elements,
-                        &(*p)->num_elements, 0) || odr_ok(o)) &&
-        odr_sequence_end(o);
-}
-
-int z_RecordSyntaxInfo(ODR o, Z_RecordSyntaxInfo **p, int opt,
-                      const char *name)
-{
-    if (!odr_sequence_begin(o, p, sizeof(**p), 0))
-        return opt && odr_ok(o);
-    return
-        odr_implicit(o, z_CommonInfo, &(*p)->commonInfo, ODR_CONTEXT, 0, 1) &&
-        odr_implicit(o, odr_oid, &(*p)->recordSyntax, ODR_CONTEXT, 1, 0) &&
-        odr_implicit(o, z_InternationalString, &(*p)->name,
-                    ODR_CONTEXT, 2, 0) &&
-       odr_implicit_settag(o, ODR_CONTEXT, 3) &&
-       (odr_sequence_of(o, (Odr_fun)odr_oid, &(*p)->transferSyntaxes,
-                        &(*p)->num_transferSyntaxes, 0) || odr_ok(o)) &&
-        odr_implicit(o, z_HumanString, &(*p)->description,
-                    ODR_CONTEXT, 4, 1) &&
-        odr_implicit(o, z_InternationalString, &(*p)->asn1Module,
-                    ODR_CONTEXT, 5, 1) &&
-       odr_implicit_settag(o, ODR_CONTEXT, 6) &&
-       (odr_sequence_of(o, (Odr_fun)z_ElementInfo, &(*p)->abstractStructure,
-           &(*p)->num_abstractStructure, 0) || odr_ok(o)) &&
-        odr_sequence_end(o);
-}
-
-int z_AttributeSetInfo(ODR o, Z_AttributeSetInfo **p, int opt,
-                      const char *name)
-{
-    if (!odr_sequence_begin(o, p, sizeof(**p), 0))
-        return opt && odr_ok(o);
-    return
-        odr_implicit(o, z_CommonInfo, &(*p)->commonInfo, ODR_CONTEXT, 0, 1) &&
-        odr_implicit(o, odr_oid, &(*p)->attributeSet, ODR_CONTEXT, 1, 0) &&
-        odr_implicit(o, z_InternationalString, &(*p)->name,
-                    ODR_CONTEXT, 2, 0) &&
-       odr_implicit_settag(o, ODR_CONTEXT, 3) &&
-       (odr_sequence_of(o, (Odr_fun)z_AttributeType, &(*p)->attributes,
-                        &(*p)->num_attributes, 0) || odr_ok(o)) &&
-        odr_implicit(o, z_HumanString, &(*p)->description,
-                    ODR_CONTEXT, 4, 1) &&
-        odr_sequence_end(o);
-}
-
-int z_AttributeType(ODR o, Z_AttributeType **p, int opt, const char *name)
-{
-    if (!odr_sequence_begin(o, p, sizeof(**p), 0))
-        return opt && odr_ok(o);
-    return
-        odr_implicit(o, z_InternationalString, &(*p)->name,
-                    ODR_CONTEXT, 0, 1) &&
-        odr_implicit(o, z_HumanString, &(*p)->description,
-                    ODR_CONTEXT, 1, 1) &&
-        odr_implicit(o, odr_integer, &(*p)->attributeType,
-                    ODR_CONTEXT, 2, 0) &&
-       odr_implicit_settag(o, ODR_CONTEXT, 3) &&
-       odr_sequence_of(o, (Odr_fun)z_AttributeDescription,
-                       &(*p)->attributeValues,
-                       &(*p)->num_attributeValues, 0) &&
-        odr_sequence_end(o);
-}
-
-int z_AttributeDescription(ODR o, Z_AttributeDescription **p, int opt,
-                          const char *name)
-{
-    if (!odr_sequence_begin(o, p, sizeof(**p), 0))
-        return opt && odr_ok(o);
-    return
-        odr_implicit(o, z_InternationalString, &(*p)->name,
-                    ODR_CONTEXT, 0, 1) &&
-        odr_implicit(o, z_HumanString, &(*p)->description,
-                    ODR_CONTEXT, 1, 1) &&
-        odr_explicit(o, z_StringOrNumeric, &(*p)->attributeValue,
-                    ODR_CONTEXT, 2, 0) &&
-       odr_implicit_settag(o, ODR_CONTEXT, 3) &&
-       (odr_sequence_of(o, (Odr_fun)z_StringOrNumeric,
-                        &(*p)->equivalentAttributes,
-                        &(*p)->num_equivalentAttributes, 0) || odr_ok(o)) &&
-        odr_sequence_end(o);
-}
-
-int z_TermListElement(ODR o, Z_TermListElement **p, int opt, const char *name)
-{
-    if (!odr_sequence_begin(o, p, sizeof(**p), 0))
-       return opt && odr_ok(o);
-    return
-        odr_implicit(o, z_InternationalString, &(*p)->name,
-                    ODR_CONTEXT, 1, 0) &&
-        odr_implicit(o, z_HumanString, &(*p)->title, ODR_CONTEXT, 2, 1) &&
-        odr_implicit(o, odr_integer, &(*p)->searchCost, ODR_CONTEXT, 3, 1) &&
-        odr_implicit(o, odr_bool, &(*p)->scanable, ODR_CONTEXT, 4, 0) &&
-       odr_implicit_settag(o, ODR_CONTEXT, 5) &&
-       (odr_sequence_of(o, z_InternationalString, &(*p)->broader,
-                        &(*p)->num_broader, 0) || odr_ok(o)) &&
-       odr_implicit_settag(o, ODR_CONTEXT, 6) &&
-       (odr_sequence_of(o, z_InternationalString, &(*p)->narrower,
-                        &(*p)->num_narrower, 0) || odr_ok(o)) &&
-       odr_sequence_end(o);
-}
-
-int z_TermListInfo(ODR o, Z_TermListInfo **p, int opt, const char *name)
-{
-    if (!odr_sequence_begin(o, p, sizeof(**p), 0))
-        return opt && odr_ok(o);
-    return
-        odr_implicit(o, z_CommonInfo, &(*p)->commonInfo, ODR_CONTEXT, 0, 1) &&
-        odr_implicit(o, z_DatabaseName, &(*p)->databaseName,
-                    ODR_CONTEXT, 1, 0) &&
-       odr_implicit_settag(o, ODR_CONTEXT, 2) &&
-       (odr_sequence_of(o, (Odr_fun)z_TermListElement, &(*p)->termLists,
-                        &(*p)->num_termLists, 0) || odr_ok(o)) &&
-        odr_sequence_end(o);
-}
-
-int z_ExtendedServicesInfo(ODR o, Z_ExtendedServicesInfo **p, int opt,
-                          const char *name)
-{
-    if (!odr_sequence_begin(o, p, sizeof(**p), 0))
-        return opt && odr_ok(o);
-    return
-        odr_implicit(o, z_CommonInfo, &(*p)->commonInfo, ODR_CONTEXT, 0, 1) &&
-        odr_implicit(o, odr_oid, &(*p)->type, ODR_CONTEXT, 1, 0) &&
-        odr_implicit(o, z_InternationalString, &(*p)->name,
-                    ODR_CONTEXT, 2, 1) &&
-        odr_implicit(o, odr_bool, &(*p)->privateType, ODR_CONTEXT, 3, 0) &&
-        odr_implicit(o, odr_bool, &(*p)->restrictionsApply,
-                    ODR_CONTEXT, 5, 0) &&
-        odr_implicit(o, odr_bool, &(*p)->feeApply, ODR_CONTEXT, 6, 0) &&
-        odr_implicit(o, odr_bool, &(*p)->available, ODR_CONTEXT, 7, 0) &&
-        odr_implicit(o, odr_bool, &(*p)->retentionSupported,
-                    ODR_CONTEXT, 8, 0) &&
-        odr_implicit(o, odr_integer, &(*p)->waitAction, ODR_CONTEXT, 9, 0) &&
-        odr_implicit(o, z_HumanString, &(*p)->description,
-                    ODR_CONTEXT, 10, 1) &&
-        odr_implicit(o, z_External, &(*p)->specificExplain,
-                    ODR_CONTEXT, 11, 1) &&
-        odr_implicit(o, z_InternationalString, &(*p)->esASN,
-                    ODR_CONTEXT, 12, 1) &&
-        odr_sequence_end(o);
-}
-
-int z_AttributeDetails(ODR o, Z_AttributeDetails **p, int opt,
-                      const char *name)
-{
-    if (!odr_sequence_begin(o, p, sizeof(**p), 0))
-        return opt && odr_ok(o);
-    return
-        odr_implicit(o, z_CommonInfo, &(*p)->commonInfo, ODR_CONTEXT, 0, 1) &&
-        odr_implicit(o, z_DatabaseName, &(*p)->databaseName,
-                    ODR_CONTEXT, 1, 0) &&
-       odr_implicit_settag(o, ODR_CONTEXT, 2) &&
-       (odr_sequence_of(o, (Odr_fun)z_AttributeSetDetails,
-                        &(*p)->attributesBySet,
-                        &(*p)->num_attributesBySet, 0) && odr_ok(o)) &&
-        odr_implicit(o, z_AttributeCombinations, &(*p)->attributeCombinations,
-                    ODR_CONTEXT, 3, 1) &&
-        odr_sequence_end(o);
-}
-
-int z_AttributeSetDetails(ODR o, Z_AttributeSetDetails **p, int opt,
-                         const char *name)
-{
-    if (!odr_sequence_begin(o, p, sizeof(**p), 0))
-        return opt && odr_ok(o);
-    return
-        odr_implicit(o, odr_oid, &(*p)->attributeSet,
-                    ODR_CONTEXT, 0, 0) &&
-       odr_implicit_settag(o, ODR_CONTEXT, 1) &&
-       odr_sequence_of(o, (Odr_fun)z_AttributeTypeDetails,
-                       &(*p)->attributesByType,
-                       &(*p)->num_attributesByType, 0) &&
-        odr_sequence_end(o);
-}
-
-int z_AttributeTypeDetails(ODR o, Z_AttributeTypeDetails **p, int opt,
-                          const char *name)
-{
-    if (!odr_sequence_begin(o, p, sizeof(**p), 0))
-        return opt && odr_ok(o);
-    return
-        odr_implicit(o, odr_integer, &(*p)->attributeType,
-                    ODR_CONTEXT, 0, 0) &&
-        odr_implicit(o, z_OmittedAttributeInterpretation,
-                    &(*p)->defaultIfOmitted,
-                    ODR_CONTEXT, 1, 1) &&
-       odr_implicit_settag(o, ODR_CONTEXT, 2) &&
-       (odr_sequence_of(o, (Odr_fun)z_AttributeValue, &(*p)->attributeValues,
-                        &(*p)->num_attributeValues, 0) || odr_ok(o)) &&
-        odr_sequence_end(o);
-}
-
-int z_OmittedAttributeInterpretation(ODR o,
-                                    Z_OmittedAttributeInterpretation **p,
-                                    int opt, const char *name)
-{
-    if (!odr_sequence_begin(o, p, sizeof(**p), 0))
-        return opt && odr_ok(o);
-    return
-        odr_explicit(o, z_StringOrNumeric, &(*p)->defaultValue,
-                    ODR_CONTEXT, 0, 1) &&
-        odr_implicit(o, z_HumanString, &(*p)->defaultDescription,
-                    ODR_CONTEXT, 1, 1) &&
-        odr_sequence_end(o);
-}
-
-int z_EScanInfo(ODR o, Z_EScanInfo **p, int opt, const char *name)
-{
-    if (!odr_sequence_begin(o, p, sizeof(**p), 0))
-        return opt && odr_ok(o);
-    return
-        odr_implicit(o, odr_integer, &(*p)->maxStepSize, ODR_CONTEXT, 0, 1) &&
-        odr_implicit(o, z_HumanString, &(*p)->collatingSequence,
-                    ODR_CONTEXT, 1, 1) &&
-        odr_implicit(o, odr_bool, &(*p)->increasing, ODR_CONTEXT, 2, 1) &&
-       odr_sequence_end(o);
-}
-
-int z_TermListDetails(ODR o, Z_TermListDetails **p, int opt, const char *name)
-{
-    if (!odr_sequence_begin(o, p, sizeof(**p), 0))
-        return opt && odr_ok(o);
-    return
-        odr_implicit(o, z_CommonInfo, &(*p)->commonInfo, ODR_CONTEXT, 0, 1) &&
-        odr_implicit(o, z_InternationalString, &(*p)->termListName,
-                    ODR_CONTEXT, 1, 0) &&
-        odr_implicit(o, z_HumanString, &(*p)->description,
-                    ODR_CONTEXT, 2, 1) &&
-        odr_implicit(o, z_AttributeCombinations, &(*p)->attributes,
-                    ODR_CONTEXT, 3, 1) &&
-       odr_implicit(o, z_EScanInfo, &(*p)->scanInfo, ODR_CONTEXT, 4, 1) &&
-        odr_implicit(o, odr_integer, &(*p)->estNumberTerms,
-                    ODR_CONTEXT, 5, 1) &&
-       odr_implicit_settag(o, ODR_CONTEXT, 6) &&
-       (odr_sequence_of(o, (Odr_fun)z_Term, &(*p)->sampleTerms,
-           &(*p)->num_sampleTerms, 0) || odr_ok(o)) &&
-        odr_sequence_end(o);
-}
-
-int z_ElementSetDetails(ODR o, Z_ElementSetDetails **p, int opt,
-                       const char *name)
-{
-    if (!odr_sequence_begin(o, p, sizeof(**p), 0))
-        return opt && odr_ok(o);
-    return
-        odr_implicit(o, z_CommonInfo, &(*p)->commonInfo, ODR_CONTEXT, 0, 1) &&
-        odr_implicit(o, z_DatabaseName, &(*p)->databaseName,
-                    ODR_CONTEXT, 1, 0) &&
-        odr_implicit(o, z_ElementSetName, &(*p)->elementSetName,
-                    ODR_CONTEXT, 2, 0) &&
-        odr_implicit(o, odr_oid, &(*p)->recordSyntax, ODR_CONTEXT, 3, 0) &&
-        odr_implicit(o, odr_oid, &(*p)->schema, ODR_CONTEXT, 4, 0) &&
-        odr_implicit(o, z_HumanString, &(*p)->description,
-                    ODR_CONTEXT, 5, 1) &&
-       odr_implicit_settag(o, ODR_CONTEXT, 6) &&
-       (odr_sequence_of(o, (Odr_fun)z_PerElementDetails,
-                        &(*p)->detailsPerElement,
-                        &(*p)->num_detailsPerElement, 0) || odr_ok(o)) &&
-        odr_sequence_end(o);
-}
-
-int z_RetrievalRecordDetails(ODR o, Z_RetrievalRecordDetails **p, int opt,
-                            const char *name)
-{
-    if (!odr_sequence_begin(o, p, sizeof(**p), 0))
-        return opt && odr_ok(o);
-    return
-        odr_implicit(o, z_CommonInfo, &(*p)->commonInfo, ODR_CONTEXT, 0, 1) &&
-        odr_implicit(o, z_DatabaseName, &(*p)->databaseName,
-                    ODR_CONTEXT, 1, 0) &&
-        odr_implicit(o, odr_oid, &(*p)->schema, ODR_CONTEXT, 2, 0) &&
-        odr_implicit(o, odr_oid, &(*p)->recordSyntax, ODR_CONTEXT, 3, 0) &&
-        odr_implicit(o, z_HumanString, &(*p)->description,
-                    ODR_CONTEXT, 4, 1) &&
-       odr_implicit_settag(o, ODR_CONTEXT, 5) &&
-       (odr_sequence_of(o, (Odr_fun)z_PerElementDetails,
-                        &(*p)->detailsPerElement,
-                        &(*p)->num_detailsPerElement, 0) || odr_ok(o)) &&
-        odr_sequence_end(o);
-}
-
-int z_PerElementDetails(ODR o, Z_PerElementDetails **p, int opt,
-                       const char *name)
-{
-    if (!odr_sequence_begin(o, p, sizeof(**p), 0))
-        return opt && odr_ok(o);
-    return
-        odr_implicit(o, z_InternationalString, &(*p)->name,
-                    ODR_CONTEXT, 0, 1) &&
-        odr_implicit(o, z_RecordTag, &(*p)->recordTag, ODR_CONTEXT, 1, 1) &&
-       odr_implicit_settag(o, ODR_CONTEXT, 2) &&
-       (odr_sequence_of(o, (Odr_fun)z_Path, &(*p)->schemaTags,
-                        &(*p)->num_schemaTags, 0) ||
-        odr_ok(o)) &&
-        odr_implicit(o, odr_integer, &(*p)->maxSize, ODR_CONTEXT, 3, 1) &&
-        odr_implicit(o, odr_integer, &(*p)->minSize, ODR_CONTEXT, 4, 1) &&
-        odr_implicit(o, odr_integer, &(*p)->avgSize, ODR_CONTEXT, 5, 1) &&
-        odr_implicit(o, odr_integer, &(*p)->fixedSize, ODR_CONTEXT, 6, 1) &&
-        odr_implicit(o, odr_bool, &(*p)->repeatable, ODR_CONTEXT, 8, 0) &&
-        odr_implicit(o, odr_bool, &(*p)->required, ODR_CONTEXT, 9, 0) &&
-        odr_implicit(o, z_HumanString, &(*p)->description,
-                    ODR_CONTEXT, 12, 1) &&
-        odr_implicit(o, z_HumanString, &(*p)->contents, ODR_CONTEXT, 13, 1) &&
-        odr_implicit(o, z_HumanString, &(*p)->billingInfo,
-                    ODR_CONTEXT, 14, 1) &&
-        odr_implicit(o, z_HumanString, &(*p)->restrictions,
-                    ODR_CONTEXT, 15, 1) &&
-       odr_implicit_settag(o, ODR_CONTEXT, 16) &&
-       (odr_sequence_of(o, z_InternationalString, &(*p)->alternateNames,
-                        &(*p)->num_alternateNames, 0) || odr_ok(o)) &&
-       odr_implicit_settag(o, ODR_CONTEXT, 17) &&
-       (odr_sequence_of(o, z_InternationalString, &(*p)->genericNames,
-                        &(*p)->num_genericNames, 0) || odr_ok(o)) &&
-        odr_implicit(o, z_AttributeCombinations, &(*p)->searchAccess,
-                    ODR_CONTEXT, 18, 1) &&
-        odr_sequence_end(o);
-}
-
-int z_RecordTag(ODR o, Z_RecordTag **p, int opt, const char *name)
-{
-    if (!odr_sequence_begin(o, p, sizeof(**p), 0))
-        return opt && odr_ok(o);
-    return
-        odr_explicit(o, z_StringOrNumeric, &(*p)->qualifier,
-                    ODR_CONTEXT, 0, 1) &&
-        odr_explicit(o, z_StringOrNumeric, &(*p)->tagValue,
-                    ODR_CONTEXT, 1, 0) &&
-        odr_sequence_end(o);
-}
-
-int z_SortDetails(ODR o, Z_SortDetails **p, int opt, const char *name)
-{
-    if (!odr_sequence_begin(o, p, sizeof(**p), 0))
-        return opt && odr_ok(o);
-    return
-        odr_implicit(o, z_CommonInfo, &(*p)->commonInfo, ODR_CONTEXT, 0, 1) &&
-        odr_implicit(o, z_DatabaseName, &(*p)->databaseName,
-                    ODR_CONTEXT, 1, 0) &&
-       odr_implicit_settag(o, ODR_CONTEXT, 2) &&
-       (odr_sequence_of(o, (Odr_fun)z_SortKeyDetails, &(*p)->sortKeys,
-                        &(*p)->num_sortKeys, 0) || odr_ok(o)) &&
-        odr_sequence_end(o);
-}
-
-int z_SortKeyDetails (ODR o, Z_SortKeyDetails **p, int opt, const char *name)
-{
-    static Odr_arm arm[] = {
-       {ODR_IMPLICIT, ODR_CONTEXT, 0, Z_SortKeyDetails_character,
-        (Odr_fun) odr_null, 0},
-       {ODR_IMPLICIT, ODR_CONTEXT, 1, Z_SortKeyDetails_numeric,
-        (Odr_fun) odr_null, 0},
-       {ODR_IMPLICIT, ODR_CONTEXT, 2, Z_SortKeyDetails_structured,
-        (Odr_fun) z_HumanString, 0},
-       {-1, -1, -1, -1, (Odr_fun) 0, 0}
-    };
-    if (!odr_sequence_begin (o, p, sizeof(**p), 0))
-       return opt && odr_ok (o);
-    return
-       odr_implicit (o, z_HumanString,
-                     &(*p)->description, ODR_CONTEXT, 0, 1) &&
-       odr_implicit_settag (o, ODR_CONTEXT, 1) &&
-       (odr_sequence_of(o, (Odr_fun) z_Specification,
-                        &(*p)->elementSpecifications,
-                        &(*p)->num_elementSpecifications, 0) || odr_ok(o)) &&
-       odr_implicit (o, z_AttributeCombinations,
-                     &(*p)->attributeSpecifications, ODR_CONTEXT, 2, 1) &&
-       ((odr_constructed_begin (o, &(*p)->u, ODR_CONTEXT, 3, 0) &&
-         odr_choice (o, arm, &(*p)->u, &(*p)->which, 0) &&
-         odr_constructed_end (o)) || odr_ok(o)) &&
-       odr_implicit (o, odr_integer,
-                     &(*p)->caseSensitivity, ODR_CONTEXT, 4, 1) &&
-       odr_sequence_end (o);
-}
-
-int z_ProcessingInformation(ODR o, Z_ProcessingInformation **p, int opt,
-                           const char *name)
-{
-    if (!odr_sequence_begin(o, p, sizeof(**p), 0))
-        return opt && odr_ok(o);
-    return
-        odr_implicit(o, z_CommonInfo, &(*p)->commonInfo, ODR_CONTEXT, 0, 1) &&
-        odr_implicit(o, z_DatabaseName, &(*p)->databaseName,
-                    ODR_CONTEXT, 1, 0) &&
-        odr_implicit(o, odr_integer, &(*p)->processingContext,
-                    ODR_CONTEXT, 2, 0) &&
-        odr_implicit(o, z_InternationalString, &(*p)->name,
-                    ODR_CONTEXT, 3, 0) &&
-        odr_implicit(o, odr_oid, &(*p)->oid, ODR_CONTEXT, 4, 0) &&
-        odr_implicit(o, z_HumanString, &(*p)->description,
-                    ODR_CONTEXT, 5, 1) &&
-        odr_implicit(o, z_External, &(*p)->instructions, ODR_CONTEXT, 6, 1) &&
-        odr_sequence_end(o);
-}
-
-int z_VariantSetInfo(ODR o, Z_VariantSetInfo **p, int opt, const char *name)
-{
-    if (!odr_sequence_begin(o, p, sizeof(**p), 0))
-        return opt && odr_ok(o);
-    return
-        odr_implicit(o, z_CommonInfo, &(*p)->commonInfo, ODR_CONTEXT, 0, 1) &&
-        odr_implicit(o, odr_oid, &(*p)->variantSet, ODR_CONTEXT, 1, 0) &&
-        odr_implicit(o, z_InternationalString, &(*p)->name,
-                    ODR_CONTEXT, 2, 0) &&
-       odr_implicit_settag(o, ODR_CONTEXT, 3) &&
-       (odr_sequence_of(o, (Odr_fun)z_VariantClass, &(*p)->variants,
-                        &(*p)->num_variants, 0) || odr_ok(o)) &&
-        odr_sequence_end(o);
-}
-
-int z_VariantClass(ODR o, Z_VariantClass **p, int opt, const char *name)
-{
-    if (!odr_sequence_begin(o, p, sizeof(**p), 0))
-        return opt && odr_ok(o);
-    return
-        odr_implicit(o, z_InternationalString, &(*p)->name,
-                    ODR_CONTEXT, 0, 1) &&
-        odr_implicit(o, z_HumanString, &(*p)->description,
-                    ODR_CONTEXT, 1, 1) &&
-        odr_implicit(o, odr_integer, &(*p)->variantClass, ODR_CONTEXT, 2, 0) &&
-       odr_implicit_settag(o, ODR_CONTEXT, 3) &&
-       odr_sequence_of(o, (Odr_fun)z_VariantType, &(*p)->variantTypes,
-                       &(*p)->num_variantTypes, 0) &&
-        odr_sequence_end(o);
-}
-
-int z_VariantType(ODR o, Z_VariantType **p, int opt, const char *name)
-{
-    if (!odr_sequence_begin(o, p, sizeof(**p), 0))
-        return opt && odr_ok(o);
-    return
-        odr_implicit(o, z_InternationalString, &(*p)->name,
-                    ODR_CONTEXT, 0, 1) &&
-        odr_implicit(o, z_HumanString, &(*p)->description,
-                    ODR_CONTEXT, 1, 1) &&
-        odr_implicit(o, odr_integer, &(*p)->variantType,
-                    ODR_CONTEXT, 2, 0) &&
-        odr_implicit(o, z_VariantValue, &(*p)->variantValue,
-                    ODR_CONTEXT, 3, 1) &&
-        odr_sequence_end(o);
-}
-
-int z_VariantValue(ODR o, Z_VariantValue **p, int opt, const char *name)
-{
-    if (!odr_sequence_begin(o, p, sizeof(**p), 0))
-        return opt && odr_ok(o);
-    return
-        odr_explicit(o, odr_integer, &(*p)->dataType, ODR_CONTEXT, 0, 0) &&
-        odr_explicit(o, z_ValueSet, &(*p)->values, ODR_CONTEXT, 1, 1) &&
-       odr_sequence_end(o);
-}
-
-int z_ValueSetEnumerated(ODR o, Z_ValueSetEnumerated **p, int opt,
-                        const char *name)
-{
-    if (!odr_initmember(o, p, sizeof(**p)))
-       return opt && odr_ok(o);
-    if (odr_sequence_of(o, (Odr_fun)z_ValueDescription, &(*p)->elements,
-                       &(*p)->num, 0))
-       return 1;
-    *p = 0;
-    return opt && odr_ok(o);
-}
-    
-int z_ValueSet(ODR o, Z_ValueSet **p, int opt, const char *name)
-{
-    static Odr_arm arm[] =
-    {
-       {ODR_IMPLICIT, ODR_CONTEXT, 0, Z_ValueSet_range,
-        (Odr_fun)z_ValueRange, 0},
-       {ODR_IMPLICIT, ODR_CONTEXT, 1, Z_ValueSet_enumerated,
-        (Odr_fun)z_ValueSetEnumerated, 0},
-       {-1, -1, -1, -1, 0, 0}
-    };
-    
-    if (!odr_initmember(o, p, sizeof(**p)))
-       return opt && odr_ok(o);
-    if (odr_choice(o, arm, &(*p)->u, &(*p)->which, 0))
-       return 1;
-    *p = 0;
-    return opt && odr_ok(o);
-}
-
-int z_ValueRange(ODR o, Z_ValueRange **p, int opt, const char *name)
-{
-    if (!odr_sequence_begin(o, p, sizeof(**p), 0))
-        return opt && odr_ok(o);
-    return
-        odr_explicit(o, z_ValueDescription, &(*p)->lower, ODR_CONTEXT, 0, 1) &&
-        odr_explicit(o, z_ValueDescription, &(*p)->upper, ODR_CONTEXT, 1, 1) &&
-       odr_sequence_end(o);
-}
-
-int z_ValueDescription(ODR o, Z_ValueDescription **p, int opt,
-                      const char *name)
-{
-    static Odr_arm arm[] =
-    {
-       {ODR_NONE, -1, -1, Z_ValueDescription_integer,
-        (Odr_fun)odr_integer, 0},
-       {ODR_NONE, -1, -1, Z_ValueDescription_string,
-        (Odr_fun)z_InternationalString, 0},
-       {ODR_NONE, -1, -1, Z_ValueDescription_octets,
-        (Odr_fun)odr_octetstring, 0},
-       {ODR_NONE, -1, -1, Z_ValueDescription_oid,
-        (Odr_fun)odr_oid, 0},
-       {ODR_IMPLICIT, ODR_CONTEXT, 1, Z_ValueDescription_unit,
-        (Odr_fun)z_Unit, 0},
-       {ODR_IMPLICIT, ODR_CONTEXT, 2, Z_ValueDescription_valueAndUnit,
-        (Odr_fun)z_IntUnit, 0},
-       {-1, -1, -1, -1, 0, 0}
-    };
-    
-    if (!odr_initmember(o, p, sizeof(**p)))
-       return opt && odr_ok(o);
-    if (odr_choice(o, arm, &(*p)->u, &(*p)->which, 0))
-       return 1;
-    *p = 0;
-    return opt && odr_ok(o);
-}
-
-int z_UnitInfo(ODR o, Z_UnitInfo **p, int opt, const char *name)
-{
-    if (!odr_sequence_begin(o, p, sizeof(**p), 0))
-        return opt && odr_ok(o);
-    return
-        odr_implicit(o, z_CommonInfo, &(*p)->commonInfo, ODR_CONTEXT, 0, 1) &&
-        odr_implicit(o, z_InternationalString, &(*p)->unitSystem,
-                    ODR_CONTEXT, 1, 0) &&
-        odr_implicit(o, z_HumanString, &(*p)->description,
-                    ODR_CONTEXT, 2, 1) &&
-       odr_implicit_settag(o, ODR_CONTEXT, 3) &&
-       (odr_sequence_of(o,  (Odr_fun)z_UnitType, &(*p)->units, 
-                        &(*p)->num_units, 0) ||
-        odr_ok(o)) &&
-        odr_sequence_end(o);
-}
-
-int z_UnitType(ODR o, Z_UnitType **p, int opt, const char *name)
-{
-    if (!odr_sequence_begin(o, p, sizeof(**p), 0))
-        return opt && odr_ok(o);
-    return
-        odr_implicit(o, z_InternationalString, &(*p)->name,
-                    ODR_CONTEXT, 0, 1) &&
-        odr_implicit(o, z_HumanString, &(*p)->description,
-                    ODR_CONTEXT, 1, 1) &&
-        odr_explicit(o, z_StringOrNumeric, &(*p)->unitType,
-                    ODR_CONTEXT, 2, 0) &&
-       odr_implicit_settag(o, ODR_CONTEXT, 3) &&
-       odr_sequence_of(o, (Odr_fun)z_Units, &(*p)->units,
-                       &(*p)->num_units, 0) &&
-        odr_sequence_end(o);
-}
-
-int z_Units(ODR o, Z_Units **p, int opt, const char *name)
-{
-    if (!odr_sequence_begin(o, p, sizeof(**p), 0))
-        return opt && odr_ok(o);
-    return
-        odr_implicit(o, z_InternationalString, &(*p)->name,
-                    ODR_CONTEXT, 0, 1) &&
-        odr_implicit(o, z_HumanString, &(*p)->description,
-                    ODR_CONTEXT, 1, 1) &&
-        odr_explicit(o, z_StringOrNumeric, &(*p)->unit,
-                    ODR_CONTEXT, 2, 0) &&
-        odr_sequence_end(o);
-}
-
-int z_CategoryList(ODR o, Z_CategoryList **p, int opt, const char *name)
-{
-    if (!odr_sequence_begin(o, p, sizeof(**p), 0))
-        return opt && odr_ok(o);
-    return
-        odr_implicit(o, z_CommonInfo, &(*p)->commonInfo, ODR_CONTEXT, 0, 1) &&
-       odr_implicit_settag(o, ODR_CONTEXT, 1) &&
-       odr_sequence_of(o, (Odr_fun)z_CategoryInfo, &(*p)->categories,
-                       &(*p)->num_categories, 0) &&
-        odr_sequence_end(o);
-}
-
-int z_CategoryInfo(ODR o, Z_CategoryInfo **p, int opt, const char *name)
-{
-    if (!odr_sequence_begin(o, p, sizeof(**p), 0))
-        return opt && odr_ok(o);
-    return
-        odr_implicit(o, z_InternationalString, &(*p)->category,
-                    ODR_CONTEXT, 1, 0) &&
-        odr_implicit(o, z_InternationalString, &(*p)->originalCategory,
-                    ODR_CONTEXT, 2, 1) &&
-        odr_implicit(o, z_HumanString, &(*p)->description,
-                    ODR_CONTEXT, 3, 1) &&
-        odr_implicit(o, z_InternationalString, &(*p)->asn1Module,
-                    ODR_CONTEXT, 4, 1) &&
-        odr_sequence_end(o);
-}
-
-int z_ExplainRecord(ODR o, Z_ExplainRecord **p, int opt, const char *name)
-{
-    static Odr_arm arm[] =
-    {
-       {ODR_IMPLICIT, ODR_CONTEXT, 0, Z_Explain_targetInfo,
-        (Odr_fun)z_TargetInfo, 0},
-       {ODR_IMPLICIT, ODR_CONTEXT, 1, Z_Explain_databaseInfo,
-        (Odr_fun)z_DatabaseInfo, 0},
-       {ODR_IMPLICIT, ODR_CONTEXT, 2, Z_Explain_schemaInfo,
-        (Odr_fun)z_SchemaInfo, 0},
-       {ODR_IMPLICIT, ODR_CONTEXT, 3, Z_Explain_tagSetInfo,
-        (Odr_fun)z_TagSetInfo, 0},
-       {ODR_IMPLICIT, ODR_CONTEXT, 4, Z_Explain_recordSyntaxInfo,
-        (Odr_fun)z_RecordSyntaxInfo, 0},
-       {ODR_IMPLICIT, ODR_CONTEXT, 5, Z_Explain_attributeSetInfo,
-        (Odr_fun)z_AttributeSetInfo, 0},
-       {ODR_IMPLICIT, ODR_CONTEXT, 6, Z_Explain_termListInfo,
-        (Odr_fun)z_TermListInfo, 0},
-       {ODR_IMPLICIT, ODR_CONTEXT, 7, Z_Explain_extendedServicesInfo,
-        (Odr_fun)z_ExtendedServicesInfo, 0},
-       {ODR_IMPLICIT, ODR_CONTEXT, 8, Z_Explain_attributeDetails,
-        (Odr_fun)z_AttributeDetails, 0},
-       {ODR_IMPLICIT, ODR_CONTEXT, 9, Z_Explain_termListDetails,
-        (Odr_fun)z_TermListDetails, 0},
-       {ODR_IMPLICIT, ODR_CONTEXT, 10, Z_Explain_elementSetDetails,
-        (Odr_fun)z_ElementSetDetails, 0},
-       {ODR_IMPLICIT, ODR_CONTEXT, 11, Z_Explain_retrievalRecordDetails,
-        (Odr_fun)z_RetrievalRecordDetails, 0},
-       {ODR_IMPLICIT, ODR_CONTEXT, 12, Z_Explain_sortDetails,
-        (Odr_fun)z_SortDetails, 0},
-       {ODR_IMPLICIT, ODR_CONTEXT, 13, Z_Explain_processing,
-        (Odr_fun)z_ProcessingInformation, 0},
-       {ODR_IMPLICIT, ODR_CONTEXT, 14, Z_Explain_variants,
-        (Odr_fun)z_VariantSetInfo, 0},
-       {ODR_IMPLICIT, ODR_CONTEXT, 15, Z_Explain_units,
-        (Odr_fun)z_UnitInfo, 0},
-       {ODR_IMPLICIT, ODR_CONTEXT, 100, Z_Explain_categoryList,
-        (Odr_fun)z_CategoryList, 0},
-       {-1, -1, -1, -1, 0, 0}
-    };
-    
-    if (!odr_initmember(o, p, sizeof(**p)))
-       return opt && odr_ok(o);
-    if (odr_choice(o, arm, &(*p)->u, &(*p)->which, 0))
-       return 1;
-    *p = 0;
-    return opt && odr_ok(o);
-}
diff --git a/asn/prt-exp.h b/asn/prt-exp.h
deleted file mode 100644 (file)
index 14240a0..0000000
+++ /dev/null
@@ -1,1017 +0,0 @@
-/*
- * Copyright (c) 1995-1998, Index Data.
- *
- * Permission to use, copy, modify, distribute, and sell this software and
- * its documentation, in whole or in part, for any purpose, is hereby granted,
- * provided that:
- *
- * 1. This copyright and permission notice appear in all copies of the
- * software and its documentation. Notices of copyright or attribution
- * which appear at the beginning of any file must remain unchanged.
- *
- * 2. The names of Index Data or the individual authors may not be used to
- * endorse or promote products derived from this software without specific
- * prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED "AS IS" AND WITHOUT WARRANTY OF ANY KIND,
- * EXPRESS, IMPLIED, OR OTHERWISE, INCLUDING WITHOUT LIMITATION, ANY
- * WARRANTY OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.
- * IN NO EVENT SHALL INDEX DATA BE LIABLE FOR ANY SPECIAL, INCIDENTAL,
- * INDIRECT OR CONSEQUENTIAL DAMAGES OF ANY KIND, OR ANY DAMAGES
- * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER OR
- * NOT ADVISED OF THE POSSIBILITY OF DAMAGE, AND ON ANY THEORY OF
- * LIABILITY, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE
- * OF THIS SOFTWARE.
- *
- */
-
-#ifndef PRT_EXP_H
-#define PRT_EXP_H
-
-#include <yaz/yconfig.h>
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-typedef struct Z_CommonInfo
-{
-    char *dateAdded;           /* OPTIONAL */
-    char *dateChanged;         /* OPTIONAL */
-    char *expiry;              /* OPTIONAL */
-    char *humanStringLanguage;    /* OPTIONAL */
-    Z_OtherInformation *otherInfo;          /* OPTIONAL */
-} Z_CommonInfo;
-
-typedef struct Z_HumanStringUnit
-{
-    char *language;               /* OPTIONAL */
-    char *text;
-} Z_HumanStringUnit;
-
-typedef struct Z_HumanString
-{
-    int num_strings;
-    Z_HumanStringUnit **strings;
-} Z_HumanString;
-
-typedef struct Z_IconObjectUnit
-{
-    int which;
-#define Z_IconObjectUnit_ianaType 0
-#define Z_IconObjectUnit_z3950type 1
-#define Z_IconObjectUnit_otherType 2
-    char *bodyType;
-    Odr_oct *content;
-} Z_IconObjectUnit;
-
-typedef struct Z_IconObject
-{
-    int num;
-    Z_IconObjectUnit **elements;
-} Z_IconObject;
-
-typedef struct Z_ContactInfo
-{
-    char *name;                             /* OPTIONAL */
-    Z_HumanString *description;             /* OPTIONAL */
-    Z_HumanString *address;                 /* OPTIONAL */
-    char *email;                            /* OPTIONAL */
-    char *phone;                            /* OPTIONAL */
-} Z_ContactInfo;
-
-typedef struct Z_NetworkAddressIA
-{
-    char *hostAddress;
-    int *port;
-} Z_NetworkAddressIA;
-
-typedef struct Z_NetworkAddressOPA
-{
-    char *pSel;
-    char *sSel;                  /* OPTIONAL */
-    char *tSel;                  /* OPTIONAL */
-    char *nSap;
-} Z_NetworkAddressOPA;
-
-typedef struct Z_NetworkAddressOther
-{
-    char *type;
-    char *address;
-} Z_NetworkAddressOther;
-
-typedef struct Z_NetworkAddress
-{
-    int which;
-#define Z_NetworkAddress_iA 0
-#define Z_NetworkAddress_oPA 1
-#define Z_NetworkAddress_other 2
-    union
-    {
-       Z_NetworkAddressIA *internetAddress;
-       Z_NetworkAddressOPA *osiPresentationAddress;
-       Z_NetworkAddressOther *other;
-    } u;
-} Z_NetworkAddress;
-
-typedef struct Z_PrivateCapOperator
-{
-    char *roperator;
-    Z_HumanString *description;             /* OPTIONAL */
-} Z_PrivateCapOperator;
-    
-typedef struct Z_SearchKey
-{
-    char *searchKey;
-    Z_HumanString *description;             /* OPTIONAL */
-} Z_SearchKey;
-
-typedef struct Z_PrivateCapabilities
-{
-    int num_operators;
-    Z_PrivateCapOperator **operators;      /* OPTIONAL */
-    int num_searchKeys;
-    Z_SearchKey **searchKeys;               /* OPTIONAL */
-    int num_description;
-    Z_HumanString **description;            /* OPTIONAL */
-} Z_PrivateCapabilities;
-
-typedef struct Z_ProxSupportPrivate
-{
-    int *unit;
-    Z_HumanString *description;             /* OPTIONAL */
-} Z_ProxSupportPrivate;
-
-typedef struct Z_ProxSupportUnit
-{
-    int which;
-#define Z_ProxSupportUnit_known 0
-#define Z_ProxSupportUnit_private 1
-    union
-    {
-       int *known;
-       Z_ProxSupportPrivate *zprivate;
-    } u;
-} Z_ProxSupportUnit;
-
-typedef struct Z_ProximitySupport
-{
-    bool_t *anySupport;
-    int num_unitsSupported;
-    Z_ProxSupportUnit **unitsSupported;     /* OPTIONAL */
-} Z_ProximitySupport;
-
-typedef struct Z_RpnCapabilities
-{
-    int num_operators;
-    int **operators;                        /* OPTIONAL */
-    bool_t *resultSetAsOperandSupported;
-    bool_t *restrictionOperandSupported;
-    Z_ProximitySupport *proximity;          /* OPTIONAL */
-} Z_RpnCapabilities;
-
-typedef struct Z_Iso8777Capabilities
-{
-    int num_searchKeys;
-    Z_SearchKey **searchKeys;
-    Z_HumanString *restrictions;            /* OPTIONAL */
-} Z_Iso8777Capabilities;
-
-typedef struct Z_QueryTypeDetails
-{
-    int which;
-#define Z_QueryTypeDetails_private 0
-#define Z_QueryTypeDetails_rpn 1
-#define Z_QueryTypeDetails_iso8777 2
-#define Z_QueryTypeDetails_z39_58 3
-#define Z_QueryTypeDetails_erpn 4
-#define Z_QueryTypeDetails_rankedList 5
-    union
-    {
-       Z_PrivateCapabilities *zprivate;
-       Z_RpnCapabilities *rpn;
-       Z_Iso8777Capabilities *iso8777;
-       Z_HumanString *z3958;
-       Z_RpnCapabilities *erpn;
-       Z_HumanString *rankedList;
-    } u;
-} Z_QueryTypeDetails;
-
-typedef struct Z_AccessRestrictionsUnit
-{
-    int *accessType;
-#define Z_AccessRestrictionsUnit_any                 0
-#define Z_AccessRestrictionsUnit_search              1
-#define Z_AccessRestrictionsUnit_present             2
-#define Z_AccessRestrictionsUnit_specific_elements   3
-#define Z_AccessRestrictionsUnit_extended_services   4
-#define Z_AccessRestrictionsUnit_by_database         5
-    Z_HumanString *accessText;              /* OPTIONAL */
-    int num_accessChallenges;
-    Odr_oid **accessChallenges;             /* OPTIONAL */
-} Z_AccessRestrictionsUnit;
-
-typedef struct Z_AccessRestrictions
-{
-    int num;
-    Z_AccessRestrictionsUnit **elements;
-} Z_AccessRestrictions;
-
-typedef struct Z_Charge
-{
-    Z_IntUnit *cost;
-    Z_Unit *perWhat;                        /* OPTIONAL */
-    Z_HumanString *text;                    /* OPTIONAL */
-} Z_Charge;
-
-typedef struct Z_CostsOtherCharge
-{
-    Z_HumanString *forWhat;
-    Z_Charge *charge;
-} Z_CostsOtherCharge;
-
-typedef struct Z_Costs
-{
-    Z_Charge *connectCharge;                /* OPTIONAL */
-    Z_Charge *connectTime;                  /* OPTIONAL */
-    Z_Charge *displayCharge;                /* OPTIONAL */
-    Z_Charge *searchCharge;                 /* OPTIONAL */
-    Z_Charge *subscriptCharge;              /* OPTIONAL */
-    int num_otherCharges;
-    Z_CostsOtherCharge **otherCharges;      /* OPTIONAL */
-} Z_Costs;
-
-typedef struct Z_AccessInfo
-{
-    int num_queryTypesSupported;
-    Z_QueryTypeDetails **queryTypesSupported;  /* OPTIONAL */
-    int num_diagnosticsSets;
-    Odr_oid **diagnosticsSets;              /* OPTIONAL */
-    int num_attributeSetIds;
-    Odr_oid **attributeSetIds;     /* OPTIONAL */
-    int num_schemas;
-    Odr_oid **schemas;                      /* OPTIONAL */
-    int num_recordSyntaxes;
-    Odr_oid **recordSyntaxes;               /* OPTIONAL */
-    int num_resourceChallenges;
-    Odr_oid **resourceChallenges;           /* OPTIONAL */
-    Z_AccessRestrictions *restrictedAccess;  /* OPTIONAL */
-    Z_Costs *costInfo;                      /* OPTIONAL */
-    int num_variantSets;
-    Odr_oid **variantSets;                  /* OPTIONAL */
-    int num_elementSetNames;
-    char **elementSetNames;     /* OPTIONAL */
-    int num_unitSystems;
-    char **unitSystems;                     /* OPTIONAL */
-} Z_AccessInfo;
-
-typedef struct Z_DatabaseList
-{
-    int num_databases;
-    Z_DatabaseName **databases;
-} Z_DatabaseList;
-
-typedef struct Z_AttributeValueList
-{
-    int num_attributes;
-    Z_StringOrNumeric **attributes;
-} Z_AttributeValueList;
-
-typedef struct Z_AttributeOccurrence
-{
-    Odr_oid *attributeSet;         /* OPTIONAL */
-    int *attributeType;
-    Odr_null *mustBeSupplied;               /* OPTIONAL */
-    int which;
-#define Z_AttributeOcc_any_or_none 0
-#define Z_AttributeOcc_specific 1
-    union
-    {
-       Odr_null *any_or_none;
-       Z_AttributeValueList *specific;
-    } attributeValues;
-} Z_AttributeOccurrence;
-
-typedef struct Z_AttributeCombination
-{
-    int num_occurrences;
-    Z_AttributeOccurrence **occurrences;
-} Z_AttributeCombination;
-
-typedef struct Z_AttributeCombinations
-{
-    Odr_oid *defaultAttributeSet;
-    int num_legalCombinations;
-    Z_AttributeCombination **legalCombinations;
-} Z_AttributeCombinations;
-
-typedef struct Z_AttributeValue
-{
-    Z_StringOrNumeric *value;
-    Z_HumanString *description;             /* OPTIONAL */
-    int num_subAttributes;
-    Z_StringOrNumeric **subAttributes;      /* OPTIONAL */
-    int num_superAttributes;
-    Z_StringOrNumeric **superAttributes;    /* OPTIONAL */
-    Odr_null *partialSupport;               /* OPTIONAL */
-} Z_AttributeValue;
-
-typedef struct Z_TargetInfo
-{
-    Z_CommonInfo *commonInfo;               /* OPTIONAL */
-    /*
-     * key elements
-     */
-    char *name;
-    /*
-     * non-key brief elements
-     */
-    Z_HumanString *recentNews;             /* OPTIONAL */
-    Z_IconObject *icon;                     /* OPTIONAL */
-    bool_t *namedResultSets;
-    bool_t *multipleDBsearch;
-    int *maxResultSets;                     /* OPTIONAL */
-    int *maxResultSize;                     /* OPTIONAL */
-    int *maxTerms;                          /* OPTIONAL */
-    Z_IntUnit *timeoutInterval;             /* OPTIONAL */
-    Z_HumanString *welcomeMessage;          /* OPTIONAL */
-    /*
-     * non-brief elements
-     */
-    Z_ContactInfo *contactInfo;             /* OPTIONAL */
-    Z_HumanString *description;             /* OPTIONAL */
-    int num_nicknames;
-    char **nicknames;
-    Z_HumanString *usageRest;              /* OPTIONAL */
-    Z_HumanString *paymentAddr;             /* OPTIONAL */
-    Z_HumanString *hours;                   /* OPTIONAL */
-    int num_dbCombinations;
-    Z_DatabaseList **dbCombinations;        /* OPTIONAL */
-    int num_addresses;
-    Z_NetworkAddress **addresses;           /* OPTIONAL */
-    int num_languages;
-    char **languages;                       /* OPTIONAL */
-
-    Z_AccessInfo *commonAccessInfo;         /* OPTIONAL */
-} Z_TargetInfo;
-
-typedef struct Z_DatabaseInfo
-{
-    Z_CommonInfo *commonInfo;               /* OPTIONAL */
-    /*
-     * Key elements
-     */
-    Z_DatabaseName *name;
-    /* 
-     * Non-key elements.
-     */
-    Odr_null *explainDatabase;              /* OPTIONAL */
-    int num_nicknames;
-    Z_DatabaseName **nicknames;             /* OPTIONAL */
-    Z_IconObject *icon;                     /* OPTIONAL */
-    bool_t *userFee;
-    bool_t *available;
-    Z_HumanString *titleString;             /* OPTIONAL */
-    /*
-     * Non-brief elements.
-     */
-    int num_keywords;
-    Z_HumanString **keywords;               /* OPTIONAL */
-    Z_HumanString *description;             /* OPTIONAL */
-    Z_DatabaseList *associatedDbs;          /* OPTIONAL */
-    Z_DatabaseList *subDbs;                 /* OPTIONAL */
-    Z_HumanString *disclaimers;             /* OPTIONAL */
-    Z_HumanString *news;                    /* OPTIONAL */
-
-#if 1
-    int which;
-    union {
-       int *actualNumber;
-       int *approxNumber;
-#define Z_DatabaseInfo_actualNumber 1
-#define Z_DatabaseInfo_approxNumber 2
-    } u; /* OPT */
-
-#else
-    int recordCount_which;
-#define Z_DatabaseInfo_actualNumber 0
-#define Z_DatabaseInfo_approxNumber 1
-    int *recordCount;                       /* OPTIONAL */
-#endif
-    Z_HumanString *defaultOrder;            /* OPTIONAL */
-    int *avRecordSize;                      /* OPTIONAL */
-    int *maxRecordSize;                     /* OPTIONAL */
-    Z_HumanString *hours;                   /* OPTIONAL */
-    Z_HumanString *bestTime;                /* OPTIONAL */
-    char *lastUpdate;          /* OPTIONAL */
-    Z_IntUnit *updateInterval;              /* OPTIONAL */
-    Z_HumanString *coverage;                /* OPTIONAL */
-    bool_t *proprietary;                    /* OPTIONAL */
-    Z_HumanString *copyrightText;           /* OPTIONAL */
-    Z_HumanString *copyrightNotice;         /* OPTIONAL */
-    Z_ContactInfo *producerContactInfo;     /* OPTIONAL */
-    Z_ContactInfo *supplierContactInfo;     /* OPTIONAL */
-    Z_ContactInfo *submissionContactInfo;   /* OPTIONAL */
-    Z_AccessInfo *accessInfo;               /* OPTIONAL */
-} Z_DatabaseInfo;
-
-typedef struct Z_TagTypeMapping
-{
-    int *tagType;
-    Odr_oid *tagSet;                        /* OPTIONAL */
-    Odr_null *defaultTagType;               /* OPTIONAL */
-} Z_TagTypeMapping;
-
-typedef struct Z_PathUnit
-{
-    int *tagType;
-    Z_StringOrNumeric *tagValue;
-} Z_PathUnit;
-
-typedef struct Z_Path
-{
-    int num;
-    Z_PathUnit **list;
-} Z_Path;
-
-struct Z_ElementDataType;
-typedef struct Z_ElementDataType Z_ElementDataType;
-
-typedef struct Z_ElementInfo
-{
-    char *elementName;
-    Z_Path *elementTagPath;
-    Z_ElementDataType *dataType;            /* OPTIONAL */
-    bool_t *required;
-    bool_t *repeatable;
-    Z_HumanString *description;             /* OPTIONAL */
-} Z_ElementInfo;
-
-typedef struct Z_ElementInfoList
-{
-    int num;
-    Z_ElementInfo **list;
-} Z_ElementInfoList;
-
-struct Z_ElementDataType
-{
-    int which;
-#define Z_ElementDataType_primitive 0
-#define Z_ElementDataType_structured 1
-    union
-    {
-       int *primitive;
-#define Z_PrimitiveDataType_octetString         0
-#define Z_PrimitiveDataType_numeric             1
-#define Z_PrimitiveDataType_date                2
-#define Z_PrimitiveDataType_external            3
-#define Z_PrimitiveDataType_string              4
-#define Z_PrimitiveDataType_trueOrFalse         5
-#define Z_PrimitiveDataType_oid                 6
-#define Z_PrimitiveDataType_intUnit             7
-#define Z_PrimitiveDataType_empty               8
-#define Z_PrimitiveDataType_noneOfTheAbove      100
-       Z_ElementInfoList *structured;
-    } u;
-};
-
-typedef struct Z_TagSetInfoElements
-{
-    char *elementname;
-    int num_nicknames;
-    char **nicknames;                       /* OPTIONAL */
-    Z_StringOrNumeric *elementTag;
-    Z_HumanString *description;             /* OPTIONAL */
-    int *dataType;                          /* OPTIONAL */
-    /* (value as in Z_PrimitiveElement) */
-    Z_OtherInformation *otherTagInfo;       /* OPTIONAL */
-} Z_TagSetInfoElements;
-
-typedef struct Z_SchemaInfo
-{
-    Z_CommonInfo *commonInfo;               /* OPTIONAL */
-    /*
-     * Key elements
-     */
-    Odr_oid *schema;
-    /*
-     * Non-key elements
-     */
-    char *name;
-    /*
-     * Non-brief elements
-     */
-    Z_HumanString *description;             /* OPTIONAL */
-    int num_tagTypeMapping;
-    Z_TagTypeMapping **tagTypeMapping;      /* OPTIONAL */
-    int num_recordStructure;
-    Z_ElementInfo **recordStructure;        /* OPTIONAL */
-} Z_SchemaInfo;
-
-
-typedef struct Z_TagSetInfo
-{
-    Z_CommonInfo *commonInfo;               /* OPTIONAL */
-    /*
-     * Key elements
-     */
-    Odr_oid *tagSet;
-    /*
-     * Non-key elements
-     */
-    char *name;
-    /*
-     * Non-brief elements
-     */
-    Z_HumanString *description;             /* OPTIONAL */
-    int num_elements;
-    Z_TagSetInfoElements **elements;        /* OPTIONAL */
-} Z_TagSetInfo;
-
-typedef struct Z_RecordSyntaxInfo
-{
-    Z_CommonInfo *commonInfo;               /* OPTIONAL */
-    /*
-     * Key elements
-     */
-    Odr_oid *recordSyntax;
-    /*
-     * Non-key elements
-     */
-    char *name;
-    /*
-     * Non-brief elements
-     */
-    int num_transferSyntaxes;
-    Odr_oid **transferSyntaxes;             /* OPTIONAL */
-    Z_HumanString *description;             /* OPTIONAL */
-    char *asn1Module;                       /* OPTIONAL */
-    int num_abstractStructure;
-    Z_ElementInfo **abstractStructure;      /* OPTIONAL */
-} Z_RecordSyntaxInfo;
-
-typedef struct Z_AttributeDescription
-{
-    char *name;                             /* OPTIONAL */
-    Z_HumanString *description;             /* OPTIONAL */
-    Z_StringOrNumeric *attributeValue;
-    int num_equivalentAttributes;
-    Z_StringOrNumeric **equivalentAttributes; /* OPTIONAL */
-} Z_AttributeDescription;
-
-typedef struct Z_AttributeType
-{
-    char *name;                             /* OPTIONAL */
-    Z_HumanString *description;             /* OPTIONAL */
-    int *attributeType;
-    int num_attributeValues;
-    Z_AttributeDescription **attributeValues;
-} Z_AttributeType;
-
-typedef struct Z_AttributeSetInfo
-{
-    Z_CommonInfo *commonInfo;               /* OPTIONAL */
-    /*
-     * Key elements
-     */
-    Odr_oid *attributeSet;
-    /*
-     * Non-key elements
-     */
-    char *name;
-    /*
-     * Non-brief elements
-     */
-    int num_attributes;
-    Z_AttributeType **attributes;           /* OPTIONAL */
-    Z_HumanString *description;             /* OPTIONAL */
-} Z_AttributeSetInfo;
-
-typedef struct Z_TermListElement
-{
-    char *name;
-    Z_HumanString *title;                   /* OPTIONAL */
-    int *searchCost;                        /* OPTIONAL */
-#define Z_TermListElement_optimized           0
-#define Z_TermListElement_normal              1
-#define Z_TermListElement_expensive           2
-#define Z_TermListElement_filter              3
-    bool_t *scanable;
-    int num_broader;
-    char **broader;                         /* OPTIONAL */
-    int num_narrower;
-    char **narrower;                        /* OPTIONAL */
-} Z_TermListElement;
-
-typedef struct Z_TermListInfo
-{
-    Z_CommonInfo *commonInfo;               /* OPTIONAL */
-    /*
-     * Key elements
-     */
-    Z_DatabaseName *databaseName;
-    /*
-     * Non-key elements
-     */
-    int num_termLists;
-    Z_TermListElement **termLists;
-} Z_TermListInfo;
-
-typedef struct Z_ExtendedServicesInfo
-{
-    Z_CommonInfo *commonInfo;               /* OPTIONAL */
-    /*
-     * Key elements
-     */
-    Odr_oid *type;
-    /*
-     * Non-key elements
-     */
-    char *name;                             /* OPTIONAL */
-    bool_t *privateType;
-    bool_t *restrictionsApply;
-    bool_t *feeApply;
-    bool_t *available;
-    bool_t *retentionSupported;
-    int *waitAction;
-#define Z_ExtendedServicesInfo_waitSupported       1
-#define Z_ExtendedServicesInfo_waitAlways          2
-#define Z_ExtendedServicesInfo_waitNotSupported    3
-#define Z_ExtendedServicesInfo_depends             4
-#define Z_ExtendedServicesInfo_notSaying           5
-    /*
-     * Non-brief elements
-     */
-    Z_HumanString *description;             /* OPTIONAL */
-    Z_External *specificExplain;          /* OPTIONAL */
-    char *esASN;                            /* OPTIONAL */
-} Z_ExtendedServicesInfo;
-
-typedef struct Z_OmittedAttributeInterpretation
-{
-    Z_StringOrNumeric *defaultValue;        /* OPTIONAL */
-    Z_HumanString *defaultDescription;      /* OPTIONAL */
-} Z_OmittedAttributeInterpretation;
-
-typedef struct Z_AttributeTypeDetails
-{
-    int *attributeType;
-    Z_OmittedAttributeInterpretation *defaultIfOmitted;  /* OPTIONAL */
-    int num_attributeValues;
-    Z_AttributeValue **attributeValues;     /* OPTIONAL */
-} Z_AttributeTypeDetails;
-
-typedef struct Z_AttributeSetDetails
-{
-    Odr_oid *attributeSet;
-    int num_attributesByType;
-    Z_AttributeTypeDetails **attributesByType;
-} Z_AttributeSetDetails;
-
-typedef struct Z_AttributeDetails
-{
-    Z_CommonInfo *commonInfo;               /* OPTIONAL */
-    /*
-     * Key details
-     */
-    Z_DatabaseName *databaseName;
-    /*
-     * Non-brief elements
-     */
-    int num_attributesBySet;
-    Z_AttributeSetDetails **attributesBySet;  /* OPTIONAL */
-    Z_AttributeCombinations *attributeCombinations;  /* OPTIONAL */
-} Z_AttributeDetails;
-
-typedef struct Z_EScanInfo
-{
-    int *maxStepSize;                       /* OPTIONAL */
-    Z_HumanString *collatingSequence;       /* OPTIONAL */
-    bool_t *increasing;                     /* OPTIONAL */
-} Z_EScanInfo;
-
-typedef struct Z_TermListDetails
-{
-    Z_CommonInfo *commonInfo;               /* OPTIONAL */
-    /*
-     * Key elements
-     */
-    char *termListName;
-    /*
-     * Non-brief elements
-     */
-    Z_HumanString *description;             /* OPTIONAL */
-    Z_AttributeCombinations *attributes;    /* OPTIONAL */
-    Z_EScanInfo *scanInfo;                  /* OPTIONAL */
-    int *estNumberTerms;                    /* OPTIONAL */
-    int num_sampleTerms;
-    Z_Term **sampleTerms;                   /* OPTIONAL */
-} Z_TermListDetails;
-
-typedef struct Z_RecordTag
-{
-    Z_StringOrNumeric *qualifier;           /* OPTIONAL */
-    Z_StringOrNumeric *tagValue;
-} Z_RecordTag;
-
-typedef struct Z_PerElementDetails
-{
-    char *name;                             /* OPTIONAL */
-    Z_RecordTag *recordTag;                 /* OPTIONAL */
-    int num_schemaTags;
-    Z_Path **schemaTags;                    /* OPTIONAL */
-    int *maxSize;                           /* OPTIONAL */
-    int *minSize;                           /* OPTIONAL */
-    int *avgSize;                           /* OPTIONAL */
-    int *fixedSize;                         /* OPTIONAL */
-    bool_t *repeatable;
-    bool_t *required;
-    Z_HumanString *description;             /* OPTIONAL */
-    Z_HumanString *contents;                /* OPTIONAL */
-    Z_HumanString *billingInfo;             /* OPTIONAL */
-    Z_HumanString *restrictions;            /* OPTIONAL */
-    int num_alternateNames;
-    char **alternateNames;                  /* OPTIONAL */
-    int num_genericNames;
-    char **genericNames;                    /* OPTIONAL */
-    Z_AttributeCombinations *searchAccess;  /* OPTIONAL */
-} Z_PerElementDetails;
-
-typedef struct Z_ElementSetDetails
-{
-    Z_CommonInfo *commonInfo;               /* OPTIONAL */
-    /*
-     * Key elements
-     */
-    Z_DatabaseName *databaseName;
-    char *elementSetName;
-    Odr_oid *recordSyntax;
-    /*
-     * Brief elements
-     */
-    Odr_oid *schema;
-    /*
-     * Non-brief elements
-     */
-    Z_HumanString *description;             /* OPTIONAL */
-    int num_detailsPerElement;
-    Z_PerElementDetails **detailsPerElement;  /* OPTIONAL */
-} Z_ElementSetDetails;
-
-typedef struct Z_RetrievalRecordDetails
-{
-    Z_CommonInfo *commonInfo;               /* OPTIONAL */
-    /*
-     * Key elements
-     */
-    Z_DatabaseName *databaseName;
-    Odr_oid *schema;
-    Odr_oid *recordSyntax;
-    /*
-     * Non-brief elements
-     */
-    Z_HumanString *description;             /* OPTIONAL */
-    int num_detailsPerElement;
-    Z_PerElementDetails **detailsPerElement;  /* OPTIONAL */
-} Z_RetrievalRecordDetails;
-
-typedef struct Z_SortKeyDetails
-{
-    Z_HumanString *description;                        /* OPTIONAL */
-    int num_elementSpecifications;
-    Z_Specification **elementSpecifications;           /* OPTIONAL */
-    Z_AttributeCombinations *attributeSpecifications;  /* OPTIONAL */
-    int which;
-#define Z_SortKeyDetails_character 0
-#define Z_SortKeyDetails_numeric 1
-#define Z_SortKeyDetails_structured 2
-    union
-    {
-       Odr_null *character;
-       Odr_null *numeric;
-       Z_HumanString *structured;
-    } u;
-    int *caseSensitivity;                              /* OPTIONAL */
-#define Z_SortKeyDetails_always              0
-#define Z_SortKeyDetails_never               1
-#define Z_SortKeyDetails_default_yes         2
-#define Z_SortKeyDetails_default_no          3
-} Z_SortKeyDetails;
-
-typedef struct Z_SortDetails
-{
-    Z_CommonInfo *commonInfo;               /* OPTIONAL */
-    /*
-     * Key elements
-     */
-    Z_DatabaseName *databaseName;
-    /* 
-     * Non-brief elements
-     */
-    int num_sortKeys;
-    Z_SortKeyDetails **sortKeys;            /* OPTIONAL */
-} Z_SortDetails;
-
-typedef struct Z_ProcessingInformation
-{
-    Z_CommonInfo *commonInfo;               /* OPTIONAL */
-    /*
-     * Key elements
-     */
-    Z_DatabaseName *databaseName;
-    int *processingContext;
-#define Z_ProcessingInformation_access               0
-#define Z_ProcessingInformation_search               1
-#define Z_ProcessingInformation_retrieval            2
-#define Z_ProcessingInformation_record_presentation  3
-#define Z_ProcessingInformation_record_handling      4
-    char *name;
-    Odr_oid *oid;
-    /*
-     * Non-brief elements
-     */
-    Z_HumanString *description;             /* OPTIONAL */
-    Z_External *instructions;             /* OPTIONAL */
-} Z_ProcessingInformation;
-
-typedef struct Z_ValueDescription
-{
-    int which;
-#define Z_ValueDescription_integer 0
-#define Z_ValueDescription_string 1
-#define Z_ValueDescription_octets 2
-#define Z_ValueDescription_oid 3
-#define Z_ValueDescription_unit 4
-#define Z_ValueDescription_valueAndUnit 5
-    union
-    {
-       int *integer;
-       char *string;
-       Odr_oct *octets;
-       Odr_oid *oid;
-       Z_Unit *unit;
-       Z_IntUnit *valueAndUnit;
-    } u;
-} Z_ValueDescription;
-
-typedef struct Z_ValueRange
-{
-    Z_ValueDescription *lower;              /* OPTIONAL */
-    Z_ValueDescription *upper;              /* OPTIONAL */
-} Z_ValueRange;
-
-typedef struct Z_ValueSetEnumerated
-{
-    int num;
-    Z_ValueDescription **elements;
-} Z_ValueSetEnumerated;
-
-typedef struct Z_ValueSet
-{
-    int which;
-#define Z_ValueSet_range 0
-#define Z_ValueSet_enumerated 1
-    union
-    {
-       Z_ValueRange *range;
-       Z_ValueSetEnumerated *enumerated;
-    } u;
-} Z_ValueSet;
-
-typedef struct Z_VariantValue
-{
-    int *dataType;
-    Z_ValueSet *values;                     /* OPTIONAL */
-} Z_VariantValue;
-
-typedef struct Z_VariantType
-{
-    char *name;                             /* OPTIONAL */
-    Z_HumanString *description;             /* OPTIONAL */
-    int *variantType;
-    Z_VariantValue *variantValue;           /* OPTIONAL */
-} Z_VariantType;
-
-typedef struct Z_VariantClass
-{
-    char *name;                             /* OPTIONAL */
-    Z_HumanString *description;             /* OPTIONAL */
-    int *variantClass;
-    int num_variantTypes;
-    Z_VariantType **variantTypes;
-} Z_VariantClass;
-
-typedef struct Z_VariantSetInfo
-{
-    Z_CommonInfo *commonInfo;               /* OPTIONAL */
-    /*
-     * Key elements
-     */
-    Odr_oid *variantSet;
-    /*
-     * Brief elements
-     */
-    char *name;
-    /*
-     * Non-brief elements
-     */
-    int num_variants;
-    Z_VariantClass **variants;              /* OPTIONAL */
-} Z_VariantSetInfo;
-
-typedef struct Z_Units
-{
-    char *name;                             /* OPTIONAL */
-    Z_HumanString *description;             /* OPTIONAL */
-    Z_StringOrNumeric *unit;
-} Z_Units;
-
-typedef struct Z_UnitType
-{
-    char *name;                             /* OPTIONAL */
-    Z_HumanString *description;             /* OPTIONAL */
-    Z_StringOrNumeric *unitType;
-    int num_units;
-    Z_Units **units;
-} Z_UnitType;
-
-typedef struct Z_UnitInfo
-{
-    Z_CommonInfo *commonInfo;               /* OPTIONAL */
-    /*
-     * Key elements
-     */
-    char *unitSystem;
-    /*
-     * Non-brief elements
-     */
-    Z_HumanString *description;             /* OPTIONAL */
-    int num_units;
-    Z_UnitType **units;                     /* OPTIONAL */
-} Z_UnitInfo;
-
-typedef struct Z_CategoryInfo
-{
-    char *category;
-    char *originalCategory;                 /* OPTIONAL */
-    Z_HumanString *description;             /* OPTIONAL */
-    char *asn1Module;                       /* OPTIONAL */
-} Z_CategoryInfo;
-
-typedef struct Z_CategoryList
-{
-    Z_CommonInfo *commonInfo;               /* OPTIONAL */
-    int num_categories;
-    Z_CategoryInfo **categories;
-} Z_CategoryList;
-
-typedef struct Z_ExplainRecord
-{
-    int which;
-#define Z_Explain_targetInfo 0
-#define Z_Explain_databaseInfo 1
-#define Z_Explain_schemaInfo 2
-#define Z_Explain_tagSetInfo 3
-#define Z_Explain_recordSyntaxInfo 4
-#define Z_Explain_attributeSetInfo 5
-#define Z_Explain_termListInfo 6
-#define Z_Explain_extendedServicesInfo 7
-#define Z_Explain_attributeDetails 8
-#define Z_Explain_termListDetails 9
-#define Z_Explain_elementSetDetails 10
-#define Z_Explain_retrievalRecordDetails 11
-#define Z_Explain_sortDetails 12
-#define Z_Explain_processing 13
-#define Z_Explain_variants 14
-#define Z_Explain_units 15
-#define Z_Explain_categoryList 16
-    union
-    {
-       Z_TargetInfo *targetInfo;
-       Z_DatabaseInfo *databaseInfo;
-       Z_SchemaInfo *schemaInfo;
-       Z_TagSetInfo *tagSetInfo;
-       Z_RecordSyntaxInfo *recordSyntaxInfo;
-       Z_AttributeSetInfo *attributeSetInfo;
-       Z_TermListInfo *termListInfo;
-       Z_ExtendedServicesInfo *extendedServicesInfo;
-       Z_AttributeDetails *attributeDetails;
-       Z_TermListDetails *termListDetails;
-       Z_ElementSetDetails *elementSetDetails;
-       Z_RetrievalRecordDetails *retrievalRecordDetails;
-       Z_SortDetails *sortDetails;
-       Z_ProcessingInformation *processing;
-       Z_VariantSetInfo *variants;
-       Z_UnitInfo *units;
-       Z_CategoryList *categoryList;
-    } u;
-} Z_ExplainRecord;
-
-YAZ_EXPORT int z_ExplainRecord(ODR o, Z_ExplainRecord **p, int opt,
-                              const char *name);
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif
diff --git a/asn/prt-ext.h b/asn/prt-ext.h
deleted file mode 100644 (file)
index d3e5bf8..0000000
+++ /dev/null
@@ -1,118 +0,0 @@
-/*
- * Copyright (c) 1995-1999, Index Data.
- *
- * Permission to use, copy, modify, distribute, and sell this software and
- * its documentation, in whole or in part, for any purpose, is hereby granted,
- * provided that:
- *
- * 1. This copyright and permission notice appear in all copies of the
- * software and its documentation. Notices of copyright or attribution
- * which appear at the beginning of any file must remain unchanged.
- *
- * 2. The names of Index Data or the individual authors may not be used to
- * endorse or promote products derived from this software without specific
- * prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED "AS IS" AND WITHOUT WARRANTY OF ANY KIND,
- * EXPRESS, IMPLIED, OR OTHERWISE, INCLUDING WITHOUT LIMITATION, ANY
- * WARRANTY OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.
- * IN NO EVENT SHALL INDEX DATA BE LIABLE FOR ANY SPECIAL, INCIDENTAL,
- * INDIRECT OR CONSEQUENTIAL DAMAGES OF ANY KIND, OR ANY DAMAGES
- * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER OR
- * NOT ADVISED OF THE POSSIBILITY OF DAMAGE, AND ON ANY THEORY OF
- * LIABILITY, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE
- * OF THIS SOFTWARE.
- *
- */
-
-/*
- * Biased-choice External for Z39.50.
- */
-
-#ifndef PRT_EXT_H
-#define PRT_EXT_H
-
-#include <yaz/yconfig.h>
-#include <yaz/oid.h>
-
-
-YAZ_BEGIN_CDECL
-
-/*
- * Used to keep track of known External definitions (a loose approach
- * to DEFINED_BY).
- */
-
-typedef struct Z_ext_typeent
-{
-    oid_value dref;    /* the direct-reference OID value. */
-    int what;          /* discriminator value for the external CHOICE */
-    Odr_fun fun;       /* decoder function */
-} Z_ext_typeent;
-
-struct Z_External
-{
-    Odr_oid *direct_reference;
-    int *indirect_reference;
-    char *descriptor;
-    int which;
-/* Generic types */
-#define Z_External_single 0
-#define Z_External_octet 1
-#define Z_External_arbitrary 2
-/* Specific types */
-#define Z_External_sutrs 3
-#define Z_External_explainRecord 4
-#define Z_External_resourceReport1 5
-#define Z_External_resourceReport2 6
-#define Z_External_promptObject1 7
-#define Z_External_grs1 8
-#define Z_External_extendedService 9
-#define Z_External_itemOrder 10
-#define Z_External_diag1 11
-#define Z_External_espec1 12
-#define Z_External_summary 13
-#define Z_External_OPAC 14
-#define Z_External_searchResult1 15
-#define Z_External_update 16
-#define Z_External_dateTime 17
-#define Z_External_universeReport 18
-#define Z_External_ESAdmin 19
-    union
-    {
-       /* Generic types */
-       Odr_any *single_ASN1_type;
-       Odr_oct *octet_aligned;
-       Odr_bitmask *arbitrary;
-
-       /* Specific types */
-       Z_SUTRS *sutrs;
-       Z_ExplainRecord *explainRecord;
-       Z_ResourceReport1 *resourceReport1;
-       Z_ResourceReport2 *resourceReport2;
-       Z_PromptObject1 *promptObject1;
-       Z_GenericRecord *grs1;
-       Z_TaskPackage *extendedService;
-       Z_ItemOrder *itemOrder;
-       Z_DiagnosticFormat *diag1;
-       Z_Espec1 *espec1;
-       Z_BriefBib *summary;
-       Z_SearchInfoReport *searchResult1;
-       Z_IUUpdate *update;
-       Z_DateTime *dateTime;
-        Z_UniverseReport *universeReport;
-#ifdef ASN_COMPILED
-        Z_Admin *adminService;
-#endif
-    } u;
-};
-
-
-YAZ_EXPORT int z_External(ODR o, Z_External **p, int opt, const char *name);
-YAZ_EXPORT Z_ext_typeent *z_ext_getentbyref(oid_value val);
-YAZ_EXPORT Z_External *z_ext_record(ODR o, int format, const char *buf,
-                                   int len);
-
-YAZ_END_CDECL
-
-#endif
diff --git a/asn/prt-grs.c b/asn/prt-grs.c
deleted file mode 100644 (file)
index 9386b76..0000000
+++ /dev/null
@@ -1,267 +0,0 @@
-/*
- * Copyright (c) 1995-1999, Index Data.
- * See the file LICENSE for details.
- * Sebastian Hammer, Adam Dickmeiss
- *
- * $Log: prt-grs.c,v $
- * Revision 1.9  1999-11-30 13:47:11  adam
- * Improved installation. Moved header files to include/yaz.
- *
- * Revision 1.8  1999/04/20 09:56:48  adam
- * Added 'name' paramter to encoder/decoder routines (typedef Odr_fun).
- * Modified all encoders/decoders to reflect this change.
- *
- * Revision 1.7  1998/02/11 11:53:32  adam
- * Changed code so that it compiles as C++.
- *
- * Revision 1.6  1997/05/14 06:53:23  adam
- * C++ support.
- *
- * Revision 1.5  1995/10/18 16:12:20  quinn
- * Added a couple of special cases to handle the WAIS server.
- *
- * Revision 1.4  1995/09/29  17:11:55  quinn
- * Smallish
- *
- * Revision 1.3  1995/09/27  15:02:43  quinn
- * Modified function heads & prototypes.
- *
- * Revision 1.2  1995/08/28  10:58:58  quinn
- * Added extra choice-entry to data to catch visiblestring.
- *
- * Revision 1.1  1995/08/17  12:47:09  quinn
- * Added GRS-1.
- *
- *
- */
-
-#include <yaz/proto.h>
-
-int z_TaggedElement(ODR o, Z_TaggedElement **p, int opt, const char *name);
-int z_ElementData(ODR o, Z_ElementData **p, int opt, const char *name);
-int z_ElementMetaData(ODR o, Z_ElementMetaData **p, int opt, const char *name);
-int z_TagUnit(ODR o, Z_TagUnit **p, int opt, const char *name);
-int z_TagPath(ODR o, Z_TagPath **p, int opt, const char *name);
-int z_Order(ODR o, Z_Order **p, int opt, const char *name);
-int z_Usage(ODR o, Z_Usage **p, int opt, const char *name);
-int z_HitVector(ODR o, Z_HitVector **p, int opt, const char *name);
-int z_Triple(ODR o, Z_Triple **p, int opt, const char *name);
-int z_Variant(ODR o, Z_Variant **p, int opt, const char *name);
-
-int z_GenericRecord(ODR o, Z_GenericRecord **p, int opt, const char *name)
-{
-    if (o->direction == ODR_DECODE)
-       *p = (Z_GenericRecord *)odr_malloc(o, sizeof(**p));
-    else if (!*p)
-       return opt;
-    if (odr_sequence_of(o, (Odr_fun)z_TaggedElement, &(*p)->elements,
-                       &(*p)->num_elements, 0))
-       return 1;
-    *p = 0;
-    return opt && odr_ok(o);
-}
-
-int z_TaggedElement(ODR o, Z_TaggedElement **p, int opt, const char *name)
-{
-    if (!odr_sequence_begin(o, p, sizeof(**p), 0))
-        return opt && odr_ok(o);
-    return
-        odr_implicit(o, odr_integer, &(*p)->tagType,
-                    ODR_CONTEXT, 1, 1) &&
-        odr_explicit(o, z_StringOrNumeric, &(*p)->tagValue,
-                    ODR_CONTEXT, 2, 0) &&
-        odr_implicit(o, odr_integer, &(*p)->tagOccurrence,
-                    ODR_CONTEXT, 3, 1) &&
-        odr_explicit(o, z_ElementData, &(*p)->content,
-                    ODR_CONTEXT, 4, 0) &&
-        odr_implicit(o, z_ElementMetaData, &(*p)->metaData,
-                    ODR_CONTEXT, 5, 1) &&
-        odr_implicit(o, z_Variant, &(*p)->appliedVariant, ODR_CONTEXT, 6, 1) &&
-       odr_sequence_end(o);
-}
-
-int z_ElementData(ODR o, Z_ElementData **p, int opt, const char *name)
-{
-    static Odr_arm arm[] =
-    {
-       {ODR_NONE, -1, -1, Z_ElementData_octets,
-        (Odr_fun)odr_octetstring, 0},
-       {ODR_NONE, -1, -1, Z_ElementData_numeric,
-        (Odr_fun)odr_integer, 0},
-       {ODR_NONE, -1, -1, Z_ElementData_date,
-        (Odr_fun)odr_generalizedtime, 0},
-       {ODR_NONE, -1, -1, Z_ElementData_ext,
-        (Odr_fun)z_External, 0},
-       {ODR_NONE, -1, -1, Z_ElementData_string,
-        (Odr_fun)z_InternationalString, 0},
-       /* The entry below provides some backwards compatibility */
-       {ODR_NONE, -1, -1, Z_ElementData_string,
-        (Odr_fun)odr_visiblestring, 0},
-       {ODR_NONE, -1, -1, Z_ElementData_trueOrFalse,
-        (Odr_fun)odr_bool, 0},
-       {ODR_NONE, -1, -1, Z_ElementData_oid,
-        (Odr_fun)odr_oid, 0},
-       {ODR_IMPLICIT, ODR_CONTEXT, 1, Z_ElementData_intUnit,
-        (Odr_fun)z_IntUnit, 0},
-       {ODR_IMPLICIT, ODR_CONTEXT, 2, Z_ElementData_elementNotThere,
-        (Odr_fun)odr_null, 0},
-       {ODR_IMPLICIT, ODR_CONTEXT, 3, Z_ElementData_elementEmpty,
-        (Odr_fun)odr_null, 0},
-       {ODR_IMPLICIT, ODR_CONTEXT, 4, Z_ElementData_noDataRequested,
-        (Odr_fun)odr_null, 0},
-       {ODR_IMPLICIT, ODR_CONTEXT, 5, Z_ElementData_diagnostic,
-        (Odr_fun)z_External, 0},
-       {ODR_EXPLICIT, ODR_CONTEXT, 6, Z_ElementData_subtree,
-        (Odr_fun)z_GenericRecord, 0},
-       {-1, -1, -1, -1, 0, 0}
-    };
-    
-    if (o->direction == ODR_DECODE)
-       *p = (Z_ElementData *)odr_malloc(o, sizeof(**p));
-    else if (!*p)
-       return opt;
-    if (odr_choice(o, arm, &(*p)->u, &(*p)->which, 0))
-       return 1;
-    *p = 0;
-    return opt && odr_ok(o);
-}
-
-int z_ElementMetaData(ODR o, Z_ElementMetaData **p, int opt, const char *name)
-{
-    if (!odr_sequence_begin(o, p, sizeof(**p), 0))
-        return opt && odr_ok(o);
-    return
-        odr_implicit(o, z_Order, &(*p)->seriesOrder, ODR_CONTEXT, 1, 1) &&
-        odr_implicit(o, z_Usage, &(*p)->usageRight, ODR_CONTEXT, 2, 1) &&
-       odr_implicit_settag(o, ODR_CONTEXT, 3) &&
-       (odr_sequence_of(o, (Odr_fun)z_HitVector, &(*p)->hits,
-                        &(*p)->num_hits, 0) ||
-        odr_ok(o)) &&
-        odr_implicit(o, z_InternationalString, &(*p)->displayName,
-                    ODR_CONTEXT, 4, 1) &&
-       odr_implicit_settag(o, ODR_CONTEXT, 5) &&
-       (odr_sequence_of(o, (Odr_fun)z_Variant, &(*p)->supportedVariants,
-                        &(*p)->num_supportedVariants, 0) || odr_ok(o)) &&
-        odr_implicit(o, z_InternationalString, &(*p)->message,
-                    ODR_CONTEXT, 6, 1) &&
-        odr_implicit(o, odr_octetstring, &(*p)->elementDescriptor,
-                    ODR_CONTEXT, 7, 1) &&
-        odr_implicit(o, z_TagPath, &(*p)->surrogateFor, ODR_CONTEXT, 8, 1) &&
-        odr_implicit(o, z_TagPath, &(*p)->surrogateElement,
-                    ODR_CONTEXT, 9, 1) &&
-        odr_implicit(o, z_External, &(*p)->other, ODR_CONTEXT, 99, 1) &&
-        odr_sequence_end(o);
-}
-
-int z_TagUnit(ODR o, Z_TagUnit **p, int opt, const char *name)
-{
-    if (!odr_sequence_begin(o, p, sizeof(**p), 0))
-        return opt && odr_ok(o);
-    return
-        odr_implicit(o, odr_integer, &(*p)->tagType, ODR_CONTEXT, 1, 1) &&
-        odr_explicit(o, z_StringOrNumeric, &(*p)->tagValue,
-                    ODR_CONTEXT, 2, 0) &&
-        odr_implicit(o, odr_integer, &(*p)->tagOccurrence,
-                    ODR_CONTEXT, 3, 1) &&
-        odr_sequence_end(o);
-}
-
-int z_TagPath(ODR o, Z_TagPath **p, int opt, const char *name)
-{
-    if (o->direction == ODR_DECODE)
-       *p = (Z_TagPath *)odr_malloc(o, sizeof(**p));
-    else if (!*p)
-       return opt;
-    if (odr_sequence_of(o, (Odr_fun)z_TagUnit, &(*p)->tags,
-                       &(*p)->num_tags, 0))
-       return 1;
-    *p = 0;
-    return opt && odr_ok(o);
-}
-
-int z_Order(ODR o, Z_Order **p, int opt, const char *name)
-{
-    if (!odr_sequence_begin(o, p, sizeof(**p), 0))
-        return opt && odr_ok(o);
-    return
-        odr_implicit(o, odr_bool, &(*p)->ascending, ODR_CONTEXT, 1, 0) &&
-        odr_implicit(o, odr_integer, &(*p)->order, ODR_CONTEXT, 2, 0) &&
-        odr_sequence_end(o);
-}
-
-int z_Usage(ODR o, Z_Usage **p, int opt, const char *name)
-{
-    if (!odr_sequence_begin(o, p, sizeof(**p), 0))
-        return opt && odr_ok(o);
-    return
-        odr_implicit(o, odr_integer, &(*p)->type, ODR_CONTEXT, 1, 0) &&
-        odr_implicit(o, z_InternationalString, &(*p)->restriction, ODR_CONTEXT,
-                    2, 1) &&
-        odr_sequence_end(o);
-}
-
-int z_HitVector(ODR o, Z_HitVector **p, int opt, const char *name)
-{
-    if (!odr_sequence_begin(o, p, sizeof(**p), 0))
-        return opt && odr_ok(o);
-    return
-        z_Term(o, &(*p)->satisfier, 1, 0) &&
-        odr_implicit(o, z_IntUnit, &(*p)->offsetIntoElement,
-                    ODR_CONTEXT, 1, 1) &&
-        odr_implicit(o, z_IntUnit, &(*p)->length, ODR_CONTEXT, 2, 1) &&
-        odr_implicit(o, odr_integer, &(*p)->hitRank, ODR_CONTEXT, 3, 1) &&
-        odr_implicit(o, odr_octetstring, &(*p)->targetToken, ODR_CONTEXT,
-                    4, 1) &&
-        odr_sequence_end(o);
-}
-
-int z_Triple(ODR o, Z_Triple **p, int opt, const char *name)
-{
-    static Odr_arm arm[] =
-    {
-       {ODR_NONE, -1, -1, Z_Triple_integer,
-        (Odr_fun)odr_integer, 0},
-       {ODR_NONE, -1, -1, Z_Triple_internationalString,
-        (Odr_fun)z_InternationalString, 0},
-       /* The entry below provides some backwards compatibility */
-       {ODR_NONE, -1, -1, Z_Triple_internationalString,
-        (Odr_fun)odr_visiblestring, 0},
-       {ODR_NONE, -1, -1, Z_Triple_octetString,
-        (Odr_fun)odr_octetstring, 0},
-       {ODR_NONE, -1, -1, Z_Triple_oid,
-        (Odr_fun)odr_oid, 0},
-       {ODR_NONE, -1, -1, Z_Triple_boolean,
-        (Odr_fun)odr_bool, 0},
-       {ODR_NONE, -1, -1, Z_Triple_null,
-        (Odr_fun)odr_null, 0},
-       {ODR_IMPLICIT, ODR_CONTEXT, 1, Z_Triple_unit,
-        (Odr_fun)z_Unit, 0},
-       {ODR_IMPLICIT, ODR_CONTEXT, 2, Z_Triple_valueAndUnit,
-        (Odr_fun)z_IntUnit, 0},
-       {-1, -1, -1, -1, 0, 0}
-    };
-    
-    if (!odr_sequence_begin(o, p, sizeof(**p), 0))
-       return opt && odr_ok(o);
-    return
-       odr_implicit(o, odr_oid, &(*p)->variantSetId, ODR_CONTEXT, 0, 1) &&
-       odr_implicit(o, odr_integer, &(*p)->zclass, ODR_CONTEXT, 1, 0) &&
-       odr_implicit(o, odr_integer, &(*p)->type, ODR_CONTEXT, 2, 0) &&
-       odr_constructed_begin(o, &(*p)->value, ODR_CONTEXT, 3, 0) &&
-       odr_choice(o, arm, &(*p)->value, &(*p)->which, 0) &&
-       odr_constructed_end(o) &&
-       odr_sequence_end(o);
-}
-
-int z_Variant(ODR o, Z_Variant **p, int opt, const char *name)
-{
-    if (!odr_sequence_begin(o, p, sizeof(**p), 0))
-        return opt && odr_ok(o);
-    return
-        odr_implicit(o, odr_oid, &(*p)->globalVariantSetId,
-                    ODR_CONTEXT, 1, 1) &&
-       odr_implicit_settag(o, ODR_CONTEXT, 2) &&
-       odr_sequence_of(o, (Odr_fun)z_Triple, &(*p)->triples,
-                       &(*p)->num_triples, 0) &&
-       odr_sequence_end(o);
-}
diff --git a/asn/prt-grs.h b/asn/prt-grs.h
deleted file mode 100644 (file)
index c7f5f07..0000000
+++ /dev/null
@@ -1,186 +0,0 @@
-/*
- * Copyright (c) 1995-1998, Index Data.
- *
- * Permission to use, copy, modify, distribute, and sell this software and
- * its documentation, in whole or in part, for any purpose, is hereby granted,
- * provided that:
- *
- * 1. This copyright and permission notice appear in all copies of the
- * software and its documentation. Notices of copyright or attribution
- * which appear at the beginning of any file must remain unchanged.
- *
- * 2. The names of Index Data or the individual authors may not be used to
- * endorse or promote products derived from this software without specific
- * prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED "AS IS" AND WITHOUT WARRANTY OF ANY KIND,
- * EXPRESS, IMPLIED, OR OTHERWISE, INCLUDING WITHOUT LIMITATION, ANY
- * WARRANTY OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.
- * IN NO EVENT SHALL INDEX DATA BE LIABLE FOR ANY SPECIAL, INCIDENTAL,
- * INDIRECT OR CONSEQUENTIAL DAMAGES OF ANY KIND, OR ANY DAMAGES
- * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER OR
- * NOT ADVISED OF THE POSSIBILITY OF DAMAGE, AND ON ANY THEORY OF
- * LIABILITY, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE
- * OF THIS SOFTWARE.
- *
- */
-
-#ifndef PRT_GRS_H
-#define PRT_GRS_H
-
-#include <yaz/yconfig.h>
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-struct Z_GenericRecord;
-typedef struct Z_GenericRecord Z_GenericRecord;
-
-typedef struct Z_ElementData
-{
-    int which;
-#define Z_ElementData_octets 0
-#define Z_ElementData_numeric 1
-#define Z_ElementData_date 2
-#define Z_ElementData_ext 3
-#define Z_ElementData_string 4
-#define Z_ElementData_trueOrFalse 5
-#define Z_ElementData_oid 6
-#define Z_ElementData_intUnit 7
-#define Z_ElementData_elementNotThere 8
-#define Z_ElementData_elementEmpty 9
-#define Z_ElementData_noDataRequested 10
-#define Z_ElementData_diagnostic 11
-#define Z_ElementData_subtree 12
-    union
-    {
-       Odr_oct *octets;                      
-       int *numeric;                         
-       char *date;             
-       Z_External *ext;                     
-       char *string;                         
-       bool_t *trueOrFalse;                  
-       Odr_oid *oid;                         
-       Z_IntUnit *intUnit;                  
-       Odr_null *elementNotThere;            
-       Odr_null *elementEmpty;               
-       Odr_null *noDataRequested;            
-       Z_External *diagnostic;              
-       Z_GenericRecord *subtree;            
-    } u;
-} Z_ElementData;
-
-typedef struct Z_Order
-{
-    bool_t *ascending;                    
-    int *order;                           
-} Z_Order;
-
-typedef struct Z_Usage
-{
-    int *type;                            
-#define Z_Usage_redistributable     1
-#define Z_Usage_restricted          2
-#define Z_Usage_licensePointer      3
-    char *restriction;                      /* OPTIONAL */
-} Z_Usage;
-
-typedef struct Z_HitVector
-{
-    Z_Term *satisfier;                      /* OPTIONAL */
-    Z_IntUnit *offsetIntoElement;           /* OPTIONAL */
-    Z_IntUnit *length;                      /* OPTIONAL */
-    int *hitRank;                           /* OPTIONAL */
-    Odr_oct *targetToken;                   /* OPTIONAL */
-} Z_HitVector;
-
-typedef struct Z_Triple
-{
-    Odr_oid *variantSetId;                  /* OPTIONAL */
-    int *zclass;
-    int *type;
-    int which;
-#define Z_Triple_integer 0
-#define Z_Triple_internationalString 1
-#define Z_Triple_octetString 2
-#define Z_Triple_oid 3
-#define Z_Triple_boolean 4
-#define Z_Triple_null 5
-#define Z_Triple_unit 6
-#define Z_Triple_valueAndUnit 7
-    union
-    {
-       int *integer;
-       char *internationalString;
-       Odr_oct *octetString;
-       Odr_oid *oid;
-       bool_t *zboolean;
-       Odr_null *null;
-       Z_Unit *unit;
-       Z_IntUnit *valueAndUnit;
-    } value;
-} Z_Triple;
-
-typedef struct Z_Variant
-{
-    Odr_oid *globalVariantSetId;            /* OPTIONAL */
-    int num_triples;
-    Z_Triple **triples;
-} Z_Variant;
-
-typedef struct Z_TagUnit
-{
-    int *tagType;                           /* OPTIONAL */
-    Z_StringOrNumeric *tagValue;         
-    int *tagOccurrence;                     /* OPTIONAL */
-} Z_TagUnit;
-
-typedef struct Z_TagPath
-{
-    int num_tags;
-    Z_TagUnit **tags;
-} Z_TagPath;
-
-typedef struct Z_ElementMetaData
-{
-    Z_Order *seriesOrder;                   /* OPTIONAL */
-    Z_Usage *usageRight;                    /* OPTIONAL */
-    int num_hits;
-    Z_HitVector **hits;                     /* OPTIONAL */
-    char *displayName;                      /* OPTIONAL */
-    int num_supportedVariants;
-    Z_Variant **supportedVariants;          /* OPTIONAL */
-    char *message;                          /* OPTIONAL */
-    Odr_oct *elementDescriptor;             /* OPTIONAL */
-    Z_TagPath *surrogateFor;                /* OPTIONAL */
-    Z_TagPath *surrogateElement;            /* OPTIONAL */
-    Z_External *other;                      /* OPTIONAL */
-} Z_ElementMetaData;
-
-typedef struct Z_TaggedElement
-{
-    int *tagType;                           /* OPTIONAL */
-    Z_StringOrNumeric *tagValue;         
-    int *tagOccurrence;                     /* OPTIONAL */
-    Z_ElementData *content;              
-    Z_ElementMetaData *metaData;            /* OPTIONAL */
-    Z_Variant *appliedVariant;              /* OPTIONAL */
-} Z_TaggedElement;
-
-struct Z_GenericRecord
-{
-    int num_elements;
-    Z_TaggedElement **elements;
-};
-
-YAZ_EXPORT int z_GenericRecord(ODR o, Z_GenericRecord **p, int opt,
-                              const char *name);
-YAZ_EXPORT int z_Variant(ODR o, Z_Variant **p, int opt,
-                        const char *name);
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif
diff --git a/asn/prt-proto.h b/asn/prt-proto.h
deleted file mode 100644 (file)
index 2d5efb6..0000000
+++ /dev/null
@@ -1,1170 +0,0 @@
-/*
- * Copyright (c) 1995-2001, Index Data.
- *
- * Permission to use, copy, modify, distribute, and sell this software and
- * its documentation, in whole or in part, for any purpose, is hereby granted,
- * provided that:
- *
- * 1. This copyright and permission notice appear in all copies of the
- * software and its documentation. Notices of copyright or attribution
- * which appear at the beginning of any file must remain unchanged.
- *
- * 2. The name of Index Data or the individual authors may not be used to
- * endorse or promote products derived from this software without specific
- * prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED "AS IS" AND WITHOUT WARRANTY OF ANY KIND,
- * EXPRESS, IMPLIED, OR OTHERWISE, INCLUDING WITHOUT LIMITATION, ANY
- * WARRANTY OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.
- * IN NO EVENT SHALL INDEX DATA BE LIABLE FOR ANY SPECIAL, INCIDENTAL,
- * INDIRECT OR CONSEQUENTIAL DAMAGES OF ANY KIND, OR ANY DAMAGES
- * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER OR
- * NOT ADVISED OF THE POSSIBILITY OF DAMAGE, AND ON ANY THEORY OF
- * LIABILITY, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE
- * OF THIS SOFTWARE.
- *
- * $Id: prt-proto.h,v 1.3 2001-09-24 21:51:55 adam Exp $
- */
-
-#ifndef PRT_PROTO_H
-#define PRT_PROTO_H
-
-#include <yaz/yconfig.h>
-#include <yaz/odr.h>
-#include <yaz/oid.h>
-#include <yaz/yaz-version.h>
-
-YAZ_BEGIN_CDECL
-
-/* ----------------- GLOBAL AUXILIARY DEFS ----------------*/
-
-struct Z_External;
-typedef struct Z_External Z_External;
-
-typedef Odr_oct Z_ReferenceId;
-typedef char Z_DatabaseName;
-typedef char Z_ResultSetId;
-typedef Odr_oct Z_ResultsetId;
-
-typedef struct Z_InfoCategory
-{
-    Odr_oid *categoryTypeId;         /* OPTIONAL */
-    int *categoryValue;
-} Z_InfoCategory;
-
-typedef struct Z_OtherInformationUnit
-{
-    Z_InfoCategory *category;        /* OPTIONAL */
-    int which;
-#define Z_OtherInfo_characterInfo 0
-#define Z_OtherInfo_binaryInfo 1
-#define Z_OtherInfo_externallyDefinedInfo 2
-#define Z_OtherInfo_oid 3
-    union
-    {
-       char *characterInfo; 
-       Odr_oct *binaryInfo;
-       Z_External *externallyDefinedInfo;
-       Odr_oid *oid;
-    } information;
-} Z_OtherInformationUnit;
-
-typedef struct Z_OtherInformation
-{
-    int num_elements;
-    Z_OtherInformationUnit **list;
-} Z_OtherInformation;
-
-typedef struct Z_StringOrNumeric
-{
-    int which;
-#define Z_StringOrNumeric_string 0
-#define Z_StringOrNumeric_numeric 1
-    union
-    {
-       char *string;
-       int *numeric;
-    } u;
-} Z_StringOrNumeric;
-
-typedef struct Z_Unit
-{
-    char *unitSystem;               /* OPTIONAL */
-    Z_StringOrNumeric *unitType;    /* OPTIONAL */
-    Z_StringOrNumeric *unit;        /* OPTIONAL */
-    int *scaleFactor;               /* OPTIONAL */
-} Z_Unit;
-
-typedef struct Z_IntUnit
-{
-    int *value;
-    Z_Unit *unitUsed;
-} Z_IntUnit;
-
-typedef Odr_oct Z_SUTRS;
-
-typedef struct Z_StringList
-{
-    int num_strings;
-    char **strings;
-} Z_StringList;
-
-/* ----------------- INIT SERVICE  ----------------*/
-
-typedef struct
-{
-    char *groupId;       /* OPTIONAL */
-    char *userId;         /* OPTIONAL */
-    char *password;      /* OPTIONAL */
-} Z_IdPass;
-
-typedef struct Z_IdAuthentication
-{
-    int which;
-#define Z_IdAuthentication_open 0
-#define Z_IdAuthentication_idPass 1
-#define Z_IdAuthentication_anonymous 2
-#define Z_IdAuthentication_other 3
-    union
-    {
-       char *open;
-       Z_IdPass *idPass;
-       Odr_null *anonymous;
-       Z_External *other;
-    } u;
-} Z_IdAuthentication;
-
-#define Z_ProtocolVersion_1               0
-#define Z_ProtocolVersion_2               1
-#define Z_ProtocolVersion_3               2
-
-#define Z_Options_search                  0
-#define Z_Options_present                 1
-#define Z_Options_delSet                  2
-#define Z_Options_resourceReport          3
-#define Z_Options_triggerResourceCtrl     4
-#define Z_Options_resourceCtrl            5
-#define Z_Options_accessCtrl              6
-#define Z_Options_scan                    7
-#define Z_Options_sort                    8
-#define Z_Options_reserved                9
-#define Z_Options_extendedServices       10
-#define Z_Options_level_1Segmentation    11
-#define Z_Options_level_2Segmentation    12
-#define Z_Options_concurrentOperations   13
-#define Z_Options_namedResultSets        14
-
-typedef struct Z_InitRequest
-{
-    Z_ReferenceId *referenceId;                   /* OPTIONAL */
-    Odr_bitmask *protocolVersion;
-    Odr_bitmask *options;
-    int *preferredMessageSize;
-    int *maximumRecordSize;
-    Z_IdAuthentication* idAuthentication;        /* OPTIONAL */
-    char *implementationId;                      /* OPTIONAL */
-    char *implementationName;                    /* OPTIONAL */
-    char *implementationVersion;                 /* OPTIONAL */
-    Z_External *userInformationField;            /* OPTIONAL */
-    Z_OtherInformation *otherInfo;               /* OPTIONAL */
-} Z_InitRequest;
-
-typedef struct Z_InitResponse
-{
-    Z_ReferenceId *referenceId;    /* OPTIONAL */
-    Odr_bitmask *protocolVersion;
-    Odr_bitmask *options;
-    int *preferredMessageSize;
-    int *maximumRecordSize;
-    bool_t *result;
-    char *implementationId;      /* OPTIONAL */
-    char *implementationName;    /* OPTIONAL */
-    char *implementationVersion; /* OPTIONAL */
-    Z_External *userInformationField; /* OPTIONAL */
-    Z_OtherInformation *otherInfo;    /* OPTIONAL */
-} Z_InitResponse;
-
-typedef struct Z_NSRAuthentication
-{
-    char *user;
-    char *password;
-    char *account;
-} Z_NSRAuthentication;
-
-int z_NSRAuthentication(ODR o, Z_NSRAuthentication **p, int opt,
-                       const char *name);
-
-int z_StrAuthentication(ODR o, char **p, int opt, const char *name);
-
-/* ------------------ SEARCH SERVICE ----------------*/
-
-typedef struct Z_DatabaseSpecificUnit
-{
-    char *databaseName;
-    char *elementSetName;
-} Z_DatabaseSpecificUnit;
-
-typedef struct Z_DatabaseSpecific
-{
-    int num_elements;
-    Z_DatabaseSpecificUnit **elements;
-} Z_DatabaseSpecific;
-
-typedef struct Z_ElementSetNames
-{
-    int which;
-#define Z_ElementSetNames_generic 0
-#define Z_ElementSetNames_databaseSpecific 1
-    union
-    {
-        char *generic;
-        Z_DatabaseSpecific *databaseSpecific;
-    } u;
-} Z_ElementSetNames;
-
-/* ---------------------- RPN QUERY --------------------------- */
-
-typedef struct Z_ComplexAttribute
-{
-    int num_list;
-    Z_StringOrNumeric **list;
-    int num_semanticAction;
-    int **semanticAction;           /* OPTIONAL */
-} Z_ComplexAttribute;
-
-typedef struct Z_AttributeElement
-{
-    Odr_oid *attributeSet;           /* OPTIONAL - v3 only */
-    int *attributeType;
-    int which;
-#define Z_AttributeValue_numeric 0
-#define Z_AttributeValue_complex 1
-    union
-    {
-       int *numeric;
-       Z_ComplexAttribute *complex;
-    } value;
-} Z_AttributeElement;
-
-typedef struct Z_Term 
-{
-    int which;
-#define Z_Term_general 0
-#define Z_Term_numeric 1
-#define Z_Term_characterString 2
-#define Z_Term_oid 3
-#define Z_Term_dateTime 4
-#define Z_Term_external 5
-#define Z_Term_integerAndUnit 6
-#define Z_Term_null 7
-    union
-    {
-       Odr_oct *general; /* this is required for v2 */
-       int *numeric;
-       char *characterString;
-       Odr_oid *oid;
-       char *dateTime;
-       Z_External *external;
-       /* Z_IntUnit *integerAndUnit; */
-       Odr_null *null;
-    } u;
-} Z_Term;
-
-typedef struct Z_AttributesPlusTerm
-{
-    int num_attributes;
-    Z_AttributeElement **attributeList;
-    Z_Term *term;
-} Z_AttributesPlusTerm;
-
-typedef struct Z_ResultSetPlusAttributes
-{
-    char *resultSet;
-    int num_attributes;
-    Z_AttributeElement **attributeList;
-} Z_ResultSetPlusAttributes;
-
-typedef struct Z_ProximityOperator
-{
-    bool_t *exclusion;          /* OPTIONAL */
-    int *distance;
-    bool_t *ordered;
-    int *relationType;
-#define Z_Prox_lessThan           1
-#define Z_Prox_lessThanOrEqual    2
-#define Z_Prox_equal              3
-#define Z_Prox_greaterThanOrEqual 4
-#define Z_Prox_greaterThan        5
-#define Z_Prox_notEqual           6
-    int which;
-#define Z_ProxCode_known 0
-#define Z_ProxCode_private 1
-    int *proximityUnitCode;
-#define Z_ProxUnit_character       1
-#define Z_ProxUnit_word            2
-#define Z_ProxUnit_sentence        3
-#define Z_ProxUnit_paragraph       4
-#define Z_ProxUnit_section         5
-#define Z_ProxUnit_chapter         6
-#define Z_ProxUnit_document        7
-#define Z_ProxUnit_element         8
-#define Z_ProxUnit_subelement      9
-#define Z_ProxUnit_elementType    10
-#define Z_ProxUnit_byte           11   /* v3 only */
-} Z_ProximityOperator;
-
-typedef struct Z_Operator
-{
-    int which;
-#define Z_Operator_and 0
-#define Z_Operator_or 1
-#define Z_Operator_and_not 2
-#define Z_Operator_prox 3
-    union
-    {
-       Odr_null *op_and;          /* these guys are nulls. */
-       Odr_null *op_or;
-       Odr_null *op_and_not;
-       Z_ProximityOperator *prox;
-    } u;
-} Z_Operator;
-
-typedef struct Z_Operand
-{
-    int which;
-#define Z_Operand_APT 0
-#define Z_Operand_resultSetId 1
-#define Z_Operand_resultAttr             /* v3 only */ 2
-    union
-    {
-       Z_AttributesPlusTerm *attributesPlusTerm;
-       Z_ResultSetId *resultSetId;
-       Z_ResultSetPlusAttributes *resultAttr;
-    } u;
-} Z_Operand;
-
-typedef struct Z_Complex
-{
-    struct Z_RPNStructure *s1;
-    struct Z_RPNStructure *s2;
-    Z_Operator *roperator;
-} Z_Complex;
-
-typedef struct Z_RPNStructure
-{
-    int which;
-#define Z_RPNStructure_simple 0
-#define Z_RPNStructure_complex 1
-    union
-    {
-       Z_Operand *simple;
-       Z_Complex *complex;
-    } u;
-} Z_RPNStructure;
-
-typedef struct Z_RPNQuery
-{
-    Odr_oid *attributeSetId;
-    Z_RPNStructure *RPNStructure;
-} Z_RPNQuery;
-
-/* -------------------------- SEARCHREQUEST -------------------------- */
-
-typedef struct Z_Query
-{
-    int which;
-#define Z_Query_type_1 1
-#define Z_Query_type_2 2
-#define Z_Query_type_101 3
-    union
-    {
-       Z_RPNQuery *type_1;
-       Odr_oct *type_2;
-       Z_RPNQuery *type_101;
-    } u;
-} Z_Query;
-
-typedef struct Z_SearchRequest
-{
-    Z_ReferenceId *referenceId;   /* OPTIONAL */
-    int *smallSetUpperBound;
-    int *largeSetLowerBound;
-    int *mediumSetPresentNumber;
-    bool_t *replaceIndicator;
-    char *resultSetName;
-    int num_databaseNames;
-    char **databaseNames;
-    Z_ElementSetNames *smallSetElementSetNames;    /* OPTIONAL */
-    Z_ElementSetNames *mediumSetElementSetNames;    /* OPTIONAL */
-    Odr_oid *preferredRecordSyntax;  /* OPTIONAL */
-    Z_Query *query;
-    Z_OtherInformation *additionalSearchInfo;       /* OPTIONAL */
-    Z_OtherInformation *otherInfo;                  /* OPTIONAL */
-} Z_SearchRequest;
-
-/* ------------------------ RECORD -------------------------- */
-
-typedef Z_External Z_DatabaseRecord;
-
-typedef struct Z_DefaultDiagFormat
-{
-    Odr_oid *diagnosticSetId; /* This is opt'l to interwork with bad targets */
-    int *condition;
-    /* until the whole character set issue becomes more definite,
-     * you can probably ignore this on input. */
-    int which;
-#define Z_DiagForm_v2AddInfo 0
-#define Z_DiagForm_v3AddInfo 1
-    char *addinfo;
-} Z_DefaultDiagFormat;
-
-typedef struct Z_DiagRec
-{
-    int which;
-#define Z_DiagRec_defaultFormat 0
-#define Z_DiagRec_externallyDefined 1
-    union
-    {
-       Z_DefaultDiagFormat *defaultFormat;
-       Z_External *externallyDefined;
-    } u;
-} Z_DiagRec;
-
-typedef struct Z_DiagRecs
-{
-    int num_diagRecs;
-    Z_DiagRec **diagRecs;
-} Z_DiagRecs;
-
-typedef struct Z_NamePlusRecord
-{
-    char *databaseName;      /* OPTIONAL */
-    int which;
-#define Z_NamePlusRecord_databaseRecord 0
-#define Z_NamePlusRecord_surrogateDiagnostic 1
-    union
-    {
-       Z_DatabaseRecord *databaseRecord;
-       Z_DiagRec *surrogateDiagnostic;
-    } u;
-} Z_NamePlusRecord;
-
-typedef struct Z_NamePlusRecordList
-{
-    int num_records;
-    Z_NamePlusRecord **records;
-} Z_NamePlusRecordList;
-
-typedef struct Z_Records
-{
-    int which;
-#define Z_Records_DBOSD 0
-#define Z_Records_NSD 1
-#define Z_Records_multipleNSD 2
-    union
-    {
-       Z_NamePlusRecordList *databaseOrSurDiagnostics;
-       Z_DiagRec *nonSurrogateDiagnostic;
-       Z_DiagRecs *multipleNonSurDiagnostics;
-    } u;
-} Z_Records;
-
-/* ------------------------ SEARCHRESPONSE ------------------ */
-
-typedef struct Z_SearchResponse
-{
-    Z_ReferenceId *referenceId;       /* OPTIONAL */
-    int *resultCount;
-    int *numberOfRecordsReturned;
-    int *nextResultSetPosition;
-    bool_t *searchStatus;
-    int *resultSetStatus;              /* OPTIONAL */
-#define Z_RES_SUBSET        1
-#define Z_RES_INTERIM       2
-#define Z_RES_NONE          3
-    int *presentStatus;                /* OPTIONAL */
-#define Z_PRES_SUCCESS      0
-#define Z_PRES_PARTIAL_1    1
-#define Z_PRES_PARTIAL_2    2
-#define Z_PRES_PARTIAL_3    3
-#define Z_PRES_PARTIAL_4    4
-#define Z_PRES_FAILURE      5
-    Z_Records *records;                  /* OPTIONAL */
-    Z_OtherInformation *additionalSearchInfo;
-    Z_OtherInformation *otherInfo;
-} Z_SearchResponse;
-
-/* ------------------------- PRESENT SERVICE -----------------*/
-
-typedef struct Z_ElementSpec
-{
-    int which;
-#define Z_ElementSpec_elementSetName 0
-#define Z_ElementSpec_externalSpec 1
-    union
-    {
-       char *elementSetName;
-       Z_External *externalSpec;
-    } u;
-} Z_ElementSpec;
-
-typedef struct Z_Specification
-{
-    Odr_oid *schema;                  /* OPTIONAL */
-    Z_ElementSpec *elementSpec;       /* OPTIONAL */
-} Z_Specification;
-
-typedef struct Z_DbSpecific
-{
-    char *databaseName;
-    Z_Specification *spec;
-} Z_DbSpecific;
-
-typedef struct Z_CompSpec
-{
-    bool_t *selectAlternativeSyntax;
-    Z_Specification *generic;            /* OPTIONAL */
-    int num_dbSpecific;
-    Z_DbSpecific **dbSpecific;           /* OPTIONAL */
-    int num_recordSyntax;
-    Odr_oid **recordSyntax;              /* OPTIONAL */
-} Z_CompSpec;
-
-typedef struct Z_RecordComposition
-{
-    int which;
-#define Z_RecordComp_simple 0
-#define Z_RecordComp_complex 1
-    union
-    {
-       Z_ElementSetNames *simple;
-       Z_CompSpec *complex;
-    } u;
-} Z_RecordComposition;
-
-typedef struct Z_Range
-{
-    int *startingPosition;
-    int *numberOfRecords;
-} Z_Range;
-
-typedef struct Z_PresentRequest
-{
-    Z_ReferenceId *referenceId;              /* OPTIONAL */
-    Z_ResultSetId *resultSetId;
-    int *resultSetStartPoint;
-    int *numberOfRecordsRequested;
-    int num_ranges;
-    Z_Range **additionalRanges;              /* OPTIONAL */
-    Z_RecordComposition *recordComposition;  /* OPTIONAL */
-    Odr_oid *preferredRecordSyntax;  /* OPTIONAL */
-    int *maxSegmentCount;                 /* OPTIONAL */
-    int *maxRecordSize;                   /* OPTIONAL */
-    int *maxSegmentSize;                  /* OPTIONAL */
-    Z_OtherInformation *otherInfo;        /* OPTIONAL */
-} Z_PresentRequest;
-
-typedef struct Z_PresentResponse
-{
-    Z_ReferenceId *referenceId;        /* OPTIONAL */
-    int *numberOfRecordsReturned;
-    int *nextResultSetPosition;
-    int *presentStatus;
-    Z_Records *records;
-    Z_OtherInformation *otherInfo;     /* OPTIONAL */
-} Z_PresentResponse;
-
-/* ------------------ RESOURCE CONTROL ----------------*/
-
-typedef struct Z_TriggerResourceControlRequest
-{
-    Z_ReferenceId *referenceId;    /* OPTIONAL */
-    int *requestedAction;
-#define Z_TriggerResourceCtrl_resourceReport  1
-#define Z_TriggerResourceCtrl_resourceControl 2
-#define Z_TriggerResourceCtrl_cancel          3
-    Odr_oid *prefResourceReportFormat;  /* OPTIONAL */
-    bool_t *resultSetWanted;            /* OPTIONAL */
-    Z_OtherInformation *otherInfo;
-} Z_TriggerResourceControlRequest;
-
-typedef struct Z_ResourceControlRequest
-{
-    Z_ReferenceId *referenceId;    /* OPTIONAL */
-    bool_t *suspendedFlag;         /* OPTIONAL */
-    Z_External *resourceReport; /* OPTIONAL */
-    int *partialResultsAvailable;  /* OPTIONAL */
-#define Z_ResourceControlRequest_subset    1
-#define Z_ResourceControlRequest_interim   2
-#define Z_ResourceControlRequest_none      3
-    bool_t *responseRequired;
-    bool_t *triggeredRequestFlag;  /* OPTIONAL */
-    Z_OtherInformation *otherInfo;
-} Z_ResourceControlRequest;
-
-typedef struct Z_ResourceControlResponse
-{
-    Z_ReferenceId *referenceId;    /* OPTIONAL */
-    bool_t *continueFlag;
-    bool_t *resultSetWanted;       /* OPTIONAL */
-    Z_OtherInformation *otherInfo;
-} Z_ResourceControlResponse;
-
-
-/* ------------------ ACCESS CTRL SERVICE ----------------*/
-
-typedef struct Z_AccessControlRequest
-{
-    Z_ReferenceId *referenceId;           /* OPTIONAL */
-    int which;
-#define Z_AccessRequest_simpleForm 0
-#define Z_AccessRequest_externallyDefined 1
-    union
-    {
-       Odr_oct *simpleForm;
-       Z_External *externallyDefined;
-    } u;
-    Z_OtherInformation *otherInfo;           /* OPTIONAL */
-} Z_AccessControlRequest;
-
-typedef struct Z_AccessControlResponse
-{
-    Z_ReferenceId *referenceId;              /* OPTIONAL */
-    int which;
-#define Z_AccessResponse_simpleForm 0
-#define Z_AccessResponse_externallyDefined 1
-    union
-    {
-       Odr_oct *simpleForm;
-       Z_External *externallyDefined;
-    } u;
-    Z_DiagRec *diagnostic;                   /* OPTIONAL */
-    Z_OtherInformation *otherInfo;           /* OPTIONAL */
-} Z_AccessControlResponse;
-
-/* ------------------------ SCAN SERVICE -------------------- */
-
-typedef struct Z_AttributeList
-{
-    int num_attributes;
-    Z_AttributeElement **attributes;
-} Z_AttributeList;
-
-typedef struct Z_AlternativeTerm
-{
-    int num_terms;
-    Z_AttributesPlusTerm **terms;
-} Z_AlternativeTerm;
-
-typedef struct Z_ByDatabase
-{
-    char *db;
-    int *num;                           /* OPTIONAL */
-    Z_OtherInformation *otherDbInfo;    /* OPTIONAL */
-} Z_ByDatabase;
-
-typedef struct Z_ByDatabaseList
-{
-    int num_elements;
-    Z_ByDatabase **elements;
-} Z_ByDatabaseList;
-
-typedef struct Z_ScanOccurrences
-{
-    int which;
-#define Z_ScanOccurrences_global         0
-#define Z_ScanOccurrences_byDatabase     1
-    union
-    {
-       int *global;
-       Z_ByDatabaseList *byDatabase;
-    } u;
-
-} Z_ScanOccurrences;
-
-typedef struct Z_OccurrenceByAttributesElem
-{
-    Z_AttributeList *attributes;
-    Z_ScanOccurrences *occurrences;         /* OPTIONAL */
-    Z_OtherInformation *otherOccurInfo;      /* OPTIONAL */
-} Z_OccurrenceByAttributesElem;
-
-typedef struct Z_OccurrenceByAttributes
-{
-    int num_elements;
-    Z_OccurrenceByAttributesElem **elements;
-} Z_OccurrenceByAttributes;
-
-typedef struct Z_TermInfo
-{
-    Z_Term *term;
-    char *displayTerm;                     /* OPTIONAL */
-    Z_AttributeList *suggestedAttributes;  /* OPTIONAL */
-    Z_AlternativeTerm *alternativeTerm;    /* OPTIONAL */
-    int *globalOccurrences;                /* OPTIONAL */
-    Z_OccurrenceByAttributes *byAttributes; /* OPTIONAL */
-    Z_OtherInformation *otherTermInfo;      /* OPTIONAL */
-} Z_TermInfo;
-
-typedef struct Z_Entry
-{
-    int which;
-#define Z_Entry_termInfo 0
-#define Z_Entry_surrogateDiagnostic 1
-    union
-    {
-       Z_TermInfo *termInfo;
-       Z_DiagRec *surrogateDiagnostic;
-    } u;
-} Z_Entry;
-
-#ifdef BUGGY_LISTENTRIES
-
-typedef struct Z_Entries
-{
-    int num_entries;
-    Z_Entry **entries;
-} Z_Entries;
-
-typedef struct Z_ListEntries
-{
-    int which;
-#define Z_ListEntries_entries 0
-#define Z_ListEntries_nonSurrogateDiagnostics 1
-    union
-    {
-       Z_Entries *entries;
-       Z_DiagRecs *nonSurrogateDiagnostics;
-    } u;
-} Z_ListEntries;
-
-#endif
-
-typedef struct Z_ListEntries {
-       int num_entries;
-       Z_Entry **entries; /* OPT */
-       int num_nonsurrogateDiagnostics;
-       Z_DiagRec **nonsurrogateDiagnostics; /* OPT */
-} Z_ListEntries;
-
-typedef struct Z_ScanRequest
-{
-    Z_ReferenceId *referenceId;       /* OPTIONAL */
-    int num_databaseNames;
-    char **databaseNames;
-    Odr_oid *attributeSet;          /* OPTIONAL */
-    Z_AttributesPlusTerm *termListAndStartPoint;
-    int *stepSize;                    /* OPTIONAL */
-    int *numberOfTermsRequested;
-    int *preferredPositionInResponse;   /* OPTIONAL */
-    Z_OtherInformation *otherInfo;
-} Z_ScanRequest;
-
-typedef struct Z_ScanResponse
-{
-    Z_ReferenceId *referenceId;       /* OPTIONAL */
-    int *stepSize;                    /* OPTIONAL */
-    int *scanStatus;
-#define Z_Scan_success      0
-#define Z_Scan_partial_1    1
-#define Z_Scan_partial_2    2
-#define Z_Scan_partial_3    3
-#define Z_Scan_partial_4    4
-#define Z_Scan_partial_5    5
-#define Z_Scan_failure      6
-    int *numberOfEntriesReturned;
-    int *positionOfTerm;              /* OPTIONAL */
-    Z_ListEntries *entries;           /* OPTIONAL */
-    Odr_oid *attributeSet;            /* OPTIONAL */
-    Z_OtherInformation *otherInfo;
-} Z_ScanResponse; 
-
-
-/* ------------------------ DELETE -------------------------- */
-
-#define Z_DeleteStatus_success                          0
-#define Z_DeleteStatus_resultSetDidNotExist             1
-#define Z_DeleteStatus_previouslyDeletedByTarget        2
-#define Z_DeleteStatus_systemProblemAtTarget            3
-#define Z_DeleteStatus_accessNotAllowed                 4
-#define Z_DeleteStatus_resourceControlAtOrigin          5
-#define Z_DeleteStatus_resourceControlAtTarget          6
-#define Z_DeleteStatus_bulkDeleteNotSupported           7
-#define Z_DeleteStatus_notAllRsltSetsDeletedOnBulkDlte  8
-#define Z_DeleteStatus_notAllRequestedResultSetsDeleted 9
-#define Z_DeleteStatus_resultSetInUse                  10
-
-typedef struct Z_ListStatus
-{
-    Z_ResultSetId *id;
-    int *status;
-} Z_ListStatus;
-
-typedef struct Z_DeleteResultSetRequest
-{
-    Z_ReferenceId *referenceId;        /* OPTIONAL */
-    int *deleteFunction;
-#define Z_DeleteRequest_list    0
-#define Z_DeleteRequest_all     1
-    int num_resultSetList;
-    Z_ResultSetId **resultSetList;      /* OPTIONAL */
-    Z_OtherInformation *otherInfo;
-} Z_DeleteResultSetRequest;
-
-typedef struct Z_ListStatuses {
-    int num;
-    Z_ListStatus **elements;
-} Z_ListStatuses;
-
-typedef struct Z_DeleteResultSetResponse
-{
-    Z_ReferenceId *referenceId;        /* OPTIONAL */
-    int *deleteOperationStatus;
-    Z_ListStatuses *deleteListStatuses;/* OPTIONAL */
-    int *numberNotDeleted;             /* OPTIONAL */
-    Z_ListStatuses *bulkStatuses;      /* OPTIONAL */
-    char *deleteMessage;               /* OPTIONAL */
-    Z_OtherInformation *otherInfo;
-} Z_DeleteResultSetResponse;
-
-/* ------------------------ CLOSE SERVICE ------------------- */
-
-typedef struct Z_Close
-{
-    Z_ReferenceId *referenceId;         /* OPTIONAL */
-    int *closeReason;
-#define Z_Close_finished           0
-#define Z_Close_shutdown           1
-#define Z_Close_systemProblem      2
-#define Z_Close_costLimit          3
-#define Z_Close_resources          4
-#define Z_Close_securityViolation  5
-#define Z_Close_protocolError      6
-#define Z_Close_lackOfActivity     7
-#define Z_Close_peerAbort          8
-#define Z_Close_unspecified        9
-    char *diagnosticInformation;          /* OPTIONAL */
-    Odr_oid *resourceReportFormat;        /* OPTIONAL */
-    Z_External *resourceReport;         /* OPTIONAL */
-    Z_OtherInformation *otherInfo;        /* OPTIONAL */
-} Z_Close;
-
-/* ------------------------ SEGMENTATION -------------------- */
-
-typedef struct Z_Segment
-{
-    Z_ReferenceId *referenceId;   /* OPTIONAL */
-    int *numberOfRecordsReturned;
-    int num_segmentRecords;
-    Z_NamePlusRecord **segmentRecords;
-    Z_OtherInformation *otherInfo;  /* OPTIONAL */
-} Z_Segment;
-
-/* ----------------------- Extended Services ---------------- */
-
-typedef struct Z_Permissions
-{
-    char *userId;                         
-    int num_allowableFunctions;
-    int **allowableFunctions;             
-#define Z_Permissions_delete              1
-#define Z_Permissions_modifyContents      2
-#define Z_Permissions_modifyPermissions   3
-#define Z_Permissions_present             4
-#define Z_Permissions_invoke              5
-} Z_Permissions;
-
-typedef struct Z_ExtendedServicesRequest
-{
-    Z_ReferenceId *referenceId;             /* OPTIONAL */
-    int *function;                        
-#define Z_ExtendedServicesRequest_create              1
-#define Z_ExtendedServicesRequest_delete              2
-#define Z_ExtendedServicesRequest_modify              3
-    Odr_oid *packageType;                 
-    char *packageName;                      /* OPTIONAL */
-    char *userId;                           /* OPTIONAL */
-    Z_IntUnit *retentionTime;               /* OPTIONAL */
-    Z_Permissions *permissions;             /* OPTIONAL */
-    char *description;                      /* OPTIONAL */
-    Z_External *taskSpecificParameters;     /* OPTIONAL */
-    int *waitAction;                      
-#define Z_ExtendedServicesRequest_wait                1
-#define Z_ExtendedServicesRequest_waitIfPossible      2
-#define Z_ExtendedServicesRequest_dontWait            3
-#define Z_ExtendedServicesRequest_dontReturnPackage   4
-    char *elements;             /* OPTIONAL */
-    Z_OtherInformation *otherInfo;          /* OPTIONAL */
-} Z_ExtendedServicesRequest;
-
-typedef struct Z_ExtendedServicesResponse
-{
-    Z_ReferenceId *referenceId;             /* OPTIONAL */
-    int *operationStatus;                 
-#define Z_ExtendedServicesResponse_done                1
-#define Z_ExtendedServicesResponse_accepted            2
-#define Z_ExtendedServicesResponse_failure             3
-    int num_diagnostics;
-    Z_DiagRec **diagnostics;                /* OPTIONAL */
-    Z_External *taskPackage;                /* OPTIONAL */
-    Z_OtherInformation *otherInfo;          /* OPTIONAL */
-} Z_ExtendedServicesResponse;
-
-/* ------------------------ Sort --------------------------- */
-
-typedef struct Z_SortAttributes
-{
-    Odr_oid *id;
-    Z_AttributeList *list;
-} Z_SortAttributes;
-
-typedef struct Z_SortKey
-{
-    int which;
-#define Z_SortKey_sortField             0
-#define Z_SortKey_elementSpec           1
-#define Z_SortKey_sortAttributes        2
-    union
-    {
-       char *sortField;
-       Z_Specification *elementSpec;
-       Z_SortAttributes *sortAttributes;
-    } u;
-} Z_SortKey;
-
-typedef struct Z_SortDbSpecific
-{
-    char *databaseName;
-    Z_SortKey *dbSort;
-} Z_SortDbSpecific;
-
-typedef struct Z_SortDbSpecificList
-{
-    int num_dbSpecific;
-    Z_SortDbSpecific **dbSpecific;
-} Z_SortDbSpecificList;
-
-typedef struct Z_SortElement
-{
-    int which;
-#define Z_SortElement_generic               0
-#define Z_SortElement_databaseSpecific      1
-    union
-    {
-       Z_SortKey *generic;
-       Z_SortDbSpecificList *databaseSpecific;
-    } u;
-} Z_SortElement;
-
-typedef struct Z_SortMissingValueAction
-{
-    int which;
-#define Z_SortMissingValAct_abort           0
-#define Z_SortMissingValAct_null            1
-#define Z_SortMissingValAct_valData         2
-    union
-    {
-       Odr_null *abort;
-       Odr_null *null;
-       Odr_oct *valData;
-    } u;
-} Z_SortMissingValueAction;
-
-typedef struct Z_SortKeySpec
-{
-    Z_SortElement *sortElement;
-    int *sortRelation;
-#define Z_SortRelation_ascending            0
-#define Z_SortRelation_descending           1
-#define Z_SortRelation_ascendingByFreq      3
-#define Z_SortRelation_descendingByFreq     4
-    int *caseSensitivity;
-#define Z_SortCase_caseSensitive            0
-#define Z_SortCase_caseInsensitive          1
-    Z_SortMissingValueAction *missingValueAction;  /* OPTIONAL */
-} Z_SortKeySpec;
-
-typedef struct Z_SortResponse
-{
-    Z_ReferenceId *referenceId;             /* OPTIONAL */
-    int *sortStatus;
-#define Z_SortStatus_success              0
-#define Z_SortStatus_partial_1            1
-#define Z_SortStatus_failure              2
-    int *resultSetStatus;                   /* OPTIONAL */
-#define Z_SortResultSetStatus_empty       1
-#define Z_SortResultSetStatus_interim     2
-#define Z_SortResultSetStatus_unchanged   3
-#define Z_SortResultSetStatus_none        4
-    Z_DiagRecs *diagnostics;                /* OPTIONAL */
-    Z_OtherInformation *otherInfo;          /* OPTIONAL */
-} Z_SortResponse;
-
-typedef struct Z_SortKeySpecList
-{
-    int num_specs;
-    Z_SortKeySpec **specs;
-} Z_SortKeySpecList;
-
-typedef struct Z_SortRequest
-{
-    Z_ReferenceId *referenceId;             /* OPTIONAL */
-    Z_StringList *inputResultSetNames;
-    char *sortedResultSetName;
-    Z_SortKeySpecList *sortSequence;
-    Z_OtherInformation *otherInfo;          /* OPTIONAL */
-} Z_SortRequest;
-
-/* ----------------------- Resource Report ------------------ */
-
-typedef struct Z_ResourceReportRequest
-{
-    Z_ReferenceId *referenceId;             /* OPTIONAL */
-    Z_ReferenceId *opId;                    /* OPTIONAL */
-    Odr_oid *prefResourceReportFormat;      /* OPTIONAL */
-    Z_OtherInformation *otherInfo;          /* OPTIONAL */
-} Z_ResourceReportRequest;
-
-typedef struct Z_ResourceReportResponse
-{
-    Z_ReferenceId *referenceId;             /* OPTIONAL */
-    int *resourceReportStatus;
-#define Z_ResourceReportStatus_success   0
-#define Z_ResourceReportStatus_partial   1
-#define Z_ResourceReportStatus_failure_1 2
-#define Z_ResourceReportStatus_failure_2 3
-#define Z_ResourceReportStatus_failure_3 4
-#define Z_ResourceReportStatus_failure_4 5
-#define Z_ResourceReportStatus_failure_5 6
-#define Z_ResourceReportStatus_failure_6 7
-    Z_External *resourceReport;             /* OPTIONAL */
-    Z_OtherInformation *otherInfo;          /* OPTIONAL */
-} Z_ResourceReportResponse;
-
-/* ------------------------ APDU ---------------------------- */
-
-typedef struct Z_APDU
-{    
-    int which;
-#define Z_APDU_initRequest 0
-#define Z_APDU_initResponse 1
-#define Z_APDU_searchRequest 2
-#define Z_APDU_searchResponse 3
-#define Z_APDU_presentRequest 4
-#define Z_APDU_presentResponse 5
-#define Z_APDU_deleteResultSetRequest 6
-#define Z_APDU_deleteResultSetResponse 7
-#define Z_APDU_resourceControlRequest 8
-#define Z_APDU_resourceControlResponse 9
-#define Z_APDU_triggerResourceControlRequest 10
-#define Z_APDU_scanRequest 11
-#define Z_APDU_scanResponse 12
-#define Z_APDU_segmentRequest 13
-#define Z_APDU_extendedServicesRequest 14
-#define Z_APDU_extendedServicesResponse 15
-#define Z_APDU_close 16
-#define Z_APDU_accessControlRequest 17
-#define Z_APDU_accessControlResponse 18
-#define Z_APDU_sortRequest 20
-#define Z_APDU_sortResponse 21
-#define Z_APDU_resourceReportRequest 22
-#define Z_APDU_resourceReportResponse 23
-    union
-    {
-       Z_InitRequest  *initRequest;
-       Z_InitResponse *initResponse;
-       Z_SearchRequest *searchRequest;
-       Z_SearchResponse *searchResponse;
-       Z_PresentRequest *presentRequest;
-       Z_PresentResponse *presentResponse;
-       Z_DeleteResultSetRequest *deleteResultSetRequest;
-       Z_DeleteResultSetResponse *deleteResultSetResponse;
-       Z_AccessControlRequest *accessControlRequest;
-       Z_AccessControlResponse *accessControlResponse;
-       Z_ResourceControlRequest *resourceControlRequest;
-       Z_ResourceControlResponse *resourceControlResponse;
-       Z_TriggerResourceControlRequest *triggerResourceControlRequest;
-       Z_ResourceReportRequest *resourceReportRequest;
-       Z_ResourceReportResponse *resourceReportResponse;
-       Z_ScanRequest *scanRequest;
-       Z_ScanResponse *scanResponse;
-       Z_SortRequest *sortRequest;
-       Z_SortResponse *sortResponse;
-       Z_Segment *segmentRequest;
-       Z_ExtendedServicesRequest *extendedServicesRequest;
-       Z_ExtendedServicesResponse *extendedServicesResponse;
-       Z_Close *close;
-    } u;
-} Z_APDU;
-
-#define z_APDU z_APDU_old
-
-YAZ_EXPORT int z_APDU(ODR o, Z_APDU **p, int opt, const char *name);
-YAZ_EXPORT int z_SUTRS(ODR o, Odr_oct **p, int opt, const char *name);
-
-YAZ_EXPORT Z_InitRequest *zget_InitRequest(ODR o);
-YAZ_EXPORT Z_InitResponse *zget_InitResponse(ODR o);
-YAZ_EXPORT Z_SearchRequest *zget_SearchRequest(ODR o);
-YAZ_EXPORT Z_SearchResponse *zget_SearchResponse(ODR o);
-YAZ_EXPORT Z_PresentRequest *zget_PresentRequest(ODR o);
-YAZ_EXPORT Z_PresentResponse *zget_PresentResponse(ODR o);
-YAZ_EXPORT Z_DeleteResultSetRequest *zget_DeleteResultSetRequest(ODR o);
-YAZ_EXPORT Z_DeleteResultSetResponse *zget_DeleteResultSetResponse(ODR o);
-YAZ_EXPORT Z_ScanRequest *zget_ScanRequest(ODR o);
-YAZ_EXPORT Z_ScanResponse *zget_ScanResponse(ODR o);
-YAZ_EXPORT Z_TriggerResourceControlRequest *zget_TriggerResourceControlRequest(ODR o);
-YAZ_EXPORT Z_ResourceControlRequest *zget_ResourceControlRequest(ODR o);
-YAZ_EXPORT Z_ResourceControlResponse *zget_ResourceControlResponse(ODR o);
-YAZ_EXPORT Z_Close *zget_Close(ODR o);
-YAZ_EXPORT int z_StringList(ODR o, Z_StringList **p, int opt,
-                           const char *name);
-YAZ_EXPORT int z_InternationalString(ODR o, char **p, int opt,
-                                    const char *name);
-YAZ_EXPORT int z_OtherInformation(ODR o, Z_OtherInformation **p, int opt,
-                                 const char *naem);
-YAZ_EXPORT int z_ElementSetName(ODR o, char **p, int opt, const char *name);
-YAZ_EXPORT int z_IntUnit(ODR o, Z_IntUnit **p, int opt, const char *name);
-YAZ_EXPORT int z_Unit(ODR o, Z_Unit **p, int opt, const char *name);
-YAZ_EXPORT int z_DatabaseName(ODR o, Z_DatabaseName **p, int opt,
-                             const char *name);
-YAZ_EXPORT int z_StringOrNumeric(ODR o, Z_StringOrNumeric **p, int opt,
-                                const char *name);
-YAZ_EXPORT int z_OtherInformationUnit(ODR o, Z_OtherInformationUnit **p,
-                                     int opt, const char *name);
-YAZ_EXPORT int z_Term(ODR o, Z_Term **p, int opt, const char *name);
-YAZ_EXPORT int z_Specification(ODR o, Z_Specification **p, int opt,
-                              const char *name);
-YAZ_EXPORT int z_Permissions(ODR o, Z_Permissions **p, int opt,
-                            const char *name);
-YAZ_EXPORT int z_DiagRec(ODR o, Z_DiagRec **p, int opt, const char *name);
-YAZ_EXPORT int z_DiagRecs(ODR o, Z_DiagRecs **p, int opt, const char *name);
-YAZ_EXPORT int z_AttributeList(ODR o, Z_AttributeList **p, int opt,
-                              const char *name);
-YAZ_EXPORT int z_DefaultDiagFormat(ODR o, Z_DefaultDiagFormat **p, int opt,
-                                  const char *name);
-YAZ_EXPORT Z_APDU *zget_APDU(ODR o, int which);
-YAZ_EXPORT int z_Query(ODR o, Z_Query **p, int opt, const char *name);
-
-YAZ_EXPORT Odr_oid *yaz_oidval_to_z3950oid (ODR o, int oid_class,
-                                       int oid_value);
-YAZ_EXPORT Odr_oid *yaz_str_to_z3950oid (ODR o, int oid_class,
-                                       const char *str);
-YAZ_EXPORT const char *yaz_z3950oid_to_str (Odr_oid *oid, int *oid_class);
-
-YAZ_END_CDECL
-
-#include <yaz/prt-rsc.h>
-#include <yaz/prt-acc.h>
-#include <yaz/prt-exp.h>
-#include <yaz/prt-grs.h>
-#include <yaz/prt-arc.h>
-#include <yaz/prt-exd.h>
-#include <yaz/prt-dia.h>
-#include <yaz/prt-esp.h>
-#include <yaz/prt-add.h>
-
-#include <yaz/prt-dat.h>
-#include <yaz/prt-univ.h>
-#include <yaz/prt-ext.h>
-
-#endif
diff --git a/asn/prt-rsc.c b/asn/prt-rsc.c
deleted file mode 100644 (file)
index db690ee..0000000
+++ /dev/null
@@ -1,91 +0,0 @@
-/*
- * Copyright (c) 1995-1999, Index Data.
- * See the file LICENSE for details.
- * Sebastian Hammer, Adam Dickmeiss
- *
- * $Log: prt-rsc.c,v $
- * Revision 1.8  1999-11-30 13:47:11  adam
- * Improved installation. Moved header files to include/yaz.
- *
- * Revision 1.7  1999/04/20 09:56:48  adam
- * Added 'name' paramter to encoder/decoder routines (typedef Odr_fun).
- * Modified all encoders/decoders to reflect this change.
- *
- * Revision 1.6  1998/02/11 11:53:32  adam
- * Changed code so that it compiles as C++.
- *
- * Revision 1.5  1995/09/29 17:11:55  quinn
- * Smallish
- *
- * Revision 1.4  1995/09/27  15:02:43  quinn
- * Modified function heads & prototypes.
- *
- * Revision 1.3  1995/06/02  09:49:15  quinn
- * Adding access control
- *
- * Revision 1.2  1995/06/01  14:34:53  quinn
- * Work
- *
- * Revision 1.1  1995/06/01  11:22:17  quinn
- * Resource control
- *
- *
- */
-
-#include <yaz/proto.h>
-
-/* -------------------- Resource 1 ------------------------- */
-
-int z_Estimate1(ODR o, Z_Estimate1 **p, int opt, const char *name)
-{
-    if (!odr_sequence_begin(o, p, sizeof(**p), 0))
-       return opt && odr_ok(o);
-    return
-       odr_implicit(o, odr_integer, &(*p)->type, ODR_CONTEXT, 1, 0) &&
-       odr_implicit(o, odr_integer, &(*p)->value, ODR_CONTEXT, 2, 0) &&
-       odr_implicit(o, odr_integer, &(*p)->currencyCode, ODR_CONTEXT, 3, 1) &&
-       odr_sequence_end(o);
-}
-
-int z_ResourceReport1(ODR o, Z_ResourceReport1 **p, int opt, const char *name)
-{
-    if (!odr_sequence_begin(o, p, sizeof(**p), 0))
-       return opt && odr_ok(o);
-    return
-       odr_implicit_settag(o, ODR_CONTEXT, 1) &&
-       odr_sequence_of(o, (Odr_fun)z_Estimate1, &(*p)->estimates,
-                       &(*p)->num_estimates, 0) &&
-       odr_implicit(o, odr_visiblestring, &(*p)->message,
-                    ODR_CONTEXT, 2, 0) &&
-       odr_sequence_end(o);
-}
-
-/* -------------------- Resource 2 ------------------------- */
-
-/* int z_StringOrNumeric(ODR, Z_StringOrNumeric **, int); */
-/* int z_IntUnit(ODR, Z_IntUnit **, int); */
-
-int z_Estimate2(ODR o, Z_Estimate2 **p, int opt, const char *name)
-{
-    if (!odr_sequence_begin(o, p, sizeof(**p), 0))
-       return opt && odr_ok(o);
-    return
-       odr_explicit(o, z_StringOrNumeric, &(*p)->type, ODR_CONTEXT, 1, 0) &&
-       odr_implicit(o, z_IntUnit, &(*p)->value, ODR_CONTEXT, 2, 0) &&
-       odr_sequence_end(o);
-}
-
-int z_ResourceReport2(ODR o, Z_ResourceReport2 **p, int opt, const char *name)
-{
-    if (!odr_sequence_begin(o, p, sizeof(**p), 0))
-       return opt && odr_ok(o);
-    return
-       odr_implicit_settag(o, ODR_CONTEXT, 1) &&
-       (odr_sequence_of(o, (Odr_fun)z_Estimate2, &(*p)->estimates,
-                        &(*p)->num_estimates, 0) || odr_ok(o)) &&
-       odr_implicit(o, odr_visiblestring, &(*p)->message,
-                    ODR_CONTEXT, 2, 1) &&
-       odr_sequence_end(o);
-}
-
-
diff --git a/asn/prt-rsc.h b/asn/prt-rsc.h
deleted file mode 100644 (file)
index a409843..0000000
+++ /dev/null
@@ -1,123 +0,0 @@
-/*
- * Copyright (c) 1995, Index Data.
- *
- * Permission to use, copy, modify, distribute, and sell this software and
- * its documentation, in whole or in part, for any purpose, is hereby granted,
- * provided that:
- *
- * 1. This copyright and permission notice appear in all copies of the
- * software and its documentation. Notices of copyright or attribution
- * which appear at the beginning of any file must remain unchanged.
- *
- * 2. The name of Index Data or the individual authors may not be used to
- * endorse or promote products derived from this software without specific
- * prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED "AS IS" AND WITHOUT WARRANTY OF ANY KIND,
- * EXPRESS, IMPLIED, OR OTHERWISE, INCLUDING WITHOUT LIMITATION, ANY
- * WARRANTY OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.
- * IN NO EVENT SHALL INDEX DATA BE LIABLE FOR ANY SPECIAL, INCIDENTAL,
- * INDIRECT OR CONSEQUENTIAL DAMAGES OF ANY KIND, OR ANY DAMAGES
- * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER OR
- * NOT ADVISED OF THE POSSIBILITY OF DAMAGE, AND ON ANY THEORY OF
- * LIABILITY, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE
- * OF THIS SOFTWARE.
- *
- * $Log: prt-rsc.h,v $
- * Revision 1.1  2000-10-03 12:55:50  adam
- * Removed several auto-generated files from CVS.
- *
- * Revision 1.1  1999/11/30 13:47:11  adam
- * Improved installation. Moved header files to include/yaz.
- *
- * Revision 1.7  1999/04/20 09:56:48  adam
- * Added 'name' paramter to encoder/decoder routines (typedef Odr_fun).
- * Modified all encoders/decoders to reflect this change.
- *
- * Revision 1.6  1997/05/14 06:53:50  adam
- * C++ support.
- *
- * Revision 1.5  1995/09/29 17:12:11  quinn
- * Smallish
- *
- * Revision 1.4  1995/09/27  15:02:52  quinn
- * Modified function heads & prototypes.
- *
- * Revision 1.3  1995/08/17  12:45:17  quinn
- * Fixed minor problems with GRS-1. Added support in c&s.
- *
- * Revision 1.2  1995/06/02  09:49:50  quinn
- * Add access control
- *
- * Revision 1.1  1995/06/01  11:24:52  quinn
- * Resource Control
- *
- *
- */
-
-#ifndef PRT_RSC_H
-#define PRT_RSC_H
-
-#include <yaz/yconfig.h>
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/* -------------------- Resource-1 -------------------- */
-
-#define Z_EstimateType_currentSearchRecords           1
-#define Z_EstimateType_finalSearchRecords             2
-#define Z_EstimateType_currentPresentRecords          3
-#define Z_EstimateType_finalPresentRecords            4
-#define Z_EstimateType_currentOpTimeProcessing        5
-#define Z_EstimateType_finalOpTimeProcessing          6
-#define Z_EstimateType_currentAssocTime               7
-#define Z_EstimateType_currentOperationCost           8
-#define Z_EstimateType_finalOperationCost             9
-#define Z_EstimateType_currentAssocCost              10
-#define Z_EstimateType_finalOpTimeElapsed            11
-#define Z_EstimateType_percentComplete               12
-#define Z_EstimateType_currentSearchAssCost          13
-#define Z_EstimateType_currentPresentAssCost         14
-#define Z_EstimateType_currentConnectAssCost         15
-#define Z_EstimateType_currentOtherAssCost           16
-
-typedef struct Z_Estimate1
-{
-    int *type;
-    int *value;
-    int *currencyCode;             /* OPTIONAL */
-} Z_Estimate1;
-
-typedef struct Z_ResourceReport1
-{
-    int num_estimates;
-    Z_Estimate1 **estimates;
-    char *message;
-} Z_ResourceReport1;
-
-int z_ResourceReport1(ODR o, Z_ResourceReport1 **p, int opt, const char *name);
-
-/* -------------------- Resource-2 -------------------- */
-
-typedef struct Z_Estimate2
-{
-    Z_StringOrNumeric *type;      /* same as in estimate1, if numeric */
-    Z_IntUnit *value;
-} Z_Estimate2;
-
-typedef struct Z_ResourceReport2
-{
-    int num_estimates;
-    Z_Estimate2 **estimates;             /* OPTIONAL */
-    char *message;                       /* OPTIONAL */
-} Z_ResourceReport2;
-
-int z_ResourceReport2(ODR o, Z_ResourceReport2 **p, int opt, const char *name);
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif
diff --git a/asn/prt-univ.c b/asn/prt-univ.c
deleted file mode 100644 (file)
index b61052f..0000000
+++ /dev/null
@@ -1,58 +0,0 @@
-/*
- * Copyright (c) 1998-1999, Index Data.
- * See the file LICENSE for details.
- * Sebastian Hammer, Adam Dickmeiss
- *
- * $Log: prt-univ.c,v $
- * Revision 1.3  1999-11-30 13:47:11  adam
- * Improved installation. Moved header files to include/yaz.
- *
- * Revision 1.2  1999/04/20 09:56:48  adam
- * Added 'name' paramter to encoder/decoder routines (typedef Odr_fun).
- * Modified all encoders/decoders to reflect this change.
- *
- * Revision 1.1  1998/03/20 14:46:06  adam
- * Added UNIverse Resource Reports.
- *
- */
-
-#include <yaz/proto.h>
-
-int z_UniverseReportHits (ODR o, Z_UniverseReportHits **p, int opt,
-                         const char *name)
-{
-    if (!odr_sequence_begin (o, p, sizeof(**p), 0))
-       return opt && odr_ok (o);
-    return
-       z_StringOrNumeric(o, &(*p)->database, 0, 0) &&
-       z_StringOrNumeric(o, &(*p)->hits, 0, 0) &&
-       odr_sequence_end (o);
-}
-
-int z_UniverseReportDuplicate (ODR o, Z_UniverseReportDuplicate **p, int opt,
-                              const char *name)
-{
-    if (!odr_sequence_begin (o, p, sizeof(**p), 0))
-       return opt && odr_ok (o);
-    return
-       z_StringOrNumeric(o, &(*p)->hitno, 0, 0) &&
-       odr_sequence_end (o);
-}
-
-int z_UniverseReport (ODR o, Z_UniverseReport **p, int opt, const char *name)
-{
-    static Odr_arm arm[] = {
-       {ODR_IMPLICIT, ODR_CONTEXT, 0, Z_UniverseReport_databaseHits,
-        (Odr_fun) z_UniverseReportHits, 0},
-       {ODR_IMPLICIT, ODR_CONTEXT, 1, Z_UniverseReport_duplicate,
-        (Odr_fun) z_UniverseReportDuplicate, 0},
-       {-1, -1, -1, -1, (Odr_fun) 0, 0}
-    };
-    if (!odr_sequence_begin (o, p, sizeof(**p), 0))
-       return opt && odr_ok (o);
-    return
-       odr_integer(o, &(*p)->totalHits, 0, 0) &&
-       odr_choice (o, arm, &(*p)->u, &(*p)->which, 0) &&
-       odr_sequence_end (o);
-}
-
diff --git a/asn/prt-univ.h b/asn/prt-univ.h
deleted file mode 100644 (file)
index d431f50..0000000
+++ /dev/null
@@ -1,76 +0,0 @@
-/*
- * Copyright (c) 1998
- *
- * Permission to use, copy, modify, distribute, and sell this software and
- * its documentation, in whole or in part, for any purpose, is hereby granted,
- * provided that:
- *
- * 1. This copyright and permission notice appear in all copies of the
- * software and its documentation. Notices of copyright or attribution
- * which appear at the beginning of any file must remain unchanged.
- *
- * 2. The names of Index Data or the individual authors may not be used to
- * endorse or promote products derived from this software without specific
- * prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED "AS IS" AND WITHOUT WARRANTY OF ANY KIND,
- * EXPRESS, IMPLIED, OR OTHERWISE, INCLUDING WITHOUT LIMITATION, ANY
- * WARRANTY OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.
- * IN NO EVENT SHALL INDEX DATA BE LIABLE FOR ANY SPECIAL, INCIDENTAL,
- * INDIRECT OR CONSEQUENTIAL DAMAGES OF ANY KIND, OR ANY DAMAGES
- * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER OR
- * NOT ADVISED OF THE POSSIBILITY OF DAMAGE, AND ON ANY THEORY OF
- * LIABILITY, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE
- * OF THIS SOFTWARE.
- *
- */
-
-#ifndef PRT_UNIV_H
-#define PRT_UNIV_H
-
-#include <yaz/yconfig.h>
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/* YC 0.1: Fri Mar 20 14:28:54 CET 1998 */
-/* Module-H ResourceReport-Format-Universe-1 */
-
-typedef struct Z_UniverseReportHits Z_UniverseReportHits;
-int z_UniverseReportHits (ODR o, Z_UniverseReportHits **p, int opt,
-                         const char *name);
-
-typedef struct Z_UniverseReportDuplicate Z_UniverseReportDuplicate;
-int z_UniverseReportDuplicate (ODR o, Z_UniverseReportDuplicate **p, int opt,
-                              const char *name);
-
-typedef struct Z_UniverseReport Z_UniverseReport;
-int z_UniverseReport (ODR o, Z_UniverseReport **p, int opt,
-                     const char *name);
-
-struct Z_UniverseReportHits {
-       Z_StringOrNumeric *database;
-       Z_StringOrNumeric *hits;
-};
-
-struct Z_UniverseReportDuplicate {
-       Z_StringOrNumeric *hitno;
-};
-
-struct Z_UniverseReport {
-       int *totalHits;
-       int which;
-       union {
-               Z_UniverseReportHits *databaseHits;
-               Z_UniverseReportDuplicate *duplicate;
-#define Z_UniverseReport_databaseHits 1
-#define Z_UniverseReport_duplicate 2
-       } u;
-};
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif
diff --git a/asn/test.c b/asn/test.c
deleted file mode 100644 (file)
index a68304c..0000000
+++ /dev/null
@@ -1,67 +0,0 @@
-#include <stdio.h>
-#include <yaz/odr.h>
-#include <yaz/proto.h>
-
-int main()
-{
-    int i;
-    unsigned char buf[10000];
-    struct odr o;
-    Z_APDU apdu, *papdu, *papdu2;
-    Z_SearchRequest sreq;
-    int a1, a2, a3, a4, a5, a6, a7, a8, a9, a10;
-    bool_t rep;
-    static char *names[] = {"Erik", "William", "George", "Bob"};
-    Z_Query query;
-    Z_RPNQuery rpnquery;
-    Odr_oid att[] = { 1, 2, 3, 4, 5, 6, -1};
-    Z_RPNStructure rpnstructure;
-    Z_Operand operand;
-    Z_AttributesPlusTerm apt;
-    Odr_oct term;
-
-    papdu = &apdu;
-    apdu.which = Z_APDU_searchRequest;
-    apdu.u.searchRequest = &sreq;
-    a1 = 1000; sreq.smallSetUpperBound = &a1;
-    a2 = 2000; sreq.largeSetLowerBound = &a2;
-    a3 = 100; sreq.mediumSetPresentNumber = &a3;
-    rep = 1; sreq.replaceIndicator = &rep;
-    sreq.resultSetName = "FOOBAR";
-    sreq.num_databaseNames = 4;
-    sreq.databaseNames = names;
-    sreq.smallSetElementSetNames = 0;
-    sreq.mediumSetElementSetNames = 0;
-    sreq.preferredRecordSyntax = 0;
-    query.which = Z_Query_type_1;
-    query.u.type_1 = &rpnquery;
-    sreq.query = &query;
-    rpnquery.attributeSetId = att;
-    rpnquery.RPNStructure = &rpnstructure;
-    rpnstructure.which = Z_RPNStructure_simple;
-    rpnstructure.u.simple = &operand;
-    operand.which = Z_Operand_APT;
-    operand.u.attributesPlusTerm = &apt;
-    apt.num_attributes=0;
-    apt.attributeList = 0;
-    apt.term = &term;
-    term.buf = (unsigned char*) "BARFOO";
-    term.len = term.size = strlen((char*)term.buf);
-
-    o.buf = buf;
-    o.bp=o.buf;
-    o.left = o.buflen = 10000;
-    o.direction = ODR_PRINT;
-    o.print = stdout;
-    o.indent = 0;
-    o.t_class = -1;
-
-    printf("status=%d\n", z_APDU(&o, &papdu, 0));
-
-    return 0;
-
-    o.direction = ODR_DECODE;
-    o.bp = o.buf;
-
-    z_APDU(&o, &papdu2, 0);
-}    
diff --git a/ccl/.cvsignore b/ccl/.cvsignore
deleted file mode 100644 (file)
index 3cca9cc..0000000
+++ /dev/null
@@ -1,7 +0,0 @@
-.deps
-.libs
-Makefile
-Makefile.in
-cclsh
-libccl.la
-*.lo
diff --git a/ccl/LICENSE b/ccl/LICENSE
deleted file mode 100644 (file)
index 13c4ac3..0000000
+++ /dev/null
@@ -1,43 +0,0 @@
-/*
- * Copyright (c) 1995-1996, the EUROPAGATE consortium (see below).
- *
- * The EUROPAGATE consortium members are:
- *
- *    University College Dublin
- *    Danmarks Teknologiske Videnscenter
- *    An Chomhairle Leabharlanna
- *    Consejo Superior de Investigaciones Cientificas
- *
- * Permission to use, copy, modify, distribute, and sell this software and
- * its documentation, in whole or in part, for any purpose, is hereby granted,
- * provided that:
- *
- * 1. This copyright and permission notice appear in all copies of the
- * software and its documentation. Notices of copyright or attribution
- * which appear at the beginning of any file must remain unchanged.
- *
- * 2. The names of EUROPAGATE or the project partners may not be used to
- * endorse or promote products derived from this software without specific
- * prior written permission.
- *
- * 3. Users of this software (implementors and gateway operators) agree to
- * inform the EUROPAGATE consortium of their use of the software. This
- * information will be used to evaluate the EUROPAGATE project and the
- * software, and to plan further developments. The consortium may use
- * the information in later publications.
- * 
- * 4. Users of this software agree to make their best efforts, when
- * documenting their use of the software, to acknowledge the EUROPAGATE
- * consortium, and the role played by the software in their work.
- *
- * THIS SOFTWARE IS PROVIDED "AS IS" AND WITHOUT WARRANTY OF ANY KIND,
- * EXPRESS, IMPLIED, OR OTHERWISE, INCLUDING WITHOUT LIMITATION, ANY
- * WARRANTY OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.
- * IN NO EVENT SHALL THE EUROPAGATE CONSORTIUM OR ITS MEMBERS BE LIABLE
- * FOR ANY SPECIAL, INCIDENTAL, INDIRECT OR CONSEQUENTIAL DAMAGES OF
- * ANY KIND, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA
- * OR PROFITS, WHETHER OR NOT ADVISED OF THE POSSIBILITY OF DAMAGE, AND
- * ON ANY THEORY OF LIABILITY, ARISING OUT OF OR IN CONNECTION WITH THE
- * USE OR PERFORMANCE OF THIS SOFTWARE.
- *
- */
diff --git a/ccl/Makefile.am b/ccl/Makefile.am
deleted file mode 100644 (file)
index 13beca9..0000000
+++ /dev/null
@@ -1,23 +0,0 @@
-## $Id: Makefile.am,v 1.10 2003-06-23 10:22:21 adam Exp $
-
-noinst_LTLIBRARIES = libccl.la
-
-noinst_PROGRAMS = cclsh
-
-check_PROGRAMS = tstccl
-
-TESTS = $(check_PROGRAMS)
-
-EXTRA_DIST = bib1
-
-AM_CPPFLAGS=-I$(top_srcdir)/include
-
-libccl_la_SOURCES = cclfind.c ccltoken.c cclerrms.c cclqual.c cclptree.c \
-  cclqfile.c cclstr.c
-
-cclsh_SOURCES=cclsh.c
-cclsh_LDADD = libccl.la ../util/libutil.la $(READLINE_LIBS)
-
-tstccl_SOURCES = tstccl.c
-tstccl_LDADD = libccl.la ../util/libutil.la
-
diff --git a/ccl/README b/ccl/README
deleted file mode 100644 (file)
index 431ded0..0000000
+++ /dev/null
@@ -1,15 +0,0 @@
-CCL test module
-
-This module is required to parse the queries given to the yaz-client
-test program. It is *not* a part of the YAZ module, and it is
-distributed under a different license.
-
-Eventually, the products of the EUROPAGATE will be made available to
-the general public, free of charge (the exact nature of the license is
-unknown at this point). Until then, you should *NOT* distribute copies
-of this software to organisations that are not partners in EUROPAGATE.
-
-If you need to distribute copies of YAZ to organisations which are not
-partners in EUROPAGATE, you should remove this module, and, if
-necessary, modify client/yaz-client.c to work wihout it. The test program
-is not essential to the general working of YAZ.
diff --git a/ccl/bib1 b/ccl/bib1
deleted file mode 100644 (file)
index 1dc9dca..0000000
--- a/ccl/bib1
+++ /dev/null
@@ -1,119 +0,0 @@
-# $Id: bib1,v 1.13 2003-06-23 10:22:21 adam Exp $
-# CCL qualifiers and their mappings
-#
-# Each line takes the form:
-#   name      [<attributeset>,]<type>=<val>,<val>..   <type>=<val> ...
-# Where type is one of:
-#    u       use-attribute          
-#    r       relation-attribute    )
-#    p       position-attribute
-#    s       structure-attribute
-#    t       truncation-attribute
-#    c       completeness-attribute
-#
-# Special value for relation:
-#    o       ordered. Tells the CCL parser to convert a ccl relation
-#            to a bib-1 relation (1,2,..6).
-# Special value for structure:
-#    pw      phrase/word. The CCL parser will decide whether phrase or word
-#            is needed. Phrase is used if term contain blanks; otherwise
-#            Word is used.
-#    al      and-list. AND operation is put between each term.
-#    ol      or-list. OR operation is put between each term.
-# Special value for truncation:
-#    l       Allow left truncation if ? is at left side of term.
-#    r       Allow right truncation if ? is at left side of term.
-#    b       Allow left&right truncation if ? is at left&right side of term.
-#    n       Set truncation explicitly to "none" if no ? is given.
-
-# This rule is for CCL tokens where no fields are specified
-#term u=1016 t=l,r s=pw,al
-term u=1016 t=l,r s=pw,al
-# Common short-hand access points.
-au   u=1    s=pw t=l,r         # author
-sp   u=1    s=pw t=l,r         # author
-ti   u=4    s=pw t=l,r          # title
-isbn u=7
-issn u=8
-cc   u=20
-su   u=21   s=pw
-date u=30   r=o s=pw
-dp   u=31   r=o
-da   u=32   r=o
-la   u=54   s=pw
-ab   u=62   s=pw
-note u=63   s=pw
-af   u=1006 s=pw
-rel         s=9
-cln
-
-# Relation Attributes
-rel:lt      r=1
-rel:le      r=2
-rel:eq      r=3
-rel:ge      r=4
-rel:gt      r=5
-rel:ne      r=6
-rel:phon    r=100
-rel:stem    r=101
-rel:rele    r=102
-rel:alwa    r=103
-
-# Position Attributes
-pos:ff      p=1
-pos:fs      p=2
-pos:af      p=3
-
-# Structure Attributes
-str:wp      s=pw
-str:phrase  s=1
-str:word    s=2
-str:key     s=3
-str:year    s=4
-str:date    s=5
-str:wlist   s=6
-str:dateu   s=100
-str:daten   s=101
-str:nameu   s=102
-str:struc   s=103
-str:urx     s=104
-str:fft     s=105
-str:dt      s=106
-str:ln      s=107
-str:str     s=108
-str:num     s=109
-
-# Truncation Attributes
-tru:right   t=1
-tru:left    t=2
-tru:both    t=3
-tru:none    t=100
-tru:proh    t=101
-tru:re1     t=102
-tru:re2     t=103
-
-# Completeness Attributes
-com:is      c=1
-com:cs      c=2
-com:cf      c=3
-
-exp:category exp1,1=1
-
-# These special directives defines names of keywords for parser
-@and og *             # either 'or' or *
-@or eller           # either 'eller' or +
-@not ikke            # and so on..
-@set s set
-@case 0                      # case insenstive (1 for case sensitive)
-@truncation * ?
-@field or
-
-# Aliases 
-#
-# forfatter=x is equivalent to au=x
-forfatter au
-# tiau=x is equivalent to ti=x or ti=x
-tiau ti au
-#
-# string atributes
-dc.title 1=/my/title
diff --git a/ccl/cclerrms.c b/ccl/cclerrms.c
deleted file mode 100644 (file)
index f9a6658..0000000
+++ /dev/null
@@ -1,100 +0,0 @@
-/*
- * Copyright (c) 1995, the EUROPAGATE consortium (see below).
- *
- * The EUROPAGATE consortium members are:
- *
- *    University College Dublin
- *    Danmarks Teknologiske Videnscenter
- *    An Chomhairle Leabharlanna
- *    Consejo Superior de Investigaciones Cientificas
- *
- * Permission to use, copy, modify, distribute, and sell this software and
- * its documentation, in whole or in part, for any purpose, is hereby granted,
- * provided that:
- *
- * 1. This copyright and permission notice appear in all copies of the
- * software and its documentation. Notices of copyright or attribution
- * which appear at the beginning of any file must remain unchanged.
- *
- * 2. The names of EUROPAGATE or the project partners may not be used to
- * endorse or promote products derived from this software without specific
- * prior written permission.
- *
- * 3. Users of this software (implementors and gateway operators) agree to
- * inform the EUROPAGATE consortium of their use of the software. This
- * information will be used to evaluate the EUROPAGATE project and the
- * software, and to plan further developments. The consortium may use
- * the information in later publications.
- * 
- * 4. Users of this software agree to make their best efforts, when
- * documenting their use of the software, to acknowledge the EUROPAGATE
- * consortium, and the role played by the software in their work.
- *
- * THIS SOFTWARE IS PROVIDED "AS IS" AND WITHOUT WARRANTY OF ANY KIND,
- * EXPRESS, IMPLIED, OR OTHERWISE, INCLUDING WITHOUT LIMITATION, ANY
- * WARRANTY OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.
- * IN NO EVENT SHALL THE EUROPAGATE CONSORTIUM OR ITS MEMBERS BE LIABLE
- * FOR ANY SPECIAL, INCIDENTAL, INDIRECT OR CONSEQUENTIAL DAMAGES OF
- * ANY KIND, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA
- * OR PROFITS, WHETHER OR NOT ADVISED OF THE POSSIBILITY OF DAMAGE, AND
- * ON ANY THEORY OF LIABILITY, ARISING OUT OF OR IN CONNECTION WITH THE
- * USE OR PERFORMANCE OF THIS SOFTWARE.
- *
- */
-/*
- * Europagate, 1995
- *
- * $Id: cclerrms.c,v 1.10 2001-11-27 22:38:50 adam Exp $
- *
- * Old Europagate Log:
- *
- * Revision 1.8  1995/05/16  09:39:25  adam
- * LICENSE.
- *
- * Revision 1.7  1995/04/17  09:31:40  adam
- * Improved handling of qualifiers. Aliases or reserved words.
- *
- * Revision 1.6  1995/02/23  08:31:59  adam
- * Changed header.
- *
- * Revision 1.4  1995/02/14  16:20:54  adam
- * Qualifiers are read from a file now.
- *
- * Revision 1.3  1995/02/14  10:25:56  adam
- * The constructions 'qualifier rel term ...' implemented.
- *
- * Revision 1.2  1995/02/13  15:15:06  adam
- * Added handling of qualifiers. Not finished yet.
- *
- * Revision 1.1  1995/02/13  12:35:20  adam
- * First version of CCL. Qualifiers aren't handled yet.
- *
- */
-
-#include <yaz/ccl.h>
-
-static char *err_msg_array[] = {
-    "Ok",
-    "Search word expected",
-    "')' expected",
-    "Set name expected",
-    "Operator expected",
-    "Unbalanced ')'",
-    "Unknown qualifier",
-    "Qualifiers applied twice",
-    "'=' expected",
-    "Bad relation",
-    "Left truncation not supported",
-    "Both left - and right truncation not supported",
-    "Right truncation not supported"
-};
-
-/*
- * ccl_err_msg: return name of CCL error
- * ccl_errno:   Error no.
- * return:      Name of error.
- */
-const char *ccl_err_msg (int ccl_errno)
-{
-    return err_msg_array[ccl_errno];
-}
diff --git a/ccl/cclfind.c b/ccl/cclfind.c
deleted file mode 100644 (file)
index 9fdcf13..0000000
+++ /dev/null
@@ -1,1114 +0,0 @@
-/*
- * Copyright (c) 1995, the EUROPAGATE consortium (see below).
- *
- * The EUROPAGATE consortium members are:
- *
- *    University College Dublin
- *    Danmarks Teknologiske Videnscenter
- *    An Chomhairle Leabharlanna
- *    Consejo Superior de Investigaciones Cientificas
- *
- * Permission to use, copy, modify, distribute, and sell this software and
- * its documentation, in whole or in part, for any purpose, is hereby granted,
- * provided that:
- *
- * 1. This copyright and permission notice appear in all copies of the
- * software and its documentation. Notices of copyright or attribution
- * which appear at the beginning of any file must remain unchanged.
- *
- * 2. The names of EUROPAGATE or the project partners may not be used to
- * endorse or promote products derived from this software without specific
- * prior written permission.
- *
- * 3. Users of this software (implementors and gateway operators) agree to
- * inform the EUROPAGATE consortium of their use of the software. This
- * information will be used to evaluate the EUROPAGATE project and the
- * software, and to plan further developments. The consortium may use
- * the information in later publications.
- * 
- * 4. Users of this software agree to make their best efforts, when
- * documenting their use of the software, to acknowledge the EUROPAGATE
- * consortium, and the role played by the software in their work.
- *
- * THIS SOFTWARE IS PROVIDED "AS IS" AND WITHOUT WARRANTY OF ANY KIND,
- * EXPRESS, IMPLIED, OR OTHERWISE, INCLUDING WITHOUT LIMITATION, ANY
- * WARRANTY OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.
- * IN NO EVENT SHALL THE EUROPAGATE CONSORTIUM OR ITS MEMBERS BE LIABLE
- * FOR ANY SPECIAL, INCIDENTAL, INDIRECT OR CONSEQUENTIAL DAMAGES OF
- * ANY KIND, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA
- * OR PROFITS, WHETHER OR NOT ADVISED OF THE POSSIBILITY OF DAMAGE, AND
- * ON ANY THEORY OF LIABILITY, ARISING OUT OF OR IN CONNECTION WITH THE
- * USE OR PERFORMANCE OF THIS SOFTWARE.
- *
- */
-/* CCL find (to rpn conversion)
- * Europagate, 1995
- *
- * $Id: cclfind.c,v 1.34 2003-06-23 10:22:21 adam Exp $
- *
- * Old Europagate log:
- *
- * Revision 1.16  1996/01/08  08:41:13  adam
- * Removed unused function.
- *
- * Revision 1.15  1995/07/20  08:14:34  adam
- * Qualifiers were observed too often. Instead tokens are treated as
- * qualifiers only when separated by comma.
- *
- * Revision 1.14  1995/05/16  09:39:26  adam
- * LICENSE.
- *
- * Revision 1.13  1995/04/17  09:31:42  adam
- * Improved handling of qualifiers. Aliases or reserved words.
- *
- * Revision 1.12  1995/03/20  15:27:43  adam
- * Minor changes.
- *
- * Revision 1.11  1995/02/23  08:31:59  adam
- * Changed header.
- *
- * Revision 1.9  1995/02/16  13:20:06  adam
- * Spell fix.
- *
- * Revision 1.8  1995/02/14  19:59:42  adam
- * Removed a syntax error.
- *
- * Revision 1.7  1995/02/14  19:55:10  adam
- * Header files ccl.h/cclp.h are gone! They have been merged an
- * moved to ../include/ccl.h.
- * Node kind(s) in ccl_rpn_node have changed names.
- *
- * Revision 1.6  1995/02/14  16:20:55  adam
- * Qualifiers are read from a file now.
- *
- * Revision 1.5  1995/02/14  14:12:41  adam
- * Ranges for ordered qualfiers implemented (e.g. pd=1980-1990).
- *
- * Revision 1.4  1995/02/14  13:16:29  adam
- * Left and/or right truncation implemented.
- *
- * Revision 1.3  1995/02/14  10:25:56  adam
- * The constructions 'qualifier rel term ...' implemented.
- *
- * Revision 1.2  1995/02/13  15:15:07  adam
- * Added handling of qualifiers. Not finished yet.
- *
- * Revision 1.1  1995/02/13  12:35:20  adam
- * First version of CCL. Qualifiers aren't handled yet.
- *
- */
-
-#include <stdlib.h>
-#include <string.h>
-
-#include <yaz/ccl.h>
-
-/* returns type of current lookahead */
-#define KIND (cclp->look_token->kind)
-
-/* move one token forward */
-#define ADVANCE cclp->look_token = cclp->look_token->next
-
-/* 
- * qual_val_type: test for existance of attribute type/value pair.
- * qa:     Attribute array
- * type:   Type of attribute to search for
- * value:  Value of attribute to seach for
- * return: 1 if found; 0 otherwise.
- */
-static int qual_val_type (struct ccl_rpn_attr **qa, int type, int value,
-                           char **attset)
-{
-    int i;
-    struct ccl_rpn_attr *q;
-
-    if (!qa)
-        return 0;
-    for (i = 0;  (q=qa[i]); i++)
-        while (q)
-        {
-            if (q->type == type && q->kind == CCL_RPN_ATTR_NUMERIC &&
-               q->value.numeric == value)
-            {
-                if (attset)
-                    *attset = q->set;
-                return 1;
-            }
-            q = q->next;
-        }
-    return 0;
-}
-
-/*
- * strxcat: concatenate strings.
- * n:      Null-terminated Destination string 
- * src:    Source string to be appended (not null-terminated)
- * len:    Length of source string.
- */
-static void strxcat (char *n, const char *src, int len)
-{
-    while (*n)
-        n++;
-    while (--len >= 0)
-        *n++ = *src++;
-    *n = '\0';
-}
-
-/*
- * copy_token_name: Return copy of CCL token name
- * tp:      Pointer to token info.
- * return:  malloc(3) allocated copy of token name.
- */
-static char *copy_token_name (struct ccl_token *tp)
-{
-    char *str = (char *)xmalloc (tp->len + 1);
-    ccl_assert (str);
-    memcpy (str, tp->name, tp->len);
-    str[tp->len] = '\0';
-    return str;
-}
-
-/*
- * mk_node: Create RPN node.
- * kind:   Type of node.
- * return: pointer to allocated node.
- */
-static struct ccl_rpn_node *mk_node (int kind)
-{
-    struct ccl_rpn_node *p;
-    p = (struct ccl_rpn_node *)xmalloc (sizeof(*p));
-    ccl_assert (p);
-    p->kind = kind;
-    return p;
-}
-
-/*
- * ccl_rpn_delete: Delete RPN tree.
- * rpn:   Pointer to tree.
- */
-void ccl_rpn_delete (struct ccl_rpn_node *rpn)
-{
-    struct ccl_rpn_attr *attr, *attr1;
-    if (!rpn)
-        return;
-    switch (rpn->kind)
-    {
-    case CCL_RPN_AND:
-    case CCL_RPN_OR:
-    case CCL_RPN_NOT:
-        ccl_rpn_delete (rpn->u.p[0]);
-        ccl_rpn_delete (rpn->u.p[1]);
-        break;
-    case CCL_RPN_TERM:
-        xfree (rpn->u.t.term);
-        for (attr = rpn->u.t.attr_list; attr; attr = attr1)
-        {
-            attr1 = attr->next;
-           if (attr->kind == CCL_RPN_ATTR_STRING)
-               xfree(attr->value.str);
-            if (attr->set)
-                xfree (attr->set);
-            xfree (attr);
-        }
-        break;
-    case CCL_RPN_SET:
-        xfree (rpn->u.setname);
-        break;
-    case CCL_RPN_PROX:
-        ccl_rpn_delete (rpn->u.p[0]);
-        ccl_rpn_delete (rpn->u.p[1]);
-        break;
-    }
-    xfree (rpn);
-}
-
-static struct ccl_rpn_node *find_spec (CCL_parser cclp,
-                                       struct ccl_rpn_attr **qa);
-
-static int is_term_ok (int look, int *list)
-{
-    for (;*list >= 0; list++)
-        if (look == *list)
-            return 1;
-    return 0;
-}
-
-static struct ccl_rpn_node *search_terms (CCL_parser cclp,
-                                          struct ccl_rpn_attr **qa);
-
-static struct ccl_rpn_attr *add_attr_node (struct ccl_rpn_node *p,
-                                          const char *set, int type)
-{
-    struct ccl_rpn_attr *n;
-    
-    n = (struct ccl_rpn_attr *)xmalloc (sizeof(*n));
-    ccl_assert (n);
-    if (set)
-    {
-        n->set = (char*) xmalloc (strlen(set)+1);
-        strcpy (n->set, set);
-    }
-    else
-        n->set = 0;
-    n->type = type;
-    n->next = p->u.t.attr_list;
-    p->u.t.attr_list = n;
-    
-    n->kind = CCL_RPN_ATTR_NUMERIC;
-    n->value.numeric = 0;
-    return n;
-}
-
-/*
- * add_attr_numeric: Add attribute (type/value) to RPN term node.
- * p:     RPN node of type term.
- * type:  Type of attribute
- * value: Value of attribute
- * set: Attribute set name
- */
-static void add_attr_numeric (struct ccl_rpn_node *p, const char *set,
-                             int type, int value)
-{
-    struct ccl_rpn_attr *n;
-
-    n = add_attr_node(p, set, type);
-    n->kind = CCL_RPN_ATTR_NUMERIC;
-    n->value.numeric = value;
-}
-
-static void add_attr_string (struct ccl_rpn_node *p, const char *set,
-                            int type, char *value)
-{
-    struct ccl_rpn_attr *n;
-
-    n = add_attr_node(p, set, type);
-    n->kind = CCL_RPN_ATTR_STRING;
-    n->value.str = xstrdup(value);
-}
-
-
-/*
- * search_term: Parse CCL search term. 
- * cclp:   CCL Parser
- * qa:     Qualifier attributes already applied.
- * term_list: tokens we accept as terms in context
- * multi:  whether we accept "multiple" tokens
- * return: pointer to node(s); NULL on error.
- */
-static struct ccl_rpn_node *search_term_x (CCL_parser cclp,
-                                           struct ccl_rpn_attr **qa,
-                                           int *term_list, int multi)
-{
-    struct ccl_rpn_node *p_top = 0;
-    struct ccl_token *lookahead = cclp->look_token;
-    int and_list = 0;
-    int or_list = 0;
-    char *attset;
-    const char *truncation_aliases;
-
-    truncation_aliases =
-       ccl_qual_search_special(cclp->bibset, "truncation");
-    if (!truncation_aliases)
-       truncation_aliases = "?";
-
-    if (qual_val_type (qa, CCL_BIB1_STR, CCL_BIB1_STR_AND_LIST, 0))
-        and_list = 1;
-    if (qual_val_type (qa, CCL_BIB1_STR, CCL_BIB1_STR_OR_LIST, 0))
-        or_list = 1;
-    while (1)
-    {
-        struct ccl_rpn_node *p;
-        size_t no, i;
-        int no_spaces = 0;
-        int left_trunc = 0;
-        int right_trunc = 0;
-        int mid_trunc = 0;
-        int relation_value = -1;
-        int position_value = -1;
-        int structure_value = -1;
-        int truncation_value = -1;
-        int completeness_value = -1;
-        int len = 0;
-        size_t max = 200;
-        if (and_list || or_list || !multi)
-            max = 1;
-       
-       /* ignore commas when dealing with and-lists .. */
-        if (and_list && lookahead && lookahead->kind == CCL_TOK_COMMA)
-        {
-           lookahead = lookahead->next;
-            ADVANCE;
-           continue;
-        }
-        /* go through each TERM token. If no truncation attribute is yet
-           met, then look for left/right truncation markers (?) and
-           set left_trunc/right_trunc/mid_trunc accordingly */
-        for (no = 0; no < max && is_term_ok(lookahead->kind, term_list); no++)
-        {
-            for (i = 0; i<lookahead->len; i++)
-                if (lookahead->name[i] == ' ')
-                   no_spaces++;
-               else if (strchr(truncation_aliases, lookahead->name[i]))
-                {
-                    if (no == 0 && i == 0 && lookahead->len >= 1)
-                        left_trunc = 1;
-                    else if (!is_term_ok(lookahead->next->kind, term_list) &&
-                             i == lookahead->len-1 && i >= 1)
-                        right_trunc = 1;
-                    else
-                        mid_trunc = 1;
-                }
-            len += 1+lookahead->len;
-            lookahead = lookahead->next;
-        }
-
-        if (len == 0)
-            break;      /* no more terms . stop . */
-
-
-        if (p_top)
-        {
-            if (or_list)
-                p = mk_node (CCL_RPN_OR);
-            else if (and_list)
-                p = mk_node (CCL_RPN_AND);
-            else
-                p = mk_node (CCL_RPN_AND);
-            p->u.p[0] = p_top;
-            p_top = p;
-        }
-                
-        /* create the term node, but wait a moment before adding the term */
-        p = mk_node (CCL_RPN_TERM);
-        p->u.t.attr_list = NULL;
-        p->u.t.term = NULL;
-
-        /* make the top node point to us.. */
-        if (p_top)
-            p_top->u.p[1] = p;
-        else
-            p_top = p;
-
-        
-        /* go through all attributes and add them to the attribute list */
-        for (i=0; qa && qa[i]; i++)
-        {
-            struct ccl_rpn_attr *attr;
-            
-            for (attr = qa[i]; attr; attr = attr->next)
-               switch(attr->kind)
-               {
-               case CCL_RPN_ATTR_STRING:
-                   add_attr_string(p, attr->set, attr->type,
-                                   attr->value.str);
-                   break;
-               case CCL_RPN_ATTR_NUMERIC:
-                   if (attr->value.numeric > 0)
-                   {   /* deal only with REAL attributes (positive) */
-                       switch (attr->type)
-                       {
-                       case CCL_BIB1_REL:
-                           if (relation_value != -1)
-                               continue;
-                           relation_value = attr->value.numeric;
-                           break;
-                       case CCL_BIB1_POS:
-                           if (position_value != -1)
-                               continue;
-                           position_value = attr->value.numeric;
-                           break;
-                       case CCL_BIB1_STR:
-                           if (structure_value != -1)
-                               continue;
-                           structure_value = attr->value.numeric;
-                           break;
-                       case CCL_BIB1_TRU:
-                           if (truncation_value != -1)
-                               continue;
-                           truncation_value = attr->value.numeric;
-                           left_trunc = right_trunc = mid_trunc = 0;
-                           break;
-                       case CCL_BIB1_COM:
-                           if (completeness_value != -1)
-                               continue;
-                           completeness_value = attr->value.numeric;
-                           break;
-                       }
-                       add_attr_numeric(p, attr->set, attr->type,
-                                        attr->value.numeric);
-                   }
-               }
-        }
-        /* len now holds the number of characters in the RPN term */
-        /* no holds the number of CCL tokens (1 or more) */
-        
-        if (structure_value == -1 && 
-            qual_val_type (qa, CCL_BIB1_STR, CCL_BIB1_STR_WP, &attset))
-        {   /* no structure attribute met. Apply either structure attribute 
-               WORD or PHRASE depending on number of CCL tokens */
-            if (no == 1 && no_spaces == 0)
-                add_attr_numeric (p, attset, CCL_BIB1_STR, 2);
-            else
-                add_attr_numeric (p, attset, CCL_BIB1_STR, 1);
-        }
-        
-        /* make the RPN token */
-        p->u.t.term = (char *)xmalloc (len);
-        ccl_assert (p->u.t.term);
-        p->u.t.term[0] = '\0';
-        for (i = 0; i<no; i++)
-        {
-            const char *src_str = cclp->look_token->name;
-            int src_len = cclp->look_token->len;
-            
-            if (i == 0 && left_trunc)
-            {
-                src_len--;
-                src_str++;
-            }
-            else if (i == no-1 && right_trunc)
-                src_len--;
-            if (src_len)
-            {
-                int len = strlen(p->u.t.term);
-                if (len &&
-                    !strchr("-+", *src_str) &&
-                    !strchr("-+", p->u.t.term[len-1]))
-                {
-                    strcat (p->u.t.term, " ");
-                }
-            }
-            strxcat (p->u.t.term, src_str, src_len);
-            ADVANCE;
-        }
-        if (left_trunc && right_trunc)
-        {
-            if (!qual_val_type (qa, CCL_BIB1_TRU, CCL_BIB1_TRU_CAN_BOTH,
-                                &attset))
-            {
-                cclp->error_code = CCL_ERR_TRUNC_NOT_BOTH;
-                ccl_rpn_delete (p);
-                return NULL;
-            }
-            add_attr_numeric (p, attset, CCL_BIB1_TRU, 3);
-        }
-        else if (right_trunc)
-        {
-            if (!qual_val_type (qa, CCL_BIB1_TRU, CCL_BIB1_TRU_CAN_RIGHT,
-                                 &attset))
-            {
-                cclp->error_code = CCL_ERR_TRUNC_NOT_RIGHT;
-                ccl_rpn_delete (p);
-                return NULL;
-            }
-            add_attr_numeric (p, attset, CCL_BIB1_TRU, 1);
-        }
-        else if (left_trunc)
-        {
-            if (!qual_val_type (qa, CCL_BIB1_TRU, CCL_BIB1_TRU_CAN_LEFT,
-                                &attset))
-            {
-                cclp->error_code = CCL_ERR_TRUNC_NOT_LEFT;
-                ccl_rpn_delete (p);
-                return NULL;
-            }
-            add_attr_numeric (p, attset, CCL_BIB1_TRU, 2);
-        }
-        else
-        {
-            if (qual_val_type (qa, CCL_BIB1_TRU, CCL_BIB1_TRU_CAN_NONE,
-                               &attset))
-                add_attr_numeric (p, attset, CCL_BIB1_TRU, 100);
-        }
-        if (!multi)
-            break;
-    }
-    if (!p_top)
-        cclp->error_code = CCL_ERR_TERM_EXPECTED;
-    return p_top;
-}
-
-static struct ccl_rpn_node *search_term (CCL_parser cclp,
-                                         struct ccl_rpn_attr **qa)
-{
-    static int list[] = {CCL_TOK_TERM, CCL_TOK_COMMA, -1};
-    return search_term_x(cclp, qa, list, 0);
-}
-
-static struct ccl_rpn_node *qualifiers2 (CCL_parser cclp,
-                                         struct ccl_rpn_attr **ap)
-{
-    char *attset;
-    int rel;
-
-    if (!qual_val_type(ap, CCL_BIB1_REL, CCL_BIB1_REL_ORDER, &attset))
-    {                
-        /* unordered relation */
-        struct ccl_rpn_node *p;
-        if (KIND != CCL_TOK_EQ)
-        {
-            cclp->error_code = CCL_ERR_EQ_EXPECTED;
-            return NULL;
-        }
-        ADVANCE;
-        if (KIND == CCL_TOK_LP)
-        {
-            ADVANCE;
-            if (!(p = find_spec (cclp, ap)))
-            {
-                return NULL;
-            }
-            if (KIND != CCL_TOK_RP)
-            {
-                cclp->error_code = CCL_ERR_RP_EXPECTED;
-                ccl_rpn_delete (p);
-                return NULL;
-            }
-            ADVANCE;
-        }
-        else
-            p = search_terms (cclp, ap);
-        return p;
-    }
-    /* ordered relation ... */
-    rel = 0;
-    if (cclp->look_token->len == 1)
-    {
-        if (cclp->look_token->name[0] == '<')
-            rel = 1;
-        else if (cclp->look_token->name[0] == '=')
-            rel = 3;
-        else if (cclp->look_token->name[0] == '>')
-            rel = 5;
-    }
-    else if (cclp->look_token->len == 2)
-    {
-        if (!memcmp (cclp->look_token->name, "<=", 2))
-            rel = 2;
-        else if (!memcmp (cclp->look_token->name, ">=", 2))
-            rel = 4;
-        else if (!memcmp (cclp->look_token->name, "<>", 2))
-            rel = 6;
-    }
-    if (!rel)
-        cclp->error_code = CCL_ERR_BAD_RELATION;
-    else
-    {
-        struct ccl_rpn_node *p;
-        
-        ADVANCE;                      /* skip relation */
-        if (KIND == CCL_TOK_TERM &&
-            cclp->look_token->next && cclp->look_token->next->len == 1 &&
-            cclp->look_token->next->name[0] == '-')
-        {
-            struct ccl_rpn_node *p1;
-            if (!(p1 = search_term (cclp, ap)))
-                return NULL;
-            ADVANCE;                   /* skip '-' */
-            if (KIND == CCL_TOK_TERM)  /* = term - term  ? */
-            {
-                struct ccl_rpn_node *p2;
-                
-                if (!(p2 = search_term (cclp, ap)))
-                {
-                    ccl_rpn_delete (p1);
-                    return NULL;
-                }
-                p = mk_node (CCL_RPN_AND);
-                p->u.p[0] = p1;
-                add_attr_numeric (p1, attset, CCL_BIB1_REL, 4);
-                p->u.p[1] = p2;
-                add_attr_numeric (p2, attset, CCL_BIB1_REL, 2);
-                return p;
-            }
-            else                       /* = term -    */
-            {
-                add_attr_numeric (p1, attset, CCL_BIB1_REL, 4);
-                return p1;
-            }
-        }
-        else if (cclp->look_token->len == 1 &&
-                 cclp->look_token->name[0] == '-')   /* = - term  ? */
-        {
-            ADVANCE;
-            if (!(p = search_term (cclp, ap)))
-                return NULL;
-            add_attr_numeric (p, attset, CCL_BIB1_REL, 2);
-            return p;
-        }
-        else if (KIND == CCL_TOK_LP)
-        {
-            ADVANCE;
-            if (!(p = find_spec (cclp, ap)))
-                return NULL;
-            if (KIND != CCL_TOK_RP)
-            {
-                cclp->error_code = CCL_ERR_RP_EXPECTED;
-                ccl_rpn_delete (p);
-                return NULL;
-            }
-            ADVANCE;
-            return p;
-        }
-        else
-        {
-            if (!(p = search_terms (cclp, ap)))
-                return NULL;
-            add_attr_numeric (p, attset, CCL_BIB1_REL, rel);
-            return p;
-        }
-        cclp->error_code = CCL_ERR_TERM_EXPECTED;
-    }
-    return NULL;
-}
-
-/*
- * qualifiers1: Parse CCL qualifiers and search terms. 
- * cclp:   CCL Parser
- * la:     Token pointer to RELATION token.
- * qa:     Qualifier attributes already applied.
- * return: pointer to node(s); NULL on error.
- */
-static struct ccl_rpn_node *qualifiers1 (CCL_parser cclp, struct ccl_token *la,
-                                         struct ccl_rpn_attr **qa)
-{
-    struct ccl_token *lookahead = cclp->look_token;
-    struct ccl_token *look_start = cclp->look_token;
-    struct ccl_rpn_attr **ap;
-    struct ccl_rpn_node *node = 0;
-    const char *field_str;
-    int no = 0;
-    int seq = 0;
-    int i;
-    int mode_merge = 1;
-#if 0
-    if (qa)
-    {
-        cclp->error_code = CCL_ERR_DOUBLE_QUAL;
-        return NULL;
-    }
-#endif
-    for (lookahead = cclp->look_token; lookahead != la;
-         lookahead=lookahead->next)
-        no++;
-    if (qa)
-        for (i=0; qa[i]; i++)
-            no++;
-    ap = (struct ccl_rpn_attr **)xmalloc ((no ? (no+1) : 2) * sizeof(*ap));
-    ccl_assert (ap);
-
-    field_str = ccl_qual_search_special(cclp->bibset, "field");
-    if (field_str)
-    {
-        if (!strcmp (field_str, "or"))
-            mode_merge = 0;
-        else if (!strcmp (field_str, "merge"))
-            mode_merge = 1;
-    }
-    if (!mode_merge)
-    {
-        /* consider each field separately and OR */
-        lookahead = look_start;
-        while (lookahead != la)
-        {
-            ap[1] = 0;
-            seq = 0;
-            while ((ap[0] = ccl_qual_search (cclp, lookahead->name,
-                                             lookahead->len, seq)) != 0)
-            {
-                struct ccl_rpn_node *node_sub;
-                cclp->look_token = la;
-                
-                node_sub = qualifiers2(cclp, ap);
-                if (!node_sub)
-                {
-                    ccl_rpn_delete (node);
-                    xfree (ap);
-                    return 0;
-                }
-                if (node)
-                {
-                    struct ccl_rpn_node *node_this = mk_node(CCL_RPN_OR);
-                    node_this->u.p[0] = node;
-                    node_this->u.p[1] = node_sub;
-                    node = node_this;
-                }
-                else
-                    node = node_sub;
-                seq++;
-            }
-            if (seq == 0)
-            {
-                cclp->look_token = lookahead;
-                cclp->error_code = CCL_ERR_UNKNOWN_QUAL;
-                xfree (ap);
-                return NULL;
-            }
-            lookahead = lookahead->next;
-            if (lookahead->kind == CCL_TOK_COMMA)
-                lookahead = lookahead->next;
-        }
-    }
-    else
-    {
-        /* merge attributes from ALL fields - including inherited ones */
-        while (1)
-        {
-            struct ccl_rpn_node *node_sub;
-            int found = 0;
-            lookahead = look_start;
-            for (i = 0; lookahead != la; i++)
-            {
-                ap[i] = ccl_qual_search (cclp, lookahead->name,
-                                         lookahead->len, seq);
-                if (ap[i])
-                    found++;
-                if (!ap[i] && seq > 0)
-                    ap[i] = ccl_qual_search (cclp, lookahead->name,
-                                             lookahead->len, 0);
-                if (!ap[i])
-                {
-                    cclp->look_token = lookahead;
-                    cclp->error_code = CCL_ERR_UNKNOWN_QUAL;
-                    xfree (ap);
-                    return NULL;
-                }
-                lookahead = lookahead->next;
-                if (lookahead->kind == CCL_TOK_COMMA)
-                    lookahead = lookahead->next;
-            }
-            if (qa)
-            {
-                struct ccl_rpn_attr **qa0 = qa;
-                
-                while (*qa0)
-                    ap[i++] = *qa0++;
-            }
-            ap[i] = NULL;
-            
-            if (!found)
-                break;
-            
-            cclp->look_token = lookahead;
-            
-            node_sub = qualifiers2(cclp, ap);
-            if (!node_sub)
-            {
-                ccl_rpn_delete (node);
-                break;
-            }
-            if (node)
-            {
-                struct ccl_rpn_node *node_this = mk_node(CCL_RPN_OR);
-                node_this->u.p[0] = node;
-                node_this->u.p[1] = node_sub;
-                node = node_this;
-            }
-            else
-                node = node_sub;
-            seq++;
-        }
-    }
-    xfree (ap);
-    return node;
-}
-
-
-/*
- * search_terms: Parse CCL search terms - including proximity.
- * cclp:   CCL Parser
- * qa:     Qualifier attributes already applied.
- * return: pointer to node(s); NULL on error.
- */
-static struct ccl_rpn_node *search_terms (CCL_parser cclp,
-                                          struct ccl_rpn_attr **qa)
-{
-    static int list[] = {
-        CCL_TOK_TERM, CCL_TOK_COMMA,CCL_TOK_EQ, CCL_TOK_REL, CCL_TOK_SET, -1};
-    struct ccl_rpn_node *p1, *p2, *pn;
-    p1 = search_term_x (cclp, qa, list, 1);
-    if (!p1)
-        return NULL;
-    while (1)
-    {
-        if (KIND == CCL_TOK_PROX)
-        {
-            struct ccl_rpn_node *p_prox = 0;
-            /* ! word order specified */
-            /* % word order not specified */
-            p_prox = mk_node(CCL_RPN_TERM);
-            p_prox->u.t.term = (char *) xmalloc(cclp->look_token->len);
-            memcpy(p_prox->u.t.term, cclp->look_token->name,
-                   cclp->look_token->len);
-            p_prox->u.t.term[cclp->look_token->len] = 0;
-            p_prox->u.t.attr_list = 0;
-
-            ADVANCE;
-            p2 = search_term_x (cclp, qa, list, 1);
-            if (!p2)
-            {
-                ccl_rpn_delete (p1);
-                return NULL;
-            }
-            pn = mk_node (CCL_RPN_PROX);
-            pn->u.p[0] = p1;
-            pn->u.p[1] = p2;
-            pn->u.p[2] = p_prox;
-            p1 = pn;
-        }
-        else if (is_term_ok(KIND, list))
-        {
-            p2 = search_term_x (cclp, qa, list, 1);
-            if (!p2)
-            {
-                ccl_rpn_delete (p1);
-                return NULL;
-            }
-            pn = mk_node (CCL_RPN_PROX);
-            pn->u.p[0] = p1;
-            pn->u.p[1] = p2;
-            pn->u.p[2] = 0;
-            p1 = pn;
-        }
-        else
-            break;
-    }
-    return p1;
-}
-
-/*
- * search_elements: Parse CCL search elements
- * cclp:   CCL Parser
- * qa:     Qualifier attributes already applied.
- * return: pointer to node(s); NULL on error.
- */
-static struct ccl_rpn_node *search_elements (CCL_parser cclp,
-                                             struct ccl_rpn_attr **qa)
-{
-    struct ccl_rpn_node *p1;
-    struct ccl_token *lookahead;
-    if (KIND == CCL_TOK_LP)
-    {
-        ADVANCE;
-        p1 = find_spec (cclp, qa);
-        if (!p1)
-            return NULL;
-        if (KIND != CCL_TOK_RP)
-        {
-            cclp->error_code = CCL_ERR_RP_EXPECTED;
-            ccl_rpn_delete (p1);
-            return NULL;
-        }
-        ADVANCE;
-        return p1;
-    }
-    else if (KIND == CCL_TOK_SET)
-    {
-        ADVANCE;
-        if (KIND == CCL_TOK_EQ)
-            ADVANCE;
-        if (KIND != CCL_TOK_TERM)
-        {
-            cclp->error_code = CCL_ERR_SETNAME_EXPECTED;
-            return NULL;
-        }
-        p1 = mk_node (CCL_RPN_SET);
-        p1->u.setname = copy_token_name (cclp->look_token);
-        ADVANCE;
-        return p1;
-    }
-    lookahead = cclp->look_token;
-
-    while (lookahead->kind==CCL_TOK_TERM)
-    {
-        lookahead = lookahead->next;
-        if (lookahead->kind == CCL_TOK_REL || lookahead->kind == CCL_TOK_EQ)
-            return qualifiers1 (cclp, lookahead, qa);
-        if (lookahead->kind != CCL_TOK_COMMA)
-            break;
-        lookahead = lookahead->next;
-    }
-    if (qa)
-        return search_terms (cclp, qa);
-    else
-    {
-        struct ccl_rpn_attr *qa[2];
-        struct ccl_rpn_node *node = 0;
-        int seq;
-        lookahead = cclp->look_token;
-
-        qa[1] = 0;
-        for(seq = 0; ;seq++)
-        {
-            struct ccl_rpn_node *node_sub;
-            qa[0] = ccl_qual_search(cclp, "term", 4, seq);
-            if (!qa[0])
-                break;
-
-            cclp->look_token = lookahead;
-
-            node_sub = search_terms (cclp, qa);
-            if (!node_sub)
-            {
-                ccl_rpn_delete (node);
-                return 0;
-            }
-            if (node)
-            {
-                struct ccl_rpn_node *node_this = mk_node(CCL_RPN_OR);
-                node_this->u.p[0] = node;
-                node_this->u.p[1] = node_sub;
-                node_this->u.p[2] = 0;
-                node = node_this;
-            }
-            else
-                node = node_sub;
-        }
-        if (!node)
-            node = search_terms (cclp, 0);
-        return node;
-    }
-}
-
-/*
- * find_spec: Parse CCL find specification
- * cclp:   CCL Parser
- * qa:     Qualifier attributes already applied.
- * return: pointer to node(s); NULL on error.
- */
-static struct ccl_rpn_node *find_spec (CCL_parser cclp,
-                                       struct ccl_rpn_attr **qa)
-{
-    struct ccl_rpn_node *p1, *p2, *pn;
-    if (!(p1 = search_elements (cclp, qa)))
-        return NULL;
-    while (1)
-    {
-        switch (KIND)
-        {
-        case CCL_TOK_AND:
-            ADVANCE;
-            p2 = search_elements (cclp, qa);
-            if (!p2)
-            {
-                ccl_rpn_delete (p1);
-                return NULL;
-            }
-            pn = mk_node (CCL_RPN_AND);
-            pn->u.p[0] = p1;
-            pn->u.p[1] = p2;
-            pn->u.p[2] = 0;
-            p1 = pn;
-            continue;
-        case CCL_TOK_OR:
-            ADVANCE;
-            p2 = search_elements (cclp, qa);
-            if (!p2)
-            {
-                ccl_rpn_delete (p1);
-                return NULL;
-            }
-            pn = mk_node (CCL_RPN_OR);
-            pn->u.p[0] = p1;
-            pn->u.p[1] = p2;
-            pn->u.p[2] = 0;
-            p1 = pn;
-            continue;
-        case CCL_TOK_NOT:
-            ADVANCE;
-            p2 = search_elements (cclp, qa);
-            if (!p2)
-            {
-                ccl_rpn_delete (p1);
-                return NULL;
-            }
-            pn = mk_node (CCL_RPN_NOT);
-            pn->u.p[0] = p1;
-            pn->u.p[1] = p2;
-            pn->u.p[2] = 0;
-            p1 = pn;
-            continue;
-        }
-        break;
-    }
-    return p1;
-}
-
-struct ccl_rpn_node *ccl_parser_find (CCL_parser cclp, struct ccl_token *list)
-{
-    struct ccl_rpn_node *p;
-
-    
-
-    cclp->look_token = list;
-    p = find_spec (cclp, NULL);
-    if (p && KIND != CCL_TOK_EOL)
-    {
-        if (KIND == CCL_TOK_RP)
-            cclp->error_code = CCL_ERR_BAD_RP;
-        else
-            cclp->error_code = CCL_ERR_OP_EXPECTED;
-        ccl_rpn_delete (p);
-        p = NULL;
-    }
-    cclp->error_pos = cclp->look_token->name;
-    if (p)
-        cclp->error_code = CCL_ERR_OK;
-    else
-        cclp->error_code = cclp->error_code;
-    return p;
-}
-
-/*
- * ccl_find: Parse CCL find - token representation
- * bibset:  Bibset to be used for the parsing
- * list:    List of tokens
- * error:   Pointer to integer. Holds error no. on completion.
- * pos:     Pointer to char position. Holds approximate error position.
- * return:  RPN tree on successful completion; NULL otherwise.
- */
-struct ccl_rpn_node *ccl_find (CCL_bibset bibset, struct ccl_token *list,
-                               int *error, const char **pos)
-{
-    struct ccl_rpn_node *p;
-    CCL_parser cclp = ccl_parser_create ();
-
-    cclp->bibset = bibset;
-
-    p = ccl_parser_find (cclp, list);
-
-    *error = cclp->error_code;
-    *pos = cclp->error_pos;
-
-    ccl_parser_destroy (cclp);
-
-    return p;
-}
-
-/*
- * ccl_find_str: Parse CCL find - string representation
- * bibset:  Bibset to be used for the parsing
- * str:     String to be parsed
- * error:   Pointer to integer. Holds error no. on completion.
- * pos:     Pointer to char position. Holds approximate error position.
- * return:  RPN tree on successful completion; NULL otherwise.
- */
-struct ccl_rpn_node *ccl_find_str (CCL_bibset bibset, const char *str,
-                                   int *error, int *pos)
-{
-    CCL_parser cclp = ccl_parser_create ();
-    struct ccl_token *list;
-    struct ccl_rpn_node *p;
-
-    cclp->bibset = bibset;
-
-    list = ccl_parser_tokenize (cclp, str);
-    p = ccl_parser_find (cclp, list);
-
-    *error = cclp->error_code;
-    if (*error)
-        *pos = cclp->error_pos - str;
-    ccl_parser_destroy (cclp);
-    ccl_token_del (list);
-    return p;
-}
diff --git a/ccl/cclptree.c b/ccl/cclptree.c
deleted file mode 100644 (file)
index 055a140..0000000
+++ /dev/null
@@ -1,271 +0,0 @@
-/*
- * Copyright (c) 1995, the EUROPAGATE consortium (see below).
- *
- * The EUROPAGATE consortium members are:
- *
- *    University College Dublin
- *    Danmarks Teknologiske Videnscenter
- *    An Chomhairle Leabharlanna
- *    Consejo Superior de Investigaciones Cientificas
- *
- * Permission to use, copy, modify, distribute, and sell this software and
- * its documentation, in whole or in part, for any purpose, is hereby granted,
- * provided that:
- *
- * 1. This copyright and permission notice appear in all copies of the
- * software and its documentation. Notices of copyright or attribution
- * which appear at the beginning of any file must remain unchanged.
- *
- * 2. The names of EUROPAGATE or the project partners may not be used to
- * endorse or promote products derived from this software without specific
- * prior written permission.
- *
- * 3. Users of this software (implementors and gateway operators) agree to
- * inform the EUROPAGATE consortium of their use of the software. This
- * information will be used to evaluate the EUROPAGATE project and the
- * software, and to plan further developments. The consortium may use
- * the information in later publications.
- * 
- * 4. Users of this software agree to make their best efforts, when
- * documenting their use of the software, to acknowledge the EUROPAGATE
- * consortium, and the role played by the software in their work.
- *
- * THIS SOFTWARE IS PROVIDED "AS IS" AND WITHOUT WARRANTY OF ANY KIND,
- * EXPRESS, IMPLIED, OR OTHERWISE, INCLUDING WITHOUT LIMITATION, ANY
- * WARRANTY OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.
- * IN NO EVENT SHALL THE EUROPAGATE CONSORTIUM OR ITS MEMBERS BE LIABLE
- * FOR ANY SPECIAL, INCIDENTAL, INDIRECT OR CONSEQUENTIAL DAMAGES OF
- * ANY KIND, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA
- * OR PROFITS, WHETHER OR NOT ADVISED OF THE POSSIBILITY OF DAMAGE, AND
- * ON ANY THEORY OF LIABILITY, ARISING OUT OF OR IN CONNECTION WITH THE
- * USE OR PERFORMANCE OF THIS SOFTWARE.
- *
- */
-/* CCL print rpn tree - infix notation
- * Europagate, 1995
- *
- * $Id: cclptree.c,v 1.15 2003-10-16 10:18:29 adam Exp $
- *
- * Old Europagate Log:
- *
- * Revision 1.6  1995/05/16  09:39:26  adam
- * LICENSE.
- *
- * Revision 1.5  1995/02/23  08:31:59  adam
- * Changed header.
- *
- * Revision 1.3  1995/02/15  17:42:16  adam
- * Minor changes of the api of this module. FILE* argument added
- * to ccl_pr_tree.
- *
- * Revision 1.2  1995/02/14  19:55:11  adam
- * Header files ccl.h/cclp.h are gone! They have been merged an
- * moved to ../include/ccl.h.
- * Node kind(s) in ccl_rpn_node have changed names.
- *
- * Revision 1.1  1995/02/14  10:25:56  adam
- * The constructions 'qualifier rel term ...' implemented.
- *
- */
-
-#include <stdio.h>
-#include <string.h>
-#include <ctype.h>
-
-#include <yaz/ccl.h>
-
-void fprintSpaces(int indent,FILE * fd_out) 
-{
-       char buf[100];
-       sprintf(buf,"%%%d.s",indent);
-       fprintf(fd_out,buf," ");
-}
-
-void ccl_pr_tree_as_qrpn(struct ccl_rpn_node *rpn, FILE *fd_out, int indent)
-{
-       if(indent>0) fprintSpaces(indent,fd_out);
-    switch (rpn->kind)
-    {
-    case CCL_RPN_TERM:
-        if (rpn->u.t.attr_list)
-        {
-            struct ccl_rpn_attr *attr;
-            for (attr = rpn->u.t.attr_list; attr; attr = attr->next)
-                       {
-                               if (attr->set)
-                                       fprintf(fd_out, "@attr %s", attr->set);
-                               else
-                                       fprintf(fd_out, "@attr ");
-                               switch(attr->kind)
-                               {
-                               case CCL_RPN_ATTR_NUMERIC:
-                    fprintf (fd_out, "%d=%d ", attr->type,
-                             attr->value.numeric);
-                                       break;
-                               case CCL_RPN_ATTR_STRING:
-                    fprintf (fd_out, "%d=%s ", attr->type,
-                                                        attr->value.str);
-                               }
-                       }
-        }
-               fprintf (fd_out, "\"%s\"\n", rpn->u.t.term);
-        break;
-    case CCL_RPN_AND:
-        fprintf (fd_out, "@and \n");
-        ccl_pr_tree_as_qrpn (rpn->u.p[0], fd_out,indent+2);
-        ccl_pr_tree_as_qrpn (rpn->u.p[1], fd_out,indent+2);
-        break;
-    case CCL_RPN_OR:
-        fprintf (fd_out, "@or \n");
-        ccl_pr_tree_as_qrpn (rpn->u.p[0], fd_out,indent+2);
-        ccl_pr_tree_as_qrpn (rpn->u.p[1], fd_out,indent+2);
-        break;
-    case CCL_RPN_NOT:
-        fprintf (fd_out, "@not ");
-        ccl_pr_tree_as_qrpn (rpn->u.p[0], fd_out,indent+2);
-        ccl_pr_tree_as_qrpn (rpn->u.p[1], fd_out,indent+2);
-        break;
-    case CCL_RPN_SET:
-        fprintf (fd_out, "set=%s ", rpn->u.setname);
-        break;
-    case CCL_RPN_PROX:
-        if (rpn->u.p[2] && rpn->u.p[2]->kind == CCL_RPN_TERM)
-        {
-            const char *cp = rpn->u.p[2]->u.t.term;
-            /* exlusion distance ordered relation which-code unit-code */
-            if (*cp == '!')
-            {   
-                /* word order specified */
-                if (isdigit(cp[1]))
-                    fprintf(fd_out, "@prox 0 %s 1 2 known 2", cp+1);
-                else
-                    fprintf(fd_out, "@prox 0 1 1 2 known 2");
-            } 
-            else if (*cp == '%')
-            {
-                /* word order not specified */
-                if (isdigit(cp[1]))
-                    fprintf(fd_out, "@prox 0 %s 0 2 known 2", cp+1);
-                else
-                    fprintf(fd_out, "@prox 0 1 0 2 known 2");
-            }
-        }
-        ccl_pr_tree_as_qrpn (rpn->u.p[0], fd_out,indent+2);
-        ccl_pr_tree_as_qrpn (rpn->u.p[1], fd_out,indent+2);
-        break;
-    default:
-               fprintf(stderr,"Internal Error Unknown ccl_rpn node type %d\n",rpn->kind);
-    }
-}
-
-
-void ccl_pr_tree (struct ccl_rpn_node *rpn, FILE *fd_out)
-{
-       ccl_pr_tree_as_qrpn(rpn,fd_out,0);
-}
-
-
-static void ccl_pquery_complex (WRBUF w, struct ccl_rpn_node *p)
-{
-    switch (p->kind)
-    {
-    case CCL_RPN_AND:
-       wrbuf_puts(w, "@and ");
-               break;
-    case CCL_RPN_OR:
-       wrbuf_puts(w, "@or ");
-               break;
-    case CCL_RPN_NOT:
-       wrbuf_puts(w, "@not ");
-               break;
-    case CCL_RPN_PROX:
-        if (p->u.p[2] && p->u.p[2]->kind == CCL_RPN_TERM)
-        {
-            const char *cp = p->u.p[2]->u.t.term;
-            /* exlusion distance ordered relation which-code unit-code */
-            if (*cp == '!')
-            {   
-                /* word order specified */
-                if (isdigit(cp[1]))
-                    wrbuf_printf(w, "@prox 0 %s 1 2 k 2 ", cp+1);
-                else
-                    wrbuf_printf(w, "@prox 0 1 1 2 k 2 ");
-            } 
-            else if (*cp == '%')
-            {
-                /* word order not specified */
-                if (isdigit(cp[1]))
-                    wrbuf_printf(w, "@prox 0 %s 0 2 k 2 ", cp+1);
-                else
-                    wrbuf_printf(w, "@prox 0 1 0 2 k 2 ");
-            }
-        }
-        else
-            wrbuf_puts(w, "@prox 0 2 0 1 k 2 ");
-               break;
-    default:
-               wrbuf_puts(w, "@ bad op (unknown) ");
-    }
-    ccl_pquery(w, p->u.p[0]);
-    ccl_pquery(w, p->u.p[1]);
-}
-
-void ccl_pquery (WRBUF w, struct ccl_rpn_node *p)
-{
-    struct ccl_rpn_attr *att;
-    const char *cp;
-       
-    switch (p->kind)
-    {
-    case CCL_RPN_AND:
-    case CCL_RPN_OR:
-    case CCL_RPN_NOT:
-    case CCL_RPN_PROX:
-       ccl_pquery_complex (w, p);
-               break;
-    case CCL_RPN_SET:
-               wrbuf_puts (w, "@set ");
-               wrbuf_puts (w, p->u.setname);
-               wrbuf_puts (w, " ");
-               break;
-    case CCL_RPN_TERM:
-       for (att = p->u.t.attr_list; att; att = att->next)
-               {
-                       char tmpattr[128];
-                       wrbuf_puts (w, "@attr ");
-                       if (att->set)
-                       {
-                               wrbuf_puts (w, att->set);
-                               wrbuf_puts (w, " ");
-                       }
-                       switch(att->kind)
-                       {
-                       case CCL_RPN_ATTR_NUMERIC:
-                               sprintf(tmpattr, "%d=%d ", att->type, att->value.numeric);
-                               wrbuf_puts (w, tmpattr);
-                               break;
-                       case CCL_RPN_ATTR_STRING:
-                               sprintf(tmpattr, "%d=", att->type);
-                               wrbuf_puts (w, tmpattr);
-                               wrbuf_puts(w, att->value.str);
-                               wrbuf_puts (w, " ");
-                               break;
-                       }
-               }
-               for (cp = p->u.t.term; *cp; cp++)
-               {
-                       if (*cp == ' ' || *cp == '\\')
-                               wrbuf_putc (w, '\\');
-                       wrbuf_putc (w, *cp);
-               }
-               wrbuf_puts (w, " ");
-               break;
-    }
-}
-
-/*
- * Local variables:
- * tab-width: 4
- * c-basic-offset: 4
- * End:
- */
diff --git a/ccl/cclqfile.c b/ccl/cclqfile.c
deleted file mode 100644 (file)
index 61cd463..0000000
+++ /dev/null
@@ -1,262 +0,0 @@
-/*
- * Copyright (c) 1995, the EUROPAGATE consortium (see below).
- *
- * The EUROPAGATE consortium members are:
- *
- *    University College Dublin
- *    Danmarks Teknologiske Videnscenter
- *    An Chomhairle Leabharlanna
- *    Consejo Superior de Investigaciones Cientificas
- *
- * Permission to use, copy, modify, distribute, and sell this software and
- * its documentation, in whole or in part, for any purpose, is hereby granted,
- * provided that:
- *
- * 1. This copyright and permission notice appear in all copies of the
- * software and its documentation. Notices of copyright or attribution
- * which appear at the beginning of any file must remain unchanged.
- *
- * 2. The names of EUROPAGATE or the project partners may not be used to
- * endorse or promote products derived from this software without specific
- * prior written permission.
- *
- * 3. Users of this software (implementors and gateway operators) agree to
- * inform the EUROPAGATE consortium of their use of the software. This
- * information will be used to evaluate the EUROPAGATE project and the
- * software, and to plan further developments. The consortium may use
- * the information in later publications.
- * 
- * 4. Users of this software agree to make their best efforts, when
- * documenting their use of the software, to acknowledge the EUROPAGATE
- * consortium, and the role played by the software in their work.
- *
- * THIS SOFTWARE IS PROVIDED "AS IS" AND WITHOUT WARRANTY OF ANY KIND,
- * EXPRESS, IMPLIED, OR OTHERWISE, INCLUDING WITHOUT LIMITATION, ANY
- * WARRANTY OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.
- * IN NO EVENT SHALL THE EUROPAGATE CONSORTIUM OR ITS MEMBERS BE LIABLE
- * FOR ANY SPECIAL, INCIDENTAL, INDIRECT OR CONSEQUENTIAL DAMAGES OF
- * ANY KIND, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA
- * OR PROFITS, WHETHER OR NOT ADVISED OF THE POSSIBILITY OF DAMAGE, AND
- * ON ANY THEORY OF LIABILITY, ARISING OUT OF OR IN CONNECTION WITH THE
- * USE OR PERFORMANCE OF THIS SOFTWARE.
- *
- */
-/* CCL qualifiers
- * Europagate, 1995
- *
- * $Id: cclqfile.c,v 1.14 2003-06-23 10:22:21 adam Exp $
- *
- * Old Europagate Log:
- *
- * Revision 1.3  1995/05/16  09:39:26  adam
- * LICENSE.
- *
- * Revision 1.2  1995/05/11  14:03:56  adam
- * Changes in the reading of qualifier(s). New function: ccl_qual_fitem.
- * New variable ccl_case_sensitive, which controls whether reserved
- * words and field names are case sensitive or not.
- *
- * Revision 1.1  1995/04/17  09:31:45  adam
- * Improved handling of qualifiers. Aliases or reserved words.
- *
- */
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-
-#include <yaz/ccl.h>
-
-void ccl_qual_field (CCL_bibset bibset, const char *cp, const char *qual_name)
-{
-    char qual_spec[128];
-    int type_ar[128];
-    int value_ar[128];
-    char *svalue_ar[128];
-    char *attsets[128];
-    int pair_no = 0;
-
-    while (pair_no < 128)
-    {
-        char *qual_value, *qual_type;
-        char *split, *setp;
-        int no_scan = 0;
-        
-        if (sscanf (cp, "%100s%n", qual_spec, &no_scan) < 1)
-           break;
-
-        if (!(split = strchr (qual_spec, '=')))
-        {
-           /* alias specification .. */
-            if (pair_no == 0)
-            {
-                ccl_qual_add_combi (bibset, qual_name, cp);
-                return;
-            }
-            break;
-        }
-       /* [set,]type=value ... */
-        cp += no_scan;
-        
-        *split++ = '\0';
-
-       setp = strchr (qual_spec, ',');
-       if (setp)
-       {
-           /* set,type=value ... */
-           *setp++ = '\0';
-            qual_type = setp;
-       }
-       else
-       {
-           /* type=value ... */
-            qual_type = qual_spec;
-       }
-        while (pair_no < 128)
-        {
-            int type, value;
-
-            qual_value = split;
-            if ((split = strchr (qual_value, ',')))
-                *split++ = '\0';
-
-           value = 0;
-            switch (qual_type[0])
-            {
-            case 'u':
-            case 'U':
-                type = CCL_BIB1_USE;
-                break;
-            case 'r':
-            case 'R':
-                type = CCL_BIB1_REL;
-                if (!ccl_stricmp (qual_value, "o"))
-                    value = CCL_BIB1_REL_ORDER;
-                break;                
-            case 'p':
-            case 'P':
-                type = CCL_BIB1_POS;
-                break;
-            case 's':
-            case 'S':
-                type = CCL_BIB1_STR;
-                if (!ccl_stricmp (qual_value, "pw"))
-                    value = CCL_BIB1_STR_WP;
-                if (!ccl_stricmp (qual_value, "al"))
-                    value = CCL_BIB1_STR_AND_LIST;
-                if (!ccl_stricmp (qual_value, "ol"))
-                    value = CCL_BIB1_STR_OR_LIST;
-                break;                
-            case 't':
-            case 'T':
-                type = CCL_BIB1_TRU;
-                if (!ccl_stricmp (qual_value, "l"))
-                    value = CCL_BIB1_TRU_CAN_LEFT;
-                else if (!ccl_stricmp (qual_value, "r"))
-                    value = CCL_BIB1_TRU_CAN_RIGHT;
-                else if (!ccl_stricmp (qual_value, "b"))
-                    value = CCL_BIB1_TRU_CAN_BOTH;
-                else if (!ccl_stricmp (qual_value, "n"))
-                    value = CCL_BIB1_TRU_CAN_NONE;
-                break;                
-            case 'c':
-            case 'C':
-                type = CCL_BIB1_COM;
-                break;
-            default:
-                type = atoi (qual_type);
-            }
-
-            type_ar[pair_no] = type;
-
-           if (value)
-           {
-               value_ar[pair_no] = value;
-               svalue_ar[pair_no] = 0;
-           }
-           else if (*qual_value >= '0' && *qual_value <= '9')
-           {
-               value_ar[pair_no] = atoi (qual_value);
-               svalue_ar[pair_no] = 0;
-           }
-           else
-           {
-               size_t len;
-               if (split)
-                   len = split - qual_value;
-               else
-                   len = strlen(qual_value);
-               svalue_ar[pair_no] = xmalloc(len+1);
-               memcpy(svalue_ar[pair_no], qual_value, len);
-               svalue_ar[pair_no][len] = '\0';
-           }
-           if (setp)
-           {
-               attsets[pair_no] = (char*) xmalloc (strlen(qual_spec)+1);
-               strcpy (attsets[pair_no], qual_spec);
-           }
-           else
-               attsets[pair_no] = 0;
-            pair_no++;
-            if (!split)
-                break;
-        }
-    }
-    ccl_qual_add_set (bibset, qual_name, pair_no, type_ar, value_ar, svalue_ar,
-                     attsets);
-}
-
-void ccl_qual_fitem (CCL_bibset bibset, const char *cp, const char *qual_name)
-{
-    if (*qual_name == '@')
-       ccl_qual_add_special(bibset, qual_name+1, cp);
-    else
-       ccl_qual_field(bibset, cp, qual_name);
-}
-
-/*
- * ccl_qual_file: Read bibset definition from file.
- * bibset:  Bibset
- * inf:     FILE pointer.
- *
- * Each line format is:
- *  <name> <t>=<v> <t>=<v> ....
- *  Where <name> is name of qualifier;
- *  <t>=<v> is a attribute definition pair where <t> is one of: 
- *     u(use), r(relation), p(position), t(truncation), c(completeness) 
- *     or plain integer.
- *  <v> is an integer or special pseudo-value.
- */
-void ccl_qual_file (CCL_bibset bibset, FILE *inf)
-{
-    char line[256];
-    char *cp, *cp1;
-    char qual_name[128];
-
-    while (fgets (line, 255, inf))
-    {
-        int  no_scan = 0;
-
-        cp = line;
-        if (*cp == '#')
-            continue;        /* ignore lines starting with # */
-        if (sscanf (cp, "%100s%n", qual_name, &no_scan) < 1)
-            continue;        /* also ignore empty lines */
-        cp += no_scan;
-       cp1 = strchr(cp, '#');
-       if (cp1)
-           *cp1 = '\0';
-        ccl_qual_fitem (bibset, cp, qual_name);
-    }
-}
-
-int ccl_qual_fname (CCL_bibset bibset, const char *fname)
-{
-    FILE *inf;
-    inf = fopen (fname, "r");
-    if (!inf)
-        return -1;
-    ccl_qual_file (bibset, inf);
-    fclose (inf);
-    return 0;
-}
diff --git a/ccl/cclqual.c b/ccl/cclqual.c
deleted file mode 100644 (file)
index b0ec3f2..0000000
+++ /dev/null
@@ -1,371 +0,0 @@
-/*
- * Copyright (c) 1995, the EUROPAGATE consortium (see below).
- *
- * The EUROPAGATE consortium members are:
- *
- *    University College Dublin
- *    Danmarks Teknologiske Videnscenter
- *    An Chomhairle Leabharlanna
- *    Consejo Superior de Investigaciones Cientificas
- *
- * Permission to use, copy, modify, distribute, and sell this software and
- * its documentation, in whole or in part, for any purpose, is hereby granted,
- * provided that:
- *
- * 1. This copyright and permission notice appear in all copies of the
- * software and its documentation. Notices of copyright or attribution
- * which appear at the beginning of any file must remain unchanged.
- *
- * 2. The names of EUROPAGATE or the project partners may not be used to
- * endorse or promote products derived from this software without specific
- * prior written permission.
- *
- * 3. Users of this software (implementors and gateway operators) agree to
- * inform the EUROPAGATE consortium of their use of the software. This
- * information will be used to evaluate the EUROPAGATE project and the
- * software, and to plan further developments. The consortium may use
- * the information in later publications.
- * 
- * 4. Users of this software agree to make their best efforts, when
- * documenting their use of the software, to acknowledge the EUROPAGATE
- * consortium, and the role played by the software in their work.
- *
- * THIS SOFTWARE IS PROVIDED "AS IS" AND WITHOUT WARRANTY OF ANY KIND,
- * EXPRESS, IMPLIED, OR OTHERWISE, INCLUDING WITHOUT LIMITATION, ANY
- * WARRANTY OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.
- * IN NO EVENT SHALL THE EUROPAGATE CONSORTIUM OR ITS MEMBERS BE LIABLE
- * FOR ANY SPECIAL, INCIDENTAL, INDIRECT OR CONSEQUENTIAL DAMAGES OF
- * ANY KIND, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA
- * OR PROFITS, WHETHER OR NOT ADVISED OF THE POSSIBILITY OF DAMAGE, AND
- * ON ANY THEORY OF LIABILITY, ARISING OUT OF OR IN CONNECTION WITH THE
- * USE OR PERFORMANCE OF THIS SOFTWARE.
- *
- */
-/* CCL qualifiers
- * Europagate, 1995
- *
- * $Id: cclqual.c,v 1.19 2003-06-23 10:22:21 adam Exp $
- *
- * Old Europagate Log:
- *
- * Revision 1.9  1995/05/16  09:39:27  adam
- * LICENSE.
- *
- * Revision 1.8  1995/05/11  14:03:57  adam
- * Changes in the reading of qualifier(s). New function: ccl_qual_fitem.
- * New variable ccl_case_sensitive, which controls whether reserved
- * words and field names are case sensitive or not.
- *
- * Revision 1.7  1995/04/17  09:31:46  adam
- * Improved handling of qualifiers. Aliases or reserved words.
- *
- * Revision 1.6  1995/02/23  08:32:00  adam
- * Changed header.
- *
- * Revision 1.4  1995/02/14  19:55:12  adam
- * Header files ccl.h/cclp.h are gone! They have been merged an
- * moved to ../include/ccl.h.
- * Node kind(s) in ccl_rpn_node have changed names.
- *
- * Revision 1.3  1995/02/14  16:20:56  adam
- * Qualifiers are read from a file now.
- *
- * Revision 1.2  1995/02/14  10:25:56  adam
- * The constructions 'qualifier rel term ...' implemented.
- *
- * Revision 1.1  1995/02/13  15:15:07  adam
- * Added handling of qualifiers. Not finished yet.
- *
- */
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-
-#include <yaz/ccl.h>
-
-/* Definition of CCL_bibset pointer */
-struct ccl_qualifiers {
-    struct ccl_qualifier *list;
-    struct ccl_qualifier_special *special;
-};
-
-
-/* CCL Qualifier special */
-struct ccl_qualifier_special {
-    char *name;
-    char *value;
-    struct ccl_qualifier_special *next;
-};
-
-
-static struct ccl_qualifier *ccl_qual_lookup (CCL_bibset b,
-                                              const char *n, size_t len)
-{
-    struct ccl_qualifier *q;
-    for (q = b->list; q; q = q->next)
-        if (len == strlen(q->name) && !memcmp (q->name, n, len))
-            break;
-    return q;
-}
-
-
-void ccl_qual_add_special (CCL_bibset bibset, const char *n, const char *v)
-{
-    struct ccl_qualifier_special *p;
-    const char *pe;
-
-    for (p = bibset->special; p && strcmp(p->name, n); p = p->next)
-       ;
-    if (p)
-       xfree (p->value);
-    else
-    {
-       p = (struct ccl_qualifier_special *) xmalloc (sizeof(*p));
-       p->name = ccl_strdup (n);
-       p->value = 0;
-       p->next = bibset->special;
-       bibset->special = p;
-    }
-    while (strchr(" \t", *v))
-       ++v;
-    for (pe = v + strlen(v); pe != v; --pe)
-       if (!strchr(" \n\r\t", pe[-1]))
-           break;
-    p->value = (char*) xmalloc (pe - v + 1);
-    if (pe - v)
-       memcpy (p->value, v, pe - v);
-    p->value[pe - v] = '\0';
-}
-
-static int next_token(const char **cpp, const char **dst)
-{
-    int len = 0;
-    const char *cp = *cpp;
-    while (*cp && strchr(" \r\n\t\f", *cp))
-        cp++;
-    if (dst)
-        *dst = cp;
-    len = 0;
-    while (*cp && !strchr(" \r\n\t\f", *cp))
-    {
-        cp++;
-        len++;
-    }
-    *cpp = cp;
-    return len;
-}
-
-void ccl_qual_add_combi (CCL_bibset b, const char *n, const char *names)
-{
-    const char *cp, *cp1;
-    int i, len;
-    struct ccl_qualifier *q;
-    for (q = b->list; q && strcmp(q->name, n); q = q->next)
-       ;
-    if (q)
-        return ;
-    q = (struct ccl_qualifier *) xmalloc (sizeof(*q));
-    q->name = ccl_strdup (n);
-    q->attr_list = 0;
-    q->next = b->list;
-    b->list = q;
-    
-    cp = names;
-    for (i = 0; next_token(&cp, 0); i++)
-        ;
-    q->no_sub = i;
-    q->sub = (struct ccl_qualifier **) xmalloc (sizeof(*q->sub) *
-                                               (1+q->no_sub));
-    cp = names;
-    for (i = 0; (len = next_token(&cp, &cp1)); i++)
-    {
-        q->sub[i] = ccl_qual_lookup (b, cp1, len);
-    }
-}
-
-/*
- * ccl_qual_add: Add qualifier to Bibset. If qualifier already
- *               exists, then attributes are appendend to old
- *               definition.
- * name:    name of qualifier
- * no:      No of attribute type/value pairs.
- * pairs:   Attributes. pairs[0] first type, pair[1] first value,
- *          ... pair[2*no-2] last type, pair[2*no-1] last value.
- */
-
-void ccl_qual_add_set (CCL_bibset b, const char *name, int no,
-                      int *type_ar, int *value_ar, char **svalue_ar,
-                      char **attsets)
-{
-    struct ccl_qualifier *q;
-    struct ccl_rpn_attr **attrp;
-
-    ccl_assert (b);
-    for (q = b->list; q; q = q->next)
-        if (!strcmp (name, q->name))
-            break;
-    if (!q)
-    {
-        struct ccl_qualifier *new_qual =
-           (struct ccl_qualifier *)xmalloc (sizeof(*new_qual));
-        ccl_assert (new_qual);
-        
-        new_qual->next = b->list;
-        b->list = new_qual;
-        
-        new_qual->name = ccl_strdup (name);
-        attrp = &new_qual->attr_list;
-
-        new_qual->no_sub = 0;
-        new_qual->sub = 0;
-    }
-    else
-    {
-        if (q->sub)  /* suspect.. */
-            xfree (q->sub);
-        attrp = &q->attr_list;
-        while (*attrp)
-            attrp = &(*attrp)->next;
-    }
-    while (--no >= 0)
-    {
-        struct ccl_rpn_attr *attr;
-
-        attr = (struct ccl_rpn_attr *)xmalloc (sizeof(*attr));
-        ccl_assert (attr);
-       attr->set = *attsets++;
-        attr->type = *type_ar++;
-       if (*svalue_ar)
-       {
-           attr->kind = CCL_RPN_ATTR_STRING;
-           attr->value.str = *svalue_ar;
-       }
-       else
-       {
-           attr->kind = CCL_RPN_ATTR_NUMERIC;
-           attr->value.numeric = *value_ar;
-       }
-       svalue_ar++;
-       value_ar++;
-        *attrp = attr;
-        attrp = &attr->next;
-    }
-    *attrp = NULL;
-}
-
-/*
- * ccl_qual_mk: Make new (empty) bibset.
- * return:   empty bibset.
- */
-CCL_bibset ccl_qual_mk (void)
-{
-    CCL_bibset b = (CCL_bibset)xmalloc (sizeof(*b));
-    ccl_assert (b);
-    b->list = NULL;     
-    b->special = NULL;
-    return b;
-}
-
-/*
- * ccl_qual_rm: Delete bibset.
- * b:        pointer to bibset
- */
-void ccl_qual_rm (CCL_bibset *b)
-{
-    struct ccl_qualifier *q, *q1;
-    struct ccl_qualifier_special *sp, *sp1;
-
-    if (!*b)
-        return;
-    for (q = (*b)->list; q; q = q1)
-    {
-        struct ccl_rpn_attr *attr, *attr1;
-
-        for (attr = q->attr_list; attr; attr = attr1)
-       {
-           attr1 = attr->next;
-           if (attr->set)
-               xfree(attr->set);
-           if (attr->kind == CCL_RPN_ATTR_STRING)
-               xfree(attr->value.str);
-           xfree (attr);
-       }
-        q1 = q->next;
-       xfree (q->name);
-        if (q->sub)
-            xfree (q->sub);
-       xfree (q);
-    }
-    for (sp = (*b)->special; sp; sp = sp1)
-    {
-       sp1 = sp->next;
-       xfree (sp->name);
-       xfree (sp->value);
-       xfree (sp);
-    }
-    xfree (*b);
-    *b = NULL;
-}
-
-/*
- * ccl_qual_search: Search for qualifier in bibset.
- * b:      Bibset
- * name:   Name of qualifier to search for (need no null-termination)
- * len:    Length of name.
- * return: Attribute info. NULL if not found.
- */
-struct ccl_rpn_attr *ccl_qual_search (CCL_parser cclp,
-                                     const char *name, size_t len,
-                                      int seq)
-{
-    struct ccl_qualifier *q;
-    const char *aliases;
-    int case_sensitive = cclp->ccl_case_sensitive;
-
-    ccl_assert (cclp);
-    if (!cclp->bibset)
-       return NULL;
-
-    aliases = ccl_qual_search_special(cclp->bibset, "case");
-    if (aliases)
-       case_sensitive = atoi(aliases);
-
-    for (q = cclp->bibset->list; q; q = q->next)
-        if (strlen(q->name) == len)
-        {
-            if (case_sensitive)
-            {
-                if (!memcmp (name, q->name, len))
-                    break;
-            }
-            else
-            {
-                if (!ccl_memicmp (name, q->name, len))
-                    break;
-            }
-        }
-    if (q)
-    {
-        if (q->attr_list && seq == 0)
-            return q->attr_list;
-        if (seq < q->no_sub && q->sub[seq])
-        {
-            return q->sub[seq]->attr_list;
-        }
-    }
-    return 0;
-}
-
-const char *ccl_qual_search_special (CCL_bibset b,
-                                    const char *name)
-{
-    struct ccl_qualifier_special *q;
-    if (!b)
-       return 0;
-    for (q = b->special; q && strcmp(q->name, name); q = q->next)
-       ;
-    if (q)
-       return q->value;
-    return 0;
-}
diff --git a/ccl/cclsh.c b/ccl/cclsh.c
deleted file mode 100644 (file)
index 27b3464..0000000
+++ /dev/null
@@ -1,228 +0,0 @@
-/*
- * Copyright (c) 1995, the EUROPAGATE consortium (see below).
- *
- * The EUROPAGATE consortium members are:
- *
- *    University College Dublin
- *    Danmarks Teknologiske Videnscenter
- *    An Chomhairle Leabharlanna
- *    Consejo Superior de Investigaciones Cientificas
- *
- * Permission to use, copy, modify, distribute, and sell this software and
- * its documentation, in whole or in part, for any purpose, is hereby granted,
- * provided that:
- *
- * 1. This copyright and permission notice appear in all copies of the
- * software and its documentation. Notices of copyright or attribution
- * which appear at the beginning of any file must remain unchanged.
- *
- * 2. The names of EUROPAGATE or the project partners may not be used to
- * endorse or promote products derived from this software without specific
- * prior written permission.
- *
- * 3. Users of this software (implementors and gateway operators) agree to
- * inform the EUROPAGATE consortium of their use of the software. This
- * information will be used to evaluate the EUROPAGATE project and the
- * software, and to plan further developments. The consortium may use
- * the information in later publications.
- * 
- * 4. Users of this software agree to make their best efforts, when
- * documenting their use of the software, to acknowledge the EUROPAGATE
- * consortium, and the role played by the software in their work.
- *
- * THIS SOFTWARE IS PROVIDED "AS IS" AND WITHOUT WARRANTY OF ANY KIND,
- * EXPRESS, IMPLIED, OR OTHERWISE, INCLUDING WITHOUT LIMITATION, ANY
- * WARRANTY OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.
- * IN NO EVENT SHALL THE EUROPAGATE CONSORTIUM OR ITS MEMBERS BE LIABLE
- * FOR ANY SPECIAL, INCIDENTAL, INDIRECT OR CONSEQUENTIAL DAMAGES OF
- * ANY KIND, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA
- * OR PROFITS, WHETHER OR NOT ADVISED OF THE POSSIBILITY OF DAMAGE, AND
- * ON ANY THEORY OF LIABILITY, ARISING OUT OF OR IN CONNECTION WITH THE
- * USE OR PERFORMANCE OF THIS SOFTWARE.
- *
- */
-/* CCL shell.
- * Europagate 1995
- *
- * $Id: cclsh.c,v 1.11 2001-11-27 22:38:50 adam Exp $
- *
- * Old Europagate Log:
- *
- * Revision 1.11  1995/05/16  09:39:27  adam
- * LICENSE.
- *
- * Revision 1.10  1995/05/11  14:03:57  adam
- * Changes in the reading of qualifier(s). New function: ccl_qual_fitem.
- * New variable ccl_case_sensitive, which controls whether reserved
- * words and field names are case sensitive or not.
- *
- * Revision 1.9  1995/02/23  08:32:00  adam
- * Changed header.
- *
- * Revision 1.7  1995/02/15  17:42:16  adam
- * Minor changes of the api of this module. FILE* argument added
- * to ccl_pr_tree.
- *
- * Revision 1.6  1995/02/14  19:55:13  adam
- * Header files ccl.h/cclp.h are gone! They have been merged an
- * moved to ../include/ccl.h.
- * Node kind(s) in ccl_rpn_node have changed names.
- *
- * Revision 1.5  1995/02/14  16:20:57  adam
- * Qualifiers are read from a file now.
- *
- * Revision 1.4  1995/02/14  14:12:42  adam
- * Ranges for ordered qualfiers implemented (e.g. pd=1980-1990).
- *
- * Revision 1.3  1995/02/14  10:25:57  adam
- * The constructions 'qualifier rel term ...' implemented.
- *
- * Revision 1.2  1995/02/13  15:15:07  adam
- * Added handling of qualifiers. Not finished yet.
- *
- * Revision 1.1  1995/02/13  12:35:21  adam
- * First version of CCL. Qualifiers aren't handled yet.
- */
-
-#include <stdio.h>
-#include <stdlib.h>
-
-#include <yaz/ccl.h>
-
-
-#if HAVE_READLINE_READLINE_H
-#include <readline/readline.h> 
-#endif
-#if HAVE_READLINE_HISTORY_H
-#include <readline/history.h>
-#endif
-
-
-static int debug = 0;
-static char *prog;
-
-void usage(const char *prog)
-{
-    fprintf (stderr, "%s: [-d] [-b configfile]\n", prog);
-    exit (1);
-}
-
-int main (int argc, char **argv)
-{
-    CCL_bibset bibset;
-    FILE *bib_inf;
-    char *bib_fname;
-
-    prog = *argv;
-    bibset = ccl_qual_mk ();    
-    while (--argc > 0)
-    {
-        if (**++argv == '-')
-        {
-            switch (argv[0][1])
-            {
-            case 'd':
-                debug = 1;
-                break;
-            case 'b':
-                if (argv[0][2])
-                    bib_fname = argv[0]+2;
-                else if (argc > 0)
-                {
-                    --argc;
-                    bib_fname = *++argv;
-                }
-                else
-                {
-                    fprintf (stderr, "%s: missing bib filename\n", prog);
-                    exit (1);
-                }
-                bib_inf = fopen (bib_fname, "r");
-                if (!bib_inf)
-                {
-                    fprintf (stderr, "%s: cannot open %s\n", prog,
-                             bib_fname);
-                    exit (1);
-                }
-                ccl_qual_file (bibset, bib_inf);
-                fclose (bib_inf);
-                break;
-            default:
-               usage(prog);
-            }
-        }
-        else
-        {
-            fprintf (stderr, "%s: no filenames, please\n", prog);
-            exit (1);
-        }
-    }
-    while (1)
-    {
-        char buf[1000];
-        int i, error, pos;
-        struct ccl_rpn_node *rpn;
-
-#if HAVE_READLINE_READLINE_H
-            char* line_in;
-            line_in=readline("CCLSH>");
-            if (!line_in)
-                break;
-#if HAVE_READLINE_HISTORY_H
-            if (*line_in)
-                add_history(line_in);
-#endif
-           if (strlen(line_in) > 999) {
-                fprintf(stderr,"Input line to long\n");
-                break;
-           }
-            strcpy(buf,line_in);
-            free (line_in);
-#else    
-       printf ("CCLSH>"); fflush (stdout);
-       if (!fgets (buf, 999, stdin))
-           break;
-#endif 
-
-        for (i = 0; i<1; i++)
-        {
-           CCL_parser cclp = ccl_parser_create ();
-           struct ccl_token *list;
-           
-           cclp->bibset = bibset;
-           
-           list = ccl_parser_tokenize (cclp, buf);
-           rpn = ccl_parser_find (cclp, list);
-           
-           error = cclp->error_code;
-           if (error)
-               pos = cclp->error_pos - buf;
-
-            if (error)
-            {
-                printf ("%*s^ - ", 6+pos, " ");
-                printf ("%s\n", ccl_err_msg (error));
-            }
-            else
-            {
-               if (rpn && i == 0)
-               {
-                   ccl_pr_tree (rpn, stdout);
-                   printf ("\n");
-               }
-            }
-           if (debug)
-           {
-               struct ccl_token *lp;
-               for (lp = list; lp; lp = lp->next)
-                   printf ("%d %.*s\n", lp->kind, (int) (lp->len), lp->name);
-           }
-           ccl_token_del (list);
-           ccl_parser_destroy (cclp);
-            if (rpn)
-                ccl_rpn_delete(rpn);
-        }
-    }
-    printf ("\n");
-    return 0;
-}
diff --git a/ccl/cclstr.c b/ccl/cclstr.c
deleted file mode 100644 (file)
index 12d8d8b..0000000
+++ /dev/null
@@ -1,110 +0,0 @@
-/*
- * Copyright (c) 1995, the EUROPAGATE consortium (see below).
- *
- * The EUROPAGATE consortium members are:
- *
- *    University College Dublin
- *    Danmarks Teknologiske Videnscenter
- *    An Chomhairle Leabharlanna
- *    Consejo Superior de Investigaciones Cientificas
- *
- * Permission to use, copy, modify, distribute, and sell this software and
- * its documentation, in whole or in part, for any purpose, is hereby granted,
- * provided that:
- *
- * 1. This copyright and permission notice appear in all copies of the
- * software and its documentation. Notices of copyright or attribution
- * which appear at the beginning of any file must remain unchanged.
- *
- * 2. The names of EUROPAGATE or the project partners may not be used to
- * endorse or promote products derived from this software without specific
- * prior written permission.
- *
- * 3. Users of this software (implementors and gateway operators) agree to
- * inform the EUROPAGATE consortium of their use of the software. This
- * information will be used to evaluate the EUROPAGATE project and the
- * software, and to plan further developments. The consortium may use
- * the information in later publications.
- * 
- * 4. Users of this software agree to make their best efforts, when
- * documenting their use of the software, to acknowledge the EUROPAGATE
- * consortium, and the role played by the software in their work.
- *
- * THIS SOFTWARE IS PROVIDED "AS IS" AND WITHOUT WARRANTY OF ANY KIND,
- * EXPRESS, IMPLIED, OR OTHERWISE, INCLUDING WITHOUT LIMITATION, ANY
- * WARRANTY OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.
- * IN NO EVENT SHALL THE EUROPAGATE CONSORTIUM OR ITS MEMBERS BE LIABLE
- * FOR ANY SPECIAL, INCIDENTAL, INDIRECT OR CONSEQUENTIAL DAMAGES OF
- * ANY KIND, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA
- * OR PROFITS, WHETHER OR NOT ADVISED OF THE POSSIBILITY OF DAMAGE, AND
- * ON ANY THEORY OF LIABILITY, ARISING OUT OF OR IN CONNECTION WITH THE
- * USE OR PERFORMANCE OF THIS SOFTWARE.
- *
- */
-/* CCL string compare utilities
- * Europagate, 1995
- *
- * $Id: cclstr.c,v 1.4 2001-11-27 22:38:50 adam Exp $
- *
- * Old Europagate Log:
- *
- * Revision 1.3  1996/01/24  10:11:19  adam
- * Added include of stdlib.h.
- *
- * Revision 1.2  1995/05/16  09:39:27  adam
- * LICENSE.
- *
- * Revision 1.1  1995/05/11  14:03:57  adam
- * Changes in the reading of qualifier(s). New function: ccl_qual_fitem.
- * New variable ccl_case_sensitive, which controls whether reserved
- * words and field names are case sensitive or not.
- *
- */
-#include <ctype.h>
-#include <stdio.h>
-#include <stdlib.h>
-
-#include <yaz/ccl.h>
-
-static int ccli_toupper (int c)
-{
-    return toupper (c);
-}
-
-int (*ccl_toupper)(int c) = NULL;
-
-int ccl_stricmp (const char *s1, const char *s2)
-{
-    if (!ccl_toupper)
-        ccl_toupper = ccli_toupper;
-    while (*s1 && *s2)
-    {
-        int c1, c2;
-        c1 = (*ccl_toupper)(*s1);
-        c2 = (*ccl_toupper)(*s2);
-        if (c1 != c2)
-            return c1 - c2;
-        s1++;
-        s2++;
-    }
-    return (*ccl_toupper)(*s1) - (*ccl_toupper)(*s2);
-}
-
-int ccl_memicmp (const char *s1, const char *s2, size_t n)
-{
-    if (!ccl_toupper)
-        ccl_toupper = ccli_toupper;
-    while (1)
-    {
-        int c1, c2;
-
-        c1 = (*ccl_toupper)(*s1);
-        c2 = (*ccl_toupper)(*s2);
-        if (n <= 1 || c1 != c2)
-            return c1 - c2;
-        s1++;
-        s2++;
-        --n;
-    }
-}
-
diff --git a/ccl/ccltoken.c b/ccl/ccltoken.c
deleted file mode 100644 (file)
index 31a18d8..0000000
+++ /dev/null
@@ -1,426 +0,0 @@
-/*
- * Copyright (c) 1995, the EUROPAGATE consortium (see below).
- *
- * The EUROPAGATE consortium members are:
- *
- *    University College Dublin
- *    Danmarks Teknologiske Videnscenter
- *    An Chomhairle Leabharlanna
- *    Consejo Superior de Investigaciones Cientificas
- *
- * Permission to use, copy, modify, distribute, and sell this software and
- * its documentation, in whole or in part, for any purpose, is hereby granted,
- * provided that:
- *
- * 1. This copyright and permission notice appear in all copies of the
- * software and its documentation. Notices of copyright or attribution
- * which appear at the beginning of any file must remain unchanged.
- *
- * 2. The names of EUROPAGATE or the project partners may not be used to
- * endorse or promote products derived from this software without specific
- * prior written permission.
- *
- * 3. Users of this software (implementors and gateway operators) agree to
- * inform the EUROPAGATE consortium of their use of the software. This
- * information will be used to evaluate the EUROPAGATE project and the
- * software, and to plan further developments. The consortium may use
- * the information in later publications.
- * 
- * 4. Users of this software agree to make their best efforts, when
- * documenting their use of the software, to acknowledge the EUROPAGATE
- * consortium, and the role played by the software in their work.
- *
- * THIS SOFTWARE IS PROVIDED "AS IS" AND WITHOUT WARRANTY OF ANY KIND,
- * EXPRESS, IMPLIED, OR OTHERWISE, INCLUDING WITHOUT LIMITATION, ANY
- * WARRANTY OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.
- * IN NO EVENT SHALL THE EUROPAGATE CONSORTIUM OR ITS MEMBERS BE LIABLE
- * FOR ANY SPECIAL, INCIDENTAL, INDIRECT OR CONSEQUENTIAL DAMAGES OF
- * ANY KIND, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA
- * OR PROFITS, WHETHER OR NOT ADVISED OF THE POSSIBILITY OF DAMAGE, AND
- * ON ANY THEORY OF LIABILITY, ARISING OUT OF OR IN CONNECTION WITH THE
- * USE OR PERFORMANCE OF THIS SOFTWARE.
- *
- */
-/* CCL - lexical analysis
- * Europagate, 1995
- *
- * $Id: ccltoken.c,v 1.22 2003-02-14 18:49:23 adam Exp $
- *
- * Old Europagate Log:
- *
- * Revision 1.10  1995/07/11  12:28:31  adam
- * New function: ccl_token_simple (split into simple tokens) and
- *  ccl_token_del (delete tokens).
- *
- * Revision 1.9  1995/05/16  09:39:28  adam
- * LICENSE.
- *
- * Revision 1.8  1995/05/11  14:03:57  adam
- * Changes in the reading of qualifier(s). New function: ccl_qual_fitem.
- * New variable ccl_case_sensitive, which controls whether reserved
- * words and field names are case sensitive or not.
- *
- * Revision 1.7  1995/04/19  12:11:24  adam
- * Minor change.
- *
- * Revision 1.6  1995/04/17  09:31:48  adam
- * Improved handling of qualifiers. Aliases or reserved words.
- *
- * Revision 1.5  1995/02/23  08:32:00  adam
- * Changed header.
- *
- * Revision 1.3  1995/02/15  17:42:16  adam
- * Minor changes of the api of this module. FILE* argument added
- * to ccl_pr_tree.
- *
- * Revision 1.2  1995/02/14  19:55:13  adam
- * Header files ccl.h/cclp.h are gone! They have been merged an
- * moved to ../include/ccl.h.
- * Node kind(s) in ccl_rpn_node have changed names.
- *
- * Revision 1.1  1995/02/13  12:35:21  adam
- * First version of CCL. Qualifiers aren't handled yet.
- *
- */
-
-#include <string.h>
-#include <stdlib.h>
-#include <ctype.h>
-
-#include <yaz/ccl.h>
-
-/*
- * token_cmp: Compare token with keyword(s)
- * kw:     Keyword list. Each keyword is separated by space.
- * token:  CCL token.
- * return: 1 if token string matches one of the keywords in list;
- *         0 otherwise.
- */
-static int token_cmp (CCL_parser cclp, const char *kw, struct ccl_token *token)
-{
-    const char *cp1 = kw;
-    const char *cp2;
-    const char *aliases;
-    int case_sensitive = cclp->ccl_case_sensitive;
-
-    aliases = ccl_qual_search_special(cclp->bibset, "case");
-    if (aliases)
-       case_sensitive = atoi(aliases);
-    if (!kw)
-        return 0;
-    while ((cp2 = strchr (cp1, ' ')))
-    {
-        if (token->len == (size_t) (cp2-cp1))
-        {
-            if (case_sensitive)
-            {
-                if (!memcmp (cp1, token->name, token->len))
-                    return 1;
-            }
-            else
-            {
-                if (!ccl_memicmp (cp1, token->name, token->len))
-                    return 1;
-            }
-        }
-       cp1 = cp2+1;
-    }
-    if (case_sensitive)
-        return token->len == strlen(cp1) 
-            && !memcmp (cp1, token->name, token->len);
-    return token->len == strlen(cp1) &&
-        !ccl_memicmp (cp1, token->name, token->len);
-}
-
-/*
- * ccl_token_simple: tokenize CCL raw tokens
- */
-struct ccl_token *ccl_token_simple (const char *command)
-{
-    const char *cp = command;
-    struct ccl_token *first = NULL;
-    struct ccl_token *last = NULL;
-
-    while (1)
-    {
-       while (*cp && strchr (" \t\r\n", *cp))
-       {
-           cp++;
-           continue;
-       }
-       if (!first)
-       {
-           first = last = (struct ccl_token *)xmalloc (sizeof (*first));
-           ccl_assert (first);
-           last->prev = NULL;
-       }
-       else
-       {
-           last->next = (struct ccl_token *)xmalloc (sizeof(*first));
-           ccl_assert (last->next);
-           last->next->prev = last;
-           last = last->next;
-       }
-       last->next = NULL;
-       last->name = cp;
-       last->len = 1;
-       switch (*cp++)
-       {
-        case '\0':
-            last->kind = CCL_TOK_EOL;
-            return first;
-       case '\"':
-           last->kind = CCL_TOK_TERM;
-           last->name = cp;
-           last->len = 0;
-           while (*cp && *cp != '\"')
-           {
-               cp++;
-               ++ last->len;
-           }
-           if (*cp == '\"')
-               cp++;
-           break;
-       default:
-           while (*cp && !strchr (" \t\n\r", *cp))
-           {
-               cp++;
-               ++ last->len;
-           }
-            last->kind = CCL_TOK_TERM;
-       }
-    }
-    return first;
-}
-
-
-/*
- * ccl_tokenize: tokenize CCL command string.
- * return: CCL token list.
- */
-struct ccl_token *ccl_parser_tokenize (CCL_parser cclp, const char *command)
-{
-    const char *aliases;
-    const char *cp = command;
-    struct ccl_token *first = NULL;
-    struct ccl_token *last = NULL;
-
-    while (1)
-    {
-       while (*cp && strchr (" \t\r\n", *cp))
-       {
-           cp++;
-           continue;
-       }
-       if (!first)
-       {
-           first = last = (struct ccl_token *)xmalloc (sizeof (*first));
-           ccl_assert (first);
-           last->prev = NULL;
-       }
-       else
-       {
-           last->next = (struct ccl_token *)xmalloc (sizeof(*first));
-           ccl_assert (last->next);
-           last->next->prev = last;
-           last = last->next;
-       }
-       last->next = NULL;
-       last->name = cp;
-       last->len = 1;
-       switch (*cp++)
-       {
-        case '\0':
-            last->kind = CCL_TOK_EOL;
-            return first;
-       case '(':
-           last->kind = CCL_TOK_LP;
-           break;
-       case ')':
-           last->kind = CCL_TOK_RP;
-           break;
-       case ',':
-           last->kind = CCL_TOK_COMMA;
-           break;
-       case '%':
-       case '!':
-           last->kind = CCL_TOK_PROX;
-            while (isdigit(*cp))
-           {
-               ++ last->len;
-               cp++;
-           }
-           break;
-       case '>':
-       case '<':
-       case '=':
-           if (*cp == '=' || *cp == '<' || *cp == '>')
-           {
-               cp++;
-               last->kind = CCL_TOK_REL;
-               ++ last->len;
-           }
-           else if (cp[-1] == '=')
-               last->kind = CCL_TOK_EQ;
-           else
-               last->kind = CCL_TOK_REL;
-           break;
-       case '\"':
-           last->kind = CCL_TOK_TERM;
-           last->name = cp;
-           last->len = 0;
-           while (*cp && *cp != '\"')
-           {
-               cp++;
-               ++ last->len;
-           }
-           if (*cp == '\"')
-               cp++;
-           break;
-       default:
-           if (!strchr ("(),%!><= \t\n\r", cp[-1]))
-           {
-               while (*cp && !strchr ("(),%!><= \t\n\r", *cp))
-               {
-                   cp++;
-                   ++ last->len;
-               }
-           }
-           last->kind = CCL_TOK_TERM;
-
-           aliases = ccl_qual_search_special(cclp->bibset, "and");
-           if (!aliases)
-               aliases = cclp->ccl_token_and;
-           if (token_cmp (cclp, aliases, last))
-               last->kind = CCL_TOK_AND;
-
-           aliases = ccl_qual_search_special(cclp->bibset, "or");
-           if (!aliases)
-               aliases = cclp->ccl_token_or;
-           if (token_cmp (cclp, aliases, last))
-               last->kind = CCL_TOK_OR;
-
-           aliases = ccl_qual_search_special(cclp->bibset, "not");
-           if (!aliases)
-               aliases = cclp->ccl_token_not;
-            if (token_cmp (cclp, aliases, last))
-               last->kind = CCL_TOK_NOT;
-
-           aliases = ccl_qual_search_special(cclp->bibset, "set");
-           if (!aliases)
-               aliases = cclp->ccl_token_set;
-
-           if (token_cmp (cclp, aliases, last))
-               last->kind = CCL_TOK_SET;
-       }
-    }
-    return first;
-}
-
-struct ccl_token *ccl_tokenize (const char *command)
-{
-    CCL_parser cclp = ccl_parser_create ();
-    struct ccl_token *list;
-
-    list = ccl_parser_tokenize (cclp, command);
-
-    ccl_parser_destroy (cclp);
-    return list;
-}
-
-/*
- * ccl_token_del: delete CCL tokens
- */
-void ccl_token_del (struct ccl_token *list)
-{
-    struct ccl_token *list1;
-
-    while (list) 
-    {
-        list1 = list->next;
-        xfree (list);
-        list = list1;
-    }
-}
-
-char *ccl_strdup (const char *str)
-{
-    int len = strlen(str);
-    char *p = (char*) xmalloc (len+1);
-    strcpy (p, str);
-    return p;
-}
-
-CCL_parser ccl_parser_create (void)
-{
-    CCL_parser p = (CCL_parser)xmalloc (sizeof(*p));
-    if (!p)
-       return p;
-    p->look_token = NULL;
-    p->error_code = 0;
-    p->error_pos = NULL;
-    p->bibset = NULL;
-
-    p->ccl_token_and = ccl_strdup("and");
-    p->ccl_token_or = ccl_strdup("or");
-    p->ccl_token_not = ccl_strdup("not andnot");
-    p->ccl_token_set = ccl_strdup("set");
-    p->ccl_case_sensitive = 1;
-
-    return p;
-}
-
-void ccl_parser_destroy (CCL_parser p)
-{
-    if (!p)
-       return;
-    xfree (p->ccl_token_and);
-    xfree (p->ccl_token_or);
-    xfree (p->ccl_token_not);
-    xfree (p->ccl_token_set);
-    xfree (p);
-}
-
-void ccl_parser_set_op_and (CCL_parser p, const char *op)
-{
-    if (p && op)
-    {
-       if (p->ccl_token_and)
-           xfree (p->ccl_token_and);
-       p->ccl_token_and = ccl_strdup (op);
-    }
-}
-
-void ccl_parser_set_op_or (CCL_parser p, const char *op)
-{
-    if (p && op)
-    {
-       if (p->ccl_token_or)
-           xfree (p->ccl_token_or);
-       p->ccl_token_or = ccl_strdup (op);
-    }
-}
-void ccl_parser_set_op_not (CCL_parser p, const char *op)
-{
-    if (p && op)
-    {
-       if (p->ccl_token_not)
-           xfree (p->ccl_token_not);
-       p->ccl_token_not = ccl_strdup (op);
-    }
-}
-void ccl_parser_set_op_set (CCL_parser p, const char *op)
-{
-    if (p && op)
-    {
-       if (p->ccl_token_set)
-           xfree (p->ccl_token_set);
-       p->ccl_token_set = ccl_strdup (op);
-    }
-}
-
-void ccl_parser_set_case (CCL_parser p, int case_sensitivity_flag)
-{
-    if (p)
-       p->ccl_case_sensitive = case_sensitivity_flag;
-}
diff --git a/ccl/tstccl.c b/ccl/tstccl.c
deleted file mode 100644 (file)
index 6ae30a4..0000000
+++ /dev/null
@@ -1,84 +0,0 @@
-/*
- * Copyright (c) 2002-2003, Index Data
- * See the file LICENSE for details.
- *
- * $Id: tstccl.c,v 1.2 2003-06-24 23:03:04 adam Exp $
- */
-
-/* CCL test */
-
-#include <yaz/ccl.h>
-
-struct ccl_tst {
-    char *query;
-    char *result;
-};
-
-static struct ccl_tst query_str[] = {
-    { "x1", "@attr 4=2 @attr 1=1016 x1 "},
-    { "(((((x1)))))", "@attr 4=2 @attr 1=1016 x1 "},
-    {"x1 and x2", "@and @attr 4=2 @attr 1=1016 x1 @attr 4=2 @attr 1=1016 x2 "},
-    { "ti=x3", "@attr 4=2 @attr 1=4 x3 "},
-    { "dc.title=x4", "@attr 1=/my/title x4 "},
-    { "x1 and", 0},
-    { "tix=x5", 0},
-    {0, 0}
-};
-
-void tst1(void)
-{
-    CCL_parser parser = ccl_parser_create ();
-    CCL_bibset bibset = ccl_qual_mk();
-    int i;
-
-    ccl_qual_fitem(bibset, "u=4    s=pw t=l,r", "ti");
-    ccl_qual_fitem(bibset, "1=1016 s=al,pw",    "term");
-    ccl_qual_fitem(bibset, "1=/my/title",         "dc.title");
-
-    parser->bibset = bibset;
-
-    for (i = 0; query_str[i].query; i++)
-    {
-       struct ccl_token *token_list =
-           ccl_parser_tokenize(parser, query_str[i].query);
-       struct ccl_rpn_node *rpn = ccl_parser_find(parser, token_list);
-       ccl_token_del (token_list);
-       if (rpn)
-       {
-           WRBUF wrbuf = wrbuf_alloc();
-           ccl_pquery(wrbuf, rpn);
-
-           if (!query_str[i].result)
-           {
-               printf ("Failed %s\n", query_str[i].query);
-               printf (" got:%s:\n", wrbuf_buf(wrbuf));
-               printf (" expected failure\n");
-               exit(3);
-           }
-           else if (strcmp(wrbuf_buf(wrbuf), query_str[i].result))
-           {
-               printf ("Failed %s\n", query_str[i].query);
-               printf (" got:%s:\n", wrbuf_buf(wrbuf));
-               printf (" expected:%s:\n", query_str[i].result);
-               exit(2);
-           }
-           ccl_rpn_delete(rpn);
-           wrbuf_free(wrbuf, 1);
-       }
-       else if (query_str[i].result)
-       {
-           printf ("Failed %s\n", query_str[i].query);
-           printf (" got failure\n");
-           printf (" expected:%s:\n", query_str[i].result);
-           exit(4);
-       }
-    }  
-    ccl_parser_destroy (parser);
-    ccl_qual_rm(&bibset);
-}
-
-int main(int argc, char **argv)
-{
-    tst1();
-    exit(0);
-}
index 1a26fd3..d7b9526 100644 (file)
@@ -1,6 +1,6 @@
 ## Copyright (C) 1995-2003, Index Data
 ## All rights reserved.
 ## Copyright (C) 1995-2003, Index Data
 ## All rights reserved.
-## $Id: Makefile.am,v 1.19 2003-03-11 11:07:47 adam Exp $
+## $Id: Makefile.am,v 1.20 2003-10-27 12:21:23 adam Exp $
 
 if ISSSL
 extra=yaz-client-ssl
 
 if ISSSL
 extra=yaz-client-ssl
@@ -14,9 +14,9 @@ EXTRA_DIST = default.bib
 yaz_client_SOURCES=client.c admin.c admin.h tabcomplete.c tabcomplete.h
 yaz_client_ssl_SOURCES=$(yaz_client_SOURCES)
 
 yaz_client_SOURCES=client.c admin.c admin.h tabcomplete.c tabcomplete.h
 yaz_client_ssl_SOURCES=$(yaz_client_SOURCES)
 
-yaz_client_LDADD = ../lib/libyaz.la $(READLINE_LIBS)
-yaz_client_ssl_LDADD = ../lib/libyazssl.la ../lib/libyaz.la $(READLINE_LIBS) $(SSL_LIBS)
-bertorture_LDADD = ../lib/libyaz.la
+yaz_client_LDADD = ../src/libyaz.la $(READLINE_LIBS)
+yaz_client_ssl_LDADD = ../src/libyazssl.la ../src/libyaz.la $(READLINE_LIBS) $(SSL_LIBS)
+bertorture_LDADD = ../src/libyaz.la
 
 bertorture_SOURCES=bertorture.c
 
 
 bertorture_SOURCES=bertorture.c
 
diff --git a/comstack/.cvsignore b/comstack/.cvsignore
deleted file mode 100644 (file)
index fbc256e..0000000
+++ /dev/null
@@ -1,6 +0,0 @@
-.deps
-.libs
-Makefile
-Makefile.in
-libcomstack.la
-*.lo
diff --git a/comstack/Makefile.am b/comstack/Makefile.am
deleted file mode 100644 (file)
index 0f65fe9..0000000
+++ /dev/null
@@ -1,8 +0,0 @@
-## $Id: Makefile.am,v 1.7 2002-09-11 21:25:57 adam Exp $
-
-noinst_LTLIBRARIES=libcomstack.la
-
-AM_CPPFLAGS=-I$(top_srcdir)/include
-
-libcomstack_la_SOURCES=comstack.c tcpip.c waislen.c unix.c
-
diff --git a/comstack/comstack.c b/comstack/comstack.c
deleted file mode 100644 (file)
index 1488704..0000000
+++ /dev/null
@@ -1,247 +0,0 @@
-/*
- * Copyright (c) 1995-2003, Index Data
- * See the file LICENSE for details.
- *
- * $Id: comstack.c,v 1.16 2003-10-20 18:21:45 adam Exp $
- */
-
-#include <string.h>
-#include <ctype.h>
-
-#include <yaz/comstack.h>
-#include <yaz/tcpip.h>
-#include <yaz/unix.h>
-#include <yaz/odr.h>
-
-static const char *cs_errlist[] =
-{
-    "No error or unspecified error",
-    "System (lower-layer) error",
-    "Operation out of state",
-    "No data (operation would block)",
-    "New data while half of old buffer is on the line (flow control)",
-    "Permission denied",
-    "SSL error"
-};
-
-const char *cs_errmsg(int n)
-{
-    if (n < 0 || n > 6)
-       n = 0;
-    return cs_errlist[n];
-}
-
-const char *cs_strerror(COMSTACK h)
-{
-    return cs_errmsg(h->cerrno);
-}
-
-void cs_get_host_args(const char *type_and_host, const char **args)
-{
-    
-    *args = "";
-    if (*type_and_host && strncmp(type_and_host, "unix:", 5))
-    {
-        const char *cp;
-        cp = strstr(type_and_host, "://");
-        if (cp)
-            cp = cp+3;
-        else
-            cp = type_and_host;
-        cp = strchr(cp, '/');
-        if (cp)
-            *args = cp+1;
-    }
-}
-
-COMSTACK cs_create_host(const char *type_and_host, int blocking, void **vp)
-{
-    enum oid_proto proto = PROTO_Z3950;
-    const char *host = 0;
-    COMSTACK cs;
-    CS_TYPE t;
-
-    if (strncmp (type_and_host, "tcp:", 4) == 0)
-    {
-       t = tcpip_type;
-        host = type_and_host + 4;
-    }
-    else if (strncmp (type_and_host, "ssl:", 4) == 0)
-    {
-#if HAVE_OPENSSL_SSL_H
-       t = ssl_type;
-        host = type_and_host + 4;
-#else
-       return 0;
-#endif
-    }
-    else if (strncmp (type_and_host, "unix:", 5) == 0)
-    {
-#ifndef WIN32
-       t = unix_type;
-        host = type_and_host + 5;
-#else
-       return 0;
-#endif
-    }
-    else if (strncmp(type_and_host, "http:", 5) == 0)
-    {
-       t = tcpip_type;
-        host = type_and_host + 5;
-        if (host[0] == '/' && host[1] == '/')
-            host = host + 2;
-        proto = PROTO_HTTP;
-    }
-    else if (strncmp(type_and_host, "https:", 6) == 0)
-    {
-#if HAVE_OPENSSL_SSL_H
-       t = ssl_type;
-        host = type_and_host + 6;
-        if (host[0] == '/' && host[1] == '/')
-            host = host + 2;
-        proto = PROTO_HTTP;
-#else
-       return 0;
-#endif
-    }
-    else
-    {
-       t = tcpip_type;
-       host = type_and_host;
-        
-    }
-    cs = cs_create (t, blocking, proto);
-    if (!cs)
-       return 0;
-
-    if (!(*vp = cs_straddr(cs, host)))
-    {
-       cs_close (cs);
-       return 0;
-    }    
-    return cs;
-}
-
-int cs_look (COMSTACK cs)
-{
-    return cs->event;
-}
-
-int cs_complete_auto(const unsigned char *buf, int len)
-{
-    if (len > 5 && buf[0] >= 0x20 && buf[0] < 0x7f
-               && buf[1] >= 0x20 && buf[1] < 0x7f
-               && buf[2] >= 0x20 && buf[2] < 0x7f)
-    {
-        /* deal with HTTP request/response */
-       int i = 2, content_len = 0, chunked = 0;
-
-        while (i <= len-4)
-        {
-           if (i > 8192)
-               return i;  /* do not allow more than 8K HTTP header */
-            if (buf[i] == '\r' && buf[i+1] == '\n')
-            {
-                i += 2;
-                if (buf[i] == '\r' && buf[i+1] == '\n')
-                {
-                    if (chunked)
-                    { 
-                        while(1)
-                        {
-                            int chunk_len = 0;
-                            i += 2;
-#if 0
-/* debugging */
-                            if (i <len-2)
-                            {
-                                printf ("\n>>>");
-                                for (j = i; j <= i+4; j++)
-                                    printf ("%c", buf[j]);
-                                printf ("<<<\n");
-                            }
-#endif
-                            while (1)
-                                if (i >= len-2) {
-#if 0
-/* debugging */                                    
-                                    printf ("XXXXXXXX not there yet 1\n");
-                                    printf ("i=%d len=%d\n", i, len);
-#endif
-                                    return 0;
-                                } else if (isdigit(buf[i]))
-                                    chunk_len = chunk_len * 16 + 
-                                        (buf[i++] - '0');
-                                else if (isupper(buf[i]))
-                                    chunk_len = chunk_len * 16 + 
-                                        (buf[i++] - ('A'-10));
-                                else if (islower(buf[i]))
-                                    chunk_len = chunk_len * 16 + 
-                                        (buf[i++] - ('a'-10));
-                                else
-                                    break;
-                            if (buf[i] != '\r' || buf[i+1] != '\n' ||
-                                chunk_len < 0)
-                                return i+2;    /* bad. stop now */
-                            if (chunk_len == 0)
-                            {
-                                /* consider trailing headers .. */
-                                while(i <= len-4)
-                                {
-                                    if (buf[i] == '\r' &&  buf[i+1] == '\n' &&
-                                        buf[i+2] == '\r' && buf[i+3] == '\n')
-                                        if (len >= i+4)
-                                            return i+4;
-                                    i++;
-                                }
-#if 0
-/* debugging */
-                                printf ("XXXXXXXXX not there yet 2\n");
-                                printf ("i=%d len=%d\n", i, len);
-#endif
-                                return 0;
-                            }
-                            i += chunk_len+2;
-                        }
-                    }
-                    else
-                    {   /* not chunked ; inside body */
-                        /* i += 2 seems not to work with GCC -O2 .. 
-                           so i+2 is used instead .. */
-                        if (len >= (i+2)+ content_len)
-                            return (i+2)+ content_len;
-                    }
-                    break;
-                }
-                else if (i < len - 21 &&
-                         !memcmp(buf+i, "Transfer-Encoding: ", 18))
-                {
-                    i+=18;
-                    if (buf[i] == ' ')
-                        i++;
-                    if (i < len - 8)
-                        if (!memcmp(buf+i, "chunked", 7))
-                            chunked = 1;
-                }
-                else if (i < len - 18 &&
-                         !memcmp(buf+i, "Content-Length: ", 15))
-                {
-                    i+= 15;
-                    if (buf[i] == ' ')
-                        i++;
-                    content_len = 0;
-                    while (i <= len-4 && isdigit(buf[i]))
-                        content_len = content_len*10 + (buf[i++] - '0');
-                    if (content_len < 0) /* prevent negative offsets */
-                        content_len = 0;
-                }
-                else
-                    i++;
-            }
-            else
-                i++;
-        }
-        return 0;
-    }
-    return completeBER(buf, len);
-}
diff --git a/comstack/tcpip.c b/comstack/tcpip.c
deleted file mode 100644 (file)
index ab08873..0000000
+++ /dev/null
@@ -1,1100 +0,0 @@
-/*
- * Copyright (c) 1995-2003, Index Data
- * See the file LICENSE for details.
- *
- * $Id: tcpip.c,v 1.59 2003-10-08 21:47:15 adam Exp $
- */
-
-#include <stdio.h>
-#include <string.h>
-#include <stdlib.h>
-
-#ifdef WIN32
-#else
-#include <unistd.h>
-#endif
-
-#include <errno.h>
-#include <fcntl.h>
-#include <signal.h>
-#if HAVE_OPENSSL_SSL_H
-#include <openssl/ssl.h>
-#include <openssl/err.h>
-#endif
-
-#include <yaz/comstack.h>
-#include <yaz/tcpip.h>
-#include <yaz/log.h>
-#include <yaz/nmem.h>
-
-#ifdef WIN32
-#else
-#include <netinet/tcp.h>
-#endif
-
-static int tcpip_close(COMSTACK h);
-static int tcpip_put(COMSTACK h, char *buf, int size);
-static int tcpip_get(COMSTACK h, char **buf, int *bufsize);
-static int tcpip_connect(COMSTACK h, void *address);
-static int tcpip_more(COMSTACK h);
-static int tcpip_rcvconnect(COMSTACK h);
-static int tcpip_bind(COMSTACK h, void *address, int mode);
-static int tcpip_listen(COMSTACK h, char *raddr, int *addrlen,
-                int (*check_ip)(void *cd, const char *a, int len, int type),
-                void *cd);
-static int tcpip_set_blocking(COMSTACK p, int blocking);
-
-#if HAVE_OPENSSL_SSL_H
-static int ssl_get(COMSTACK h, char **buf, int *bufsize);
-static int ssl_put(COMSTACK h, char *buf, int size);
-#endif
-
-static COMSTACK tcpip_accept(COMSTACK h);
-static char *tcpip_addrstr(COMSTACK h);
-static void *tcpip_straddr(COMSTACK h, const char *str);
-
-#if 0
-#define TRC(x) x
-#else
-#define TRC(X)
-#endif
-
-#ifndef YAZ_SOCKLEN_T
-#define YAZ_SOCKLEN_T int
-#endif
-
-/* this state is used for both SSL and straight TCP/IP */
-typedef struct tcpip_state
-{
-    char *altbuf; /* alternate buffer for surplus data */
-    int altsize;  /* size as xmalloced */
-    int altlen;   /* length of data or 0 if none */
-
-    int written;  /* -1 if we aren't writing */
-    int towrite;  /* to verify against user input */
-    int (*complete)(const unsigned char *buf, int len); /* length/comple. */
-    struct sockaddr_in addr;  /* returned by cs_straddr */
-    char buf[128]; /* returned by cs_addrstr */
-#if HAVE_OPENSSL_SSL_H
-    SSL_CTX *ctx;
-    SSL_CTX *ctx_alloc;
-    SSL *ssl;
-#endif
-} tcpip_state;
-
-#ifdef WIN32
-static int tcpip_init (void)
-{
-    static int initialized = 0;
-    if (!initialized)
-    {
-        WORD requested;
-        WSADATA wd;
-
-        requested = MAKEWORD(1, 1);
-        if (WSAStartup(requested, &wd))
-            return 0;
-        initialized = 1;
-    }
-    return 1;
-}
-#else
-static int tcpip_init (void)
-{
-    return 1;
-}
-#endif
-
-/*
- * This function is always called through the cs_create() macro.
- * s >= 0: socket has already been established for us.
- */
-COMSTACK tcpip_type(int s, int blocking, int protocol, void *vp)
-{
-    COMSTACK p;
-    tcpip_state *state;
-    int new_socket;
-#ifdef WIN32
-    unsigned long tru = 1;
-#endif
-
-    if (!tcpip_init ())
-        return 0;
-    if (s < 0)
-    {
-       if ((s = socket(AF_INET, SOCK_STREAM, 0)) < 0)
-           return 0;
-       new_socket = 1;
-    }
-    else
-       new_socket = 0;
-    if (!(p = (struct comstack *)xmalloc(sizeof(struct comstack))))
-       return 0;
-    if (!(state = (struct tcpip_state *)(p->cprivate =
-                                         xmalloc(sizeof(tcpip_state)))))
-       return 0;
-
-    if (!((p->blocking = blocking)&1))
-    {
-#ifdef WIN32
-        if (ioctlsocket(s, FIONBIO, &tru) < 0)
-            return 0;
-#else
-        if (fcntl(s, F_SETFL, O_NONBLOCK) < 0)
-            return 0;
-#ifndef MSG_NOSIGNAL
-        signal (SIGPIPE, SIG_IGN);
-#endif
-#endif
-    }
-
-    p->io_pending = 0;
-    p->iofile = s;
-    p->type = tcpip_type;
-    p->protocol = (enum oid_proto) protocol;
-
-    p->f_connect = tcpip_connect;
-    p->f_rcvconnect = tcpip_rcvconnect;
-    p->f_get = tcpip_get;
-    p->f_put = tcpip_put;
-    p->f_close = tcpip_close;
-    p->f_more = tcpip_more;
-    p->f_bind = tcpip_bind;
-    p->f_listen = tcpip_listen;
-    p->f_accept = tcpip_accept;
-    p->f_addrstr = tcpip_addrstr;
-    p->f_straddr = tcpip_straddr;
-    p->f_set_blocking = tcpip_set_blocking;
-
-    p->state = new_socket ? CS_ST_UNBND : CS_ST_IDLE; /* state of line */
-    p->event = CS_NONE;
-    p->cerrno = 0;
-    p->stackerr = 0;
-
-#if HAVE_OPENSSL_SSL_H
-    state->ctx = state->ctx_alloc = 0;
-    state->ssl = 0;
-#endif
-
-    state->altbuf = 0;
-    state->altsize = state->altlen = 0;
-    state->towrite = state->written = -1;
-    if (protocol == PROTO_WAIS)
-       state->complete = completeWAIS;
-    else
-       state->complete = cs_complete_auto;
-
-    p->timeout = COMSTACK_DEFAULT_TIMEOUT;
-    TRC(fprintf(stderr, "Created new TCPIP comstack\n"));
-
-    return p;
-}
-
-#if HAVE_OPENSSL_SSL_H
-
-COMSTACK ssl_type(int s, int blocking, int protocol, void *vp)
-{
-    tcpip_state *state;
-    COMSTACK p;
-    yaz_log(LOG_LOG, "ssl_type begin");
-
-    p = tcpip_type (s, blocking, protocol, 0);
-    if (!p)
-       return 0;
-    p->f_get = ssl_get;
-    p->f_put = ssl_put;
-    p->type = ssl_type;
-    state = (tcpip_state *) p->cprivate;
-    if (vp)
-       state->ctx = vp;
-    else
-    {
-       SSL_load_error_strings();
-       SSLeay_add_all_algorithms();
-
-       state->ctx = state->ctx_alloc = SSL_CTX_new (SSLv23_method());
-       if (!state->ctx)
-       {
-           tcpip_close(p);
-           return 0;
-       }
-    }
-    /* note: we don't handle already opened socket in SSL mode - yet */
-    yaz_log(LOG_LOG, "ssl_type end");
-    return p;
-}
-#endif
-
-int tcpip_strtoaddr_ex(const char *str, struct sockaddr_in *add,
-                       int default_port)
-{
-    struct hostent *hp;
-    char *p, buf[512];
-    short int port = default_port;
-    unsigned tmpadd;
-
-    if (!tcpip_init ())
-        return 0;
-    TRC(fprintf(stderr, "tcpip_strtoaddress: %s\n", str ? str : "NULL"));
-    add->sin_family = AF_INET;
-    strncpy(buf, str, 511);
-    buf[511] = 0;
-    if ((p = strchr(buf, '/')))
-        *p = 0;
-    if ((p = strchr(buf, ':')))
-    {
-        *p = 0;
-        port = atoi(p + 1);
-    }
-    add->sin_port = htons(port);
-    if (!strcmp("@", buf))
-        add->sin_addr.s_addr = INADDR_ANY;
-    else if ((hp = gethostbyname(buf)))
-        memcpy(&add->sin_addr.s_addr, *hp->h_addr_list,
-              sizeof(struct in_addr));
-    else if ((tmpadd = (unsigned) inet_addr(buf)) != 0)
-        memcpy(&add->sin_addr.s_addr, &tmpadd, sizeof(struct in_addr));
-    else
-        return 0;
-    return 1;
-}
-
-void *tcpip_straddr(COMSTACK h, const char *str)
-{
-    tcpip_state *sp = (tcpip_state *)h->cprivate;
-    int port = 210;
-
-    if (h->protocol == PROTO_HTTP)
-        port = 80;
-
-    if (!tcpip_strtoaddr_ex (str, &sp->addr, port))
-       return 0;
-    return &sp->addr;
-}
-
-struct sockaddr_in *tcpip_strtoaddr(const char *str)
-{
-    static struct sockaddr_in add;
-    
-    if (!tcpip_strtoaddr_ex (str, &add, 210))
-       return 0;
-    return &add;
-}
-
-int tcpip_more(COMSTACK h)
-{
-    tcpip_state *sp = (tcpip_state *)h->cprivate;
-    
-    return sp->altlen && (*sp->complete)((unsigned char *) sp->altbuf,
-       sp->altlen);
-}
-
-/*
- * connect(2) will block (sometimes) - nothing we can do short of doing
- * weird things like spawning subprocesses or threading or some weird junk
- * like that.
- */
-int tcpip_connect(COMSTACK h, void *address)
-{
-    struct sockaddr_in *add = (struct sockaddr_in *)address;
-#if HAVE_OPENSSL_SSL_H
-    tcpip_state *sp = (tcpip_state *)h->cprivate;
-#endif
-    int r;
-#ifdef __sun__
-    int recbuflen;
-    YAZ_SOCKLEN_T rbufsize = sizeof(recbuflen);
-#endif
-    TRC(fprintf(stderr, "tcpip_connect\n"));
-    h->io_pending = 0;
-    if (h->state != CS_ST_UNBND)
-    {
-        h->cerrno = CSOUTSTATE;
-       return -1;
-    }
-#ifdef __sun__
-    /* On Suns, you must set a bigger Receive Buffer BEFORE a call to connect
-     * This gives the connect a chance to negotiate with the other side
-     * (see 'man tcp') 
-     */
-    if ( getsockopt(h->iofile, SOL_SOCKET, SO_RCVBUF, (void *)&recbuflen, &rbufsize ) < 0 )
-    {
-        h->cerrno = CSYSERR;
-        return -1;
-    }
-    TRC(fprintf( stderr, "Current Size of TCP Receive Buffer= %d\n",
-                recbuflen ));
-    recbuflen *= 10; /* lets be optimistic */
-    if ( setsockopt(h->iofile, SOL_SOCKET, SO_RCVBUF, (void *)&recbuflen, rbufsize ) < 0 )
-    {
-        h->cerrno = CSYSERR;
-        return -1;
-    }
-    if ( getsockopt(h->iofile, SOL_SOCKET, SO_RCVBUF, (void *)&recbuflen, &rbufsize ) )
-    {
-        h->cerrno = CSYSERR;
-        return -1;
-    }
-    TRC(fprintf( stderr, "New Size of TCP Receive Buffer = %d\n",
-                recbuflen ));
-#endif
-    r = connect(h->iofile, (struct sockaddr *) add, sizeof(*add));
-    if (r < 0)
-    {
-#ifdef WIN32
-        if (WSAGetLastError() == WSAEWOULDBLOCK)
-        {
-            h->event = CS_CONNECT;
-            h->state = CS_ST_CONNECTING;
-            h->io_pending = CS_WANT_WRITE;
-            return 1;
-        }
-#else
-        if (yaz_errno() == EINPROGRESS)
-        {
-            h->event = CS_CONNECT;
-            h->state = CS_ST_CONNECTING;
-            h->io_pending = CS_WANT_WRITE|CS_WANT_READ;
-            return 1;
-        }
-#endif
-        h->cerrno = CSYSERR;
-        return -1;
-    }
-    h->event = CS_CONNECT;
-    h->state = CS_ST_CONNECTING;
-
-    return tcpip_rcvconnect (h);
-}
-
-/*
- * nop
- */
-int tcpip_rcvconnect(COMSTACK h)
-{
-#if HAVE_OPENSSL_SSL_H
-    tcpip_state *sp = (tcpip_state *)h->cprivate;
-#endif
-    TRC(fprintf(stderr, "tcpip_rcvconnect\n"));
-
-    if (h->state == CS_ST_DATAXFER)
-        return 0;
-    if (h->state != CS_ST_CONNECTING)
-    {
-        h->cerrno = CSOUTSTATE;
-       return -1;
-    }
-#if HAVE_OPENSSL_SSL_H
-    if (sp->ctx)
-    {
-       int res;
-
-       if (!sp->ssl)
-       {
-           sp->ssl = SSL_new (sp->ctx);
-           SSL_set_fd (sp->ssl, h->iofile);
-       }
-       res = SSL_connect (sp->ssl);
-       if (res <= 0)
-       {
-           int err = SSL_get_error(sp->ssl, res);
-           if (err == SSL_ERROR_WANT_READ)
-           {
-               h->io_pending = CS_WANT_READ;
-               return 1;
-           }
-           if (err == SSL_ERROR_WANT_WRITE)
-           {
-               h->io_pending = CS_WANT_WRITE;
-               return 1;
-           }
-           h->cerrno = CSERRORSSL;
-           return -1;
-       }
-    }
-#endif
-    h->event = CS_DATA;
-    h->state = CS_ST_DATAXFER;
-    return 0;
-}
-
-#define CERTF "ztest.pem"
-#define KEYF "ztest.pem"
-
-static void tcpip_setsockopt (int fd)
-{
-#if 0
-    int len = 4096;
-    int set = 1;
-    
-    if (setsockopt(fd, IPPROTO_TCP, TCP_NODELAY, (char*)&set, sizeof(int)))
-    {
-        yaz_log(LOG_WARN|LOG_ERRNO, "setsockopt TCP_NODELAY");
-    }
-    if (setsockopt(fd, SOL_SOCKET, SO_SNDBUF, (char*)&len, sizeof(int)))
-    {
-        yaz_log(LOG_WARN|LOG_ERRNO, "setsockopt SNDBUF");
-    }
-    if (setsockopt(fd, SOL_SOCKET, SO_RCVBUF, (char*)&len, sizeof(int)))
-    {
-        yaz_log(LOG_WARN|LOG_ERRNO, "setsockopt RCVBUF");
-    }
-#endif
-}
-
-static int tcpip_bind(COMSTACK h, void *address, int mode)
-{
-    struct sockaddr *addr = (struct sockaddr *)address;
-#ifdef WIN32
-    BOOL one = 1;
-#else
-    unsigned long one = 1;
-#endif
-
-#if HAVE_OPENSSL_SSL_H
-    tcpip_state *sp = (tcpip_state *)h->cprivate;
-    if (sp->ctx)
-    {
-       if (sp->ctx_alloc)
-       {
-           int res;
-           res = SSL_CTX_use_certificate_file (sp->ctx, CERTF,
-                                               SSL_FILETYPE_PEM);
-           if (res <= 0)
-           {
-               ERR_print_errors_fp(stderr);
-               exit (2);
-           }
-           res = SSL_CTX_use_PrivateKey_file (sp->ctx, KEYF,
-                                              SSL_FILETYPE_PEM);
-           if (res <= 0)
-           {
-               ERR_print_errors_fp(stderr);
-               exit (3);
-           }
-           res = SSL_CTX_check_private_key (sp->ctx);
-           if (res <= 0)
-           {
-               ERR_print_errors_fp(stderr);
-               exit(5);
-           }
-       }
-       TRC (fprintf (stderr, "ssl_bind\n"));
-    }
-    else
-    {
-       TRC (fprintf (stderr, "tcpip_bind\n"));
-    }
-#else
-    TRC (fprintf (stderr, "tcpip_bind\n"));
-#endif
-#ifndef WIN32
-    if (setsockopt(h->iofile, SOL_SOCKET, SO_REUSEADDR, (char*) 
-       &one, sizeof(one)) < 0)
-    {
-        h->cerrno = CSYSERR;
-        return -1;
-    }
-#endif
-    tcpip_setsockopt(h->iofile);
-    if (bind(h->iofile, addr, sizeof(struct sockaddr_in)))
-    {
-        h->cerrno = CSYSERR;
-        return -1;
-    }
-    if (mode == CS_SERVER && listen(h->iofile, 3) < 0)
-    {
-        h->cerrno = CSYSERR;
-        return -1;
-    }
-    h->state = CS_ST_IDLE;
-    h->event = CS_LISTEN;
-    return 0;
-}
-
-int tcpip_listen(COMSTACK h, char *raddr, int *addrlen,
-                int (*check_ip)(void *cd, const char *a, int len, int t),
-                void *cd)
-{
-    struct sockaddr_in addr;
-    YAZ_SOCKLEN_T len = sizeof(addr);
-
-    TRC(fprintf(stderr, "tcpip_listen pid=%d\n", getpid()));
-    if (h->state != CS_ST_IDLE)
-    {
-        h->cerrno = CSOUTSTATE;
-        return -1;
-    }
-    h->newfd = accept(h->iofile, (struct sockaddr*)&addr, &len);
-    if (h->newfd < 0)
-    {
-       if (
-#ifdef WIN32
-           WSAGetLastError() == WSAEWOULDBLOCK
-#else
-           yaz_errno() == EWOULDBLOCK 
-#ifdef EAGAIN
-#if EAGAIN != EWOULDBLOCK
-            || yaz_errno() == EAGAIN
-#endif
-#endif
-#endif
-           )
-           h->cerrno = CSNODATA;
-       else
-           h->cerrno = CSYSERR;
-        return -1;
-    }
-    if (addrlen && (size_t) (*addrlen) >= sizeof(struct sockaddr_in))
-        memcpy(raddr, &addr, *addrlen = sizeof(struct sockaddr_in));
-    else if (addrlen)
-        *addrlen = 0;
-    if (check_ip && (*check_ip)(cd, (const char *) &addr,
-        sizeof(addr), AF_INET))
-    {
-       h->cerrno = CSDENY;
-#ifdef WIN32
-        closesocket(h->newfd);
-#else
-        close(h->newfd);
-#endif
-       h->newfd = -1;
-       return -1;
-    }
-    h->state = CS_ST_INCON;
-    tcpip_setsockopt (h->newfd);
-    return 0;
-}
-
-COMSTACK tcpip_accept(COMSTACK h)
-{
-    COMSTACK cnew;
-    tcpip_state *state, *st = (tcpip_state *)h->cprivate;
-#ifdef WIN32
-    unsigned long tru = 1;
-#endif
-
-    TRC(fprintf(stderr, "tcpip_accept\n"));
-    if (h->state == CS_ST_INCON)
-    {
-       if (!(cnew = (COMSTACK)xmalloc(sizeof(*cnew))))
-       {
-           h->cerrno = CSYSERR;
-#ifdef WIN32
-           closesocket(h->newfd);
-#else
-           close(h->newfd);
-#endif
-           h->newfd = -1;
-           return 0;
-       }
-       memcpy(cnew, h, sizeof(*h));
-       cnew->iofile = h->newfd;
-       cnew->io_pending = 0;
-       if (!(state = (tcpip_state *)
-             (cnew->cprivate = xmalloc(sizeof(tcpip_state)))))
-       {
-           h->cerrno = CSYSERR;
-           if (h->newfd != -1)
-           {
-#ifdef WIN32
-               closesocket(h->newfd);
-#else
-               close(h->newfd);
-#endif
-               h->newfd = -1;
-           }
-           return 0;
-       }
-       if (!(cnew->blocking&1) && 
-#ifdef WIN32
-           (ioctlsocket(cnew->iofile, FIONBIO, &tru) < 0)
-#else
-           (fcntl(cnew->iofile, F_SETFL, O_NONBLOCK) < 0)
-#endif
-           )
-       {
-           h->cerrno = CSYSERR;
-           if (h->newfd != -1)
-           {
-#ifdef WIN32
-               closesocket(h->newfd);
-#else
-               close(h->newfd);
-#endif
-               h->newfd = -1;
-           }
-           xfree (cnew);
-           xfree (state);
-           return 0;
-       }
-       h->newfd = -1;
-       state->altbuf = 0;
-       state->altsize = state->altlen = 0;
-       state->towrite = state->written = -1;
-       state->complete = st->complete;
-       cnew->state = CS_ST_ACCEPT;
-       h->state = CS_ST_IDLE;
-       
-#if HAVE_OPENSSL_SSL_H
-       state->ctx = st->ctx;
-       state->ctx_alloc = 0;
-       state->ssl = st->ssl;
-       if (state->ctx)
-       {
-           state->ssl = SSL_new (state->ctx);
-           SSL_set_fd (state->ssl, cnew->iofile);
-       }
-#endif
-       h = cnew;
-    }
-    if (h->state == CS_ST_ACCEPT)
-    {
-#if HAVE_OPENSSL_SSL_H
-       tcpip_state *state = (tcpip_state *)h->cprivate;
-       if (state->ctx)
-       {
-           int res = SSL_accept (state->ssl);
-           TRC(fprintf(stderr, "SSL_accept\n"));
-           if (res <= 0)
-           {
-               int err = SSL_get_error(state->ssl, res);
-               if (err == SSL_ERROR_WANT_READ)
-               {
-                   h->io_pending = CS_WANT_READ;
-                   return h;
-               }
-               if (err == SSL_ERROR_WANT_WRITE)
-               {
-                   h->io_pending = CS_WANT_WRITE;
-                   return h;
-               }
-               cs_close (h);
-               return 0;
-           }
-       }
-#endif
-    }
-    else
-    {
-        h->cerrno = CSOUTSTATE;
-        return 0;
-    }
-    h->io_pending = 0;
-    h->state = CS_ST_DATAXFER;
-    h->event = CS_DATA;
-    return h;
-}
-
-#define CS_TCPIP_BUFCHUNK 4096
-
-/*
- * Return: -1 error, >1 good, len of buffer, ==1 incomplete buffer,
- * 0=connection closed.
- */
-int tcpip_get(COMSTACK h, char **buf, int *bufsize)
-{
-    tcpip_state *sp = (tcpip_state *)h->cprivate;
-    char *tmpc;
-    int tmpi, berlen, rest, req, tomove;
-    int hasread = 0, res;
-
-    TRC(fprintf(stderr, "tcpip_get: bufsize=%d\n", *bufsize));
-    if (sp->altlen) /* switch buffers */
-    {
-        TRC(fprintf(stderr, "  %d bytes in altbuf (0x%x)\n", sp->altlen,
-            (unsigned) sp->altbuf));
-        tmpc = *buf;
-        tmpi = *bufsize;
-        *buf = sp->altbuf;
-        *bufsize = sp->altsize;
-        hasread = sp->altlen;
-        sp->altlen = 0;
-        sp->altbuf = tmpc;
-        sp->altsize = tmpi;
-    }
-    h->io_pending = 0;
-    while (!(berlen = (*sp->complete)((unsigned char *)*buf, hasread)))
-    {
-        if (!*bufsize)
-        {
-            if (!(*buf = (char *)xmalloc(*bufsize = CS_TCPIP_BUFCHUNK)))
-                return -1;
-        }
-        else if (*bufsize - hasread < CS_TCPIP_BUFCHUNK)
-            if (!(*buf =(char *)xrealloc(*buf, *bufsize *= 2)))
-                return -1;
-#ifdef __sun__
-       yaz_set_errno( 0 );
-       /* unfortunatly, sun sometimes forgets to set errno in recv
-          when EWOULDBLOCK etc. would be required (res = -1) */
-#endif
-       res = recv(h->iofile, *buf + hasread, CS_TCPIP_BUFCHUNK, 0);
-       TRC(fprintf(stderr, "  recv res=%d, hasread=%d\n", res, hasread));
-       if (res < 0)
-       {
-         TRC(fprintf(stderr, "  recv errno=%d, (%s)\n", yaz_errno(), 
-                     strerror(yaz_errno())));
-#ifdef WIN32
-           if (WSAGetLastError() == WSAEWOULDBLOCK)
-           {
-               h->io_pending = CS_WANT_READ;
-               break;
-           }
-           else
-               return -1;
-#else
-           if (yaz_errno() == EWOULDBLOCK 
-#ifdef EAGAIN   
-#if EAGAIN != EWOULDBLOCK
-                || yaz_errno() == EAGAIN
-#endif
-#endif
-               || yaz_errno() == EINPROGRESS
-#ifdef __sun__
-               || yaz_errno() == ENOENT /* Sun's sometimes set errno to this */
-#endif
-               )
-           {
-               h->io_pending = CS_WANT_READ;
-               break;
-           }
-           else if (yaz_errno() == 0)
-               continue;
-           else
-               return -1;
-#endif
-       }
-       else if (!res)
-           return 0;
-        hasread += res;
-    }
-    TRC (fprintf (stderr, "  Out of read loop with hasread=%d, berlen=%d\n",
-                 hasread, berlen));
-    /* move surplus buffer (or everything if we didn't get a BER rec.) */
-    if (hasread > berlen)
-    {
-        tomove = req = hasread - berlen;
-        rest = tomove % CS_TCPIP_BUFCHUNK;
-        if (rest)
-            req += CS_TCPIP_BUFCHUNK - rest;
-        if (!sp->altbuf)
-        {
-            if (!(sp->altbuf = (char *)xmalloc(sp->altsize = req)))
-                return -1;
-        } else if (sp->altsize < req)
-            if (!(sp->altbuf =(char *)xrealloc(sp->altbuf, sp->altsize = req)))
-                return -1;
-        TRC(fprintf(stderr, "  Moving %d bytes to altbuf(0x%x)\n", tomove,
-            (unsigned) sp->altbuf));
-        memcpy(sp->altbuf, *buf + berlen, sp->altlen = tomove);
-    }
-    if (berlen < CS_TCPIP_BUFCHUNK - 1)
-        *(*buf + berlen) = '\0';
-    return berlen ? berlen : 1;
-}
-
-
-#if HAVE_OPENSSL_SSL_H
-/*
- * Return: -1 error, >1 good, len of buffer, ==1 incomplete buffer,
- * 0=connection closed.
- */
-int ssl_get(COMSTACK h, char **buf, int *bufsize)
-{
-    tcpip_state *sp = (tcpip_state *)h->cprivate;
-    char *tmpc;
-    int tmpi, berlen, rest, req, tomove;
-    int hasread = 0, res;
-
-    TRC(fprintf(stderr, "ssl_get: bufsize=%d\n", *bufsize));
-    if (sp->altlen) /* switch buffers */
-    {
-        TRC(fprintf(stderr, "  %d bytes in altbuf (0x%x)\n", sp->altlen,
-            (unsigned) sp->altbuf));
-        tmpc = *buf;
-        tmpi = *bufsize;
-        *buf = sp->altbuf;
-        *bufsize = sp->altsize;
-        hasread = sp->altlen;
-        sp->altlen = 0;
-        sp->altbuf = tmpc;
-        sp->altsize = tmpi;
-    }
-    h->io_pending = 0;
-    while (!(berlen = (*sp->complete)((unsigned char *)*buf, hasread)))
-    {
-        if (!*bufsize)
-        {
-            if (!(*buf = (char *)xmalloc(*bufsize = CS_TCPIP_BUFCHUNK)))
-                return -1;
-        }
-        else if (*bufsize - hasread < CS_TCPIP_BUFCHUNK)
-            if (!(*buf =(char *)xrealloc(*buf, *bufsize *= 2)))
-                return -1;
-       res = SSL_read (sp->ssl, *buf + hasread, CS_TCPIP_BUFCHUNK);
-       TRC(fprintf(stderr, "  SSL_read res=%d, hasread=%d\n", res, hasread));
-       if (res <= 0)
-       {
-           int ssl_err = SSL_get_error(sp->ssl, res);
-           if (ssl_err == SSL_ERROR_WANT_READ)
-           {
-               h->io_pending = CS_WANT_READ;
-               break;
-           }
-           if (ssl_err == SSL_ERROR_WANT_WRITE)
-           {
-               h->io_pending = CS_WANT_WRITE;
-               break;
-           }
-           if (res == 0)
-               return 0;
-           h->cerrno = CSERRORSSL;
-           return -1;
-       }
-       hasread += res;
-    }
-    TRC (fprintf (stderr, "  Out of read loop with hasread=%d, berlen=%d\n",
-        hasread, berlen));
-    /* move surplus buffer (or everything if we didn't get a BER rec.) */
-    if (hasread > berlen)
-    {
-        tomove = req = hasread - berlen;
-        rest = tomove % CS_TCPIP_BUFCHUNK;
-        if (rest)
-            req += CS_TCPIP_BUFCHUNK - rest;
-        if (!sp->altbuf)
-        {
-            if (!(sp->altbuf = (char *)xmalloc(sp->altsize = req)))
-                return -1;
-        } else if (sp->altsize < req)
-            if (!(sp->altbuf =(char *)xrealloc(sp->altbuf, sp->altsize = req)))
-                return -1;
-        TRC(fprintf(stderr, "  Moving %d bytes to altbuf(0x%x)\n", tomove,
-            (unsigned) sp->altbuf));
-        memcpy(sp->altbuf, *buf + berlen, sp->altlen = tomove);
-    }
-    if (berlen < CS_TCPIP_BUFCHUNK - 1)
-        *(*buf + berlen) = '\0';
-    return berlen ? berlen : 1;
-}
-#endif
-
-/*
- * Returns 1, 0 or -1
- * In nonblocking mode, you must call again with same buffer while
- * return value is 1.
- */
-int tcpip_put(COMSTACK h, char *buf, int size)
-{
-    int res;
-    struct tcpip_state *state = (struct tcpip_state *)h->cprivate;
-
-    TRC(fprintf(stderr, "tcpip_put: size=%d\n", size));
-    h->io_pending = 0;
-    h->event = CS_DATA;
-    if (state->towrite < 0)
-    {
-        state->towrite = size;
-        state->written = 0;
-    }
-    else if (state->towrite != size)
-    {
-        h->cerrno = CSWRONGBUF;
-        return -1;
-    }
-    while (state->towrite > state->written)
-    {
-       if ((res =
-            send(h->iofile, buf + state->written, size -
-                 state->written, 
-#ifdef MSG_NOSIGNAL
-                 MSG_NOSIGNAL
-#else
-                 0
-#endif
-                )) < 0)
-       {
-           if (
-#ifdef WIN32
-               WSAGetLastError() == WSAEWOULDBLOCK
-#else
-               yaz_errno() == EWOULDBLOCK 
-#ifdef EAGAIN
-#if EAGAIN != EWOULDBLOCK
-             || yaz_errno() == EAGAIN
-#endif
-#endif
-#ifdef __sun__
-                || yaz_errno() == ENOENT /* Sun's sometimes set errno to this value! */
-#endif
-               || yaz_errno() == EINPROGRESS
-#endif
-               )
-           {
-               TRC(fprintf(stderr, "  Flow control stop\n"));
-               h->io_pending = CS_WANT_WRITE;
-               return 1;
-           }
-           h->cerrno = CSYSERR;
-           return -1;
-       }
-       state->written += res;
-       TRC(fprintf(stderr, "  Wrote %d, written=%d, nbytes=%d\n",
-                   res, state->written, size));
-    }
-    state->towrite = state->written = -1;
-    TRC(fprintf(stderr, "  Ok\n"));
-    return 0;
-}
-
-
-#if HAVE_OPENSSL_SSL_H
-/*
- * Returns 1, 0 or -1
- * In nonblocking mode, you must call again with same buffer while
- * return value is 1.
- */
-int ssl_put(COMSTACK h, char *buf, int size)
-{
-    int res;
-    struct tcpip_state *state = (struct tcpip_state *)h->cprivate;
-
-    TRC(fprintf(stderr, "ssl_put: size=%d\n", size));
-    h->io_pending = 0;
-    h->event = CS_DATA;
-    if (state->towrite < 0)
-    {
-        state->towrite = size;
-        state->written = 0;
-    }
-    else if (state->towrite != size)
-    {
-        h->cerrno = CSWRONGBUF;
-        return -1;
-    }
-    while (state->towrite > state->written)
-    {
-       res = SSL_write (state->ssl, buf + state->written,
-                        size - state->written);
-       if (res <= 0)
-       {
-           int ssl_err = SSL_get_error(state->ssl, res);
-           if (ssl_err == SSL_ERROR_WANT_READ)
-           {
-               h->io_pending = CS_WANT_READ;
-               return 1;
-           }
-           if (ssl_err == SSL_ERROR_WANT_WRITE)
-           {
-               h->io_pending = CS_WANT_WRITE;
-               return 1;
-           }
-           h->cerrno = CSERRORSSL;
-           return -1;
-       }
-       state->written += res;
-       TRC(fprintf(stderr, "  Wrote %d, written=%d, nbytes=%d\n",
-                   res, state->written, size));
-    }
-    state->towrite = state->written = -1;
-    TRC(fprintf(stderr, "  Ok\n"));
-    return 0;
-}
-#endif
-
-int tcpip_close(COMSTACK h)
-{
-    tcpip_state *sp = (struct tcpip_state *)h->cprivate;
-
-    TRC(fprintf(stderr, "tcpip_close\n"));
-    if (h->iofile != -1)
-    {
-#if HAVE_OPENSSL_SSL_H
-       if (sp->ssl)
-       {
-           SSL_shutdown (sp->ssl);
-       }
-#endif
-#ifdef WIN32
-        closesocket(h->iofile);
-#else
-        close(h->iofile);
-#endif
-    }
-    if (sp->altbuf)
-        xfree(sp->altbuf);
-#if HAVE_OPENSSL_SSL_H
-    if (sp->ssl)
-    {
-       TRC (fprintf(stderr, "SSL_free\n"));
-       SSL_free (sp->ssl);
-    }
-    sp->ssl = 0;
-    if (sp->ctx_alloc)
-       SSL_CTX_free (sp->ctx_alloc);
-#endif
-    xfree(sp);
-    xfree(h);
-    return 0;
-}
-
-char *tcpip_addrstr(COMSTACK h)
-{
-    struct sockaddr_in addr;
-    tcpip_state *sp = (struct tcpip_state *)h->cprivate;
-    char *r = 0, *buf = sp->buf;
-    YAZ_SOCKLEN_T len;
-    struct hostent *host;
-    
-    len = sizeof(addr);
-    if (getpeername(h->iofile, (struct sockaddr*) &addr, &len) < 0)
-    {
-       h->cerrno = CSYSERR;
-       return 0;
-    }
-    if (!(h->blocking&2)) {
-        if ((host = gethostbyaddr((char*)&addr.sin_addr, sizeof(addr.sin_addr),
-                             AF_INET)))
-           r = (char*) host->h_name;
-    }
-    if (!r)
-       r = inet_ntoa(addr.sin_addr);
-    if (h->protocol == PROTO_HTTP)
-        sprintf(buf, "http:%s", r);
-    else
-        sprintf(buf, "tcp:%s", r);
-#if HAVE_OPENSSL_SSL_H
-    if (sp->ctx)
-    {
-        if (h->protocol == PROTO_HTTP)
-            sprintf(buf, "https:%s", r);
-        else
-            sprintf(buf, "ssl:%s", r);
-    }
-#endif
-    return buf;
-}
-
-int static tcpip_set_blocking(COMSTACK p, int blocking)
-{
-    unsigned long flag;
-    
-    if (p->blocking == blocking)
-       return 1;
-#ifdef WIN32
-    flag = 1;
-    if (ioctlsocket(p->iofile, FIONBIO, &flag) < 0)
-       return 0;
-#else
-    flag = fcntl(p->iofile, F_GETFL, 0);
-    if(!(blocking&1))
-       flag = flag & ~O_NONBLOCK;
-    else
-        flag = flag | O_NONBLOCK;
-    if (fcntl(p->iofile, F_SETFL, flag) < 0)
-       return 0;
-#endif
-    p->blocking = blocking;
-    return 1;
-}
diff --git a/comstack/unix.c b/comstack/unix.c
deleted file mode 100644 (file)
index 4efed27..0000000
+++ /dev/null
@@ -1,601 +0,0 @@
-/*
- * Copyright (c) 1995-2003, Index Data
- * See the file LICENSE for details.
- *
- * $Id: unix.c,v 1.14 2003-10-08 21:47:15 adam Exp $
- * UNIX socket COMSTACK. By Morten Bøgeskov.
- */
-#ifndef WIN32
-
-#include <stdio.h>
-#include <string.h>
-#include <stdlib.h>
-#include <unistd.h>
-#include <errno.h>
-#include <fcntl.h>
-#include <signal.h>
-
-#include <sys/socket.h>
-#include <sys/stat.h>
-#include <sys/un.h>
-
-#include <yaz/comstack.h>
-#include <yaz/unix.h>
-#include <yaz/log.h>
-#include <yaz/nmem.h>
-
-#ifndef YAZ_SOCKLEN_T
-#define YAZ_SOCKLEN_T int
-#endif
-
-static int unix_close(COMSTACK h);
-static int unix_put(COMSTACK h, char *buf, int size);
-static int unix_get(COMSTACK h, char **buf, int *bufsize);
-static int unix_connect(COMSTACK h, void *address);
-static int unix_more(COMSTACK h);
-static int unix_rcvconnect(COMSTACK h);
-static int unix_bind(COMSTACK h, void *address, int mode);
-static int unix_listen(COMSTACK h, char *raddr, int *addrlen,
-               int (*check_ip)(void *cd, const char *a, int len, int type),
-               void *cd);
-static int unix_set_blocking(COMSTACK p, int blocking);
-
-static COMSTACK unix_accept(COMSTACK h);
-static char *unix_addrstr(COMSTACK h);
-static void *unix_straddr(COMSTACK h, const char *str);
-
-#ifndef SUN_LEN
-#define SUN_LEN(ptr) ((size_t) (((struct sockaddr_un *) 0)->sun_path) \
-                     + strlen ((ptr)->sun_path))
-#endif
-#if 0
-#define TRC(x) x
-#else
-#define TRC(X)
-#endif
-
-/* this state is used for both SSL and straight TCP/IP */
-typedef struct unix_state
-{
-    char *altbuf; /* alternate buffer for surplus data */
-    int altsize;  /* size as xmalloced */
-    int altlen;   /* length of data or 0 if none */
-
-    int written;  /* -1 if we aren't writing */
-    int towrite;  /* to verify against user input */
-    int (*complete)(const unsigned char *buf, int len); /* length/comple. */
-    struct sockaddr_un addr;  /* returned by cs_straddr */
-    char buf[128]; /* returned by cs_addrstr */
-} unix_state;
-
-static int unix_init (void)
-{
-    return 1;
-}
-
-/*
- * This function is always called through the cs_create() macro.
- * s >= 0: socket has already been established for us.
- */
-COMSTACK unix_type(int s, int blocking, int protocol, void *vp)
-{
-    COMSTACK p;
-    unix_state *state;
-    int new_socket;
-
-    if (!unix_init ())
-       return 0;
-    if (s < 0)
-    {
-       if ((s = socket(AF_UNIX, SOCK_STREAM, 0)) < 0)
-           return 0;
-       new_socket = 1;
-    }
-    else
-       new_socket = 0;
-    if (!(p = (struct comstack *)xmalloc(sizeof(struct comstack))))
-       return 0;
-    if (!(state = (struct unix_state *)(p->cprivate =
-                                       xmalloc(sizeof(unix_state)))))
-       return 0;
-
-    if (!((p->blocking = blocking)&1))
-    {
-       if (fcntl(s, F_SETFL, O_NONBLOCK) < 0)
-           return 0;
-#ifndef MSG_NOSIGNAL
-       signal (SIGPIPE, SIG_IGN);
-#endif
-    }
-
-    p->io_pending = 0;
-    p->iofile = s;
-    p->type = unix_type;
-    p->protocol = (enum oid_proto) protocol;
-
-    p->f_connect = unix_connect;
-    p->f_rcvconnect = unix_rcvconnect;
-    p->f_get = unix_get;
-    p->f_put = unix_put;
-    p->f_close = unix_close;
-    p->f_more = unix_more;
-    p->f_bind = unix_bind;
-    p->f_listen = unix_listen;
-    p->f_accept = unix_accept;
-    p->f_addrstr = unix_addrstr;
-    p->f_straddr = unix_straddr;
-    p->f_set_blocking = unix_set_blocking;
-
-    p->state = new_socket ? CS_ST_UNBND : CS_ST_IDLE; /* state of line */
-    p->event = CS_NONE;
-    p->cerrno = 0;
-    p->stackerr = 0;
-
-    state->altbuf = 0;
-    state->altsize = state->altlen = 0;
-    state->towrite = state->written = -1;
-    if (protocol == PROTO_WAIS)
-       state->complete = completeWAIS;
-    else
-       state->complete = cs_complete_auto;
-
-    p->timeout = COMSTACK_DEFAULT_TIMEOUT;
-    TRC(fprintf(stderr, "Created new UNIX comstack\n"));
-
-    return p;
-}
-
-
-static int unix_strtoaddr_ex(const char *str, struct sockaddr_un *add)
-{
-    char *cp;
-    if (!unix_init ())
-       return 0;
-    TRC(fprintf(stderr, "unix_strtoaddress: %s\n", str ? str : "NULL"));
-    add->sun_family = AF_UNIX;
-    strncpy(add->sun_path, str, sizeof(add->sun_path));
-    cp = strchr (add->sun_path, ':');
-    if (cp)
-       *cp = '\0';
-    return 1;
-}
-
-static void *unix_straddr(COMSTACK h, const char *str)
-{
-    unix_state *sp = (unix_state *)h->cprivate;
-
-    TRC(fprintf(stderr, "unix_straddr: %s\n", str ? str : "NULL"));
-
-    if (!unix_strtoaddr_ex (str, &sp->addr))
-       return 0;
-    return &sp->addr;
-}
-
-struct sockaddr_un *unix_strtoaddr(const char *str)
-{
-    static struct sockaddr_un add;
-
-    TRC(fprintf(stderr, "unix_strtoaddr: %s\n", str ? str : "NULL"));
-
-    if (!unix_strtoaddr_ex (str, &add))
-       return 0;
-    return &add;
-}
-
-static int unix_more(COMSTACK h)
-{
-    unix_state *sp = (unix_state *)h->cprivate;
-
-    return sp->altlen && (*sp->complete)((unsigned char *) sp->altbuf,
-                                        sp->altlen);
-}
-
-/*
- * connect(2) will block (sometimes) - nothing we can do short of doing
- * weird things like spawning subprocesses or threading or some weird junk
- * like that.
- */
-static int unix_connect(COMSTACK h, void *address)
-{
-    struct sockaddr_un *add = (struct sockaddr_un *)address;
-    int r;
-
-    TRC(fprintf(stderr, "unix_connect\n"));
-    h->io_pending = 0;
-    if (h->state != CS_ST_UNBND)
-    {
-       h->cerrno = CSOUTSTATE;
-       return -1;
-    }
-    r = connect(h->iofile, (struct sockaddr *) add, SUN_LEN(add));
-    if (r < 0)
-    {
-       if (yaz_errno() == EINPROGRESS)
-       {
-           h->event = CS_CONNECT;
-           h->state = CS_ST_CONNECTING;
-           h->io_pending = CS_WANT_WRITE|CS_WANT_READ;
-           return 1;
-       }
-       h->cerrno = CSYSERR;
-       return -1;
-    }
-    h->event = CS_CONNECT;
-    h->state = CS_ST_CONNECTING;
-
-    return unix_rcvconnect (h);
-}
-
-/*
- * nop
- */
-static int unix_rcvconnect(COMSTACK h)
-{
-    TRC(fprintf(stderr, "unix_rcvconnect\n"));
-
-    if (h->state == CS_ST_DATAXFER)
-       return 0;
-    if (h->state != CS_ST_CONNECTING)
-    {
-       h->cerrno = CSOUTSTATE;
-       return -1;
-    }
-    h->event = CS_DATA;
-    h->state = CS_ST_DATAXFER;
-    return 0;
-}
-
-#define CERTF "ztest.pem"
-#define KEYF "ztest.pem"
-
-static int unix_bind(COMSTACK h, void *address, int mode)
-{
-    struct sockaddr *addr = (struct sockaddr *)address;
-    const char * path = ((struct sockaddr_un *)addr)->sun_path;
-    struct stat stat_buf;
-
-    TRC (fprintf (stderr, "unix_bind\n"));
-
-    if(stat(path, &stat_buf) != -1) {
-       struct sockaddr_un socket_unix;
-       int socket_out = -1;
-       if(! S_ISSOCK(stat_buf.st_mode)) {
-           h->cerrno = CSYSERR;
-           yaz_set_errno(EEXIST); /* Not a socket (File exists) */
-           return -1;
-       }
-       if((socket_out = socket(AF_UNIX, SOCK_STREAM, 0)) < 0) {
-           h->cerrno = CSYSERR;
-           return -1;
-       }
-       socket_unix.sun_family = AF_UNIX;
-       strncpy(socket_unix.sun_path, path, sizeof(socket_unix.sun_path));
-       if(connect(socket_out, (struct sockaddr *) &socket_unix, SUN_LEN(&socket_unix)) < 0) {
-           if(yaz_errno() == ECONNREFUSED) {
-               TRC (fprintf (stderr, "Socket exists but nobody is listening\n"));
-           } else {
-               h->cerrno = CSYSERR;
-               return -1;
-           }
-       } else {
-           close(socket_out);
-           h->cerrno = CSYSERR;
-           yaz_set_errno(EADDRINUSE);
-           return -1;
-       }
-       unlink(path);
-    }
-
-    if (bind(h->iofile, (struct sockaddr *) addr, SUN_LEN((struct sockaddr_un *)addr)))
-    {
-       h->cerrno = CSYSERR;
-       return -1;
-    }
-    chmod(path, 0777);
-    if (mode == CS_SERVER && listen(h->iofile, 3) < 0)
-    {
-       h->cerrno = CSYSERR;
-       return -1;
-    }
-    h->state = CS_ST_IDLE;
-    h->event = CS_LISTEN;
-    return 0;
-}
-
-static int unix_listen(COMSTACK h, char *raddr, int *addrlen,
-                    int (*check_ip)(void *cd, const char *a, int len, int t),
-                   void *cd)
-{
-    struct sockaddr_un addr;
-    YAZ_SOCKLEN_T len = sizeof(addr);
-
-    TRC(fprintf(stderr, "unix_listen pid=%d\n", getpid()));
-    if (h->state != CS_ST_IDLE)
-    {
-       h->cerrno = CSOUTSTATE;
-       return -1;
-    }
-    h->newfd = accept(h->iofile, (struct sockaddr*)&addr, &len);
-    if (h->newfd < 0)
-    {
-       if (
-           yaz_errno() == EWOULDBLOCK
-#ifdef EAGAIN
-#if EAGAIN != EWOULDBLOCK
-           || yaz_errno() == EAGAIN
-#endif
-#endif
-           )
-           h->cerrno = CSNODATA;
-       else
-           h->cerrno = CSYSERR;
-       return -1;
-    }
-    if (addrlen && (size_t) (*addrlen) >= sizeof(struct sockaddr_un))
-       memcpy(raddr, &addr, *addrlen = sizeof(struct sockaddr_un));
-    else if (addrlen)
-       *addrlen = 0;
-    h->state = CS_ST_INCON;
-    return 0;
-}
-
-static COMSTACK unix_accept(COMSTACK h)
-{
-    COMSTACK cnew;
-    unix_state *state, *st = (unix_state *)h->cprivate;
-
-    TRC(fprintf(stderr, "unix_accept\n"));
-    if (h->state == CS_ST_INCON)
-    {
-       if (!(cnew = (COMSTACK)xmalloc(sizeof(*cnew))))
-       {
-           h->cerrno = CSYSERR;
-           close(h->newfd);
-           h->newfd = -1;
-           return 0;
-       }
-       memcpy(cnew, h, sizeof(*h));
-       cnew->iofile = h->newfd;
-       cnew->io_pending = 0;
-       if (!(state = (unix_state *)
-             (cnew->cprivate = xmalloc(sizeof(unix_state)))))
-       {
-           h->cerrno = CSYSERR;
-           if (h->newfd != -1)
-           {
-               close(h->newfd);
-               h->newfd = -1;
-           }
-           return 0;
-       }
-       if (!(cnew->blocking&1) && 
-            (fcntl(cnew->iofile, F_SETFL, O_NONBLOCK) < 0)
-           )
-       {
-           h->cerrno = CSYSERR;
-           if (h->newfd != -1)
-           {
-               close(h->newfd);
-               h->newfd = -1;
-           }
-           xfree (cnew);
-           xfree (state);
-           return 0;
-       }
-       h->newfd = -1;
-       state->altbuf = 0;
-       state->altsize = state->altlen = 0;
-       state->towrite = state->written = -1;
-       state->complete = st->complete;
-       memcpy(&state->addr, &st->addr, sizeof(state->addr));
-       cnew->state = CS_ST_ACCEPT;
-       cnew->event = CS_NONE;
-       h->state = CS_ST_IDLE;
-
-       h = cnew;
-    }
-    if (h->state == CS_ST_ACCEPT)
-    {
-    }
-    else
-    {
-       h->cerrno = CSOUTSTATE;
-       return 0;
-    }
-    h->io_pending = 0;
-    h->state = CS_ST_DATAXFER;
-    h->event = CS_DATA;
-    return h;
-}
-
-#define CS_UNIX_BUFCHUNK 4096
-
-/*
- * Return: -1 error, >1 good, len of buffer, ==1 incomplete buffer,
- * 0=connection closed.
- */
-static int unix_get(COMSTACK h, char **buf, int *bufsize)
-{
-    unix_state *sp = (unix_state *)h->cprivate;
-    char *tmpc;
-    int tmpi, berlen, rest, req, tomove;
-    int hasread = 0, res;
-
-    TRC(fprintf(stderr, "unix_get: bufsize=%d\n", *bufsize));
-    if (sp->altlen) /* switch buffers */
-    {
-       TRC(fprintf(stderr, "  %d bytes in altbuf (0x%x)\n", sp->altlen,
-                   (unsigned) sp->altbuf));
-       tmpc = *buf;
-       tmpi = *bufsize;
-       *buf = sp->altbuf;
-       *bufsize = sp->altsize;
-       hasread = sp->altlen;
-       sp->altlen = 0;
-       sp->altbuf = tmpc;
-       sp->altsize = tmpi;
-    }
-    h->io_pending = 0;
-    while (!(berlen = (*sp->complete)((unsigned char *)*buf, hasread)))
-    {
-       if (!*bufsize)
-       {
-           if (!(*buf = (char *)xmalloc(*bufsize = CS_UNIX_BUFCHUNK)))
-               return -1;
-       }
-       else if (*bufsize - hasread < CS_UNIX_BUFCHUNK)
-           if (!(*buf =(char *)xrealloc(*buf, *bufsize *= 2)))
-               return -1;
-       res = recv(h->iofile, *buf + hasread, CS_UNIX_BUFCHUNK, 0);
-       TRC(fprintf(stderr, "  recv res=%d, hasread=%d\n", res, hasread));
-       if (res < 0)
-       {
-           if (yaz_errno() == EWOULDBLOCK
-#ifdef EAGAIN
-#if EAGAIN != EWOULDBLOCK
-               || yaz_errno() == EAGAIN
-#endif
-#endif
-               || yaz_errno() == EINPROGRESS
-               )
-           {
-               h->io_pending = CS_WANT_READ;
-               break;
-           }
-           else if (yaz_errno() == 0)
-               continue;
-           else
-               return -1;
-       }
-       else if (!res)
-           return 0;
-       hasread += res;
-    }
-    TRC (fprintf (stderr, "  Out of read loop with hasread=%d, berlen=%d\n",
-                 hasread, berlen));
-    /* move surplus buffer (or everything if we didn't get a BER rec.) */
-    if (hasread > berlen)
-    {
-       tomove = req = hasread - berlen;
-       rest = tomove % CS_UNIX_BUFCHUNK;
-       if (rest)
-           req += CS_UNIX_BUFCHUNK - rest;
-       if (!sp->altbuf)
-       {
-           if (!(sp->altbuf = (char *)xmalloc(sp->altsize = req)))
-               return -1;
-       } else if (sp->altsize < req)
-           if (!(sp->altbuf =(char *)xrealloc(sp->altbuf, sp->altsize = req)))
-               return -1;
-       TRC(fprintf(stderr, "  Moving %d bytes to altbuf(0x%x)\n", tomove,
-                   (unsigned) sp->altbuf));
-       memcpy(sp->altbuf, *buf + berlen, sp->altlen = tomove);
-    }
-    if (berlen < CS_UNIX_BUFCHUNK - 1)
-       *(*buf + berlen) = '\0';
-    return berlen ? berlen : 1;
-}
-
-
-
-/*
- * Returns 1, 0 or -1
- * In nonblocking mode, you must call again with same buffer while
- * return value is 1.
- */
-static int unix_put(COMSTACK h, char *buf, int size)
-{
-    int res;
-    struct unix_state *state = (struct unix_state *)h->cprivate;
-
-    TRC(fprintf(stderr, "unix_put: size=%d\n", size));
-    h->io_pending = 0;
-    h->event = CS_DATA;
-    if (state->towrite < 0)
-    {
-       state->towrite = size;
-       state->written = 0;
-    }
-    else if (state->towrite != size)
-    {
-       h->cerrno = CSWRONGBUF;
-       return -1;
-    }
-    while (state->towrite > state->written)
-    {
-       if ((res =
-            send(h->iofile, buf + state->written, size -
-                 state->written,
-#ifdef MSG_NOSIGNAL
-                 MSG_NOSIGNAL
-#else
-                 0
-#endif
-                )) < 0)
-       {
-           if (
-               yaz_errno() == EWOULDBLOCK
-#ifdef EAGAIN
-#if EAGAIN != EWOULDBLOCK
-               || yaz_errno() == EAGAIN
-#endif
-#endif
-               )
-           {
-               TRC(fprintf(stderr, "  Flow control stop\n"));
-               h->io_pending = CS_WANT_WRITE;
-               return 1;
-           }
-           h->cerrno = CSYSERR;
-           return -1;
-       }
-       state->written += res;
-       TRC(fprintf(stderr, "  Wrote %d, written=%d, nbytes=%d\n",
-                   res, state->written, size));
-    }
-    state->towrite = state->written = -1;
-    TRC(fprintf(stderr, "  Ok\n"));
-    return 0;
-}
-
-static int unix_close(COMSTACK h)
-{
-    unix_state *sp = (struct unix_state *)h->cprivate;
-
-    TRC(fprintf(stderr, "unix_close\n"));
-    if (h->iofile != -1)
-    {
-       close(h->iofile);
-    }
-    if (sp->altbuf)
-       xfree(sp->altbuf);
-    xfree(sp);
-    xfree(h);
-    return 0;
-}
-
-static char *unix_addrstr(COMSTACK h)
-{
-    unix_state *sp = (struct unix_state *)h->cprivate;
-    char *buf = sp->buf;
-    sprintf(buf, "unix:%s", sp->addr.sun_path);
-    return buf;
-}
-
-static int unix_set_blocking(COMSTACK p, int blocking)
-{
-    unsigned long flag;
-
-    if (p->blocking == blocking)
-       return 1;
-    flag = fcntl(p->iofile, F_GETFL, 0);
-    if(!blocking)
-       flag = flag & ~O_NONBLOCK;
-    else
-       flag = flag | O_NONBLOCK;
-    if (fcntl(p->iofile, F_SETFL, flag) < 0)
-       return 0;
-    p->blocking = blocking;
-    return 1;
-}
-#endif
diff --git a/comstack/waislen.c b/comstack/waislen.c
deleted file mode 100644 (file)
index 0bf2ef6..0000000
+++ /dev/null
@@ -1,46 +0,0 @@
-/*
- * Copyright (c) 1995-1999, Index Data.
- * See the file LICENSE for details.
- * Sebastian Hammer, Adam Dickmeiss
- *
- * $Log: waislen.c,v $
- * Revision 1.5  1999-11-30 13:47:11  adam
- * Improved installation. Moved header files to include/yaz.
- *
- * Revision 1.4  1999/01/08 11:23:15  adam
- * Added const modifier to some of the BER/ODR encoding routines.
- *
- * Revision 1.3  1996/02/29 14:23:13  adam
- * Bug fix.
- *
- * Revision 1.2  1996/02/26  18:34:44  adam
- * Bug fix.
- *
- * Revision 1.1  1996/02/20  13:02:58  quinn
- * Wais length.
- *
- *
- */
-
-#include <stdio.h>
-#include <yaz/comstack.h>
-#include <yaz/tcpip.h>
-/*
- * Return length of WAIS package or 0
- */
-int completeWAIS(const unsigned char *buf, int len)
-{
-    int i, lval = 0;
-
-    if (len < 25)
-       return 0;
-    if (*buf != '0')
-       return 0;
-    /* calculate length */
-    for (i = 0; i < 10; i++)
-       lval = lval * 10 + (buf[i] - '0');
-    lval += 25;
-    if (len >= lval)
-       return lval;
-    return 0;
-}
diff --git a/comstack/xmosi.c b/comstack/xmosi.c
deleted file mode 100644 (file)
index 4e56b12..0000000
+++ /dev/null
@@ -1,543 +0,0 @@
-/*
- * Copyright (c) 1995, Index Data
- * See the file LICENSE for details.
- * Sebastian Hammer, Adam Dickmeiss
- *
- * $Log: xmosi.c,v $
- * Revision 1.17  1999-06-16 11:55:24  adam
- * Added APDU log to client.
- *
- * Revision 1.16  1997/09/17 12:10:30  adam
- * YAZ version 1.4.
- *
- * Revision 1.15  1997/05/14 06:53:34  adam
- * C++ support.
- *
- * Revision 1.14  1996/07/26 12:34:07  quinn
- * Porting.
- *
- * Revision 1.13  1996/07/06  19:58:30  quinn
- * System headerfiles gathered in yconfig
- *
- * Revision 1.12  1996/05/22  08:34:44  adam
- * Added ifdef USE_XTIMOSI; so that 'make depend' works.
- *
- * Revision 1.11  1996/02/23 10:00:41  quinn
- * WAIS Work
- *
- * Revision 1.10  1996/02/10  12:23:13  quinn
- * Enablie inetd operations fro TCP/IP stack
- *
- * Revision 1.9  1996/01/02  08:57:28  quinn
- * Changed enums in the ASN.1 .h files to #defines. Changed oident.class to oclass
- *
- * Revision 1.8  1995/11/01  13:54:29  quinn
- * Minor adjustments
- *
- * Revision 1.7  1995/10/30  12:41:17  quinn
- * Added hostname lookup for server.
- *
- * Revision 1.6  1995/09/29  17:12:00  quinn
- * Smallish
- *
- * Revision 1.5  1995/09/28  10:24:32  quinn
- * Windows changes
- *
- * Revision 1.4  1995/09/27  15:02:45  quinn
- * Modified function heads & prototypes.
- *
- * Revision 1.3  1995/06/16  10:30:38  quinn
- * Added REUSEADDR.
- *
- * Revision 1.2  1995/06/15  12:30:07  quinn
- * Added @ as hostname alias for INADDR ANY.
- *
- * Revision 1.1  1995/06/14  09:58:20  quinn
- * Renamed yazlib to comstack.
- *
- * Revision 1.15  1995/05/29  08:12:33  quinn
- * Updates to aynch. operations.
- *
- * Revision 1.14  1995/05/16  09:37:31  quinn
- * Fixed bug
- *
- * Revision 1.13  1995/05/16  08:51:19  quinn
- * License, documentation, and memory fixes
- *
- * Revision 1.12  1995/05/02  08:53:24  quinn
- * Trying in vain to fix comm with ISODE
- *
- * Revision 1.11  1995/04/21  16:32:08  quinn
- * *** empty log message ***
- *
- * Revision 1.10  1995/03/27  08:36:14  quinn
- * Some work on nonblocking operation in xmosi.c and rfct.c.
- * Added protocol parameter to cs_create()
- *
- * Revision 1.9  1995/03/20  09:47:23  quinn
- * Added server-side support to xmosi.c
- * Fixed possible problems in rfct
- * Other little mods
- *
- * Revision 1.8  1995/03/16  13:29:30  quinn
- * Beginning to add server-side functions
- *
- * Revision 1.7  1995/03/14  10:28:47  quinn
- * Adding server-side support to tcpip.c and fixing bugs in nonblocking I/O
- *
- * Revision 1.6  1995/03/09  15:22:43  quinn
- * Fixed two bugs in get/rcv
- *
- * Revision 1.5  1995/03/07  16:29:47  quinn
- * Various fixes.
- *
- * Revision 1.4  1995/03/07  10:26:56  quinn
- * Initialized type field in the comstacks.
- *
- * Revision 1.3  1995/03/06  16:48:03  quinn
- * Smallish changes.
- *
- * Revision 1.2  1995/03/06  10:54:41  quinn
- * Server-side functions (t_bind/t_listen/t_accept) seem to work ok, now.
- * Nonblocking mode needs work (and testing!)
- * Added makensap to replace function in mosiutil.c.
- *
- * Revision 1.1  1995/03/01  08:40:33  quinn
- * First working version of rfct. Addressing needs work.
- *
- */
-
-#ifdef USE_XTIMOSI
-/*
- * Glue layer for Peter Furniss' xtimosi package.
- */
-
-#include <fcntl.h>
-#include <stdlib.h>
-#include <string.h>
-#include <assert.h>
-
-#define YNETINCLUDE
-#include <yconfig.h>
-
-#include <comstack.h>
-#include <xmosi.h>
-
-#include <oid.h>
-
-int mosi_connect(COMSTACK h, void *address);
-int mosi_get(COMSTACK h, char **buf, int *bufsize);
-int mosi_put(COMSTACK h, char *buf, int size);
-int mosi_more(COMSTACK h) { return 0; } /* not correct */
-int mosi_close(COMSTACK h);
-int mosi_rcvconnect(COMSTACK h);
-int mosi_bind(COMSTACK h, void *address, int mode);
-int mosi_listen(COMSTACK h, char *addrp, int *addrlen);
-COMSTACK mosi_accept(COMSTACK h);
-char *mosi_addrstr(COMSTACK h);
-void *mosi_straddr(COMSTACK h, const char *str);
-
-typedef struct mosi_state
-{
-    struct t_info info;        /* data returned by t_open */
-    struct t_call *call;
-    int hasread;               /* how many bytes read of current PDU */
-    int haswrit;               /* how many bytes have we written */
-    struct netbuf netbuf;
-} mosi_state;
-
-static char *oidtostr(int *o)
-{
-    static char buf[512];
-
-    buf[0] = '\0';
-    while (*o >= 0)
-    {
-       sprintf(buf + strlen(buf), "%d", *o);
-       if (*(++o) >= 0)
-           strcat(buf, " ");
-    }
-    return buf;
-}
-
-static int addopt(struct netbuf *optbuf, unsigned long level, unsigned long
-    name, enum oid_proto proto, enum oid_class class, enum oid_value value)
-{
-    int *oid;
-    oident ent;
-    char *str;
-
-    ent.proto = proto;
-    ent.oclass = class;
-    ent.value = value;
-    if (!(oid = oid_getoidbyent(&ent)))
-       return -1;
-    str = oidtostr(oid);
-    if (addoidoption(optbuf, level, name, str) < 0)
-       return -1;
-    return 0;
-}
-
-COMSTACK mosi_type(int s, int blocking, int protocol)
-{
-    COMSTACK r;
-    mosi_state *state;
-    int flags = O_RDWR;
-
-    if (s >= 0)
-       return 0;
-
-    if (!(r = xmalloc(sizeof(*r))))
-       return 0;
-    if (!(state = r->cprivate = xmalloc(sizeof(*state))))
-       return 0;
-
-    state->call = 0;
-    state->hasread = 0;
-    state->haswrit = 0;
-    r->protocol = protocol;
-    r->state = CS_UNBND;
-    r->type = mosi_type;
-    r->blocking = blocking;
-    r->f_connect = mosi_connect;
-    r->f_put = mosi_put;
-    r->f_get = mosi_get;
-    r->f_close = mosi_close;
-    r->f_more = mosi_more;
-    r->f_rcvconnect = mosi_rcvconnect;
-    r->f_bind = mosi_bind;
-    r->f_listen = mosi_listen;
-    r->f_accept = mosi_accept;
-    r->f_addrstr = mosi_addrstr;
-    r->r_straddr = mosi_straddr;
-
-    if (!blocking)
-       flags |= O_NONBLOCK;
-    if ((r->iofile = u_open(CO_MOSI_NAME, flags, &state->info)) < 0)
-       return 0;
-
-    r->timeout = COMSTACK_DEFAULT_TIMEOUT;
-
-    return r;
-}
-
-int hex2oct(char *hex, char *oct)
-{
-    int len = 0;
-    unsigned val;
-
-    while (sscanf(hex, "%2x", &val) == 1)
-    {
-       if (strlen(hex) < 2)
-           return -1;
-       *((unsigned char*) oct++) = (unsigned char) val;
-       len++;
-       hex += 2;
-    }
-    return len;
-}
-
-/*
- * addressing specific to our hack of OSI transport. A sockaddr_in wrapped
- * up in a t_mosiaddr in a netbuf (on a stick).
- */
-
-int *mosi_strtoaddr_ex(const char *str, struct netbuf *ret)
-{
-    struct sockaddr_in *add = xmalloc(sizeof(struct sockaddr_in));
-    struct t_mosiaddr *mosiaddr = xmalloc(sizeof(struct t_mosiaddr));
-    struct hostent *hp;
-    char *p, *b, buf[512], *nsap;
-    short int port = 102;
-    unsigned long tmpadd;
-    int ll = 0;
-
-    assert(ret && add && mosiaddr);
-#if 0
-    mosiaddr->osi_ap_inv_id = NO_INVOKEID;
-    mosiaddr->osi_ae_inv_id = NO_INVOKEID;
-#endif
-    mosiaddr->osi_apt_len = 0;
-    mosiaddr->osi_aeq_len = 0;
-    p = (char*)MOSI_PADDR(mosiaddr);
-    *(p++) = 0; /* No presentation selector */
-    ll++;
-    *(p++) = 0; /* no session selector */
-    ll++;
-    /* do we have a transport selector? */
-    strcpy(buf, str);
-    if ((nsap = strchr(buf, '/')))
-    {
-       *(nsap++) = '\0';
-       if ((*p = hex2oct(buf, p + 1)) < 0)
-           return 0;
-       ll += *p + 1;
-       p += *p + 1;
-    }
-    else
-    {
-       nsap = buf;
-       *(p++) = 0;
-       ll++;
-    }
-    if (nsap && *nsap)
-    {
-       add->sin_family = AF_INET;
-       strcpy(buf, nsap);
-       if ((b = strchr(buf, ':')))
-       {
-           *b = 0;
-           port = atoi(b + 1);
-       }
-       add->sin_port = htons(port);
-       if (!strcmp("@", buf))
-           add->sin_addr.s_addr = INADDR_ANY;
-       else if ((hp = gethostbyname(buf)))
-           memcpy(&add->sin_addr.s_addr, *hp->h_addr_list, sizeof(struct in_addr));
-       else if ((tmpadd = inet_addr(buf)) != 0)
-           memcpy(&add->sin_addr.s_addr, &tmpadd, sizeof(struct in_addr));
-       else
-           return 0;
-       *(p++) = (char) sizeof(*add);
-       ll++;
-       memcpy(p, add, sizeof(*add));
-       ll += sizeof(*add);
-    }
-    else
-    {
-       *(p++) = 0;
-       ll++;
-    }
-    mosiaddr->osi_paddr_len = ll;
-    ret->buf = (char*)mosiaddr;
-    ret->len = ret->maxlen = 100 /* sizeof(*mosiaddr) */ ;
-
-    return 1;
-}
-
-struct netbuf *mosi_strtoaddr(const char *str)
-{
-    struct netbuf *ret = xmalloc(sizeof(struct netbuf));
-
-    if (!mosi_strtoaddr_ex (str, ret))
-    {
-       xfree (ret);
-       return 0;
-    }
-    return ret;
-}
-
-struct netbuf *mosi_straddr(COMSTACK h, const char *str)
-{
-    mosi_state *st = h->cprivate;
-    struct netbuf *ret = &st->netbuf;
-
-    if (!mosi_strtoaddr_ex (str, ret))
-    {
-       xfree (ret);
-       return 0;
-    }
-    return ret;
-}
-
-int mosi_connect(COMSTACK h, void *address)
-{
-    struct netbuf *addr = address, *local;
-    struct t_call *snd, *rcv;
-    struct t_bind bnd;
-
-    if (!(snd = (struct t_call *) u_alloc(h->iofile, T_CALL, T_ALL)))
-       return -1;
-    if (!(rcv = (struct t_call *) u_alloc(h->iofile, T_CALL, T_ALL)))
-       return -1;
-
-    snd->udata.len = 0;
-    if (addopt(&snd->opt, ISO_APCO, AP_CNTX_NAME, h->protocol, CLASS_APPCTX,
-       VAL_BASIC_CTX) < 0)
-       return -1;
-    if (addopt(&snd->opt, ISO_APCO, AP_ABS_SYN, h->protocol, CLASS_ABSYN,
-       VAL_APDU) < 0)
-       return -1;
-    /*
-     * We don't specify record formats yet.
-     *
-     * Xtimosi adds the oid for BER as transfer syntax automatically.
-     */
-
-    bnd.qlen = 0;
-
-    if (h->state == CS_UNBND)
-    {
-       local = mosi_strtoaddr("");   /* not good in long run */
-       memcpy(&bnd.addr, local, sizeof(*local));
-       if (u_bind(h->iofile, &bnd, 0) < 0)
-           return -1;
-    }
-
-    memcpy(&snd->addr, addr, sizeof(*addr));
-    if (u_connect(h->iofile, snd, rcv) < 0)
-    {
-       if (t_errno == TNODATA)
-           return 1;
-       return -1; 
-    }
-    return 0;
-}
-
-int mosi_rcvconnect(COMSTACK h)
-{
-    if (u_rcvconnect(h->iofile, 0) < 0)
-    {
-       if (t_errno == TNODATA)
-           return 1;
-       return -1;
-    }
-    return 0;
-}
-
-int mosi_bind(COMSTACK h, void *address, int mode)
-{
-    int res;
-    struct t_bind bnd;
-    int one = 1;
-
-    if (setsockopt(h->iofile, SOL_SOCKET, SO_REUSEADDR, &one, sizeof(one)) < 0)
-    {
-       h->cerrno = CSYSERR;
-       return -1;
-    }
-    if (mode == CS_SERVER)
-       bnd.qlen = 3;
-    else
-       bnd.qlen = 0;
-    memcpy(&bnd.addr, address, sizeof(struct netbuf));
-    if ((res = u_bind(h->iofile, &bnd, 0)) < 0)
-       return -1;
-    h->state = CS_IDLE;
-    return 0;
-}
-
-int mosi_listen(COMSTACK h, char *addp, int *addrlen)
-{
-    int res;
-    mosi_state *st = h->cprivate;
-
-    if (!(st->call = (struct t_call*) t_alloc(h->iofile, T_CALL_STR,
-        T_ALL)))
-       return -1;
-    if ((res = u_listen(h->iofile, st->call)) < 0)
-    {
-       if (t_errno == TNODATA)
-           return 1;
-       return -1;
-    }
-    h->state = CS_INCON;
-    return 0;
-}
-
-COMSTACK mosi_accept(COMSTACK h)
-{
-    COMSTACK new;
-    void *local;
-    struct mosi_state *st = h->cprivate, *ns;
-    int flags = O_RDWR;
-
-    if (h->state != CS_INCON)
-    {
-       h->cerrno = CSOUTSTATE;
-       return 0;
-    }
-    if (!(new = xmalloc(sizeof(*new))))
-       return 0;
-    *new = *h;
-    if (!(new->cprivate = ns = xmalloc(sizeof(*ns))))
-       return 0;
-    *ns = *st;
-    if (!h->blocking)
-       flags |= O_NONBLOCK;
-    if ((new->iofile = u_open_r(CO_MOSI_NAME, flags, &st->info, st->call)) < 0)
-       return 0;
-    if (!(local = mosi_strtoaddr("")))
-       return 0;
-    if (mosi_bind(new, local, CS_CLIENT) < 0) /* CS_CLIENT: qlen == 0 */
-       return 0;
-    memcpy(&st->call->addr, local, sizeof(st->call->addr));
-    if (u_accept(h->iofile, new->iofile, st->call) < 0)
-    {
-       mosi_close(new);
-       return 0;
-    }
-    return new;
-}
-
-#define CS_MOSI_BUFCHUNK 4096
-
-int mosi_get(COMSTACK h, char **buf, int *bufsize)
-{
-    int flags = 0, res;
-    mosi_state *ct = h->cprivate;
-    int got;
-
-    do
-    {
-       if (!*bufsize)
-       {
-           if (!(*buf = xmalloc(*bufsize = CS_MOSI_BUFCHUNK)))
-               return -1;
-       }
-       else if (*bufsize - ct->hasread < CS_MOSI_BUFCHUNK)
-           if (!(*buf =xrealloc(*buf, *bufsize *= 2)))
-               return -1;
-
-       if ((res = u_rcv(h->iofile, *buf + ct->hasread, CS_MOSI_BUFCHUNK,
-           &flags)) <= 0)
-       {
-           if (t_errno == TNODATA)
-               return 1;
-           return -1;
-       }
-       ct->hasread += res;
-    }
-    while (flags & T_MORE);
-
-    /* all done. Reset hasread */
-    got = ct->hasread;
-    ct->hasread = 0;  
-    return got;
-}
-
-int mosi_put(COMSTACK h, char *buf, int size)
-{
-    mosi_state *ct = h->cprivate;
-    int res = u_snd(h->iofile, buf + ct->haswrit, size - ct->haswrit, 0);
-
-    if (res == size - ct->haswrit)
-    {
-       ct->haswrit = 0;
-       return 0;
-    }
-    else if (res < 0)
-    {
-       if (t_errno == TFLOW)
-           return 1;
-       return -1;
-    }
-    ct->haswrit += res;
-    return 1;
-}
-
-int mosi_close(COMSTACK h)
-{
-    xfree(h->cprivate);
-    if (h->iofile >= 0)
-       u_close(h->iofile);
-   xfree(h);
-    return 0;
-}    
-
-char *mosi_addrstr(COMSTACK h)
-{
-    return "osi:[UNIMPLEMENTED]";
-}
-
-#endif
index ac5bdc5..9dda795 100644 (file)
@@ -1,6 +1,6 @@
 dnl YAZ Toolkit, Index Data 1994-2003
 dnl See the file LICENSE for details.
 dnl YAZ Toolkit, Index Data 1994-2003
 dnl See the file LICENSE for details.
-dnl $Id: configure.in,v 1.116 2003-10-09 15:51:36 adam Exp $
+dnl $Id: configure.in,v 1.117 2003-10-27 12:21:21 adam Exp $
 AC_INIT(include/yaz/yaz-version.h)
 AM_INIT_AUTOMAKE(yaz, 2.0.5)
 AM_MAINTAINER_MODE
 AC_INIT(include/yaz/yaz-version.h)
 AM_INIT_AUTOMAKE(yaz, 2.0.5)
 AM_MAINTAINER_MODE
@@ -395,18 +395,11 @@ dnl
 AC_OUTPUT([
 Makefile
 yaz.spec
 AC_OUTPUT([
 Makefile
 yaz.spec
+src/Makefile
+test/Makefile
 util/Makefile
 util/Makefile
-odr/Makefile
-z39.50/Makefile
-ill/Makefile
-zutil/Makefile
-comstack/Makefile
-ccl/Makefile
-cql/Makefile
-server/Makefile
 include/Makefile
 include/yaz/Makefile
 include/Makefile
 include/yaz/Makefile
-lib/Makefile
 client/Makefile
 ztest/Makefile
 zoom/Makefile
 client/Makefile
 ztest/Makefile
 zoom/Makefile
@@ -419,4 +412,4 @@ doc/tkl.xsl
 doc/yazhtml.xsl
 etc/Makefile
 yaz-config
 doc/yazhtml.xsl
 etc/Makefile
 yaz-config
-],[sed s%yaz_echo_source=yes%yaz_echo_source=no%g < yaz-config > lib/yaz-config && chmod +x yaz-config lib/yaz-config])
+],[sed s%yaz_echo_source=yes%yaz_echo_source=no%g < yaz-config > util/yaz-config && chmod +x yaz-config util/yaz-config])
diff --git a/cql/.cvsignore b/cql/.cvsignore
deleted file mode 100644 (file)
index 89af58a..0000000
+++ /dev/null
@@ -1,9 +0,0 @@
-.deps
-.libs
-Makefile
-Makefile.in
-*.lo
-*.la
-cql.c
-cql2pqf
-cql2xcql
diff --git a/cql/Makefile.am b/cql/Makefile.am
deleted file mode 100644 (file)
index 62bf6aa..0000000
+++ /dev/null
@@ -1,17 +0,0 @@
-# $Id: Makefile.am,v 1.4 2003-05-27 09:47:15 mike Exp $
-AM_YFLAGS=-p cql_
-
-AM_CPPFLAGS=-I$(top_srcdir)/include
-
-noinst_LTLIBRARIES = libcql.la
-noinst_PROGRAMS = cql2pqf cql2xcql
-
-EXTRA_DIST=lexer.c
-
-libcql_la_SOURCES=cql.y cqlstdio.c cqltransform.c \
- cqlutil.c xcqlutil.c cqlstring.c cqlstrer.c
-
-cql2pqf_SOURCES = cql2pqf.c
-cql2xcql_SOURCES = cql2xcql.c
-
-LDADD=libcql.la ../util/libutil.la
diff --git a/cql/cql.y b/cql/cql.y
deleted file mode 100644 (file)
index 026dd36..0000000
--- a/cql/cql.y
+++ /dev/null
@@ -1,275 +0,0 @@
-/* $Id: cql.y,v 1.6 2003-09-04 18:13:39 adam Exp $
-   Copyright (C) 2002-2003
-   Index Data Aps
-
-This file is part of the YAZ toolkit.
-
-See the file LICENSE.
-
- bison parser for CQL grammar.
-*/
-%{
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <ctype.h>
-#include <yaz/nmem.h>
-#include <yaz/cql.h>
-    
-    typedef struct {
-        struct cql_node *rel;
-        struct cql_node *cql;
-        char *buf;
-        size_t len;
-        size_t size;
-    } token;        
-
-    struct cql_parser {
-        int (*getbyte)(void *client_data);
-        void (*ungetbyte)(int b, void *client_data);
-        void *client_data;
-        int last_error;
-        int last_pos;
-        struct cql_node *top;
-        NMEM nmem;
-    };
-
-#define YYSTYPE token
-    
-#define YYPARSE_PARAM parm
-#define YYLEX_PARAM parm
-    
-    int yylex(YYSTYPE *lval, void *vp);
-    int yyerror(char *s);
-%}
-
-%pure_parser
-%token TERM AND OR NOT PROX GE LE NE
-%expect 8
-
-%%
-
-top: { 
-    $$.rel = cql_node_mk_sc("srw.serverChoice", "scr", 0);
-    ((CQL_parser) parm)->top = 0;
-} cqlQuery1 {
-    cql_node_destroy($$.rel);
-    ((CQL_parser) parm)->top = $2.cql; 
-}
-;
-
-cqlQuery1: cqlQuery
-| cqlQuery error {
-    cql_node_destroy($1.cql);
-    $$.cql = 0;
-}
-;
-
-cqlQuery: 
-  searchClause
-|
-  cqlQuery boolean { 
-      $$.rel = $0.rel; 
-  } searchClause {
-      struct cql_node *cn = cql_node_mk_boolean($2.buf);
-      
-      cn->u.boolean.modifiers = $2.rel;
-      cn->u.boolean.left = $1.cql;
-      cn->u.boolean.right = $4.cql;
-
-      $$.cql = cn;
-  }
-;
-
-searchClause: 
-  '(' { 
-      $$.rel = $0.rel;
-      
-  } cqlQuery ')' {
-      $$.cql = $3.cql;
-  }
-|
-  searchTerm {
-      struct cql_node *st = cql_node_dup ($0.rel);
-      st->u.st.term = strdup($1.buf);
-      $$.cql = st;
-  }
-| 
-  index relation {
-      $$.rel = $2.rel;
-      $$.rel->u.st.index = strdup($1.buf);
-  } searchClause {
-      $$.cql = $4.cql;
-      cql_node_destroy($2.rel);
-  }
-| '>' searchTerm '=' searchTerm {
-      $$.rel = $0.rel;
-  } cqlQuery {
-    $$.cql = cql_node_prefix($6.cql, $2.buf, $4.buf);
-  }
-| '>' searchTerm {
-      $$.rel = $0.rel;
-  } cqlQuery {
-    $$.cql = cql_node_prefix($4.cql, 0, $2.buf);
-   }
-;
-
-/* unary NOT search TERM here .. */
-
-boolean: 
-  AND | OR | NOT | PROX proxqualifiers {
-      $$ = $1;
-      $$.rel = $2.rel;
-  }
-  ;
-
-proxqualifiers: 
-  Prelation { 
-      $$.rel = cql_node_mk_proxargs ($1.buf, 0, 0, 0);
-  }
-|
-  PrelationO Pdistance {
-      $$.rel = cql_node_mk_proxargs ($1.buf, $2.buf, 0, 0);
-  }
-|
-  PrelationO PdistanceO Punit {
-      $$.rel = cql_node_mk_proxargs ($1.buf, $2.buf, $3.buf, 0);
-  }
-|
-  PrelationO PdistanceO PunitO Pordering {
-      $$.rel = cql_node_mk_proxargs ($1.buf, $2.buf, $3.buf, $4.buf);
-  }
-|
-{ $$.rel = 0; }
-;
-
-Punit: '/' searchTerm { 
-      $$ = $2;
-   }
-;
-
-PunitO: '/' searchTerm {
-      $$ = $2;
-   } 
-| 
-'/' { $$.buf[0] = 0; }
-;
-Prelation: '/' baseRelation {
-    $$ = $2;
-}
-;
-PrelationO: '/' baseRelation {
-    $$ = $2;
-}
-| '/' { $$.buf[0] = 0; }
-;
-Pdistance: '/' searchTerm { 
-    $$ = $2;
-}
-;
-
-PdistanceO: '/' searchTerm {
-    $$ = $2;
-}
-| '/' { $$.buf[0] = 0; }
-;
-Pordering: '/' searchTerm { 
-    $$ = $2;
-}
-;
-
-relation: baseRelation modifiers {
-    struct cql_node *st = cql_node_mk_sc(/* index */ 0, 
-                                         /* relation */ $1.buf, 
-                                         /* term */ 0);
-
-    st->u.st.modifiers = $2.cql;
-    $$.rel = st;
-}
-;
-
-modifiers: '/' searchTerm modifiers
-{ 
-    struct cql_node *mod = cql_node_mk_mod(0, $2.buf);
-
-    mod->u.mod.next = $3.cql;
-    $$.cql = mod;
-}
-|  
-{ 
-    $$.cql = 0;
-}
-;
-
-baseRelation: 
-  '=' 
-| '>' 
-| '<'
-| GE
-| LE
-| NE
-| TERM
-;
-
-index: 
-  searchTerm;
-
-searchTerm:
-  TERM
-| AND
-| OR
-| NOT
-| PROX
-;
-
-%%
-
-int yyerror(char *s)
-{
-    return 0;
-}
-
-#include "lexer.c"
-
-
-int cql_parser_stream(CQL_parser cp,
-                      int (*getbyte)(void *client_data),
-                      void (*ungetbyte)(int b, void *client_data),
-                      void *client_data)
-{
-    cp->getbyte = getbyte;
-    cp->ungetbyte = ungetbyte;
-    cp->client_data = client_data;
-    if (cp->top)
-        cql_node_destroy(cp->top);
-    cql_parse(cp);
-    if (cp->top)
-        return 0;
-    return -1;
-}
-
-CQL_parser cql_parser_create(void)
-{
-    CQL_parser cp = (CQL_parser) malloc (sizeof(*cp));
-
-    cp->top = 0;
-    cp->getbyte = 0;
-    cp->ungetbyte = 0;
-    cp->client_data = 0;
-    cp->last_error = 0;
-    cp->last_pos = 0;
-    cp->nmem = nmem_create();
-    return cp;
-}
-
-void cql_parser_destroy(CQL_parser cp)
-{
-    cql_node_destroy(cp->top);
-    nmem_destroy(cp->nmem);
-    free (cp);
-}
-
-struct cql_node *cql_parser_result(CQL_parser cp)
-{
-    return cp->top;
-}
diff --git a/cql/cql2pqf.c b/cql/cql2pqf.c
deleted file mode 100644 (file)
index 84d8948..0000000
+++ /dev/null
@@ -1,60 +0,0 @@
-/* $Id: cql2pqf.c,v 1.2 2003-06-04 09:45:00 adam Exp $
-   Copyright (C) 2002-2003
-   Index Data Aps
-
-This file is part of the YAZ toolkit.
-
-See the file LICENSE.
-*/
-
-#include <stdlib.h>
-#include <stdio.h>
-
-#include <yaz/cql.h>
-
-int main(int argc, char **argv)
-{
-    cql_transform_t ct;
-    int r;
-    int i, it = 1;
-    CQL_parser cp = cql_parser_create();
-
-    if (argc < 2)
-    {
-        fprintf (stderr, "usage\n cqltransform <properties> [<query>] [interations]\n");
-        exit (1);
-    }
-    ct = cql_transform_open_fname(argv[1]);
-    if (!ct)
-    {
-        fprintf (stderr, "failed to read properties %s\n", argv[1]);
-        exit (1);
-    }
-    if (argc >= 4)
-        it = atoi(argv[3]);
-
-    for (i = 0; i<it; i++)
-    {
-    if (argc >= 3)
-        r = cql_parser_string(cp, argv[2]);
-    else
-        r = cql_parser_stdio(cp, stdin);
-
-    if (r)
-        fprintf (stderr, "Syntax error\n");
-    else
-    {
-        r = cql_transform_FILE(ct, cql_parser_result(cp), stdout);
-       printf("\n");
-        if (r)
-        {
-            const char *addinfo;
-            cql_transform_error(ct, &addinfo);
-            printf ("Transform error %d %s\n", r, addinfo ? addinfo : "");
-        }
-    }
-    }
-    cql_transform_close(ct);
-    cql_parser_destroy(cp);
-    return 0;
-}
diff --git a/cql/cql2xcql.c b/cql/cql2xcql.c
deleted file mode 100644 (file)
index b2db2e5..0000000
+++ /dev/null
@@ -1,28 +0,0 @@
-/* $Id: cql2xcql.c,v 1.1 2003-01-06 08:20:27 adam Exp $
-   Copyright (C) 2002-2003
-   Index Data Aps
-
-This file is part of the YAZ toolkit.
-
-See the file LICENSE.
-*/
-
-#include <stdio.h>
-
-#include <yaz/cql.h>
-
-int main(int argc, char **argv)
-{
-    int r;
-    CQL_parser cp = cql_parser_create();
-    if (argc == 2)
-        r = cql_parser_string(cp, argv[1]);
-    else
-        r = cql_parser_stdio(cp, stdin);
-    if (r)
-        fprintf (stderr, "Syntax error\n");
-    else
-        cql_to_xml_stdio(cql_parser_result(cp), stdout);
-    cql_parser_destroy(cp);
-    return 0;
-}
diff --git a/cql/cqlstdio.c b/cql/cqlstdio.c
deleted file mode 100644 (file)
index 7846f0d..0000000
+++ /dev/null
@@ -1,36 +0,0 @@
-/* $Id: cqlstdio.c,v 1.1 2003-01-06 08:20:27 adam Exp $
-   Copyright (C) 2002-2003
-   Index Data Aps
-
-This file is part of the YAZ toolkit.
-
-See the file LICENSE.
-*/
-
-#include <yaz/cql.h>
-
-int getbyte_stream(void *client_data)
-{
-    FILE *f = (FILE*) client_data;
-
-    int c = fgetc(f);
-    if (c == EOF)
-        return 0;
-    return c;
-}
-
-void ungetbyte_stream (int c, void *client_data)
-{
-    FILE *f = (FILE*) client_data;
-
-    if (c == 0)
-        c = EOF;
-    ungetc(c, f);
-}
-
-int cql_parser_stdio(CQL_parser cp, FILE *f)
-{
-    return cql_parser_stream(cp, getbyte_stream, ungetbyte_stream, f);
-}
-
-
diff --git a/cql/cqlstrer.c b/cql/cqlstrer.c
deleted file mode 100644 (file)
index 05a1862..0000000
+++ /dev/null
@@ -1,61 +0,0 @@
-/* $Id: cqlstrer.c,v 1.1 2003-05-27 09:47:15 mike Exp $
-   Copyright (C) 2002-2003
-   Index Data Aps
-
-This file is part of the YAZ toolkit.
-
-See the file LICENSE.
-*/
-
-#include <yaz/cql.h>
-
-/*
- * The error-messages associated with these codes are taken from
- * the SRW diagnostic specifications at
- *     http://www.loc.gov/srw/diagnostic-list.html
- */
-const char *cql_strerror(int code) {
-    static char buf[80];
-    switch (code) {
-    case 10: return "Illegal query";
-    case 11: return "Unsupported query type (XCQL vs CQL)";
-    case 12: return "Too many characters in query";
-    case 13: return "Unbalanced or illegal use of parentheses";
-    case 14: return "Unbalanced or illegal use of quotes";
-    case 15: return "Illegal or unsupported index set";
-    case 16: return "Illegal or unsupported index";
-    case 17: return "Illegal or unsupported combination of index and index set";
-    case 18: return "Illegal or unsupported combination of indexes";
-    case 19: return "Illegal or unsupported relation";
-    case 20: return "Illegal or unsupported relation modifier";
-    case 21: return "Illegal or unsupported combination of relation modifers";
-    case 22: return "Illegal or unsupported combination of relation and index";
-    case 23: return "Too many characters in term";
-    case 24: return "Illegal combination of relation and term";
-    case 25: return "Special characters not quoted in term";
-    case 26: return "Non special character escaped in term";
-    case 27: return "Empty term unsupported";
-    case 28: return "Masking character not supported";
-    case 29: return "Masked words too short";
-    case 30: return "Too many masking characters in term";
-    case 31: return "Anchoring character not supported";
-    case 32: return "Anchoring character in illegal or unsupported position";
-    case 33: return "Combination of proximity/adjacency and masking characters not supported";
-    case 34: return "Combination of proximity/adjacency and anchoring characters not supported";
-    case 35: return "Terms only exclusion (stop) words";
-    case 36: return "Term in invalid format for index or relation";
-    case 37: return "Illegal or unsupported boolean operator";
-    case 38: return "Too many boolean operators in query";
-    case 39: return "Proximity not supported";
-    case 40: return "Illegal or unsupported proximity relation";
-    case 41: return "Illegal or unsupported proximity distance";
-    case 42: return "Illegal or unsupported proximity unit";
-    case 43: return "Illegal or unsupported proximity ordering";
-    case 44: return "Illegal or unsupported combination of proximity modifiers";
-    case 45: return "Index set name (prefix) assigned to multiple identifiers";
-    default: break;
-    }
-
-    sprintf(buf, "Unknown CQL error #%d", code);
-    return buf;
-}
diff --git a/cql/cqlstring.c b/cql/cqlstring.c
deleted file mode 100644 (file)
index 49a7882..0000000
+++ /dev/null
@@ -1,40 +0,0 @@
-/* $Id: cqlstring.c,v 1.2 2003-02-14 18:49:23 adam Exp $
-   Copyright (C) 2002-2003
-   Index Data Aps
-
-This file is part of the YAZ toolkit.
-
-See the file LICENSE for details.
-*/
-#include <yaz/cql.h>
-
-struct cql_buf_info {
-    const char *str;
-    int off;
-};
-
-int getbuf(void *vp)
-{
-    struct cql_buf_info *bi = (struct cql_buf_info *) vp;
-    if (bi->str[bi->off] == 0)
-        return 0;
-    return bi->str[bi->off++];
-}
-
-void ungetbuf(int b, void *vp)
-{
-    struct cql_buf_info *bi = (struct cql_buf_info *) vp;
-    if (b)
-        (bi->off--);
-}
-
-int cql_parser_string(CQL_parser cp, const char *str)
-{
-    struct cql_buf_info b;
-
-    b.str = str;
-    b.off = 0;
-    
-    return cql_parser_stream(cp, getbuf, ungetbuf, &b);
-}
-
diff --git a/cql/cqltransform.c b/cql/cqltransform.c
deleted file mode 100644 (file)
index b538ce7..0000000
+++ /dev/null
@@ -1,469 +0,0 @@
-/* $Id: cqltransform.c,v 1.4 2003-02-25 18:08:46 adam Exp $
-   Copyright (C) 2002-2003
-   Index Data Aps
-
-This file is part of the YAZ toolkit.
-
-See the file LICENSE.
-*/
-
-#include <stdlib.h>
-#include <string.h>
-#include <yaz/cql.h>
-
-struct cql_prop_entry {
-    char *pattern;
-    char *value;
-    struct cql_prop_entry *next;
-};
-
-struct cql_transform_t_ {
-    struct cql_prop_entry *entry;
-    int error;
-    char *addinfo;
-};
-
-cql_transform_t cql_transform_open_FILE(FILE *f)
-{
-    char line[1024];
-    cql_transform_t ct = (cql_transform_t) malloc (sizeof(*ct));
-    struct cql_prop_entry **pp = &ct->entry;
-
-    ct->error = 0;
-    ct->addinfo = 0;
-    while (fgets(line, sizeof(line)-1, f))
-    {
-        const char *cp_value_start;
-        const char *cp_value_end;
-        const char *cp_pattern_end;
-        const char *cp = line;
-        while (*cp && !strchr(" \t=\r\n#", *cp))
-            cp++;
-        cp_pattern_end = cp;
-        if (cp == line)
-            continue;
-        while (*cp && strchr(" \t\r\n", *cp))
-            cp++;
-        if (*cp != '=')
-            continue;
-        cp++;
-        while (*cp && strchr(" \t\r\n", *cp))
-            cp++;
-        cp_value_start = cp;
-        if (!(cp_value_end = strchr(cp, '#')))
-            cp_value_end = strlen(line) + line;
-
-        if (cp_value_end != cp_value_start &&
-            strchr(" \t\r\n", cp_value_end[-1]))
-            cp_value_end--;
-        *pp = (struct cql_prop_entry *) malloc (sizeof(**pp));
-        (*pp)->pattern = (char *) malloc (cp_pattern_end - line + 1);
-        memcpy ((*pp)->pattern, line, cp_pattern_end - line);
-        (*pp)->pattern[cp_pattern_end-line] = 0;
-
-        (*pp)->value = (char *) malloc (cp_value_end - cp_value_start + 1);
-        if (cp_value_start != cp_value_end)
-            memcpy ((*pp)->value, cp_value_start, cp_value_end-cp_value_start);
-        (*pp)->value[cp_value_end - cp_value_start] = 0;
-        pp = &(*pp)->next;
-    }
-    *pp = 0;
-    return ct;
-}
-
-void cql_transform_close(cql_transform_t ct)
-{
-    struct cql_prop_entry *pe;
-    if (!ct)
-        return;
-    pe = ct->entry;
-    while (pe)
-    {
-        struct cql_prop_entry *pe_next = pe->next;
-        free (pe->pattern);
-        free (pe->value);
-        free (pe);
-        pe = pe_next;
-    }
-    if (ct->addinfo)
-        free (ct->addinfo);
-    free (ct);
-}
-
-cql_transform_t cql_transform_open_fname(const char *fname)
-{
-    cql_transform_t ct;
-    FILE *f = fopen(fname, "r");
-    if (!f)
-        return 0;
-    ct = cql_transform_open_FILE(f);
-    fclose(f);
-    return ct;
-}
-
-static const char *cql_lookup_property(cql_transform_t ct,
-                                       const char *pat1, const char *pat2)
-{
-    char pattern[80];
-    struct cql_prop_entry *e;
-
-    if (pat2)
-        sprintf (pattern, "%.39s%.39s", pat1, pat2);
-    else
-        sprintf (pattern, "%.39s", pat1);
-    for (e = ct->entry; e; e = e->next)
-    {
-        if (!strcmp(e->pattern, pattern))
-            return e->value;
-    }
-    return 0;
-}
-
-static const char *cql_lookup_value(cql_transform_t ct,
-                                    const char *prefix,
-                                    const char *value)
-{
-    struct cql_prop_entry *e;
-    int len = strlen(prefix);
-
-    for (e = ct->entry; e; e = e->next)
-    {
-        if (!memcmp(e->pattern, prefix, len) && !strcmp(e->value, value))
-            return e->pattern + len;
-    }
-    return 0;
-}
-
-
-int cql_pr_attr(cql_transform_t ct, const char *category,
-                const char *val,
-                const char *default_val,
-                void (*pr)(const char *buf, void *client_data),
-                void *client_data,
-                int errcode)
-{
-    const char *res;
-    res = cql_lookup_property(ct, category, val ? val : default_val);
-    if (!res)
-        res = cql_lookup_property(ct, category, "*");
-    if (res)
-    {
-        char buf[64];
-
-        const char *cp0 = res, *cp1;
-        while ((cp1 = strchr(cp0, '=')))
-        {
-            while (*cp1 && *cp1 != ' ')
-                cp1++;
-            if (cp1 - cp0 >= sizeof(buf))
-                break;
-            memcpy (buf, cp0, cp1 - cp0);
-            buf[cp1-cp0] = 0;
-            (*pr)("@attr ", client_data);
-            (*pr)(buf, client_data);
-            (*pr)(" ", client_data);
-            cp0 = cp1;
-            while (*cp0 == ' ')
-                cp0++;
-        }
-        return 1;
-    }
-    /* error ... */
-    if (errcode && !ct->error)
-    {
-        ct->error = errcode;
-        ct->addinfo = strdup(val);
-    }
-    return 0;
-}
-
-void emit_term(cql_transform_t ct,
-               const char *term, int length,
-               void (*pr)(const char *buf, void *client_data),
-               void *client_data)
-{
-    int i;
-    if (length > 0)
-    {
-        if (length > 1 && term[0] == '^' && term[length-1] == '^')
-        {
-            cql_pr_attr(ct, "position.", "firstAndLast", 0,
-                        pr, client_data, 32);
-            term++;
-            length -= 2;
-        }
-        else if (term[0] == '^')
-        {
-            cql_pr_attr(ct, "position.", "first", 0,
-                        pr, client_data, 32);
-            term++;
-        }
-        else if (term[length-1] == '^')
-        {
-            cql_pr_attr(ct, "position.", "last", 0,
-                        pr, client_data, 32);
-            length--;
-        }
-        else
-        {
-            cql_pr_attr(ct, "position.", "any", 0,
-                        pr, client_data, 32);
-        }
-    }
-    (*pr)("\"", client_data);
-    for (i = 0; i<length; i++)
-    {
-        char buf[2];
-        buf[0] = term[i];
-        buf[1] = 0;
-        (*pr)(buf, client_data);
-    }
-    (*pr)("\" ", client_data);
-}
-
-void emit_wordlist(cql_transform_t ct,
-                   struct cql_node *cn,
-                   void (*pr)(const char *buf, void *client_data),
-                   void *client_data,
-                   const char *op)
-{
-    const char *cp0 = cn->u.st.term;
-    const char *cp1;
-    const char *last_term = 0;
-    int last_length = 0;
-    while(cp0)
-    {
-        while (*cp0 == ' ')
-            cp0++;
-        cp1 = strchr(cp0, ' ');
-        if (last_term)
-        {
-            (*pr)("@", client_data);
-            (*pr)(op, client_data);
-            (*pr)(" ", client_data);
-            emit_term(ct, last_term, last_length, pr, client_data);
-        }
-        last_term = cp0;
-        if (cp1)
-            last_length = cp1 - cp0;
-        else
-            last_length = strlen(cp0);
-        cp0 = cp1;
-    }
-    if (last_term)
-        emit_term(ct, last_term, last_length, pr, client_data);
-}
-
-
-static const char *cql_get_ns(cql_transform_t ct,
-                              struct cql_node *cn,
-                              struct cql_node **prefix_ar, int prefix_level,
-                              const char **n_prefix,
-                              const char **n_suffix)
-{
-    int i;
-    const char *ns = 0;
-    char prefix[32];
-    const char *cp = cn->u.st.index;
-    const char *cp_dot = strchr(cp, '.');
-
-    /* strz current prefix (empty if not given) */
-    if (cp_dot && cp_dot-cp < sizeof(prefix))
-    {
-        memcpy (prefix, cp, cp_dot - cp);
-        prefix[cp_dot - cp] = 0;
-    }
-    else
-        *prefix = 0;
-
-    /* 2. lookup in prefix_ar. and return NS */
-    for (i = prefix_level; !ns && --i >= 0; )
-    {
-        struct cql_node *cn_prefix = prefix_ar[i];
-        for (; cn_prefix; cn_prefix = cn_prefix->u.mod.next)
-        {
-            if (*prefix && cn_prefix->u.mod.name &&
-                !strcmp(prefix, cn_prefix->u.mod.name))
-            {
-                ns = cn_prefix->u.mod.value;
-                break;
-            }
-            else if (!*prefix && !cn_prefix->u.mod.name)
-            {
-                ns = cn_prefix->u.mod.value;
-                break;
-            }
-        }
-    }
-    if (!ns)
-    {
-        if (!ct->error)
-        {
-            ct->error = 15;
-            ct->addinfo = strdup(prefix);
-        }
-        return 0;
-    }
-    /* 3. lookup in set.NS for new prefix */
-    *n_prefix = cql_lookup_value(ct, "set.", ns);
-    if (!*n_prefix)
-    {
-        if (!ct->error)
-        {
-            ct->error = 15;
-            ct->addinfo = strdup(ns);
-        }
-        return 0;
-    }
-    /* 4. lookup qualifier.prefix. */
-    
-    cp = cn->u.st.index;
-    cp_dot = strchr(cp, '.');
-    
-    *n_suffix = cp_dot ? cp_dot+1 : cp;
-    return ns;
-}
-
-void cql_transform_r(cql_transform_t ct,
-                     struct cql_node *cn,
-                     void (*pr)(const char *buf, void *client_data),
-                     void *client_data,
-                     struct cql_node **prefix_ar, int prefix_level)
-{
-    const char *ns, *n_prefix, *n_suffix;
-
-    if (!cn)
-        return;
-    switch (cn->which)
-    {
-    case CQL_NODE_ST:
-        if (cn->u.st.prefixes && prefix_level < 20)
-            prefix_ar[prefix_level++] = cn->u.st.prefixes;
-        ns = cql_get_ns(ct, cn, prefix_ar, prefix_level, &n_prefix, &n_suffix);
-        if (ns)
-        {
-            char n_full[64];
-            sprintf (n_full, "%.20s.%.40s", n_prefix, n_suffix);
-        
-            if (!strcmp(ns, "http://www.loc.gov/zing/cql/srw-indexes/v1.0/")
-                && !strcmp(n_suffix, "resultSet"))
-            {
-                (*pr)("@set \"", client_data);
-                (*pr)(cn->u.st.term, client_data);
-                (*pr)("\" ", client_data);
-                return ;
-            }
-            cql_pr_attr(ct, "qualifier.", n_full, "srw.serverChoice",
-                        pr, client_data, 16);
-        }
-
-        if (cn->u.st.relation && !strcmp(cn->u.st.relation, "="))
-            cql_pr_attr(ct, "relation.", "eq", "scr",
-                        pr, client_data, 19);
-        else if (cn->u.st.relation && !strcmp(cn->u.st.relation, "<="))
-            cql_pr_attr(ct, "relation.", "le", "scr",
-                        pr, client_data, 19);
-        else if (cn->u.st.relation && !strcmp(cn->u.st.relation, ">="))
-            cql_pr_attr(ct, "relation.", "ge", "scr",
-                        pr, client_data, 19);
-        else
-            cql_pr_attr(ct, "relation.", cn->u.st.relation, "eq",
-                        pr, client_data, 19);
-        if (cn->u.st.modifiers)
-        {
-            struct cql_node *mod = cn->u.st.modifiers;
-            for (; mod; mod = mod->u.mod.next)
-            {
-                cql_pr_attr(ct, "relationModifier.", mod->u.mod.value, 0,
-                            pr, client_data, 20);
-            }
-        }
-        cql_pr_attr(ct, "structure.", cn->u.st.relation, 0,
-                    pr, client_data, 24);
-        if (cn->u.st.relation && !strcmp(cn->u.st.relation, "all"))
-        {
-            emit_wordlist(ct, cn, pr, client_data, "and");
-        }
-        else if (cn->u.st.relation && !strcmp(cn->u.st.relation, "any"))
-        {
-            emit_wordlist(ct, cn, pr, client_data, "or");
-        }
-        else
-        {
-            emit_term(ct, cn->u.st.term, strlen(cn->u.st.term),
-                      pr, client_data);
-        }
-        break;
-    case CQL_NODE_BOOL:
-        if (cn->u.boolean.prefixes && prefix_level < 20)
-            prefix_ar[prefix_level++] = cn->u.boolean.prefixes;
-        (*pr)("@", client_data);
-        (*pr)(cn->u.boolean.value, client_data);
-        (*pr)(" ", client_data);
-
-        cql_transform_r(ct, cn->u.boolean.left, pr, client_data,
-                        prefix_ar, prefix_level);
-        cql_transform_r(ct, cn->u.boolean.right, pr, client_data,
-                        prefix_ar, prefix_level);
-    }
-}
-
-int cql_transform(cql_transform_t ct,
-                  struct cql_node *cn,
-                  void (*pr)(const char *buf, void *client_data),
-                  void *client_data)
-{
-    struct cql_node *prefix_ar[20], **pp;
-    struct cql_prop_entry *e;
-
-    ct->error = 0;
-    if (ct->addinfo)
-        free (ct->addinfo);
-    ct->addinfo = 0;
-
-    prefix_ar[0] = 0;
-    pp = &prefix_ar[0];
-    for (e = ct->entry; e ; e = e->next)
-    {
-        if (!memcmp(e->pattern, "set.", 4))
-        {
-            *pp = cql_node_mk_mod(e->pattern+4, e->value);
-            pp = &(*pp)->u.mod.next;
-        }
-        else if (!strcmp(e->pattern, "set"))
-        {
-            *pp = cql_node_mk_mod(0, e->value);
-            pp = &(*pp)->u.mod.next;
-        }
-    }
-    cql_transform_r (ct, cn, pr, client_data, prefix_ar, 1);
-    cql_node_destroy(prefix_ar[0]);
-    return ct->error;
-}
-
-
-int cql_transform_FILE(cql_transform_t ct, struct cql_node *cn, FILE *f)
-{
-    return cql_transform(ct, cn, cql_fputs, f);
-}
-
-int cql_transform_buf(cql_transform_t ct, struct cql_node *cn,
-                      char *out, int max)
-{
-    struct cql_buf_write_info info;
-    int r;
-
-    info.off = 0;
-    info.max = max;
-    info.buf = out;
-    r = cql_transform(ct, cn, cql_buf_write_handler, &info);
-    if (info.off >= 0)
-        info.buf[info.off] = '\0';
-    return r;
-}
-
-int cql_transform_error(cql_transform_t ct, const char **addinfo)
-{
-    *addinfo = ct->addinfo;
-    return ct->error;
-}
diff --git a/cql/cqlutil.c b/cql/cqlutil.c
deleted file mode 100644 (file)
index 15e2827..0000000
+++ /dev/null
@@ -1,177 +0,0 @@
-/* $Id: cqlutil.c,v 1.3 2003-03-03 19:57:35 adam Exp $
-   Copyright (C) 2002-2003
-   Index Data Aps
-
-This file is part of the YAZ toolkit.
-
-See the file LICENSE.
-*/
-
-#include <stdlib.h>
-#include <string.h>
-
-#include <yaz/cql.h>
-
-void cql_fputs(const char *buf, void *client_data)
-{
-    FILE *f = (FILE *) client_data;
-    fputs(buf, f);
-}
-
-struct cql_node *cql_node_dup (struct cql_node *cp)
-{
-    struct cql_node *cn = 0;
-
-    if (!cp)
-        return 0;
-    switch (cp->which)
-    {
-    case CQL_NODE_ST:
-        cn = cql_node_mk_sc(cp->u.st.index,
-                            cp->u.st.relation,
-                            cp->u.st.term);
-        cn->u.st.modifiers = cql_node_dup(cp->u.st.modifiers);
-        cn->u.st.prefixes = cql_node_dup(cp->u.st.prefixes);
-        break;
-    case CQL_NODE_MOD:
-        cn = cql_node_mk_mod(cp->u.mod.name,
-                             cp->u.mod.value);
-        cn->u.mod.next = cql_node_dup(cp->u.mod.next);
-        break;
-    case CQL_NODE_BOOL:
-        cn = cql_node_mk_boolean(cp->u.boolean.value);
-        cn->u.boolean.left = cql_node_dup(cp->u.boolean.left);
-        cn->u.boolean.right = cql_node_dup(cp->u.boolean.right);
-        cn->u.boolean.prefixes = cql_node_dup(cp->u.boolean.prefixes);
-    }
-    return cn;
-}
-
-struct cql_node *cql_node_mk_sc(const char *index,
-                                const char *relation,
-                                const char *term)
-{
-    struct cql_node *p = (struct cql_node *) malloc(sizeof(*p));
-    p->which = CQL_NODE_ST;
-    p->u.st.index = 0;
-    if (index)
-        p->u.st.index = strdup(index);
-    p->u.st.term = 0;
-    if (term)
-        p->u.st.term = strdup(term);
-    p->u.st.relation = 0;
-    if (relation)
-        p->u.st.relation = strdup(relation);
-    p->u.st.modifiers = 0;
-    p->u.st.prefixes = 0;
-    return p;
-}
-
-struct cql_node *cql_node_mk_mod(const char *name,
-                                 const char *value)
-{
-    struct cql_node *p = (struct cql_node *) malloc(sizeof(*p));
-    p->which = CQL_NODE_MOD;
-
-    p->u.mod.name = 0;
-    if (name)
-        p->u.mod.name = strdup(name);
-    p->u.mod.value = 0;
-    if (value)
-        p->u.mod.value = strdup(value);
-    p->u.mod.next = 0;
-    return p;
-}
-
-struct cql_node *cql_node_mk_boolean(const char *op)
-{
-    struct cql_node *p = (struct cql_node *) malloc(sizeof(*p));
-    p->which = CQL_NODE_BOOL;
-    p->u.boolean.value = 0;
-    if (op)
-        p->u.boolean.value = strdup(op);
-    p->u.boolean.left = 0;
-    p->u.boolean.right = 0;
-    p->u.boolean.modifiers = 0;
-    p->u.boolean.prefixes = 0;
-    return p;
-}
-
-struct cql_node *cql_node_prefix(struct cql_node *n, const char *prefix,
-                                 const char *uri)
-{
-    struct cql_node **cpp = 0;
-    if (n->which == CQL_NODE_ST)
-    {
-        cpp = &n->u.st.prefixes;
-    }
-    else if (n->which == CQL_NODE_BOOL)
-    {
-        cpp = &n->u.boolean.prefixes;
-    }
-    if (cpp)
-    {
-        struct cql_node *cp = cql_node_mk_mod(prefix, uri);
-        cp->u.mod.next = *cpp;
-        *cpp = cp;
-    }
-    return n;
-}
-
-struct cql_node *cql_node_mk_proxargs(const char *relation,
-                                      const char *distance,
-                                      const char *unit,
-                                      const char *ordering)
-{
-    struct cql_node *m = 0, *m1;
-
-    if (ordering && *ordering)
-        m = cql_node_mk_mod("ordering", ordering);
-    if (unit && *unit)
-    {
-        m1 = cql_node_mk_mod("unit", unit);
-        m1->u.mod.next = m;
-        m = m1;
-    }
-    if (distance && *distance)
-    {
-        m1 = cql_node_mk_mod("distance", distance);
-        m1->u.mod.next = m;
-        m = m1;
-    }
-    if (relation && *relation)
-    {
-        m1 = cql_node_mk_mod("relation", relation);
-        m1->u.mod.next = m;
-        m = m1;
-    }
-    return m;
-}
-
-void cql_node_destroy(struct cql_node *cn)
-{
-    if (!cn)
-        return;
-    switch (cn->which)
-    {
-    case CQL_NODE_ST:
-        free (cn->u.st.index);
-        free (cn->u.st.relation);
-        free (cn->u.st.term);
-        cql_node_destroy(cn->u.st.modifiers);
-        cql_node_destroy(cn->u.st.prefixes);
-        break;
-    case CQL_NODE_MOD:
-        free (cn->u.mod.name);
-        free (cn->u.mod.value);
-        cql_node_destroy(cn->u.mod.next);
-        break;
-    case CQL_NODE_BOOL:
-        free (cn->u.boolean.value);
-        cql_node_destroy(cn->u.boolean.left);
-        cql_node_destroy(cn->u.boolean.right);
-        cql_node_destroy(cn->u.boolean.prefixes);
-    }
-    free (cn);
-}
-
diff --git a/cql/lexer.c b/cql/lexer.c
deleted file mode 100644 (file)
index 04113ae..0000000
+++ /dev/null
@@ -1,113 +0,0 @@
-/* $Id: lexer.c,v 1.5 2003-09-04 18:13:39 adam Exp $
-   Copyright (C) 2002-2003
-   Index Data Aps
-
-This file is part of the YAZ toolkit.
-
-See the file LICENSE.
-*/
-
-static void putb(YYSTYPE *lval, CQL_parser cp, int c)
-{
-    if (lval->len+1 >= lval->size)
-    {
-        char *nb = nmem_malloc(cp->nmem, (lval->size = lval->len * 2 + 20));
-        memcpy (nb, lval->buf, lval->len);
-        lval->buf = nb;
-    }
-    if (c)
-        lval->buf[lval->len++] = c;
-    lval->buf[lval->len] = '\0';
-}
-
-/*
- * bison lexer for CQL.
- */
-
-int yylex(YYSTYPE *lval, void *vp)
-{
-    CQL_parser cp = (CQL_parser) vp;
-    int c;
-    lval->cql = 0;
-    lval->rel = 0;
-    lval->len = 0;
-    lval->size = 10;
-    lval->buf = nmem_malloc(cp->nmem, lval->size);
-    lval->buf[0] = '\0';
-    do
-    {
-        c = cp->getbyte(cp->client_data);
-        if (c == 0)
-            return 0;
-        if (c == '\n')
-            return 0;
-    } while (isspace(c));
-    if (strchr("()=></", c))
-    {
-        int c1;
-        putb(lval, cp, c);
-        if (c == '>')
-        {
-            c1 = cp->getbyte(cp->client_data);
-            if (c1 == '=')
-            {
-                putb(lval, cp, c1);
-                return GE;
-            }
-            else
-                cp->ungetbyte(c1, cp->client_data);
-        }
-        else if (c == '<')
-        {
-            c1 = cp->getbyte(cp->client_data);
-            if (c1 == '=')
-            {
-                putb(lval, cp, c1);
-                return LE;
-            }
-            else if (c1 == '>')
-            {
-                putb(lval, cp, c1);
-                return NE;
-            }
-            else
-                cp->ungetbyte(c1, cp->client_data);
-        }
-        return c;
-    }
-    if (c == '"')
-    {
-        while ((c = cp->getbyte(cp->client_data)) != EOF && c != '"')
-        {
-            if (c == '\\')
-                c = cp->getbyte(cp->client_data);
-            putb(lval, cp, c);
-        }
-        putb(lval, cp, 0);
-    }
-    else
-    {
-        putb(lval, cp, c);
-        while ((c = cp->getbyte(cp->client_data)) != 0 &&
-               !strchr(" \n()=<>/", c))
-        {
-            if (c == '\\')
-                c = cp->getbyte(cp->client_data);
-            putb(lval, cp, c);
-        }
-#if YYDEBUG
-        printf ("got %s\n", lval->buf);
-#endif
-        if (c != 0)
-            cp->ungetbyte(c, cp->client_data);
-        if (!strcmp(lval->buf, "and"))
-            return AND;
-        if (!strcmp(lval->buf, "or"))
-            return OR;
-        if (!strcmp(lval->buf, "not"))
-            return NOT;
-        if (!strncmp(lval->buf, "prox", 4))
-            return PROX;
-    }
-    return TERM;
-}
diff --git a/cql/xcqlutil.c b/cql/xcqlutil.c
deleted file mode 100644 (file)
index 60c486b..0000000
+++ /dev/null
@@ -1,210 +0,0 @@
-/* $Id: xcqlutil.c,v 1.2 2003-02-14 18:49:23 adam Exp $
-   Copyright (C) 2002-2003
-   Index Data Aps
-
-This file is part of the YAZ toolkit.
-
-See the file LICENSE.
-*/
-#include <stdlib.h>
-#include <string.h>
-#include <stdio.h>
-
-#include <yaz/cql.h>
-
-static void pr_n(const char *buf, 
-                void (*pr)(const char *buf, void *client_data),
-                void *client_data, int n)
-{
-    int i;
-    for (i = 0; i<n; i++)
-        (*pr)(" ", client_data);
-    (*pr)(buf, client_data);
-}
-
-static void pr_cdata(const char *buf,
-                     void (*pr)(const char *buf, void *client_data),
-                     void *client_data)
-{
-    const char *src = buf;
-    char bf[2];
-    while (*src)
-    {
-        switch(*src)
-        {
-        case '&':
-            (*pr)("&amp;", client_data);
-            break;
-        case '<':
-            (*pr)("&lt;", client_data);
-            break;
-        case '>':
-            (*pr)("&gt;", client_data);
-            break;
-        default:
-            bf[0] = *src;
-            bf[1] = 0;
-            (*pr)(bf, client_data);
-        }
-        src++;
-    }
-}
-                    
-static void prefixes(struct cql_node *cn,
-                     void (*pr)(const char *buf, void *client_data),
-                     void *client_data, int level)
-{
-    if (cn)
-    {
-        pr_n("<prefixes>\n", pr, client_data, level);
-        for (; cn; cn = cn->u.mod.next)
-        {
-            pr_n("<prefix>\n", pr, client_data, level+2);
-            if (cn->u.mod.name)
-            {
-                pr_n("<name>", pr, client_data, level+4);
-                pr_cdata(cn->u.mod.name, pr, client_data);
-                pr_n("</name>\n", pr, client_data, 0);
-            }
-            if (cn->u.mod.value)
-            {
-                pr_n("<identifier>", pr, client_data, level+4);
-                pr_cdata(cn->u.mod.value, pr, client_data);
-                pr_n("</identifier>\n", pr, client_data, 0);
-            }
-            pr_n("</prefix>\n", pr, client_data, level+2);
-        }
-        pr_n("</prefixes>\n", pr, client_data, level);
-    }
-}
-                     
-static void cql_to_xml_r(struct cql_node *cn,
-                         void (*pr)(const char *buf, void *client_data),
-                         void *client_data, int level)
-{
-    if (!cn)
-        return;
-    switch (cn->which)
-    {
-    case CQL_NODE_ST:
-        pr_n("<searchClause>\n", pr, client_data, level);
-        prefixes(cn->u.st.prefixes, pr, client_data, level+2);
-        if (cn->u.st.index)
-        {
-            pr_n("<index>", pr, client_data, level+2);
-            pr_cdata(cn->u.st.index, pr, client_data);
-            pr_n("</index>\n", pr, client_data, 0);
-        }
-        if (cn->u.st.relation)
-        {
-            struct cql_node *m = cn->u.st.modifiers;
-            pr_n("<relation>\n", pr, client_data, level+2);
-            pr_n("<value>", pr, client_data, level+4);
-            pr_cdata(cn->u.st.relation, pr, client_data);
-            pr_n("</value>\n", pr, client_data, 0);
-            if (m)
-            {
-                pr_n("<modifiers>\n", pr, client_data, level+4);
-                for (; m; m = m->u.mod.next)
-                {
-                    pr_n("<modifier><value>", pr, client_data, level+6);
-                    pr_cdata(m->u.mod.value, pr, client_data);
-                    pr_n("</value></modifier>\n", pr, client_data, 0);
-                }
-                pr_n("</modifiers>\n", pr, client_data, level+4);
-            }
-            pr_n("</relation>\n", pr, client_data, level+2);
-        }
-        if (cn->u.st.term)
-        {
-            pr_n("<term>", pr, client_data, level+2);
-            pr_cdata(cn->u.st.term, pr, client_data);
-            pr_n("</term>\n", pr, client_data, 0);
-        }
-        pr_n("</searchClause>\n", pr, client_data, level);
-        break;
-    case CQL_NODE_BOOL:
-        pr_n("<triple>\n", pr, client_data, level);
-        prefixes(cn->u.st.prefixes, pr, client_data, level+2);
-        if (cn->u.boolean.value)
-        {
-            struct cql_node *m = cn->u.boolean.modifiers;
-            pr_n("<boolean>\n", pr, client_data, level+2);
-
-            pr_n("<value>", pr, client_data, level+4);
-            pr_cdata(cn->u.boolean.value, pr, client_data);
-            pr_n("</value>\n", pr, client_data, 0);
-
-            if (m)
-            {
-                pr_n("<modifiers>\n", pr, client_data, level+4);
-                for (; m; m = m->u.mod.next)
-                {
-                    pr_n("<modifier><type>", pr, client_data, level+6);
-                    pr_cdata(m->u.mod.name, pr, client_data);
-                    pr_n("</type>", pr, client_data, 0);
-                    if (m->u.mod.value)
-                    {
-                        pr_n("<value>", pr, client_data, 0);
-                        pr_cdata(m->u.mod.value, pr, client_data);
-                        pr_n("</value>", pr, client_data, 0);
-                    }
-                    pr_n("</modifier>\n", pr, client_data, 0);
-                }
-                pr_n("</modifiers>\n", pr, client_data, level+4);
-            }
-            pr_n("</boolean>\n", pr, client_data, level+2);
-        }
-        if (cn->u.boolean.left)
-        {
-            printf ("%*s<leftOperand>\n", level+2, "");
-            cql_to_xml_r(cn->u.boolean.left, pr, client_data, level+4);
-            printf ("%*s</leftOperand>\n", level+2, "");
-        }
-        if (cn->u.boolean.right)
-        {
-            printf ("%*s<rightOperand>\n", level+2, "");
-            cql_to_xml_r(cn->u.boolean.right, pr, client_data, level+4);
-            printf ("%*s</rightOperand>\n", level+2, "");
-        }
-        pr_n("</triple>\n", pr, client_data, level);
-    }
-}
-
-void cql_to_xml(struct cql_node *cn, 
-                void (*pr)(const char *buf, void *client_data),
-                void *client_data)
-{
-    cql_to_xml_r(cn, pr, client_data, 0);
-}
-
-void cql_to_xml_stdio(struct cql_node *cn, FILE *f)
-{
-    cql_to_xml(cn, cql_fputs, f);
-}
-
-void cql_buf_write_handler (const char *b, void *client_data)
-{
-    struct cql_buf_write_info *info = (struct cql_buf_write_info *)client_data;
-    int l = strlen(b);
-    if (info->off < 0 || (info->off + l >= info->max))
-    {
-        info->off = -1;
-        return;
-    }
-    memcpy (info->buf + info->off, b, l);
-    info->off += l;
-}
-
-int cql_to_xml_buf(struct cql_node *cn, char *out, int max)
-{
-    struct cql_buf_write_info info;
-    info.off = 0;
-    info.max = max;
-    info.buf = out;
-    cql_to_xml(cn, cql_buf_write_handler, &info);
-    if (info.off >= 0)
-        info.buf[info.off] = '\0';
-    return info.off;
-}
-
index bf76e54..7bc45ad 100644 (file)
@@ -1,4 +1,4 @@
-## $Id: Makefile.am,v 1.48 2003-10-02 19:47:41 adam Exp $
+## $Id: Makefile.am,v 1.49 2003-10-27 12:21:24 adam Exp $
 
 docdir=$(datadir)/doc/@PACKAGE@
 
 
 docdir=$(datadir)/doc/@PACKAGE@
 
@@ -24,9 +24,11 @@ HTMLFILES = \
  zoom.records.html zoom.resultsets.html zoom.scan.html
 
 MANFILES=yaz-client.1 yaz-client-ssl.1 yaz-ztest.8 \
  zoom.records.html zoom.resultsets.html zoom.scan.html
 
 MANFILES=yaz-client.1 yaz-client-ssl.1 yaz-ztest.8 \
-       yaz-ztest-ssl.8 yaz-config.8 yaz.7 zoomsh.1 yaz-asncomp.1
-REFFILES=yaz-client.sgml yaz-ztest.sgml yaz-config.sgml \
-       yaz-man.sgml zoomsh.sgml yaz-asncomp.sgml
+       yaz-ztest-ssl.8 yaz-config.8 yaz.7 zoomsh.1 yaz-asncomp.1 \
+       yaz-marcdump.1
+REFFILES=yaz-client-man.xml yaz-ztest-man.xml yaz-config-man.xml \
+       yaz-man.xml zoomsh-man.xml yaz-asncomp-man.xml \
+       yaz-marcdump-man.xml
 
 SUPPORTFILES=yazhtml.dsl yazphp.dsl yazprint.dsl tkl.xsl xml.dcl id.eps \
        apilayer.obj
 
 SUPPORTFILES=yazhtml.dsl yazphp.dsl yazprint.dsl tkl.xsl xml.dcl id.eps \
        apilayer.obj
@@ -37,20 +39,20 @@ man_MANS = $(MANFILES)
 EXTRA_DIST = $(XMLFILES) $(SUPPORTFILES) $(man_MANS) $(REFFILES) \
        $(doc_DATA) Doxyfile
 
 EXTRA_DIST = $(XMLFILES) $(SUPPORTFILES) $(man_MANS) $(REFFILES) \
        $(doc_DATA) Doxyfile
 
-yaz-client.1: $(srcdir)/yaz-client.sgml $(srcdir)/yaz-client-commands.xml
-       docbook2man $(srcdir)/yaz-client.sgml
+yaz-client.1: $(srcdir)/yaz-client-man.xml $(srcdir)/yaz-client-commands.xml
+       docbook2man $(srcdir)/yaz-client-man.xml
 
 
-yaz-ztest.8: yaz-ztest.sgml ztest-options.xml
-       docbook2man $(srcdir)/yaz-ztest.sgml
+yaz-ztest.8: yaz-ztest-man.xml ztest-options.xml
+       docbook2man $(srcdir)/yaz-ztest-man.xml
 
 
-yaz-config.8: yaz-config.sgml
-       docbook2man $(srcdir)/yaz-config.sgml
+yaz-config.8: yaz-config-man.xml
+       docbook2man $(srcdir)/yaz-config-man.xml
 
 
-yaz.7: yaz-man.sgml
-       docbook2man $(srcdir)/yaz-man.sgml
+yaz.7: yaz-man.xml
+       docbook2man $(srcdir)/yaz-man.xml
 
 
-zoomsh.1: zoomsh.sgml
-       docbook2man $(srcdir)/zoomsh.sgml
+zoomsh.1: zoomsh-man.xml
+       docbook2man $(srcdir)/zoomsh-man.xml
 
 yaz-ztest-ssl.8: 
        ln -s yaz-ztest.8 yaz-ztest-ssl.8
 
 yaz-ztest-ssl.8: 
        ln -s yaz-ztest.8 yaz-ztest-ssl.8
@@ -58,8 +60,11 @@ yaz-ztest-ssl.8:
 yaz-client-ssl.1:
        ln -s yaz-client.1 yaz-client-ssl.1
 
 yaz-client-ssl.1:
        ln -s yaz-client.1 yaz-client-ssl.1
 
-yaz-asncomp.1: yaz-asncomp.sgml
-       docbook2man $(srcdir)/yaz-asncomp.sgml
+yaz-asncomp.1: yaz-asncomp-man.xml
+       docbook2man $(srcdir)/yaz-asncomp-man.xml
+
+yaz-marcdump.1: yaz-marcdump-man.xml
+       docbook2man $(srcdir)/yaz-marcdump-man.xml
 
 $(HTMLFILES): $(XMLFILES)  
        jade -E14 -D $(srcdir) -d yazhtml.dsl -t sgml $(srcdir)/xml.dcl yaz.xml
 
 $(HTMLFILES): $(XMLFILES)  
        jade -E14 -D $(srcdir) -d yazhtml.dsl -t sgml $(srcdir)/xml.dcl yaz.xml
diff --git a/doc/yaz-asncomp-man.xml b/doc/yaz-asncomp-man.xml
new file mode 100644 (file)
index 0000000..f39207f
--- /dev/null
@@ -0,0 +1,254 @@
+<!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook V4.1//EN" [
+]>
+<refentry id="yaz-asncomp">
+ <refmeta>
+  <refentrytitle>yaz-asncomp</refentrytitle>
+  <manvolnum>1</manvolnum>
+ </refmeta>
+ <refnamediv>
+  <refname>yaz-asncomp</refname>
+  <refpurpose>YAZ ASN.1 compiler</refpurpose>
+ </refnamediv>
+ <refsynopsisdiv>
+  <cmdsynopsis>
+   <command>yaz-asncomp</command>
+   <arg choice="opt"><option>-v</option></arg>
+   <arg choice="opt"><option>-c <replaceable>cfile</replaceable></option></arg>
+   <arg choice="opt"><option>-h <replaceable>hfile</replaceable></option></arg>
+   <arg choice="opt"><option>-p <replaceable>pfile</replaceable></option></arg>
+   <arg choice="opt"><option>-d <replaceable>config</replaceable></option></arg>
+   <arg choice="opt"><option>-I <replaceable>includeout</replaceable></option></arg>
+   <arg choice="opt"><option>-i <replaceable>includedir</replaceable></option></arg>
+   <arg choice="opt"><option>-m <replaceable>module</replaceable></option></arg>
+   <arg choice="opt">filename</arg>
+  </cmdsynopsis>
+  
+ </refsynopsisdiv>
+  <refsect1><title>DESCRIPTION</title>
+  <para>
+   <command>yaz-asncomp</command> is an ASN.1 compiler that
+   reads an ASN.1 specification in <replaceable>filename</replaceable>
+   and produces C/C++ definitions and BER encoders/decoders for it.
+  </para>
+  <para>
+   The produced C/C++ code and header files uses the ODR module of YAZ
+   which is a library that encodes/decodes/prints BER packages.
+   <command>yaz-asncomp</command> allows you to specify name of
+   resulting source via options. Alternatively, you can specify
+   a DEFINISIONS file, which provides customized output to
+   many output files - if the ASN.1 specification file consists
+   of many modules.
+  </para>
+  <para>
+   This utility is written in Tcl. Any version of Tcl should work.
+  </para>
+  </refsect1>
+    <refsect1>
+  <title>OPTIONS</title>
+  <variablelist>
+   <varlistentry><term><literal>-v </literal>
+ </term>
+    <listitem>
+     <para>
+      Makes the ASN.1 compiler print more verbose about the
+      various stages of operations. 
+     </para>
+    </listitem>
+   </varlistentry>
+   
+   <varlistentry><term><literal>-c </literal>
+     <replaceable>cfile</replaceable></term>
+    <listitem><para>
+      Specifies the name of the C/C++ file with encoders/decoders.
+     </para></listitem>
+   </varlistentry>
+   
+   <varlistentry><term><literal>-h </literal>
+     <replaceable>hfile</replaceable></term>
+    <listitem><para>
+      Specifies the name of header file with definitions.
+     </para></listitem>
+   </varlistentry>
+   
+   <varlistentry><term><literal>-p </literal>
+     <replaceable>pfile</replaceable></term>
+    <listitem><para>
+      Specifies the name of the a private header file with
+      definitions. By default all definitions are put
+      in header file (option -h).
+     </para></listitem>
+   </varlistentry>
+   
+   <varlistentry><term><literal>-d </literal>
+     <replaceable>dfile</replaceable></term>
+    <listitem><para>
+      Specifies the name of a definitions file.
+     </para></listitem>
+   </varlistentry>
+   
+   <varlistentry><term><literal>-I </literal>
+     <replaceable>iout</replaceable></term>
+    <listitem><para>
+      Specifies first part of directory in which header files
+      are written.
+     </para></listitem>
+   </varlistentry>
+   
+   <varlistentry><term><literal>-i </literal>
+     <replaceable>idir</replaceable></term>
+    <listitem><para>
+      Specifies second part of directory in which header files
+      are written.
+     </para></listitem>
+   </varlistentry>
+   
+   <varlistentry><term><literal>-m </literal>
+     <replaceable>module</replaceable></term>
+    <listitem><para>
+      Specifies that ASN.1 compiler should only process the
+      module given. If this option is not specified,
+      all modules in the ASN.1 file are processed.
+     </para></listitem>
+   </varlistentry>
+   
+  </variablelist>
+ </refsect1>
+ <refsect1><title>DEFINITIONS FILE</title>
+  <para>
+   The definitions file is really a Tcl script but follows
+   traditional rules for Shell like configuration files.
+   That is # denotes the beginning of a comment. Definitions
+   are line oriented. The definitions files usually consists of
+   a series of variable assignments of the form:
+  </para>
+  <para>
+   <literal>set</literal> <replaceable>name</replaceable> <replaceable>value</replaceable>
+  </para>
+  <para>
+   Available variables are:
+   <variablelist>
+    
+    <varlistentry><term><literal>default-prefix</literal></term>
+     <listitem><para>
+       Sets prefix for names in the produced output.
+       The value consists of three tokens: C function prefix,
+       C typedef prefix and preprocessor prefix respectively.
+      </para></listitem>
+    </varlistentry>
+    
+    <varlistentry><term><literal>prefix(</literal><replaceable>module</replaceable><literal>)</literal></term>
+     <listitem><para>
+       This value sets prefix values for module
+       <replaceable>module</replaceable>.
+       The value has same form as <literal>default-prefix</literal>.
+      </para></listitem>
+    </varlistentry>
+    
+    <varlistentry><term><literal>filename(</literal><replaceable>module</replaceable><literal>)</literal></term>
+     <listitem><para>
+       Specifies filename for C/header file for module
+       <replaceable>module</replaceable>.
+      </para></listitem>
+    </varlistentry>
+    
+    <varlistentry><term><literal>init(</literal><replaceable>module</replaceable><literal>,h)</literal></term>
+     <listitem><para>
+       Code fragment to be put in first part of public header for module 
+    <replaceable>module</replaceable>.
+      </para></listitem>
+    </varlistentry>
+    
+    <varlistentry><term><literal>body(</literal><replaceable>module</replaceable><literal>,h)</literal></term>
+     <listitem><para>
+       Code fragment to be put in last part of public header for module 
+    <replaceable>module</replaceable> (trailer).
+      </para></listitem>
+    </varlistentry>
+
+    <varlistentry><term><literal>init(</literal><replaceable>module</replaceable><literal>,c)</literal></term>
+     <listitem><para>
+       Code fragment to be put in first part of C based encoder/decoder for
+       module <replaceable>module</replaceable>.
+      </para></listitem>
+    </varlistentry>
+    
+    <varlistentry><term><literal>body(</literal><replaceable>module</replaceable><literal>,c)</literal></term>
+     <listitem><para>
+       Code fragment to be put in last part of C based encoder/decoder for
+       module <replaceable>module</replaceable> (trailer).
+      </para></listitem>
+    </varlistentry>
+    
+    <varlistentry><term><literal>map(</literal><replaceable>module</replaceable><literal>,</literal><replaceable>name</replaceable><literal>)</literal></term>
+     <listitem><para>
+       Maps ASN.1 type in module <replaceable>module</replaceable> 
+       of <replaceable>name</replaceable> to value.
+      </para></listitem>
+    </varlistentry>
+    
+    <varlistentry><term><literal>membermap(</literal><replaceable>module</replaceable><literal>,</literal><replaceable>name</replaceable><literal>,</literal><replaceable>member</replaceable><literal>)</literal></term>
+     <listitem><para>
+       Maps member <replaceable>member</replaceable> in SEQUENCE/CHOICE of
+       <replaceable>name</replaceable> in module
+       <replaceable>module</replaceable> to value.
+       The value consists of one or two tokens.
+       First token is name of C preprocessor part. Second token
+       is resulting C member name. If second token is omitted
+       the value (one token) is both preprocessor part and
+       C <literal>struct</literal>,<literal>union</literal>.
+      </para></listitem>
+    </varlistentry>
+    
+    <varlistentry><term><literal>unionmap(</literal><replaceable>module</replaceable><literal>,</literal><replaceable>name</replaceable><literal>,</literal><replaceable>member</replaceable><literal>)</literal></term>
+     <listitem><para>
+       Maps member <replaceable>member</replaceable> in CHOICE of
+       <replaceable>name</replaceable> in module
+       <replaceable>module</replaceable> to value.
+       Value consists of to or three tokens. The first token
+       is name of the integer in the <literal>union</literal> that
+       is used as selector for the <literal>union</literal> itself.
+       The second token is name of the <literal>union</literal>.
+       The third token overrides the name of the CHOICE member;
+       if omitted the member name is used.
+      </para></listitem>
+    </varlistentry>
+   </variablelist>
+  </para>
+ </refsect1>
+ <refsect1><title>FILES</title>
+  <para>
+   <filename>/usr/share/yaz/z39.50/z.tcl</filename>
+  </para>
+  <para>
+   <filename>/usr/share/yaz/z39.50/*.asn</filename>
+  </para>
+ </refsect1>
+ <refsect1><title>SEE ALSO</title>
+  <para>
+   <citerefentry>
+    <refentrytitle>yaz</refentrytitle>
+    <manvolnum>7</manvolnum></citerefentry>
+  </para>
+  <para>
+   Section "The ODR Module" in the YAZ manual.
+  </para>
+ </refsect1>
+</refentry>
+
+<!-- Keep this comment at the end of the file
+Local variables:
+mode: sgml
+sgml-omittag:t
+sgml-shorttag:t
+sgml-minimize-attributes:nil
+sgml-always-quote-attributes:t
+sgml-indent-step:1
+sgml-indent-data:t
+sgml-parent-document:nil
+sgml-local-catalogs: nil
+sgml-namecase-general:t
+End:
+-->
diff --git a/doc/yaz-asncomp.sgml b/doc/yaz-asncomp.sgml
deleted file mode 100644 (file)
index f39207f..0000000
+++ /dev/null
@@ -1,254 +0,0 @@
-<!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook V4.1//EN" [
-]>
-<refentry id="yaz-asncomp">
- <refmeta>
-  <refentrytitle>yaz-asncomp</refentrytitle>
-  <manvolnum>1</manvolnum>
- </refmeta>
- <refnamediv>
-  <refname>yaz-asncomp</refname>
-  <refpurpose>YAZ ASN.1 compiler</refpurpose>
- </refnamediv>
- <refsynopsisdiv>
-  <cmdsynopsis>
-   <command>yaz-asncomp</command>
-   <arg choice="opt"><option>-v</option></arg>
-   <arg choice="opt"><option>-c <replaceable>cfile</replaceable></option></arg>
-   <arg choice="opt"><option>-h <replaceable>hfile</replaceable></option></arg>
-   <arg choice="opt"><option>-p <replaceable>pfile</replaceable></option></arg>
-   <arg choice="opt"><option>-d <replaceable>config</replaceable></option></arg>
-   <arg choice="opt"><option>-I <replaceable>includeout</replaceable></option></arg>
-   <arg choice="opt"><option>-i <replaceable>includedir</replaceable></option></arg>
-   <arg choice="opt"><option>-m <replaceable>module</replaceable></option></arg>
-   <arg choice="opt">filename</arg>
-  </cmdsynopsis>
-  
- </refsynopsisdiv>
-  <refsect1><title>DESCRIPTION</title>
-  <para>
-   <command>yaz-asncomp</command> is an ASN.1 compiler that
-   reads an ASN.1 specification in <replaceable>filename</replaceable>
-   and produces C/C++ definitions and BER encoders/decoders for it.
-  </para>
-  <para>
-   The produced C/C++ code and header files uses the ODR module of YAZ
-   which is a library that encodes/decodes/prints BER packages.
-   <command>yaz-asncomp</command> allows you to specify name of
-   resulting source via options. Alternatively, you can specify
-   a DEFINISIONS file, which provides customized output to
-   many output files - if the ASN.1 specification file consists
-   of many modules.
-  </para>
-  <para>
-   This utility is written in Tcl. Any version of Tcl should work.
-  </para>
-  </refsect1>
-    <refsect1>
-  <title>OPTIONS</title>
-  <variablelist>
-   <varlistentry><term><literal>-v </literal>
- </term>
-    <listitem>
-     <para>
-      Makes the ASN.1 compiler print more verbose about the
-      various stages of operations. 
-     </para>
-    </listitem>
-   </varlistentry>
-   
-   <varlistentry><term><literal>-c </literal>
-     <replaceable>cfile</replaceable></term>
-    <listitem><para>
-      Specifies the name of the C/C++ file with encoders/decoders.
-     </para></listitem>
-   </varlistentry>
-   
-   <varlistentry><term><literal>-h </literal>
-     <replaceable>hfile</replaceable></term>
-    <listitem><para>
-      Specifies the name of header file with definitions.
-     </para></listitem>
-   </varlistentry>
-   
-   <varlistentry><term><literal>-p </literal>
-     <replaceable>pfile</replaceable></term>
-    <listitem><para>
-      Specifies the name of the a private header file with
-      definitions. By default all definitions are put
-      in header file (option -h).
-     </para></listitem>
-   </varlistentry>
-   
-   <varlistentry><term><literal>-d </literal>
-     <replaceable>dfile</replaceable></term>
-    <listitem><para>
-      Specifies the name of a definitions file.
-     </para></listitem>
-   </varlistentry>
-   
-   <varlistentry><term><literal>-I </literal>
-     <replaceable>iout</replaceable></term>
-    <listitem><para>
-      Specifies first part of directory in which header files
-      are written.
-     </para></listitem>
-   </varlistentry>
-   
-   <varlistentry><term><literal>-i </literal>
-     <replaceable>idir</replaceable></term>
-    <listitem><para>
-      Specifies second part of directory in which header files
-      are written.
-     </para></listitem>
-   </varlistentry>
-   
-   <varlistentry><term><literal>-m </literal>
-     <replaceable>module</replaceable></term>
-    <listitem><para>
-      Specifies that ASN.1 compiler should only process the
-      module given. If this option is not specified,
-      all modules in the ASN.1 file are processed.
-     </para></listitem>
-   </varlistentry>
-   
-  </variablelist>
- </refsect1>
- <refsect1><title>DEFINITIONS FILE</title>
-  <para>
-   The definitions file is really a Tcl script but follows
-   traditional rules for Shell like configuration files.
-   That is # denotes the beginning of a comment. Definitions
-   are line oriented. The definitions files usually consists of
-   a series of variable assignments of the form:
-  </para>
-  <para>
-   <literal>set</literal> <replaceable>name</replaceable> <replaceable>value</replaceable>
-  </para>
-  <para>
-   Available variables are:
-   <variablelist>
-    
-    <varlistentry><term><literal>default-prefix</literal></term>
-     <listitem><para>
-       Sets prefix for names in the produced output.
-       The value consists of three tokens: C function prefix,
-       C typedef prefix and preprocessor prefix respectively.
-      </para></listitem>
-    </varlistentry>
-    
-    <varlistentry><term><literal>prefix(</literal><replaceable>module</replaceable><literal>)</literal></term>
-     <listitem><para>
-       This value sets prefix values for module
-       <replaceable>module</replaceable>.
-       The value has same form as <literal>default-prefix</literal>.
-      </para></listitem>
-    </varlistentry>
-    
-    <varlistentry><term><literal>filename(</literal><replaceable>module</replaceable><literal>)</literal></term>
-     <listitem><para>
-       Specifies filename for C/header file for module
-       <replaceable>module</replaceable>.
-      </para></listitem>
-    </varlistentry>
-    
-    <varlistentry><term><literal>init(</literal><replaceable>module</replaceable><literal>,h)</literal></term>
-     <listitem><para>
-       Code fragment to be put in first part of public header for module 
-    <replaceable>module</replaceable>.
-      </para></listitem>
-    </varlistentry>
-    
-    <varlistentry><term><literal>body(</literal><replaceable>module</replaceable><literal>,h)</literal></term>
-     <listitem><para>
-       Code fragment to be put in last part of public header for module 
-    <replaceable>module</replaceable> (trailer).
-      </para></listitem>
-    </varlistentry>
-
-    <varlistentry><term><literal>init(</literal><replaceable>module</replaceable><literal>,c)</literal></term>
-     <listitem><para>
-       Code fragment to be put in first part of C based encoder/decoder for
-       module <replaceable>module</replaceable>.
-      </para></listitem>
-    </varlistentry>
-    
-    <varlistentry><term><literal>body(</literal><replaceable>module</replaceable><literal>,c)</literal></term>
-     <listitem><para>
-       Code fragment to be put in last part of C based encoder/decoder for
-       module <replaceable>module</replaceable> (trailer).
-      </para></listitem>
-    </varlistentry>
-    
-    <varlistentry><term><literal>map(</literal><replaceable>module</replaceable><literal>,</literal><replaceable>name</replaceable><literal>)</literal></term>
-     <listitem><para>
-       Maps ASN.1 type in module <replaceable>module</replaceable> 
-       of <replaceable>name</replaceable> to value.
-      </para></listitem>
-    </varlistentry>
-    
-    <varlistentry><term><literal>membermap(</literal><replaceable>module</replaceable><literal>,</literal><replaceable>name</replaceable><literal>,</literal><replaceable>member</replaceable><literal>)</literal></term>
-     <listitem><para>
-       Maps member <replaceable>member</replaceable> in SEQUENCE/CHOICE of
-       <replaceable>name</replaceable> in module
-       <replaceable>module</replaceable> to value.
-       The value consists of one or two tokens.
-       First token is name of C preprocessor part. Second token
-       is resulting C member name. If second token is omitted
-       the value (one token) is both preprocessor part and
-       C <literal>struct</literal>,<literal>union</literal>.
-      </para></listitem>
-    </varlistentry>
-    
-    <varlistentry><term><literal>unionmap(</literal><replaceable>module</replaceable><literal>,</literal><replaceable>name</replaceable><literal>,</literal><replaceable>member</replaceable><literal>)</literal></term>
-     <listitem><para>
-       Maps member <replaceable>member</replaceable> in CHOICE of
-       <replaceable>name</replaceable> in module
-       <replaceable>module</replaceable> to value.
-       Value consists of to or three tokens. The first token
-       is name of the integer in the <literal>union</literal> that
-       is used as selector for the <literal>union</literal> itself.
-       The second token is name of the <literal>union</literal>.
-       The third token overrides the name of the CHOICE member;
-       if omitted the member name is used.
-      </para></listitem>
-    </varlistentry>
-   </variablelist>
-  </para>
- </refsect1>
- <refsect1><title>FILES</title>
-  <para>
-   <filename>/usr/share/yaz/z39.50/z.tcl</filename>
-  </para>
-  <para>
-   <filename>/usr/share/yaz/z39.50/*.asn</filename>
-  </para>
- </refsect1>
- <refsect1><title>SEE ALSO</title>
-  <para>
-   <citerefentry>
-    <refentrytitle>yaz</refentrytitle>
-    <manvolnum>7</manvolnum></citerefentry>
-  </para>
-  <para>
-   Section "The ODR Module" in the YAZ manual.
-  </para>
- </refsect1>
-</refentry>
-
-<!-- Keep this comment at the end of the file
-Local variables:
-mode: sgml
-sgml-omittag:t
-sgml-shorttag:t
-sgml-minimize-attributes:nil
-sgml-always-quote-attributes:t
-sgml-indent-step:1
-sgml-indent-data:t
-sgml-parent-document:nil
-sgml-local-catalogs: nil
-sgml-namecase-general:t
-End:
--->
diff --git a/doc/yaz-client-man.xml b/doc/yaz-client-man.xml
new file mode 100644 (file)
index 0000000..ba3b9bb
--- /dev/null
@@ -0,0 +1,166 @@
+<!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook V4.1//EN" [
+     <!ENTITY yaz-client-commands SYSTEM "yaz-client-commands.xml">
+]>
+<!-- $Id: yaz-client-man.xml,v 1.1 2003-10-27 12:21:24 adam Exp $ -->
+<refentry id="yaz-client">
+ <refmeta>
+  <refentrytitle>yaz-client</refentrytitle>
+  <manvolnum>1</manvolnum>
+ </refmeta>
+ <refnamediv>
+  <refname>yaz-client</refname>
+  <refpurpose>Z39.50/SRW client for implementors</refpurpose>
+ </refnamediv>
+
+ <refsynopsisdiv>
+  <cmdsynopsis>
+   <command>yaz-client</command>
+   <arg choice="opt"><option>-m <replaceable>filename</replaceable></option></arg>
+   <arg choice="opt"><option>-a <replaceable>filename</replaceable></option></arg>
+   <arg choice="opt"><option>-c <replaceable>filename</replaceable></option></arg>
+   <arg choice="opt"><option>-q <replaceable>filename</replaceable></option></arg>
+   <arg choice="opt"><option>-p <replaceable>addr</replaceable></option></arg>
+   <arg choice="opt"><option>-u <replaceable>auth</replaceable></option></arg>
+   <arg choice="opt"><option>-k <replaceable>size</replaceable></option></arg>
+   <arg choice="opt"><option>-x</option></arg>
+   <arg choice="opt">addr</arg>
+  </cmdsynopsis>
+
+  <cmdsynopsis>
+   <command>yaz-client-ssl</command>
+   <arg rep="repeat" choice="opt"><option>option</option></arg>
+   <arg choice="opt">addr</arg>
+  </cmdsynopsis>
+
+ </refsynopsisdiv>
+  
+  <refsect1><title>DESCRIPTION</title>
+   <para>
+    <command>yaz-client</command> is a Z39.50/SRW client (origin) with a
+    simple command line interface that allows you to test behavior and
+    performance of Z39.50 targets and SRW servers.
+   </para>
+   <para>
+    <command>yaz-client-ssl</command> is identical to
+    <command>yaz-client</command> except that it supports SSL transport.
+   </para>
+   <para>
+    If the <replaceable>addr</replaceable> is specified, the client creates
+    a connection to the Z39.50/SRW target at the address.
+   </para>
+  </refsect1>
+  <refsect1>
+   <title>OPTIONS</title>
+   <variablelist>
+    <varlistentry>
+     <term>-m <replaceable>filename</replaceable></term>
+     <listitem><para>
+       If specified, retrieved MARC (ISO2709) records will
+       be appended to the file given.
+      </para></listitem>
+    </varlistentry>
+    <varlistentry>
+     <term>-a <replaceable>filename</replaceable></term>
+     <listitem><para>
+       If specified, logging of protocol packages will be appended
+       file given. The special filename <literal>-</literal>
+       (dash) denotes standard output.
+      </para></listitem>
+    </varlistentry>
+    <varlistentry>
+     <term>-u <replaceable>auth</replaceable></term>
+     <listitem><para>
+       If specified, the <replaceable>auth</replaceable> string
+       will be used for authentication.
+      </para></listitem>
+    </varlistentry>
+    <varlistentry>
+     <term>-c <replaceable>filename</replaceable></term>
+     <listitem><para>
+       If specified, CCL configuration will be read from
+       the file given.
+      </para></listitem>
+    </varlistentry>
+    <varlistentry>
+     <term>-q <replaceable>filename</replaceable></term>
+     <listitem><para>
+       If specified, CQL configuration will be read from
+       the file given.
+      </para></listitem>
+    </varlistentry>
+
+    <varlistentry>
+     <term>-p <replaceable>addr</replaceable></term>
+     <listitem><para>
+       If specified, the client will use the proxy at the address
+       given.
+      </para></listitem>
+    </varlistentry>
+
+    <varlistentry>
+     <term>-k <replaceable>size</replaceable></term>
+     <listitem><para>
+      Sets preferred messages and maximum record size for Initialize
+      Request in kilobytes. Default value is 1024 (1 MB).
+      </para></listitem>
+    </varlistentry>
+
+    <varlistentry>
+     <term>-x</term>
+    <listitem><para>
+      Makes the YAZ client print hex dumps of packages sent and received
+      on standard output.
+      </para></listitem>
+    </varlistentry>
+   </variablelist>
+  </refsect1>
+  <refsect1>
+   <title>COMMANDS</title>
+   <para>
+    The YAZ client accepts the following commands.
+   </para>
+   &yaz-client-commands;
+   </refsect1>
+  <refsect1><title>FILES</title>
+   <para>
+    <filename>yaz-&lt;version&gt;/client/client.c</filename>
+   </para>
+  </refsect1>
+  <refsect1><title>SEE ALSO</title>
+   <para>
+    <citerefentry>
+     <refentrytitle>yaz</refentrytitle>
+     <manvolnum>7</manvolnum>
+    </citerefentry>
+   </para>
+   <para>
+    Section "The YAZ Client" in the YAZ manual.
+   </para>
+   <para id="PQF">
+    Section "Prefix Query Format" in the YAZ manual.
+   </para>
+   <para id="CCL">
+    Section "Common Command Language" in the YAZ manual.
+   </para>
+   <para id="CQL">
+    Section "Common QUery Language" in the YAZ manual.
+   </para>
+  </refsect1>
+</refentry>
+
+<!-- Keep this comment at the end of the file
+Local variables:
+mode: sgml
+sgml-omittag:t
+sgml-shorttag:t
+sgml-minimize-attributes:nil
+sgml-always-quote-attributes:t
+sgml-indent-step:1
+sgml-indent-data:t
+sgml-parent-document:nil
+sgml-local-catalogs: nil
+sgml-namecase-general:t
+End:
+-->
diff --git a/doc/yaz-client.sgml b/doc/yaz-client.sgml
deleted file mode 100644 (file)
index 1475ba4..0000000
+++ /dev/null
@@ -1,166 +0,0 @@
-<!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook V4.1//EN" [
-     <!ENTITY yaz-client-commands SYSTEM "yaz-client-commands.xml">
-]>
-<!-- $Id: yaz-client.sgml,v 1.7 2003-10-17 14:14:10 adam Exp $ -->
-<refentry id="yaz-client">
- <refmeta>
-  <refentrytitle>yaz-client</refentrytitle>
-  <manvolnum>1</manvolnum>
- </refmeta>
- <refnamediv>
-  <refname>yaz-client</refname>
-  <refpurpose>Z39.50/SRW client for implementors</refpurpose>
- </refnamediv>
-
- <refsynopsisdiv>
-  <cmdsynopsis>
-   <command>yaz-client</command>
-   <arg choice="opt"><option>-m <replaceable>filename</replaceable></option></arg>
-   <arg choice="opt"><option>-a <replaceable>filename</replaceable></option></arg>
-   <arg choice="opt"><option>-c <replaceable>filename</replaceable></option></arg>
-   <arg choice="opt"><option>-q <replaceable>filename</replaceable></option></arg>
-   <arg choice="opt"><option>-p <replaceable>addr</replaceable></option></arg>
-   <arg choice="opt"><option>-u <replaceable>auth</replaceable></option></arg>
-   <arg choice="opt"><option>-k <replaceable>size</replaceable></option></arg>
-   <arg choice="opt"><option>-x</option></arg>
-   <arg choice="opt">addr</arg>
-  </cmdsynopsis>
-
-  <cmdsynopsis>
-   <command>yaz-client-ssl</command>
-   <arg rep="repeat" choice="opt"><option>option</option></arg>
-   <arg choice="opt">addr</arg>
-  </cmdsynopsis>
-
- </refsynopsisdiv>
-  
-  <refsect1><title>DESCRIPTION</title>
-   <para>
-    <command>yaz-client</command> is a Z39.50/SRW client (origin) with a
-    simple command line interface that allows you to test behavior and
-    performance of Z39.50 targets and SRW servers.
-   </para>
-   <para>
-    <command>yaz-client-ssl</command> is identical to
-    <command>yaz-client</command> except that it supports SSL transport.
-   </para>
-   <para>
-    If the <replaceable>addr</replaceable> is specified, the client creates
-    a connection to the Z39.50/SRW target at the address.
-   </para>
-  </refsect1>
-  <refsect1>
-   <title>OPTIONS</title>
-   <variablelist>
-    <varlistentry>
-     <term>-m <replaceable>filename</replaceable></term>
-     <listitem><para>
-       If specified, retrieved MARC (ISO2709) records will
-       be appended to the file given.
-      </para></listitem>
-    </varlistentry>
-    <varlistentry>
-     <term>-a <replaceable>filename</replaceable></term>
-     <listitem><para>
-       If specified, logging of protocol packages will be appended
-       file given. The special filename <literal>-</literal>
-       (dash) denotes standard output.
-      </para></listitem>
-    </varlistentry>
-    <varlistentry>
-     <term>-u <replaceable>auth</replaceable></term>
-     <listitem><para>
-       If specified, the <replaceable>auth</replaceable> string
-       will be used for authentication.
-      </para></listitem>
-    </varlistentry>
-    <varlistentry>
-     <term>-c <replaceable>filename</replaceable></term>
-     <listitem><para>
-       If specified, CCL configuration will be read from
-       the file given.
-      </para></listitem>
-    </varlistentry>
-    <varlistentry>
-     <term>-q <replaceable>filename</replaceable></term>
-     <listitem><para>
-       If specified, CQL configuration will be read from
-       the file given.
-      </para></listitem>
-    </varlistentry>
-
-    <varlistentry>
-     <term>-p <replaceable>addr</replaceable></term>
-     <listitem><para>
-       If specified, the client will use the proxy at the address
-       given.
-      </para></listitem>
-    </varlistentry>
-
-    <varlistentry>
-     <term>-k <replaceable>size</replaceable></term>
-     <listitem><para>
-      Sets preferred messages and maximum record size for Initialize
-      Request in kilobytes. Default value is 1024 (1 MB).
-      </para></listitem>
-    </varlistentry>
-
-    <varlistentry>
-     <term>-x</term>
-    <listitem><para>
-      Makes the YAZ client print hex dumps of packages sent and received
-      on standard output.
-      </para></listitem>
-    </varlistentry>
-   </variablelist>
-  </refsect1>
-  <refsect1>
-   <title>COMMANDS</title>
-   <para>
-    The YAZ client accepts the following commands.
-   </para>
-   &yaz-client-commands;
-   </refsect1>
-  <refsect1><title>FILES</title>
-   <para>
-    <filename>yaz-&lt;version&gt;/client/client.c</filename>
-   </para>
-  </refsect1>
-  <refsect1><title>SEE ALSO</title>
-   <para>
-    <citerefentry>
-     <refentrytitle>yaz</refentrytitle>
-     <manvolnum>7</manvolnum>
-    </citerefentry>
-   </para>
-   <para>
-    Section "The YAZ Client" in the YAZ manual.
-   </para>
-   <para id="PQF">
-    Section "Prefix Query Format" in the YAZ manual.
-   </para>
-   <para id="CCL">
-    Section "Common Command Language" in the YAZ manual.
-   </para>
-   <para id="CQL">
-    Section "Common QUery Language" in the YAZ manual.
-   </para>
-  </refsect1>
-</refentry>
-
-<!-- Keep this comment at the end of the file
-Local variables:
-mode: sgml
-sgml-omittag:t
-sgml-shorttag:t
-sgml-minimize-attributes:nil
-sgml-always-quote-attributes:t
-sgml-indent-step:1
-sgml-indent-data:t
-sgml-parent-document:nil
-sgml-local-catalogs: nil
-sgml-namecase-general:t
-End:
--->
diff --git a/doc/yaz-config-man.xml b/doc/yaz-config-man.xml
new file mode 100644 (file)
index 0000000..c5bc8ee
--- /dev/null
@@ -0,0 +1,137 @@
+<!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook V4.1//EN">
+<!-- $Id: yaz-config-man.xml,v 1.1 2003-10-27 12:21:24 adam Exp $ -->
+<refentry id="yaz-config">
+ <refmeta>
+  <refentrytitle>yaz-config</refentrytitle>
+  <manvolnum>8</manvolnum>
+ </refmeta>
+ <refnamediv>
+  <refname>yaz-config</refname>
+  <refpurpose>Script to get information about YAZ.</refpurpose>
+ </refnamediv>
+ <refsynopsisdiv>
+  <cmdsynopsis>
+   <command>yaz-config</command>
+   <arg choice="opt"><option>--prefix[=<replaceable>DIR</replaceable>]</option></arg>
+   <arg choice="opt"><option>--version</option></arg>
+   <arg choice="opt"><option>--libs</option></arg>
+   <arg choice="opt"><option>--lalibs</option></arg>
+   <arg choice="opt"><option>--cflags</option></arg>
+   <arg choice="opt"><option>--tabs</option></arg>
+   <arg choice="opt" rep="repeat">libraries</arg>
+  </cmdsynopsis>
+ </refsynopsisdiv>
+ <refsect1><title>DESCRIPTION</title>
+  <para>
+   <command>yaz-config</command> is a script that returns information
+   that your own software should use to build software that uses YAZ.
+  </para>
+
+  <para>
+   The following libraries are supported:
+  </para>
+
+  <variablelist>
+   <varlistentry>
+    <term>threads</term>
+    <listitem><para>
+      Use the threaded version of YAZ.
+     </para></listitem>
+   </varlistentry>
+   <varlistentry>
+    <term>ssl</term>
+    <listitem><para>
+      Use YAZ with SSL support.
+     </para></listitem>
+   </varlistentry>
+  </variablelist>
+  
+ </refsect1>
+ <refsect1><title>OPTIONS</title>
+  
+  <variablelist>
+   <varlistentry>
+    <term>--prefix[=<replaceable>DIR</replaceable>]</term>
+    <listitem><para>
+      Returns prefix of YAZ or assume a different one if DIR is
+      specified.
+     </para></listitem>
+   </varlistentry>
+
+   <varlistentry>
+    <term>--version</term>
+    <listitem><para>
+      Returns version of YAZ.
+     </para></listitem>
+   </varlistentry>
+
+   <varlistentry>
+    <term>--libs</term>
+    <listitem><para>
+      Library specification be used when using YAZ.
+     </para></listitem>
+   </varlistentry>
+
+   <varlistentry>
+    <term>--lalibs</term>
+    <listitem><para>
+      Return library specification.
+     </para></listitem>
+   </varlistentry>
+
+   <varlistentry>
+    <term>--cflags</term>
+    <listitem><para>
+      Return C Compiler flags.
+     </para></listitem>
+   </varlistentry>
+
+   <varlistentry>
+    <term>--tabs</term>
+    <listitem><para>
+      Return directory of YAZ tables.
+     </para></listitem>
+   </varlistentry>
+
+  </variablelist>
+ </refsect1>
+ <refsect1><title>FILES</title>
+  <para>
+   <filename><replaceable>prefix</replaceable>/bin/yaz-config</filename>
+  </para>
+  <para>
+   <filename><replaceable>prefix</replaceable>/lib/libyaz*.a</filename>
+  </para>
+  <para>
+   <filename><replaceable>prefix</replaceable>/include/yaz/*.h</filename>
+  </para>
+  </refsect1>
+ <refsect1><title>SEE ALSO</title>
+  <para>
+   yaz(7)
+  </para>
+  <para>
+   Section "How to make apps using YAZ on UNIX" in the YAZ manual.
+  </para>
+ </refsect1>
+</refentry>
+
+<!-- Keep this comment at the end of the file
+Local variables:
+mode: sgml
+sgml-omittag:t
+sgml-shorttag:t
+sgml-minimize-attributes:nil
+sgml-always-quote-attributes:t
+sgml-indent-step:1
+sgml-indent-data:t
+sgml-parent-document:nil
+sgml-local-catalogs: nil
+sgml-namecase-general:t
+End:
+-->
diff --git a/doc/yaz-config.sgml b/doc/yaz-config.sgml
deleted file mode 100644 (file)
index 5234fa1..0000000
+++ /dev/null
@@ -1,137 +0,0 @@
-<!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook V4.1//EN">
-<!-- $Id: yaz-config.sgml,v 1.3 2003-04-28 21:02:16 adam Exp $ -->
-<refentry id="yaz-config">
- <refmeta>
-  <refentrytitle>yaz-config</refentrytitle>
-  <manvolnum>8</manvolnum>
- </refmeta>
- <refnamediv>
-  <refname>yaz-config</refname>
-  <refpurpose>Script to get information about YAZ.</refpurpose>
- </refnamediv>
- <refsynopsisdiv>
-  <cmdsynopsis>
-   <command>yaz-config</command>
-   <arg choice="opt"><option>--prefix[=<replaceable>DIR</replaceable>]</option></arg>
-   <arg choice="opt"><option>--version</option></arg>
-   <arg choice="opt"><option>--libs</option></arg>
-   <arg choice="opt"><option>--lalibs</option></arg>
-   <arg choice="opt"><option>--cflags</option></arg>
-   <arg choice="opt"><option>--tabs</option></arg>
-   <arg choice="opt" rep="repeat">libraries</arg>
-  </cmdsynopsis>
- </refsynopsisdiv>
- <refsect1><title>DESCRIPTION</title>
-  <para>
-   <command>yaz-config</command> is a script that returns information
-   that your own software should use to build software that uses YAZ.
-  </para>
-
-  <para>
-   The following libraries are supported:
-  </para>
-
-  <variablelist>
-   <varlistentry>
-    <term>threads</term>
-    <listitem><para>
-      Use the threaded version of YAZ.
-     </para></listitem>
-   </varlistentry>
-   <varlistentry>
-    <term>ssl</term>
-    <listitem><para>
-      Use YAZ with SSL support.
-     </para></listitem>
-   </varlistentry>
-  </variablelist>
-  
- </refsect1>
- <refsect1><title>OPTIONS</title>
-  
-  <variablelist>
-   <varlistentry>
-    <term>--prefix[=<replaceable>DIR</replaceable>]</term>
-    <listitem><para>
-      Returns prefix of YAZ or assume a different one if DIR is
-      specified.
-     </para></listitem>
-   </varlistentry>
-
-   <varlistentry>
-    <term>--version</term>
-    <listitem><para>
-      Returns version of YAZ.
-     </para></listitem>
-   </varlistentry>
-
-   <varlistentry>
-    <term>--libs</term>
-    <listitem><para>
-      Library specification be used when using YAZ.
-     </para></listitem>
-   </varlistentry>
-
-   <varlistentry>
-    <term>--lalibs</term>
-    <listitem><para>
-      Return library specification.
-     </para></listitem>
-   </varlistentry>
-
-   <varlistentry>
-    <term>--cflags</term>
-    <listitem><para>
-      Return C Compiler flags.
-     </para></listitem>
-   </varlistentry>
-
-   <varlistentry>
-    <term>--tabs</term>
-    <listitem><para>
-      Return directory of YAZ tables.
-     </para></listitem>
-   </varlistentry>
-
-  </variablelist>
- </refsect1>
- <refsect1><title>FILES</title>
-  <para>
-   <filename><replaceable>prefix</replaceable>/bin/yaz-config</filename>
-  </para>
-  <para>
-   <filename><replaceable>prefix</replaceable>/lib/libyaz*.a</filename>
-  </para>
-  <para>
-   <filename><replaceable>prefix</replaceable>/include/yaz/*.h</filename>
-  </para>
-  </refsect1>
- <refsect1><title>SEE ALSO</title>
-  <para>
-   yaz(7)
-  </para>
-  <para>
-   Section "How to make apps using YAZ on UNIX" in the YAZ manual.
-  </para>
- </refsect1>
-</refentry>
-
-<!-- Keep this comment at the end of the file
-Local variables:
-mode: sgml
-sgml-omittag:t
-sgml-shorttag:t
-sgml-minimize-attributes:nil
-sgml-always-quote-attributes:t
-sgml-indent-step:1
-sgml-indent-data:t
-sgml-parent-document:nil
-sgml-local-catalogs: nil
-sgml-namecase-general:t
-End:
--->
diff --git a/doc/yaz-man.sgml b/doc/yaz-man.sgml
deleted file mode 100644 (file)
index 0fbd363..0000000
+++ /dev/null
@@ -1,109 +0,0 @@
-<!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook V4.1//EN">
-<!-- $Id: yaz-man.sgml,v 1.6 2003-05-14 21:12:41 adam Exp $ -->
-<refentry id="yaz">
- <refmeta>
-  <refentrytitle>yaz</refentrytitle>
-  <manvolnum>7</manvolnum>
- </refmeta>
- <refnamediv>
-  <refname>YAZ</refname>
-  <refpurpose>Z39.50 toolkit.</refpurpose>
- </refnamediv>
- <refsynopsisdiv>
-  <cmdsynopsis>
-   <command>YAZ</command>
-  </cmdsynopsis>
- </refsynopsisdiv>
- <refsect1><title>DESCRIPTION</title>
-  <para>
-   YAZ is a C/C++ programmer's toolkit supporting the development
-   of Z39.50v3 clients and servers. The YAZ toolkit offers
-   several different levels of access to the ISO23950/Z39.50, SRW/SRU
-   and ILL protocols. The level that you need to use depends
-   on your requirements, and the role (server of client) that you want
-   to implement.
-  </para>
- </refsect1>
-
- <refsect1><title>COPYRIGHT</title>
-  <para>
-   Copyright (c) 1995-2003, Index Data.
-  </para>
-  <para>
-   Permission to use, copy, modify, distribute, and sell this software and
-   its documentation, in whole or in part, for any purpose, is hereby granted,
-   provided that:
-  </para>
-  <para>
-   1. This copyright and permission notice appear in all copies of the
-   software and its documentation. Notices of copyright or attribution
-   which appear at the beginning of any file must remain unchanged.
-  </para>
-  <para>
-   2. The names of Index Data or the individual authors may not be used to
-   endorse or promote products derived from this software without specific
-   prior written permission.
-  </para>
-  
-  <para>
-   THIS SOFTWARE IS PROVIDED "AS IS" AND WITHOUT WARRANTY OF ANY KIND,
-   EXPRESS, IMPLIED, OR OTHERWISE, INCLUDING WITHOUT LIMITATION, ANY
-   WARRANTY OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.
-   IN NO EVENT SHALL INDEX DATA BE LIABLE FOR ANY SPECIAL, INCIDENTAL,
-   INDIRECT OR CONSEQUENTIAL DAMAGES OF ANY KIND, OR ANY DAMAGES
-   WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER OR
-   NOT ADVISED OF THE POSSIBILITY OF DAMAGE, AND ON ANY THEORY OF
-   LIABILITY, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE
-   OF THIS SOFTWARE.
-  </para>
- </refsect1>
- <refsect1><title>SEE ALSO</title>
-  <para>
-    <citerefentry>
-     <refentrytitle>yaz-client</refentrytitle>
-     <manvolnum>1</manvolnum>
-    </citerefentry>,
-    <citerefentry>
-     <refentrytitle>yaz-ztest</refentrytitle>
-     <manvolnum>8</manvolnum>
-    </citerefentry>,
-    <citerefentry>
-     <refentrytitle>yaz-config</refentrytitle>
-     <manvolnum>8</manvolnum>
-    </citerefentry>,
-    <citerefentry>
-     <refentrytitle>zoomsh</refentrytitle>
-     <manvolnum>1</manvolnum>
-    </citerefentry>
-  </para>
-  <para>YAZ manual (
-   <filename><replaceable>prefix</replaceable>/share/doc/yaz</filename>)
-  </para>
-  <para>
-   <ulink url="http://www.indexdata.dk/yaz/">YAZ home page</ulink>.
-  </para>
-  <para>
-   <ulink url="http://www.loc.gov/z3950/agency/">Z39.50 Maintenance
-    Agency Page</ulink>.
-  </para>
- </refsect1>
-</refentry>
-
-<!-- Keep this comment at the end of the file
-Local variables:
-mode: sgml
-sgml-omittag:t
-sgml-shorttag:t
-sgml-minimize-attributes:nil
-sgml-always-quote-attributes:t
-sgml-indent-step:1
-sgml-indent-data:t
-sgml-parent-document:nil
-sgml-local-catalogs: nil
-sgml-namecase-general:t
-End:
--->
diff --git a/doc/yaz-man.xml b/doc/yaz-man.xml
new file mode 100644 (file)
index 0000000..4c6bc7a
--- /dev/null
@@ -0,0 +1,109 @@
+<!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook V4.1//EN">
+<!-- $Id: yaz-man.xml,v 1.1 2003-10-27 12:21:24 adam Exp $ -->
+<refentry id="yaz">
+ <refmeta>
+  <refentrytitle>yaz</refentrytitle>
+  <manvolnum>7</manvolnum>
+ </refmeta>
+ <refnamediv>
+  <refname>YAZ</refname>
+  <refpurpose>Z39.50 toolkit.</refpurpose>
+ </refnamediv>
+ <refsynopsisdiv>
+  <cmdsynopsis>
+   <command>YAZ</command>
+  </cmdsynopsis>
+ </refsynopsisdiv>
+ <refsect1><title>DESCRIPTION</title>
+  <para>
+   YAZ is a C/C++ programmer's toolkit supporting the development
+   of Z39.50v3 clients and servers. The YAZ toolkit offers
+   several different levels of access to the ISO23950/Z39.50, SRW/SRU
+   and ILL protocols. The level that you need to use depends
+   on your requirements, and the role (server of client) that you want
+   to implement.
+  </para>
+ </refsect1>
+
+ <refsect1><title>COPYRIGHT</title>
+  <para>
+   Copyright (c) 1995-2003, Index Data.
+  </para>
+  <para>
+   Permission to use, copy, modify, distribute, and sell this software and
+   its documentation, in whole or in part, for any purpose, is hereby granted,
+   provided that:
+  </para>
+  <para>
+   1. This copyright and permission notice appear in all copies of the
+   software and its documentation. Notices of copyright or attribution
+   which appear at the beginning of any file must remain unchanged.
+  </para>
+  <para>
+   2. The names of Index Data or the individual authors may not be used to
+   endorse or promote products derived from this software without specific
+   prior written permission.
+  </para>
+  
+  <para>
+   THIS SOFTWARE IS PROVIDED "AS IS" AND WITHOUT WARRANTY OF ANY KIND,
+   EXPRESS, IMPLIED, OR OTHERWISE, INCLUDING WITHOUT LIMITATION, ANY
+   WARRANTY OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.
+   IN NO EVENT SHALL INDEX DATA BE LIABLE FOR ANY SPECIAL, INCIDENTAL,
+   INDIRECT OR CONSEQUENTIAL DAMAGES OF ANY KIND, OR ANY DAMAGES
+   WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER OR
+   NOT ADVISED OF THE POSSIBILITY OF DAMAGE, AND ON ANY THEORY OF
+   LIABILITY, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE
+   OF THIS SOFTWARE.
+  </para>
+ </refsect1>
+ <refsect1><title>SEE ALSO</title>
+  <para>
+    <citerefentry>
+     <refentrytitle>yaz-client</refentrytitle>
+     <manvolnum>1</manvolnum>
+    </citerefentry>,
+    <citerefentry>
+     <refentrytitle>yaz-ztest</refentrytitle>
+     <manvolnum>8</manvolnum>
+    </citerefentry>,
+    <citerefentry>
+     <refentrytitle>yaz-config</refentrytitle>
+     <manvolnum>8</manvolnum>
+    </citerefentry>,
+    <citerefentry>
+     <refentrytitle>zoomsh</refentrytitle>
+     <manvolnum>1</manvolnum>
+    </citerefentry>
+  </para>
+  <para>YAZ manual (
+   <filename><replaceable>prefix</replaceable>/share/doc/yaz</filename>)
+  </para>
+  <para>
+   <ulink url="http://www.indexdata.dk/yaz/">YAZ home page</ulink>.
+  </para>
+  <para>
+   <ulink url="http://www.loc.gov/z3950/agency/">Z39.50 Maintenance
+    Agency Page</ulink>.
+  </para>
+ </refsect1>
+</refentry>
+
+<!-- Keep this comment at the end of the file
+Local variables:
+mode: sgml
+sgml-omittag:t
+sgml-shorttag:t
+sgml-minimize-attributes:nil
+sgml-always-quote-attributes:t
+sgml-indent-step:1
+sgml-indent-data:t
+sgml-parent-document:nil
+sgml-local-catalogs: nil
+sgml-namecase-general:t
+End:
+-->
diff --git a/doc/yaz-marcdump-man.xml b/doc/yaz-marcdump-man.xml
new file mode 100644 (file)
index 0000000..607c75a
--- /dev/null
@@ -0,0 +1,140 @@
+<!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook V4.1//EN">
+<!-- $Id: yaz-marcdump-man.xml,v 1.1 2003-10-27 12:21:24 adam Exp $ -->
+<refentry id="yaz-marcdump">
+ <refmeta>
+  <refentrytitle>yaz-marcdump</refentrytitle>
+  <manvolnum>1</manvolnum>
+ </refmeta>
+ <refnamediv>
+  <refname>yaz-marcdump</refname>
+  <refpurpose>MARC record dump utility</refpurpose>
+ </refnamediv>
+ <refsynopsisdiv>
+  <cmdsynopsis>
+   <command>yaz-marcdump</command>
+   <arg choice="opt"><option>-x</option></arg>
+   <arg choice="opt"><option>-X</option></arg>
+   <arg choice="opt"><option>-O</option></arg>
+   <arg choice="opt"><option>-f <replaceable>from</replaceable></option></arg>
+   <arg choice="opt"><option>-t <replaceable>to</replaceable></option></arg>
+   <arg choice="opt"><option>-v</option></arg>
+   <arg choice="opt"><option>-c <replaceable>cfile</replaceable></option></arg>
+   <arg choice="opt" rep="repeat">file</arg>
+  </cmdsynopsis>
+ </refsynopsisdiv>
+ <refsect1><title>DESCRIPTION</title>
+  <para>
+   <command>yaz-marcdump</command> reads ISO2709/MARC records from one or
+   more files.
+   It validates each record and supports output in line-format, 
+   MARCXML, OAIMARC as well as Hex output.
+  </para>
+  <para>
+   By default, each record is printed to standard output in a line
+   format with newline for each field, $x for each subfield x.
+  </para>
+  <para>
+   <command>yaz-marcdump</command> can also be requested to perform
+   character set conversion of each record.
+  </para>
+ </refsect1>
+ <refsect1><title>OPTIONS</title>
+  
+  <variablelist>
+   <varlistentry>
+    <term>-x</term>
+    <listitem><para>
+      Print MARC records in a simple XML format. 
+      This format is equivalent to YAZ_MARC_SIMPLEXML in
+      <filename>yaz/marcdisp.h</filename>.
+     </para></listitem>
+   </varlistentry>
+
+   <varlistentry>
+    <term>-X</term>
+    <listitem><para>
+      Print MARC records in MARCXML.
+      This format is equivalent to YAZ_MARC_MARCXML in
+      <filename>yaz/marcdisp.h</filename>.
+     </para></listitem>
+   </varlistentry>
+
+   <varlistentry>
+    <term>-O</term>
+    <listitem><para>
+      Print MARC records in OAIMARC. Another XML variant.
+      This format is equivalent to YAZ_MARC_OAIMARC in
+      <filename>yaz/marcdisp.h</filename>.
+     </para></listitem>
+   </varlistentry>
+   
+   <varlistentry>
+    <term>-f<replaceable>from</replaceable>]</term>
+    <listitem><para>
+      Specify the character set <replaceable>from</replaceable>
+      of the input MARC record.
+      Should be used in conjunction with option <literal>-t</literal>.
+     </para></listitem>
+   </varlistentry>
+
+   <varlistentry>
+    <term>-t<replaceable>to</replaceable>]</term>
+    <listitem><para>
+      Specify the character set <replaceable>of</replaceable>
+      of the output.
+      Should be used in conjunction with option <literal>-f</literal>.
+     </para></listitem>
+   </varlistentry>
+
+   <varlistentry>
+    <term>-v</term>
+    <listitem><para>
+      Print more information about the parsing process.
+      Useful if you have ill-formatted ISO2709 records as input.
+     </para></listitem>
+   </varlistentry>
+
+  </variablelist>
+ </refsect1>
+
+ <refsect1><title>EXAMPLES</title>
+  <para>
+   The following command converts MARC21/USMARC using MARC-8 encoding to
+   MARCXML in UTF-8 encoding.
+   <screen>
+    yaz-marcdump -f MARC-8 -t UTF-8 -X marc21.raw >marcxml.xml
+   </screen>
+  </para>
+ </refsect1> 
+
+ <refsect1><title>FILES</title>
+  <para>
+   <filename><replaceable>prefix</replaceable>/bin/yaz-marcdump</filename>
+   <filename><replaceable>prefix</replaceable>/include/yaz/marcdisp.h</filename>
+  </para>
+  </refsect1>
+ <refsect1><title>SEE ALSO</title>
+  <para>
+   yaz(7)
+  </para>
+ </refsect1>
+</refentry>
+
+<!-- Keep this comment at the end of the file
+Local variables:
+mode: sgml
+sgml-omittag:t
+sgml-shorttag:t
+sgml-minimize-attributes:nil
+sgml-always-quote-attributes:t
+sgml-indent-step:1
+sgml-indent-data:t
+sgml-parent-document:nil
+sgml-local-catalogs: nil
+sgml-namecase-general:t
+End:
+-->
diff --git a/doc/yaz-ztest-man.xml b/doc/yaz-ztest-man.xml
new file mode 100644 (file)
index 0000000..c172f03
--- /dev/null
@@ -0,0 +1,104 @@
+<!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook V4.1//EN" [
+     <!ENTITY ztest-options SYSTEM "ztest-options.xml">
+]>
+<!-- $Id: yaz-ztest-man.xml,v 1.1 2003-10-27 12:21:24 adam Exp $ -->
+<refentry id="yaz-ztest">
+ <refmeta>
+  <refentrytitle>yaz-ztest</refentrytitle>
+  <manvolnum>8</manvolnum>
+ </refmeta>
+ <refnamediv>
+  <refname>yaz-ztest</refname>
+  <refpurpose>Z39.50 Test Server</refpurpose>
+ </refnamediv>
+ <refsynopsisdiv>
+  <cmdsynopsis>
+   <command>yaz-ztest</command>
+   <arg choice="opt"><option>-a <replaceable>file</replaceable></option></arg>
+   <arg choice="opt"><option>-v <replaceable>level</replaceable></option></arg>
+   <arg choice="opt"><option>-l <replaceable>file</replaceable></option></arg>
+   <arg choice="opt"><option>-u <replaceable>uid</replaceable></option></arg>
+   <arg choice="opt"><option>-c <replaceable>config</replaceable></option></arg>
+   <arg choice="opt"><option>-t <replaceable>minutes</replaceable></option></arg>
+   <arg choice="opt"><option>-k <replaceable>kilobytes</replaceable></option></arg>
+   <arg choice="opt"><option>-d <replaceable>daemon</replaceable></option></arg>
+   <arg choice="opt"><option>-w <replaceable>dir</replaceable></option></arg>
+   <arg choice="opt"><option>-ziST1</option></arg>
+   <arg choice="opt" rep="repeat">listener-spec</arg>
+  </cmdsynopsis>
+
+  <cmdsynopsis>
+   <command>yaz-ztest-ssl</command>
+   <arg rep="repeat" choice="opt"><option>option</option></arg>
+   <arg choice="opt" rep="repeat">addr</arg>
+  </cmdsynopsis>
+
+ </refsynopsisdiv>
+  <refsect1><title>DESCRIPTION</title>
+   <para>
+    <command>yaz-ztest</command> is a Z39.50 test server. 
+    The server acts as a real Z39.50 server but does not use a database.
+    It returns a random hit count and returns a subset of a few built-in
+    records.
+   </para>
+   <para>
+    <command>yaz-ztest-ssl</command> is identical to
+    <command>yaz-ztest</command> except that it supports SSL transport.
+   </para>
+   <para>
+    The <replaceable>listener-spec</replaceable> consists of a transport
+    mode followed by a colon, followed by a listener address. The
+    transport mode is either <literal>tcp</literal>, <literal>unix</literal>,
+    or <literal>ssl</literal> (<command>yaz-ztest-ssl</command> only).
+   </para>
+   <para>
+    For TCP and SSL, an address has the form:
+    <screen>
+     hostname | IP-number [ : portnumber ]
+    </screen>
+   </para>
+   <para>
+    For UNIX local socket the address is the filename of the local socket.
+   </para>
+  </refsect1>
+  <refsect1>
+   <title>OPTIONS</title>
+   &ztest-options;
+  </refsect1>
+  <refsect1><title>FILES</title>
+   <para>
+    <filename>yaz-&lt;version&gt;/ztest/yaz-ztest.c</filename>
+   </para>
+   <para>
+    <filename>yaz-&lt;version&gt;/include/yaz/backend.h</filename>
+   </para>
+  </refsect1>
+  <refsect1><title>SEE ALSO</title>
+   <para>
+    <citerefentry>
+     <refentrytitle>yaz</refentrytitle>
+     <manvolnum>7</manvolnum></citerefentry>
+   </para>
+   <para>
+    Section "Generic server" in the YAZ manual.
+   </para>
+  </refsect1>
+</refentry>
+
+<!-- Keep this comment at the end of the file
+Local variables:
+mode: sgml
+sgml-omittag:t
+sgml-shorttag:t
+sgml-minimize-attributes:nil
+sgml-always-quote-attributes:t
+sgml-indent-step:1
+sgml-indent-data:t
+sgml-parent-document:nil
+sgml-local-catalogs: nil
+sgml-namecase-general:t
+End:
+-->
diff --git a/doc/yaz-ztest.sgml b/doc/yaz-ztest.sgml
deleted file mode 100644 (file)
index 8796c52..0000000
+++ /dev/null
@@ -1,104 +0,0 @@
-<!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook V4.1//EN" [
-     <!ENTITY ztest-options SYSTEM "ztest-options.xml">
-]>
-<!-- $Id: yaz-ztest.sgml,v 1.4 2002-10-23 10:11:44 adam Exp $ -->
-<refentry id="yaz-ztest">
- <refmeta>
-  <refentrytitle>yaz-ztest</refentrytitle>
-  <manvolnum>8</manvolnum>
- </refmeta>
- <refnamediv>
-  <refname>yaz-ztest</refname>
-  <refpurpose>Z39.50 Test Server</refpurpose>
- </refnamediv>
- <refsynopsisdiv>
-  <cmdsynopsis>
-   <command>yaz-ztest</command>
-   <arg choice="opt"><option>-a <replaceable>file</replaceable></option></arg>
-   <arg choice="opt"><option>-v <replaceable>level</replaceable></option></arg>
-   <arg choice="opt"><option>-l <replaceable>file</replaceable></option></arg>
-   <arg choice="opt"><option>-u <replaceable>uid</replaceable></option></arg>
-   <arg choice="opt"><option>-c <replaceable>config</replaceable></option></arg>
-   <arg choice="opt"><option>-t <replaceable>minutes</replaceable></option></arg>
-   <arg choice="opt"><option>-k <replaceable>kilobytes</replaceable></option></arg>
-   <arg choice="opt"><option>-d <replaceable>daemon</replaceable></option></arg>
-   <arg choice="opt"><option>-w <replaceable>dir</replaceable></option></arg>
-   <arg choice="opt"><option>-ziST1</option></arg>
-   <arg choice="opt" rep="repeat">listener-spec</arg>
-  </cmdsynopsis>
-
-  <cmdsynopsis>
-   <command>yaz-ztest-ssl</command>
-   <arg rep="repeat" choice="opt"><option>option</option></arg>
-   <arg choice="opt" rep="repeat">addr</arg>
-  </cmdsynopsis>
-
- </refsynopsisdiv>
-  <refsect1><title>DESCRIPTION</title>
-   <para>
-    <command>yaz-ztest</command> is a Z39.50 test server. 
-    The server acts as a real Z39.50 server but does not use a database.
-    It returns a random hit count and returns a subset of a few built-in
-    records.
-   </para>
-   <para>
-    <command>yaz-ztest-ssl</command> is identical to
-    <command>yaz-ztest</command> except that it supports SSL transport.
-   </para>
-   <para>
-    The <replaceable>listener-spec</replaceable> consists of a transport
-    mode followed by a colon, followed by a listener address. The
-    transport mode is either <literal>tcp</literal>, <literal>unix</literal>,
-    or <literal>ssl</literal> (<command>yaz-ztest-ssl</command> only).
-   </para>
-   <para>
-    For TCP and SSL, an address has the form:
-    <screen>
-     hostname | IP-number [ : portnumber ]
-    </screen>
-   </para>
-   <para>
-    For UNIX local socket the address is the filename of the local socket.
-   </para>
-  </refsect1>
-  <refsect1>
-   <title>OPTIONS</title>
-   &ztest-options;
-  </refsect1>
-  <refsect1><title>FILES</title>
-   <para>
-    <filename>yaz-&lt;version&gt;/ztest/yaz-ztest.c</filename>
-   </para>
-   <para>
-    <filename>yaz-&lt;version&gt;/include/yaz/backend.h</filename>
-   </para>
-  </refsect1>
-  <refsect1><title>SEE ALSO</title>
-   <para>
-    <citerefentry>
-     <refentrytitle>yaz</refentrytitle>
-     <manvolnum>7</manvolnum></citerefentry>
-   </para>
-   <para>
-    Section "Generic server" in the YAZ manual.
-   </para>
-  </refsect1>
-</refentry>
-
-<!-- Keep this comment at the end of the file
-Local variables:
-mode: sgml
-sgml-omittag:t
-sgml-shorttag:t
-sgml-minimize-attributes:nil
-sgml-always-quote-attributes:t
-sgml-indent-step:1
-sgml-indent-data:t
-sgml-parent-document:nil
-sgml-local-catalogs: nil
-sgml-namecase-general:t
-End:
--->
diff --git a/doc/zoomsh-man.xml b/doc/zoomsh-man.xml
new file mode 100644 (file)
index 0000000..995c323
--- /dev/null
@@ -0,0 +1,162 @@
+<!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook V4.1//EN" [
+     <!ENTITY zoomsh-commands SYSTEM "zoomsh-commands.xml">
+]>
+<!-- $Id: zoomsh-man.xml,v 1.1 2003-10-27 12:21:24 adam Exp $ -->
+<refentry id="zoomsh">
+ <refmeta>
+  <refentrytitle>zoomsh</refentrytitle>
+  <manvolnum>1</manvolnum>
+ </refmeta>
+ <refnamediv>
+  <refname>zoomsh</refname>
+  <refpurpose>ZOOM shell</refpurpose>
+ </refnamediv>
+
+ <refsynopsisdiv>
+  <cmdsynopsis>
+   <command>zoomsh</command>
+   <arg choice="opt" rep="repeat">commands</arg>
+  </cmdsynopsis>
+ </refsynopsisdiv>
+
+  <refsect1><title>DESCRIPTION</title>
+   <para>
+    <command>zoomsh</command> is a ZOOM client with a simple
+    command line interface. The client demonstrates the ZOOM
+    API and is useful for testing targets.
+   </para>
+   <para>
+    You may pass one or more commands to <command>zoomsh</command>.
+    These commands are invoked first. 
+   </para>
+  </refsect1>
+  <refsect1><title>EXAMPLES</title>
+   <para>
+    If you start the <command>yaz-ztest</command> in one console you
+    can use the ZOOM shell as follows:
+    <screen><![CDATA[
+$ zoomsh
+ZOOM>connect localhost:9999
+ZOOM>search computer
+localhost:9999: 7 hits
+ZOOM>show 0 1
+1 Default USmarc
+001    11224466 
+003 DLC
+005 00000000000000.0
+008 910710c19910701nju           00010 eng  
+010    $a    11224466 
+040    $a DLC $c DLC
+050 00 $a 123-xyz
+100 10 $a Jack Collins
+245 10 $a How to program a computer
+260 1  $a Penguin
+263    $a 8710
+300    $a p. cm.
+ZOOM>quit
+]]>
+    </screen>
+   </para>
+   <para>
+    You can also achieve the same result by passing the commands
+    as arguments on a single command line:
+   </para>
+   <para>
+    <literal>$ zoomsh "connect localhost:9999" "search computer"</literal>
+    <literal>"show 0 1" quit</literal>
+   </para>
+  </refsect1>
+  <refsect1><title>COMMANDS</title>
+   <variablelist>
+    
+    <varlistentry><term><literal>connect</literal>
+      <replaceable>zurl</replaceable></term>
+     <listitem><para>
+       Connects to the target given by <replaceable>zurl</replaceable>.
+      </para></listitem></varlistentry>
+    
+    <varlistentry><term><literal>close</literal>
+      [<replaceable>zurl</replaceable>]</term>
+     <listitem><para>
+       Closes connection to target given by
+       <replaceable>zurl</replaceable> or all targets if
+       <replaceable>zurl</replaceable> was omitted.
+      </para></listitem></varlistentry>
+    
+    <varlistentry><term><literal>show</literal>
+      [<replaceable>start</replaceable>
+      [<replaceable>count</replaceable>]]
+     </term>
+     <listitem><para>
+       Displays <literal>count</literal> records starting at offset given
+       by <replaceable>start</replaceable>. First records has offset 0
+       (unlike the Z39.50 protocol).
+      </para></listitem></varlistentry>
+    
+    <varlistentry><term><literal>quit</literal>
+     </term>
+     <listitem><para>
+       Quits <command>zoomsh</command>.
+      </para></listitem></varlistentry>
+    
+    <varlistentry><term><literal>set</literal>
+      <replaceable>name</replaceable>
+      [<replaceable>value</replaceable>]
+     </term>
+     <listitem><para>
+       Sets option <replaceable>name</replaceable> to
+       <replaceable>value</replaceable>.
+      </para></listitem></varlistentry>
+    
+    <varlistentry><term><literal>get</literal>
+      <replaceable>name</replaceable>
+     </term>
+     <listitem><para>
+       Prints value of option <replaceable>name</replaceable>.
+      </para></listitem></varlistentry>
+    
+    <varlistentry><term><literal>help</literal>
+     </term>
+     <listitem><para>
+       Prints list of available commands.
+      </para></listitem></varlistentry>
+    
+   </variablelist>
+   
+  </refsect1>
+  <refsect1><title>SEE ALSO</title>
+   <para>
+    <citerefentry>
+     <refentrytitle>yaz</refentrytitle>
+     <manvolnum>7</manvolnum>
+    </citerefentry>,
+    <citerefentry>
+     <refentrytitle>yaz-ztest</refentrytitle>
+     <manvolnum>8</manvolnum>
+    </citerefentry>,
+   </para>
+   <para>
+    Section "Building clients with ZOOM" in the YAZ manual.
+   </para>
+   <para>
+    <ulink url="http://zoom.z3950.org/">ZOOM home page</ulink>.
+   </para>
+  </refsect1>
+</refentry>
+
+<!-- Keep this comment at the end of the file
+Local variables:
+mode: sgml
+sgml-omittag:t
+sgml-shorttag:t
+sgml-minimize-attributes:nil
+sgml-always-quote-attributes:t
+sgml-indent-step:1
+sgml-indent-data:t
+sgml-parent-document:nil
+sgml-local-catalogs: nil
+sgml-namecase-general:t
+End:
+-->
diff --git a/doc/zoomsh.sgml b/doc/zoomsh.sgml
deleted file mode 100644 (file)
index e44a60a..0000000
+++ /dev/null
@@ -1,162 +0,0 @@
-<!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook V4.1//EN" [
-     <!ENTITY zoomsh-commands SYSTEM "zoomsh-commands.xml">
-]>
-<!-- $Id: zoomsh.sgml,v 1.4 2002-10-09 23:07:12 mike Exp $ -->
-<refentry id="zoomsh">
- <refmeta>
-  <refentrytitle>zoomsh</refentrytitle>
-  <manvolnum>1</manvolnum>
- </refmeta>
- <refnamediv>
-  <refname>zoomsh</refname>
-  <refpurpose>ZOOM shell</refpurpose>
- </refnamediv>
-
- <refsynopsisdiv>
-  <cmdsynopsis>
-   <command>zoomsh</command>
-   <arg choice="opt" rep="repeat">commands</arg>
-  </cmdsynopsis>
- </refsynopsisdiv>
-
-  <refsect1><title>DESCRIPTION</title>
-   <para>
-    <command>zoomsh</command> is a ZOOM client with a simple
-    command line interface. The client demonstrates the ZOOM
-    API and is useful for testing targets.
-   </para>
-   <para>
-    You may pass one or more commands to <command>zoomsh</command>.
-    These commands are invoked first. 
-   </para>
-  </refsect1>
-  <refsect1><title>EXAMPLES</title>
-   <para>
-    If you start the <command>yaz-ztest</command> in one console you
-    can use the ZOOM shell as follows:
-    <screen><![CDATA[
-$ zoomsh
-ZOOM>connect localhost:9999
-ZOOM>search computer
-localhost:9999: 7 hits
-ZOOM>show 0 1
-1 Default USmarc
-001    11224466 
-003 DLC
-005 00000000000000.0
-008 910710c19910701nju           00010 eng  
-010    $a    11224466 
-040    $a DLC $c DLC
-050 00 $a 123-xyz
-100 10 $a Jack Collins
-245 10 $a How to program a computer
-260 1  $a Penguin
-263    $a 8710
-300    $a p. cm.
-ZOOM>quit
-]]>
-    </screen>
-   </para>
-   <para>
-    You can also achieve the same result by passing the commands
-    as arguments on a single command line:
-   </para>
-   <para>
-    <literal>$ zoomsh "connect localhost:9999" "search computer"</literal>
-    <literal>"show 0 1" quit</literal>
-   </para>
-  </refsect1>
-  <refsect1><title>COMMANDS</title>
-   <variablelist>
-    
-    <varlistentry><term><literal>connect</literal>
-      <replaceable>zurl</replaceable></term>
-     <listitem><para>
-       Connects to the target given by <replaceable>zurl</replaceable>.
-      </para></listitem></varlistentry>
-    
-    <varlistentry><term><literal>close</literal>
-      [<replaceable>zurl</replaceable>]</term>
-     <listitem><para>
-       Closes connection to target given by
-       <replaceable>zurl</replaceable> or all targets if
-       <replaceable>zurl</replaceable> was omitted.
-      </para></listitem></varlistentry>
-    
-    <varlistentry><term><literal>show</literal>
-      [<replaceable>start</replaceable>
-      [<replaceable>count</replaceable>]]
-     </term>
-     <listitem><para>
-       Displays <literal>count</literal> records starting at offset given
-       by <replaceable>start</replaceable>. First records has offset 0
-       (unlike the Z39.50 protocol).
-      </para></listitem></varlistentry>
-    
-    <varlistentry><term><literal>quit</literal>
-     </term>
-     <listitem><para>
-       Quits <command>zoomsh</command>.
-      </para></listitem></varlistentry>
-    
-    <varlistentry><term><literal>set</literal>
-      <replaceable>name</replaceable>
-      [<replaceable>value</replaceable>]
-     </term>
-     <listitem><para>
-       Sets option <replaceable>name</replaceable> to
-       <replaceable>value</replaceable>.
-      </para></listitem></varlistentry>
-    
-    <varlistentry><term><literal>get</literal>
-      <replaceable>name</replaceable>
-     </term>
-     <listitem><para>
-       Prints value of option <replaceable>name</replaceable>.
-      </para></listitem></varlistentry>
-    
-    <varlistentry><term><literal>help</literal>
-     </term>
-     <listitem><para>
-       Prints list of available commands.
-      </para></listitem></varlistentry>
-    
-   </variablelist>
-   
-  </refsect1>
-  <refsect1><title>SEE ALSO</title>
-   <para>
-    <citerefentry>
-     <refentrytitle>yaz</refentrytitle>
-     <manvolnum>7</manvolnum>
-    </citerefentry>,
-    <citerefentry>
-     <refentrytitle>yaz-ztest</refentrytitle>
-     <manvolnum>8</manvolnum>
-    </citerefentry>,
-   </para>
-   <para>
-    Section "Building clients with ZOOM" in the YAZ manual.
-   </para>
-   <para>
-    <ulink url="http://zoom.z3950.org/">ZOOM home page</ulink>.
-   </para>
-  </refsect1>
-</refentry>
-
-<!-- Keep this comment at the end of the file
-Local variables:
-mode: sgml
-sgml-omittag:t
-sgml-shorttag:t
-sgml-minimize-attributes:nil
-sgml-always-quote-attributes:t
-sgml-indent-step:1
-sgml-indent-data:t
-sgml-parent-document:nil
-sgml-local-catalogs: nil
-sgml-namecase-general:t
-End:
--->
diff --git a/ill/.cvsignore b/ill/.cvsignore
deleted file mode 100644 (file)
index 8388140..0000000
+++ /dev/null
@@ -1,8 +0,0 @@
-.deps
-.libs
-Makefile
-Makefile.in
-ill-core.c
-item-req.c
-libill.la
-*.lo
diff --git a/ill/Makefile.am b/ill/Makefile.am
deleted file mode 100644 (file)
index f9db5ae..0000000
+++ /dev/null
@@ -1,21 +0,0 @@
-## $Id: Makefile.am,v 1.10 2003-05-27 21:12:22 adam Exp $
-
-AM_CPPFLAGS=-I$(top_srcdir)/include
-
-tabdatadir=$(pkgdatadir)/ill
-tabdata_DATA=ill9702.asn item-req.asn ill.tcl
-EXTRA_DIST=$(tabdata_DATA)
-
-noinst_LTLIBRARIES=libill.la
-
-libill_la_SOURCES=ill-core.c item-req.c ill-get.c
-
-$(srcdir)/ill-core.c \
-$(top_srcdir)/include/yaz/ill-core.h: \
-$(srcdir)/ill.tcl $(srcdir)/ill9702.asn $(top_srcdir)/util/yaz-asncomp
-       cd $(srcdir); ../util/yaz-asncomp -d ill.tcl -i yaz -I ../include $(YCFLAGS) ill9702.asn
-
-$(srcdir)/item-req.c \
-$(top_srcdir)/include/yaz/item-req.h: \
-$(srcdir)/ill.tcl $(srcdir)/item-req.asn $(top_srcdir)/util/yaz-asncomp
-       cd $(srcdir); ../util/yaz-asncomp -d ill.tcl -i yaz -I ../include $(YCFLAGS) item-req.asn
diff --git a/ill/ill-get.c b/ill/ill-get.c
deleted file mode 100644 (file)
index f953752..0000000
+++ /dev/null
@@ -1,690 +0,0 @@
-/*
- * Copyright (c) 1999-2001, Index Data.
- * See the file LICENSE for details.
- *
- * $Log: ill-get.c,v $
- * Revision 1.9  2001-03-25 21:55:12  adam
- * Added odr_intdup. Ztest server returns TaskPackage for ItemUpdate.
- *
- * Revision 1.8  2001/02/21 13:46:53  adam
- * C++ fixes.
- *
- * Revision 1.7  2001/02/20 11:25:32  adam
- * Added ill_get_APDU and ill_get_Cancel.
- *
- * Revision 1.6  2000/08/10 08:41:26  adam
- * Fixes for ILL.
- *
- * Revision 1.5  2000/02/24 08:52:01  adam
- * Bug fix.
- *
- * Revision 1.4  2000/02/04 11:01:15  adam
- * Added more elements.
- *
- * Revision 1.3  2000/01/31 13:15:21  adam
- * Removed uses of assert(3). Cleanup of ODR. CCL parser update so
- * that some characters are not surrounded by spaces in resulting term.
- * ILL-code updates.
- *
- * Revision 1.2  2000/01/15 09:38:51  adam
- * Implemented ill_get_ILLRequest. Added some type mappings for ILL protocol.
- *
- * Revision 1.1  1999/12/16 23:36:19  adam
- * Implemented ILL protocol. Minor updates ASN.1 compiler.
- *
- */
-
-#include <yaz/ill.h>
-
-bool_t *ill_get_bool (struct ill_get_ctl *gc, const char *name,
-                     const char *sub, int val)
-{
-    ODR o = gc->odr;
-    char element[128];
-    const char *v;
-    bool_t *r = (bool_t *) odr_malloc (o, sizeof(*r));
-    
-    strcpy(element, name);
-    if (sub)
-    {
-       strcat (element, ",");
-       strcat (element, sub);
-    }    
-
-    v = (gc->f)(gc->clientData, element);
-    if (v)
-       val = atoi(v);
-    else if (val < 0)
-       return 0;
-    *r = val;
-    return r;
-}
-
-int *ill_get_int (struct ill_get_ctl *gc, const char *name,
-                 const char *sub, int val)
-{
-    ODR o = gc->odr;
-    char element[128];
-    const char *v;
-    
-    strcpy(element, name);
-    if (sub)
-    {
-       strcat (element, ",");
-       strcat (element, sub);
-    }    
-    v = (gc->f)(gc->clientData, element);
-    if (v)
-       val = atoi(v);
-    return odr_intdup(o, val);
-}
-
-int *ill_get_enumerated (struct ill_get_ctl *gc, const char *name,
-                        const char *sub, int val)
-{
-    return ill_get_int(gc, name, sub, val);
-}
-
-ILL_String *ill_get_ILL_String_x (struct ill_get_ctl *gc, const char *name,
-                                 const char *sub, const char *vdefault)
-{
-    ILL_String *r = (ILL_String *) odr_malloc (gc->odr, sizeof(*r));
-    char element[128];
-    const char *v;
-
-    strcpy(element, name);
-    if (sub)
-    {
-       strcat (element, ",");
-       strcat (element, sub);
-    }
-    v = (gc->f)(gc->clientData, element);
-    if (!v)
-        v = vdefault;
-    if (!v)
-       return 0;
-    r->which = ILL_String_GeneralString;
-    r->u.GeneralString = odr_strdup (gc->odr, v);
-    return r;
-}
-
-ILL_String *ill_get_ILL_String(struct ill_get_ctl *gc, const char *name,
-                              const char *sub)
-{
-    return ill_get_ILL_String_x (gc, name, sub, 0);
-}
-
-ILL_ISO_Date *ill_get_ILL_ISO_Date (struct ill_get_ctl *gc, const char *name,
-                                   const char *sub, const char *val)
-{
-    char element[128];
-    const char *v;
-
-    strcpy(element, name);
-    if (sub)
-    {
-       strcat (element, ",");
-       strcat (element, sub);
-    }
-    v = (gc->f)(gc->clientData, element);
-    if (!v)
-       v = val;
-    if (!v)
-       return 0;
-    return odr_strdup (gc->odr, v);
-}
-
-ILL_ISO_Time *ill_get_ILL_ISO_Time (struct ill_get_ctl *gc, const char *name,
-                                   const char *sub, const char *val)
-{
-    char element[128];
-    const char *v;
-
-    strcpy(element, name);
-    if (sub)
-    {
-       strcat (element, ",");
-       strcat (element, sub);
-    }
-    v = (gc->f)(gc->clientData, element);
-    if (!v)
-       v = val;
-    if (!v)
-       return 0;
-    return odr_strdup (gc->odr, v);
-}
-
-ILL_Person_Or_Institution_Symbol *ill_get_Person_Or_Insitution_Symbol (
-    struct ill_get_ctl *gc, const char *name, const char *sub)
-{
-    char element[128];
-    ODR o = gc->odr;
-    ILL_Person_Or_Institution_Symbol *p =
-       (ILL_Person_Or_Institution_Symbol *) odr_malloc (o, sizeof(*p));
-    
-    strcpy(element, name);
-    if (sub)
-    {
-       strcat (element, ",");
-       strcat (element, sub);
-    }
-    p->which = ILL_Person_Or_Institution_Symbol_person_symbol;
-    if ((p->u.person_symbol = ill_get_ILL_String (gc, element, "person")))
-       return p;
-
-    p->which = ILL_Person_Or_Institution_Symbol_institution_symbol;
-    if ((p->u.institution_symbol =
-        ill_get_ILL_String (gc, element, "institution")))
-       return p;
-    return 0;
-}
-
-static ILL_Name_Of_Person_Or_Institution *ill_get_Name_Of_Person_Or_Institution(
-    struct ill_get_ctl *gc, const char *name, const char *sub)
-{
-    char element[128];
-    ODR o = gc->odr;
-    ILL_Name_Of_Person_Or_Institution *p =
-       (ILL_Name_Of_Person_Or_Institution *) odr_malloc (o, sizeof(*p));
-    
-    strcpy(element, name);
-    if (sub)
-    {
-       strcat (element, ",");
-       strcat (element, sub);
-    }
-    p->which = ILL_Name_Of_Person_Or_Institution_name_of_person;
-    if ((p->u.name_of_person =
-        ill_get_ILL_String (gc, element, "name-of-person")))
-       return p;
-
-    p->which = ILL_Name_Of_Person_Or_Institution_name_of_institution;
-    if ((p->u.name_of_institution =
-        ill_get_ILL_String (gc, element, "name-of-institution")))
-       return p;
-    return 0;
-}
-    
-ILL_System_Id *ill_get_System_Id(struct ill_get_ctl *gc,
-                                const char *name, const char *sub)
-{
-    ODR o = gc->odr;
-    char element[128];
-    ILL_System_Id *p;
-    
-    strcpy(element, name);
-    if (sub)
-    {
-       strcat (element, ",");
-       strcat (element, sub);
-    }
-    p = (ILL_System_Id *) odr_malloc (o, sizeof(*p));
-    p->person_or_institution_symbol = ill_get_Person_Or_Insitution_Symbol (
-       gc, element, "person-or-institution-symbol");
-    p->name_of_person_or_institution = ill_get_Name_Of_Person_Or_Institution (
-       gc, element, "name-of-person-or-institution");
-    return p;
-}
-
-ILL_Transaction_Id *ill_get_Transaction_Id (struct ill_get_ctl *gc,
-                                           const char *name, const char *sub)
-{
-    ODR o = gc->odr;
-    ILL_Transaction_Id *r = (ILL_Transaction_Id *) odr_malloc (o, sizeof(*r));
-    char element[128];
-    
-    strcpy(element, name);
-    if (sub)
-    {
-       strcat (element, ",");
-       strcat (element, sub);
-    }    
-    r->initial_requester_id =
-       ill_get_System_Id (gc, element, "initial-requester-id");
-    r->transaction_group_qualifier =
-       ill_get_ILL_String_x (gc, element, "transaction-group-qualifier", "");
-    r->transaction_qualifier =
-       ill_get_ILL_String_x (gc, element, "transaction-qualifier", "");
-    r->sub_transaction_qualifier =
-       ill_get_ILL_String (gc, element, "sub-transaction-qualifier");
-    return r;
-}
-
-
-ILL_Service_Date_this *ill_get_Service_Date_this (
-    struct ill_get_ctl *gc, const char *name, const char *sub)
-{
-    ODR o = gc->odr;
-    ILL_Service_Date_this *r =
-       (ILL_Service_Date_this *) odr_malloc (o, sizeof(*r));
-    char element[128];
-    
-    strcpy(element, name);
-    if (sub)
-    {
-       strcat (element, ",");
-       strcat (element, sub);
-    }
-    r->date = ill_get_ILL_ISO_Date (gc, element, "date", "20000101");
-    r->time = ill_get_ILL_ISO_Time (gc, element, "time", 0);
-    return r;
-}
-
-ILL_Service_Date_original *ill_get_Service_Date_original (
-    struct ill_get_ctl *gc, const char *name, const char *sub)
-{
-    ODR o = gc->odr;
-    ILL_Service_Date_original *r =
-       (ILL_Service_Date_original *) odr_malloc (o, sizeof(*r));
-    char element[128];
-    
-    strcpy(element, name);
-    if (sub)
-    {
-       strcat (element, ",");
-       strcat (element, sub);
-    }
-    r->date = ill_get_ILL_ISO_Date (gc, element, "date", 0);
-    r->time = ill_get_ILL_ISO_Time (gc, element, "time", 0);
-    if (!r->date && !r->time)
-       return 0;
-    return r;
-}
-
-ILL_Service_Date_Time *ill_get_Service_Date_Time (
-    struct ill_get_ctl *gc, const char *name, const char *sub)
-{
-    ODR o = gc->odr;
-    ILL_Service_Date_Time *r =
-       (ILL_Service_Date_Time *) odr_malloc (o, sizeof(*r));
-    char element[128];
-    
-    strcpy(element, name);
-    if (sub)
-    {
-       strcat (element, ",");
-       strcat (element, sub);
-    }    
-    r->date_time_of_this_service = ill_get_Service_Date_this (
-       gc, element, "this");
-    r->date_time_of_original_service = ill_get_Service_Date_original (
-       gc, element, "original");
-    return r;
-}
-
-ILL_Requester_Optional_Messages_Type *ill_get_Requester_Optional_Messages_Type (
-    struct ill_get_ctl *gc, const char *name, const char *sub)
-{
-    ODR o = gc->odr;
-    ILL_Requester_Optional_Messages_Type *r =
-       (ILL_Requester_Optional_Messages_Type *) odr_malloc (o, sizeof(*r));
-    char element[128];
-    
-    strcpy(element, name);
-    if (sub)
-    {
-       strcat (element, ",");
-       strcat (element, sub);
-    }
-    r->can_send_RECEIVED = ill_get_bool (gc, element, "can-send-RECEIVED", 0);
-    r->can_send_RETURNED = ill_get_bool (gc, element, "can-send-RETURNED", 0);
-    r->requester_SHIPPED =
-       ill_get_enumerated (gc, element, "requester-SHIPPED", 1);
-    r->requester_CHECKED_IN =
-       ill_get_enumerated (gc, element, "requester-CHECKED-IN", 1);
-    return r;
-}
-
-ILL_Item_Id *ill_get_Item_Id (
-    struct ill_get_ctl *gc, const char *name, const char *sub)   
-{
-    ODR o = gc->odr;
-    ILL_Item_Id *r = (ILL_Item_Id *) odr_malloc (o, sizeof(*r));
-    char element[128];
-    
-    strcpy(element, name);
-    if (sub)
-    {
-       strcat (element, ",");
-       strcat (element, sub);
-    }
-    r->item_type = ill_get_enumerated (gc, element, "item-type",
-                                      ILL_Item_Id_monograph);
-    r->held_medium_type = 0;
-    r->call_number = ill_get_ILL_String(gc, element, "call-number");
-    r->author = ill_get_ILL_String(gc, element, "author");
-    r->title = ill_get_ILL_String(gc, element, "title");
-    r->sub_title = ill_get_ILL_String(gc, element, "sub-title");
-    r->sponsoring_body = ill_get_ILL_String(gc, element, "sponsoring-body");
-    r->place_of_publication =
-       ill_get_ILL_String(gc, element, "place-of-publication");
-    r->publisher = ill_get_ILL_String(gc, element, "publisher");
-    r->series_title_number =
-       ill_get_ILL_String(gc, element, "series-title-number");
-    r->volume_issue = ill_get_ILL_String(gc, element, "volume-issue");
-    r->edition = ill_get_ILL_String(gc, element, "edition");
-    r->publication_date = ill_get_ILL_String(gc, element, "publication-date");
-    r->publication_date_of_component =
-       ill_get_ILL_String(gc, element, "publication-date-of-component");
-    r->author_of_article = ill_get_ILL_String(gc, element,
-                                             "author-of-article");
-    r->title_of_article = ill_get_ILL_String(gc, element, "title-of-article");
-    r->pagination = ill_get_ILL_String(gc, element, "pagination");
-    r->national_bibliography_no = 0;
-    r->iSBN = ill_get_ILL_String(gc, element, "ISBN");
-    r->iSSN = ill_get_ILL_String(gc, element, "ISSN");
-    r->system_no = 0;
-    r->additional_no_letters =
-       ill_get_ILL_String(gc, element, "additional-no-letters");
-    r->verification_reference_source = 
-       ill_get_ILL_String(gc, element, "verification-reference-source");
-    return r;
-}
-
-
-ILL_Client_Id *ill_get_Client_Id (
-    struct ill_get_ctl *gc, const char *name, const char *sub)
-{
-    char element[128];
-    ODR o = gc->odr;
-    ILL_Client_Id *r = (ILL_Client_Id *) odr_malloc(o, sizeof(*r));
-
-    strcpy(element, name);
-    if (sub)
-    {
-       strcat (element, ",");
-       strcat (element, sub);
-    }
-    r->client_name = ill_get_ILL_String (gc, element, "client-name");
-    r->client_status = ill_get_ILL_String (gc, element, "client-status");
-    r->client_identifier = ill_get_ILL_String (gc, element,
-                                              "client-identifier");
-    return r;
-}
-
-ILL_Postal_Address *ill_get_Postal_Address (
-    struct ill_get_ctl *gc, const char *name, const char *sub)
-{
-    ODR o = gc->odr;
-    ILL_Postal_Address *r =
-       (ILL_Postal_Address *) odr_malloc(o, sizeof(*r));
-    char element[128];
-
-    strcpy(element, name);
-    if (sub)
-    {
-       strcat (element, ",");
-       strcat (element, sub);
-    }
-    r->name_of_person_or_institution = 
-       ill_get_Name_Of_Person_Or_Institution (
-           gc, element, "name-of-person-or-institution");
-    r->extended_postal_delivery_address =
-       ill_get_ILL_String (
-           gc, element, "extended-postal-delivery-address");
-    r->street_and_number =
-       ill_get_ILL_String (gc, element, "street-and-number");
-    r->post_office_box =
-       ill_get_ILL_String (gc, element, "post-office-box");
-    r->city = ill_get_ILL_String (gc, element, "city");
-    r->region = ill_get_ILL_String (gc, element, "region");
-    r->country = ill_get_ILL_String (gc, element, "country");
-    r->postal_code = ill_get_ILL_String (gc, element, "postal-code");
-    return r;
-}
-
-ILL_System_Address *ill_get_System_Address (
-    struct ill_get_ctl *gc, const char *name, const char *sub)
-{
-    ODR o = gc->odr;
-    ILL_System_Address *r =
-       (ILL_System_Address *) odr_malloc(o, sizeof(*r));
-    char element[128];
-    
-    strcpy(element, name);
-    if (sub)
-    {
-       strcat (element, ",");
-       strcat (element, sub);
-    }
-    r->telecom_service_identifier =
-       ill_get_ILL_String (gc, element, "telecom-service-identifier");
-    r->telecom_service_address =
-       ill_get_ILL_String (gc, element, "telecom-service-addreess");
-    return r;
-}
-
-ILL_Delivery_Address *ill_get_Delivery_Address (
-    struct ill_get_ctl *gc, const char *name, const char *sub)
-{
-    ODR o = gc->odr;
-    ILL_Delivery_Address *r =
-       (ILL_Delivery_Address *) odr_malloc(o, sizeof(*r));
-    char element[128];
-    
-    strcpy(element, name);
-    if (sub)
-    {
-       strcat (element, ",");
-       strcat (element, sub);
-    }
-    r->postal_address =
-       ill_get_Postal_Address (gc, element, "postal-address");
-    r->electronic_address =
-       ill_get_System_Address (gc, element, "electronic-address");
-    return r;
-}
-
-ILL_Search_Type *ill_get_Search_Type (
-    struct ill_get_ctl *gc, const char *name, const char *sub)
-{
-    ODR o = gc->odr;
-    ILL_Search_Type *r = (ILL_Search_Type *) odr_malloc(o, sizeof(*r));
-    char element[128];
-    
-    strcpy(element, name);
-    if (sub)
-    {
-       strcat (element, ",");
-       strcat (element, sub);
-    }
-    r->level_of_service = ill_get_ILL_String (gc, element, "level-of-service");
-    r->need_before_date = ill_get_ILL_ISO_Date (gc, element,
-                                               "need-before-date", 0);
-    r->expiry_date = ill_get_ILL_ISO_Date (gc, element, "expiry-date", 0);
-    r->expiry_flag = ill_get_enumerated (gc, element, "expiry-flag", 3);
-                                        
-    return r;
-}
-
-ILL_Request *ill_get_ILLRequest (
-    struct ill_get_ctl *gc, const char *name, const char *sub)
-{
-    ODR o = gc->odr;
-    ILL_Request *r = (ILL_Request *) odr_malloc(o, sizeof(*r));
-    char element[128];
-    
-    strcpy(element, name);
-    if (sub)
-    {
-       strcat (element, ",");
-       strcat (element, sub);
-    }
-    r->protocol_version_num =
-       ill_get_enumerated (gc, element, "protocol-version-num", 
-                           ILL_Request_version_2);
-    
-    r->transaction_id = ill_get_Transaction_Id (gc, element, "transaction-id");
-    r->service_date_time =
-       ill_get_Service_Date_Time (gc, element, "service-date-time");
-    r->requester_id = ill_get_System_Id (gc, element, "requester-id");
-    r->responder_id = ill_get_System_Id (gc, element, "responder-id");
-    r->transaction_type =
-       ill_get_enumerated(gc, element, "transaction-type", 1);
-
-    r->delivery_address =
-       ill_get_Delivery_Address (gc, element, "delivery-address");
-    r->delivery_service = 0; /* TODO */
-    /* ill_get_Delivery_Service (gc, element, "delivery-service"); */
-    r->billing_address =
-       ill_get_Delivery_Address (gc, element, "billing-address");
-
-    r->num_iLL_service_type = 1;
-    r->iLL_service_type = (ILL_Service_Type **)
-       odr_malloc (o, sizeof(*r->iLL_service_type));
-    *r->iLL_service_type =
-       ill_get_enumerated (gc, element, "ill-service-type",
-                           ILL_Service_Type_copy_non_returnable);
-
-    r->responder_specific_service = 0;
-    r->requester_optional_messages =
-       ill_get_Requester_Optional_Messages_Type (
-           gc, element,"requester-optional-messages");
-    r->search_type = ill_get_Search_Type(gc, element, "search-type");
-    r->num_supply_medium_info_type = 0;
-    r->supply_medium_info_type = 0;
-
-    r->place_on_hold = ill_get_enumerated (
-       gc, element, "place-on-hold", 
-       ILL_Place_On_Hold_Type_according_to_responder_policy);
-    r->client_id = ill_get_Client_Id (gc, element, "client-id");
-                          
-    r->item_id = ill_get_Item_Id (gc, element, "item-id");
-    r->supplemental_item_description = 0;
-    r->cost_info_type = 0;
-    r->copyright_compliance =
-       ill_get_ILL_String(gc, element, "copyright-complicance");
-    r->third_party_info_type = 0;
-    r->retry_flag = ill_get_bool (gc, element, "retry-flag", 0);
-    r->forward_flag = ill_get_bool (gc, element, "forward-flag", 0);
-    r->requester_note = ill_get_ILL_String(gc, element, "requester-note");
-    r->forward_note = ill_get_ILL_String(gc, element, "forward-note");
-    r->num_iLL_request_extensions = 0;
-    r->iLL_request_extensions = 0;
-    return r;
-}
-
-ILL_ItemRequest *ill_get_ItemRequest (
-    struct ill_get_ctl *gc, const char *name, const char *sub)
-{
-    ODR o = gc->odr;
-    ILL_ItemRequest *r = (ILL_ItemRequest *)odr_malloc(o, sizeof(*r));
-    char element[128];
-    
-    strcpy(element, name);
-    if (sub)
-    {
-       strcat (element, ",");
-       strcat (element, sub);
-    }
-    r->protocol_version_num =
-       ill_get_enumerated (gc, element, "protocol-version-num", 
-                           ILL_Request_version_2);
-    
-    r->transaction_id = ill_get_Transaction_Id (gc, element, "transaction-id");
-    r->service_date_time =
-       ill_get_Service_Date_Time (gc, element, "service-date-time");
-    r->requester_id = ill_get_System_Id (gc, element, "requester-id");
-    r->responder_id = ill_get_System_Id (gc, element, "responder-id");
-    r->transaction_type =
-       ill_get_enumerated(gc, element, "transaction-type", 1);
-
-    r->delivery_address =
-       ill_get_Delivery_Address (gc, element, "delivery-address");
-    r->delivery_service = 0; /* TODO */
-    /* ill_get_Delivery_Service (gc, element, "delivery-service"); */
-    r->billing_address =
-       ill_get_Delivery_Address (gc, element, "billing-address");
-
-    r->num_iLL_service_type = 1;
-    r->iLL_service_type = (ILL_Service_Type **)
-       odr_malloc (o, sizeof(*r->iLL_service_type));
-    *r->iLL_service_type =
-       ill_get_enumerated (gc, element, "ill-service-type",
-                           ILL_Service_Type_copy_non_returnable);
-
-    r->responder_specific_service = 0;
-    r->requester_optional_messages =
-       ill_get_Requester_Optional_Messages_Type (
-           gc, element,"requester-optional-messages");
-    r->search_type = ill_get_Search_Type(gc, element, "search-type");
-    r->num_supply_medium_info_type = 0;
-    r->supply_medium_info_type = 0;
-
-    r->place_on_hold = ill_get_enumerated (
-       gc, element, "place-on-hold", 
-       ILL_Place_On_Hold_Type_according_to_responder_policy);
-    r->client_id = ill_get_Client_Id (gc, element, "client-id");
-                          
-    r->item_id = ill_get_Item_Id (gc, element, "item-id");
-    r->supplemental_item_description = 0;
-    r->cost_info_type = 0;
-    r->copyright_compliance =
-       ill_get_ILL_String(gc, element, "copyright-complicance");
-    r->third_party_info_type = 0;
-    r->retry_flag = ill_get_bool (gc, element, "retry-flag", 0);
-    r->forward_flag = ill_get_bool (gc, element, "forward-flag", 0);
-    r->requester_note = ill_get_ILL_String(gc, element, "requester-note");
-    r->forward_note = ill_get_ILL_String(gc, element, "forward-note");
-    r->num_iLL_request_extensions = 0;
-    r->iLL_request_extensions = 0;
-    return r;
-}
-
-ILL_Cancel *ill_get_Cancel (
-    struct ill_get_ctl *gc, const char *name, const char *sub)
-{
-    ODR o = gc->odr;
-    ILL_Cancel *r = (ILL_Cancel *)odr_malloc(o, sizeof(*r));
-    char element[128];
-    
-    strcpy(element, name);
-    if (sub)
-    {
-       strcat (element, ",");
-       strcat (element, sub);
-    }
-    r->protocol_version_num =
-       ill_get_enumerated (gc, element, "protocol-version-num", 
-                           ILL_Request_version_2);
-    
-    r->transaction_id = ill_get_Transaction_Id (gc, element, "transaction-id");
-    r->service_date_time =
-       ill_get_Service_Date_Time (gc, element, "service-date-time");
-    r->requester_id = ill_get_System_Id (gc, element, "requester-id");
-    r->responder_id = ill_get_System_Id (gc, element, "responder-id");
-    r->requester_note = ill_get_ILL_String(gc, element, "requester-note");
-
-    r->num_cancel_extensions = 0;
-    r->cancel_extensions = 0;
-    return r;
-}
-
-ILL_APDU *ill_get_APDU (
-    struct ill_get_ctl *gc, const char *name, const char *sub)
-{
-    ODR o = gc->odr;
-    ILL_APDU *r = (ILL_APDU *)odr_malloc(o, sizeof(*r));
-    char element[128];
-    const char *v;
-
-    strcpy (element, name);
-    strcat (element, ",which");
-
-    v = (gc->f)(gc->clientData, element);
-    if (!v)
-       v = "request";
-    if (!strcmp (v, "request"))
-    {
-       r->which = ILL_APDU_ILL_Request;
-       r->u.illRequest = ill_get_ILLRequest(gc, name, sub);
-    }
-    else if (!strcmp (v, "cancel"))
-    {
-       r->which = ILL_APDU_Cancel;
-       r->u.Cancel = ill_get_Cancel(gc, name, sub);
-    }
-    else
-       return 0;
-    return r;
-}
diff --git a/ill/ill.tcl b/ill/ill.tcl
deleted file mode 100644 (file)
index 927e2d0..0000000
+++ /dev/null
@@ -1,63 +0,0 @@
-# Config File for ILL
-# $Id: ill.tcl,v 1.3 2001-02-21 13:46:53 adam Exp $
-# ----------------------------------------------------------
-# Prefix Specifications
-#  
-#    1: C function prefix
-#    2: C type prefix
-#    3: C preprocessor prefix
-
-# Default prefix
-set default-prefix {ill_ ILL_ ILL_}
-
-# ----------------------------------------------------------
-set m ISO-10161-ILL-1
-
-# Filename
-set filename($m) ill-core
-
-# Header initialization code
-set init($m,h) "
-"
-
-# Header body code
-set body($m,h) "
-#ifdef __cplusplus
-extern \"C\" \{
-#endif
-
-#ifdef __cplusplus
-\}
-#endif
-"
-
-# C body code
-set body($m,c) "
-"
-
-# Some mappings - that map ill_ILL_<name> to ill_<name>
-set map($m,ILL-APDU) APDU
-set map($m,ILL-Request) Request
-set map($m,ILL-Answer) Answer
-set map($m,ILL-String) String
-set map($m,ILL-APDU-Type) APDU_Type
-set map($m,ILL-Service-Type) Service_Type
-set map($m,Service_Date_Time_0) Service_Date_this
-set map($m,Service_Date_Time_1) Service_Date_original
-set map($m,Overdue_0) Overdue_ExtensionS
-set membermap($m,APDU,ILL-Request) {APDU_ILL_Request illRequest}
-set membermap($m,APDU,ILL-Answer) {APDU_ILL_Answer illAnswer}
-
-# ----------------------------------------------------------
-set m Z39.50-extendedService-ItemOrder-ItemRequest-1
-# Filename
-set filename($m) item-req
-
-# Mappings of a few basic types
-proc asnBasicPrintableString {} {
-    return {odr_visiblestring char}
-}
-
-proc asnBasicANY {} {
-    return {odr_any Odr_any}
-}
diff --git a/ill/ill9702.asn b/ill/ill9702.asn
deleted file mode 100644 (file)
index e947489..0000000
+++ /dev/null
@@ -1,1165 +0,0 @@
--- use of parameters and types is to be consistent with their definitions in clause 3
-
-ISO-10161-ILL-1 DEFINITIONS EXPLICIT TAGS ::=
-
-BEGIN
--- ISO-10161-ILL-1 refers to the ILL ISO standard 10161 version 1
--- and version 2 as specified in ISO standard 10161 Amendment 1
-
-ILL-APDU ::= CHOICE {
-       ILL-Request,
-       Forward-Notification,
-       Shipped,
-       ILL-Answer,
-       Conditional-Reply,
-       Cancel,
-       Cancel-Reply,
-       Received,
-       Recall,
-       Returned,
-       Checked-In,
-       Overdue,
-       Renew,
-       Renew-Answer,
-       Lost,
-       Damaged,
-       Message,
-       Status-Query,
-       Status-Or-Error-Report,
-       Expired
-       }
-
--- The tagging scheme used in the APDU definitions is as follows:
--- each named type that is a component type of an APDU definition is assigned a different tag
--- that is unique within the set of APDU definitions.  Where these component types themselves
--- have structure, the tagging within such type definitions has only local scope. 
-
-ILL-Request ::= [APPLICATION 1] SEQUENCE {
-       protocol-version-num    [0]     IMPLICIT INTEGER {
-                               version-1 (1),
-                               version-2 (2)
-                               },
-       transaction-id  [1]     IMPLICIT Transaction-Id,
-       service-date-time       [2]     IMPLICIT Service-Date-Time,
-       requester-id    [3]     IMPLICIT System-Id OPTIONAL,
-               -- mandatory when using store-and-forward communications
-               -- optional when using connection-oriented communications
-       responder-id    [4]     IMPLICIT System-Id OPTIONAL,
-               -- mandatory when using store-and-forward communications
-               -- optional when using connection-oriented communications
-       transaction-type        [5]     IMPLICIT Transaction-Type DEFAULT 1,
-       delivery-address        [6]     IMPLICIT Delivery-Address OPTIONAL, 
-       delivery-service                Delivery-Service OPTIONAL,
-       billing-address [8]     IMPLICIT Delivery-Address OPTIONAL,
-       iLL-service-type        [9]     IMPLICIT SEQUENCE SIZE (1..5) OF 
-                               ILL-Service-Type,
-               -- this sequence is a list, in order of preference
-       responder-specific-service      [10]    EXTERNAL OPTIONAL,
-               -- use direct reference style
-       requester-optional-messages     [11]    IMPLICIT Requester-Optional-Messages-Type,
-       search-type     [12]    IMPLICIT Search-Type OPTIONAL,
-       supply-medium-info-type         [13]    IMPLICIT SEQUENCE SIZE (1..7) OF
-                               Supply-Medium-Info-Type OPTIONAL,
-               -- this sequence is a list, in order of preference,
-               -- with a maximum number of 7 entries
-       place-on-hold   [14]    IMPLICIT Place-On-Hold-Type DEFAULT 3,
-       client-id       [15]    IMPLICIT Client-Id OPTIONAL,     
-       item-id [16]    IMPLICIT Item-Id,
-       supplemental-item-description   [17]    IMPLICIT Supplemental-Item-Description OPTIONAL,
-       cost-info-type  [18]    IMPLICIT Cost-Info-Type OPTIONAL,
-       copyright-compliance    [19]    ILL-String OPTIONAL,
-       third-party-info-type   [20]    IMPLICIT Third-Party-Info-Type OPTIONAL,
-               -- mandatory when initiating a FORWARD service or an
-               -- ILL-REQUEST service for a partitioned ILL sub-
-               -- transaction or when initiating an ILL-REQUEST service for
-               -- an ILL sub-transaction if the received ILL-REQUEST
-               -- included an "already-tried-list";optional otherwise
-       retry-flag      [21]    IMPLICIT BOOLEAN DEFAULT FALSE,
-       forward-flag    [22]    IMPLICIT BOOLEAN DEFAULT FALSE,
-       requester-note  [46]    ILL-String OPTIONAL,
-       forward-note    [47]    ILL-String OPTIONAL,
-       iLL-request-extensions  [49]    IMPLICIT SEQUENCE OF Extension OPTIONAL
-       }
-
-Forward-Notification ::= [APPLICATION 2] SEQUENCE {
-       protocol-version-num    [0]     IMPLICIT INTEGER {
-                               version-1 (1),
-                               version-2 (2)
-                               },
-       transaction-id  [1]     IMPLICIT Transaction-Id,   
-       service-date-time       [2]     IMPLICIT Service-Date-Time,
-       requester-id    [3]     IMPLICIT System-Id OPTIONAL,
-               -- mandatory when using store-and-forward communications
-               -- optional when using connection-oriented communications
-       responder-id    [4]     IMPLICIT System-Id,
-               -- mandatory in this APDU
-       responder-address       [24]    IMPLICIT System-Address OPTIONAL,
-       intermediary-id [25]    IMPLICIT System-Id,
-       notification-note       [48]    ILL-String OPTIONAL,
-       forward-notification-extensions [49]    IMPLICIT SEQUENCE OF Extension OPTIONAL
-       }
-
-Shipped ::= [APPLICATION 3] SEQUENCE {
-       protocol-version-num    [0]     IMPLICIT INTEGER {
-                               version-1 (1),
-                               version-2 (2)
-                               },
-       transaction-id  [1]     IMPLICIT Transaction-Id,   
-       service-date-time       [2]     IMPLICIT Service-Date-Time,
-       requester-id    [3]     IMPLICIT System-Id OPTIONAL,
-               -- mandatory when using store-and-forward communications
-               -- optional when using connection-oriented communications
-       responder-id    [4]     IMPLICIT System-Id OPTIONAL,
-               -- mandatory when using store-and-forward communications
-               -- optional when using connection-oriented communications
-       responder-address       [24]    IMPLICIT System-Address OPTIONAL,
-       intermediary-id [25]    IMPLICIT System-Id OPTIONAL,
-       supplier-id     [26]    IMPLICIT System-Id OPTIONAL,
-       client-id       [15]    IMPLICIT Client-Id OPTIONAL,
-       transaction-type        [5]     IMPLICIT Transaction-Type DEFAULT 1,
-       supplemental-item-description   [17]    IMPLICIT Supplemental-Item-Description OPTIONAL,
-       shipped-service-type    [27]    IMPLICIT Shipped-Service-Type,
-       responder-optional-messages     [28]    IMPLICIT Responder-Optional-Messages-Type
-                               OPTIONAL,
-       supply-details  [29]    IMPLICIT Supply-Details,
-       return-to-address       [30]    IMPLICIT Postal-Address OPTIONAL,
-       responder-note  [46]    ILL-String OPTIONAL,
-       shipped-extensions      [49]    IMPLICIT SEQUENCE OF Extension OPTIONAL
-       }
-
-ILL-Answer ::= [APPLICATION 4] SEQUENCE {
-       protocol-version-num    [0]     IMPLICIT INTEGER {
-                               version-1 (1),
-                               version-2 (2)
-                               },
-       transaction-id  [1]     IMPLICIT Transaction-Id,
-       service-date-time       [2]     IMPLICIT Service-Date-Time,
-       requester-id    [3]     IMPLICIT System-Id OPTIONAL,
-               -- mandatory when using store-and-forward communications
-               -- optional when using connection-oriented communications
-       responder-id    [4]     IMPLICIT System-Id OPTIONAL,
-               -- mandatory when using store-and-forward communications
-               -- optional when using connection-oriented communications
-       transaction-results     [31]    IMPLICIT Transaction-Results,
-       results-explanation     [32]    CHOICE {
-                               conditional-results     [1] Conditional-Results,
-                               -- chosen if transaction-results=CONDITIONAL
-                               retry-results           [2] Retry-Results,
-                               -- chosen if transaction-results=RETRY
-                               unfilled-results        [3] Unfilled-Results,
-                               --chosen if transaction-results=UNFILLED
-                               locations-results       [4] Locations-Results,
-                               -- chosen if transaction-results=LOCATIONS-PROVIDED
-                               will-supply-results     [5] Will-Supply-Results,
-                               -- chosen if transaction-results=WILL-SUPPLY
-                               hold-placed-results     [6] Hold-Placed-Results,
-                               -- chosen if transaction-results=HOLD-PLACED
-                               estimate-results        [7] Estimate-Results
-                               -- chosen if transaction-results=ESTIMATE
-                               } OPTIONAL,
-               -- optional if transaction-results equals RETRY, UNFILLED,
-               -- WILL-SUPPLY or HOLD-PLACED;
-               -- required if transaction-results equals CONDITIONAL,
-               -- LOCATIONS-PROVIDED or ESTIMATE
-       responder-specific-results      [33]    EXTERNAL OPTIONAL,
-               -- this type is mandatory if results-explanation
-               -- chosen for any result 
-               -- has the value "responder-specific".
-       supplemental-item-description   [17]    IMPLICIT Supplemental-Item-Description OPTIONAL,
-       send-to-list    [23]    IMPLICIT Send-To-List-Type OPTIONAL,
-       already-tried-list      [34]    IMPLICIT Already-Tried-List-Type OPTIONAL,
-       responder-optional-messages     [28]    IMPLICIT Responder-Optional-Messages-Type
-                               OPTIONAL,
-       responder-note  [46]    ILL-String OPTIONAL,
-       ill-answer-extensions   [49]    IMPLICIT SEQUENCE OF Extension OPTIONAL
-       }
-
-Conditional-Reply ::= [APPLICATION 5] SEQUENCE {
-       protocol-version-num    [0]     IMPLICIT INTEGER {
-                               version-1 (1),
-                               version-2 (2)
-                               },
-       transaction-id  [1]     IMPLICIT Transaction-Id,
-       service-date-time       [2]     IMPLICIT Service-Date-Time,
-       requester-id    [3]     IMPLICIT System-Id OPTIONAL,
-               -- mandatory when using store-and-forward communications
-               -- optional when using connection-oriented communications
-       responder-id    [4]     IMPLICIT System-Id OPTIONAL,
-               -- mandatory when using store-and-forward communications
-               -- optional when using connection-oriented communications
-       answer  [35]    IMPLICIT BOOLEAN,
-       requester-note  [46]    ILL-String OPTIONAL,
-       conditional-reply-extensions    [49]    IMPLICIT SEQUENCE OF Extension OPTIONAL
-       }
-
-Cancel ::= [APPLICATION 6] SEQUENCE {
-       protocol-version-num    [0]     IMPLICIT INTEGER {
-                               version-1 (1),
-                               version-2 (2)
-                               },
-       transaction-id  [1]     IMPLICIT Transaction-Id,
-       service-date-time       [2]     IMPLICIT Service-Date-Time,
-       requester-id    [3]     IMPLICIT System-Id OPTIONAL,
-               -- mandatory when using store-and-forward communications
-               -- optional when using connection-oriented communications
-       responder-id    [4]     IMPLICIT System-Id OPTIONAL,
-               -- mandatory when using store-and-forward communications
-               -- optional when using connection-oriented communications
-       requester-note  [46]    ILL-String OPTIONAL,
-       cancel-extensions       [49]    IMPLICIT SEQUENCE OF Extension OPTIONAL
-       }
-
-Cancel-Reply ::= [APPLICATION 7] SEQUENCE {
-       protocol-version-num    [0]     IMPLICIT INTEGER {
-                                version-1 (1),
-                                version-2 (2)
-                                },
-       transaction-id  [1]     IMPLICIT Transaction-Id,
-       service-date-time       [2]     IMPLICIT Service-Date-Time,
-       requester-id    [3]     IMPLICIT System-Id OPTIONAL,
-               -- mandatory when using store-and-forward communications
-               -- optional when using connection-oriented communications
-       responder-id    [4]     IMPLICIT System-Id OPTIONAL,
-               -- mandatory when using store-and-forward communications
-               -- optional when using connection-oriented communications
-       answer  [35]    IMPLICIT BOOLEAN,
-       responder-note  [46]    ILL-String OPTIONAL,
-       cancel-reply-extensions [49]    IMPLICIT SEQUENCE OF Extension OPTIONAL
-       }
-
-Received ::= [APPLICATION 8] SEQUENCE { 
-       protocol-version-num    [0]     IMPLICIT INTEGER {
-                        version-1 (1),
-                        version-2 (2)
-                        },
-       transaction-id  [1]     IMPLICIT Transaction-Id,
-       service-date-time       [2]     IMPLICIT Service-Date-Time,
-       requester-id    [3]     IMPLICIT System-Id OPTIONAL,
-               -- mandatory when using store-and-forward communications
-               -- optional when using connection-oriented communications
-       responder-id    [4]     IMPLICIT System-Id OPTIONAL,
-               -- mandatory when using store-and-forward communications
-               -- optional when using connection-oriented communications
-       supplier-id     [26]    IMPLICIT System-Id OPTIONAL,
-       supplemental-item-description   [17]    IMPLICIT Supplemental-Item-Description OPTIONAL,
-       date-received   [36]    IMPLICIT ISO-Date,
-       shipped-service-type    [27]    IMPLICIT Shipped-Service-Type,
-       requester-note  [46]    ILL-String OPTIONAL,
-       received-extensions     [49]    IMPLICIT SEQUENCE OF Extension OPTIONAL
-       }
-
-Recall ::= [APPLICATION 9] SEQUENCE {  
-       protocol-version-num    [0]     IMPLICIT INTEGER {
-                               version-1 (1),
-                               version-2 (2)
-                               },
-       transaction-id  [1]     IMPLICIT Transaction-Id,   
-       service-date-time       [2]     IMPLICIT Service-Date-Time,
-       requester-id    [3]     IMPLICIT System-Id OPTIONAL, 
-               -- mandatory when using store-and-forward communications
-               -- optional when using connection-oriented communications
-       responder-id    [4]     IMPLICIT System-Id OPTIONAL, 
-               -- mandatory when using store-and-forward communications
-               -- optional when using connection-oriented communications
-       responder-note  [46]    ILL-String OPTIONAL,
-       recall-extensions       [49]    IMPLICIT SEQUENCE OF Extension OPTIONAL
-       }
-
-Returned ::= [APPLICATION 10] SEQUENCE { 
-       protocol-version-num    [0]     IMPLICIT INTEGER {
-                               version-1 (1),
-                               version-2 (2)
-                               },
-       transaction-id  [1]     IMPLICIT Transaction-Id,
-       service-date-time       [2]     IMPLICIT Service-Date-Time,
-       requester-id    [3]     IMPLICIT System-Id OPTIONAL,
-               -- mandatory when using store-and-forward communications
-               -- optional when using connection-oriented communications
-       responder-id    [4]     IMPLICIT System-Id OPTIONAL,
-               -- mandatory when using store-and-forward communications
-               -- optional when using connection-oriented communications
-       supplemental-item-description   [17]    IMPLICIT Supplemental-Item-Description OPTIONAL,
-       date-returned   [37]    IMPLICIT ISO-Date,
-       returned-via    [38]    Transportation-Mode OPTIONAL,
-       insured-for     [39]    IMPLICIT Amount OPTIONAL,
-       requester-note  [46]    ILL-String OPTIONAL,
-       returned-extensions     [49]    IMPLICIT SEQUENCE OF Extension OPTIONAL
-       }
-
-Checked-In ::= [APPLICATION 11] SEQUENCE {
-       protocol-version-num    [0]     IMPLICIT INTEGER {
-                               version-1 (1),
-                               version-2 (2)
-                               },
-       transaction-id  [1]     IMPLICIT Transaction-Id,   
-       service-date-time       [2]     IMPLICIT Service-Date-Time,
-       requester-id    [3]     IMPLICIT System-Id OPTIONAL, 
-               -- mandatory when using store-and-forward communications
-               -- optional when using connection-oriented communications
-       responder-id    [4]     IMPLICIT System-Id OPTIONAL, 
-               -- mandatory when using store-and-forward communications
-               -- optional when using connection-oriented communications
-       date-checked-in [40]    IMPLICIT ISO-Date,
-       responder-note  [46]    ILL-String OPTIONAL,
-       checked-in-extensions   [49]    IMPLICIT SEQUENCE OF Extension OPTIONAL
-       }
-
-Overdue ::= [APPLICATION 12] SEQUENCE { 
-       protocol-version-num    [0]     IMPLICIT INTEGER {
-                               version-1 (1),
-                               version-2 (2)
-                               },
-       transaction-id  [1]     IMPLICIT Transaction-Id,
-       service-date-time       [2]     IMPLICIT Service-Date-Time,
-       requester-id    [3]     IMPLICIT System-Id OPTIONAL,
-               -- mandatory when using store-and-forward communications
-               -- optional when using connection-oriented communications
-       responder-id    [4]     IMPLICIT System-Id OPTIONAL,
-               -- mandatory when using store-and-forward communications
-               -- optional when using connection-oriented communications
-       date-due        [41]    IMPLICIT Date-Due,
-       responder-note  [46]    ILL-String OPTIONAL,
-       overdue-extensions      [49]    SEQUENCE OF Extension OPTIONAL
-       }
-
-Renew ::= [APPLICATION 13] SEQUENCE {
-       protocol-version-num    [0]     IMPLICIT INTEGER {
-                               version-1 (1),
-                               version-2 (2)
-                               },
-       transaction-id  [1]     IMPLICIT Transaction-Id,   
-       service-date-time       [2]     IMPLICIT Service-Date-Time,
-       requester-id    [3]     IMPLICIT System-Id OPTIONAL,   
-               -- mandatory when using store-and-forward communications
-               -- optional when using connection-oriented communications
-       responder-id    [4]     IMPLICIT System-Id OPTIONAL,   
-               -- mandatory when using store-and-forward communications
-               -- optional when using connection-oriented communications
-       desired-due-date        [42]    IMPLICIT ISO-Date OPTIONAL,
-       requester-note  [46]    ILL-String OPTIONAL,
-       renew-extensions        [49]    IMPLICIT SEQUENCE OF Extension OPTIONAL
-       }
-
-Renew-Answer ::= [APPLICATION 14] SEQUENCE {
-       protocol-version-num    [0]     IMPLICIT INTEGER {
-                               version-1 (1),
-                               version-2 (2)
-                               },
-       transaction-id  [1]     IMPLICIT Transaction-Id,   
-       service-date-time       [2]     IMPLICIT Service-Date-Time,
-       requester-id    [3]     IMPLICIT System-Id OPTIONAL,   
-               -- mandatory when using store-and-forward communications
-               -- optional when using connection-oriented communications
-       responder-id    [4]     IMPLICIT System-Id OPTIONAL,   
-               -- mandatory when using store-and-forward communications
-               -- optional when using connection-oriented communications
-       answer  [35]    IMPLICIT BOOLEAN,
-       date-due        [41]    IMPLICIT Date-Due OPTIONAL,
-       responder-note  [46]    ILL-String OPTIONAL,
-       renew-answer-extensions [49]    IMPLICIT SEQUENCE OF Extension OPTIONAL
-       }
-
-Lost ::= [APPLICATION 15] SEQUENCE {
-       protocol-version-num    [0]     IMPLICIT INTEGER {
-                               version-1 (1),
-                               version-2 (2)
-                               },
-       transaction-id  [1]     IMPLICIT Transaction-Id,   
-       service-date-time       [2]     IMPLICIT Service-Date-Time,
-       requester-id    [3]     IMPLICIT System-Id OPTIONAL,   
-               -- mandatory when using store-and-forward communications
-               -- optional when using connection-oriented communications
-       responder-id    [4]     IMPLICIT System-Id OPTIONAL,   
-               -- mandatory when using store-and-forward communications
-               -- optional when using connection-oriented communications
-       note    [46]    ILL-String OPTIONAL,
-       lost-extensions [49]    IMPLICIT SEQUENCE OF Extension OPTIONAL
-       }
-
-Damaged ::= [APPLICATION 16] SEQUENCE { 
-       protocol-version-num    [0]     IMPLICIT INTEGER {
-                               version-1 (1),
-                               version-2 (2)
-                               },
-       transaction-id  [1]     IMPLICIT Transaction-Id,
-       service-date-time       [2]     IMPLICIT Service-Date-Time,
-       requester-id    [3]     IMPLICIT System-Id OPTIONAL,
-               -- mandatory when using store-and-forward communications
-               -- optional when using connection-oriented communications
-       responder-id    [4]     IMPLICIT System-Id OPTIONAL, 
-               -- mandatory when using store-and-forward communications
-               -- optional when using connection-oriented communications
-       damaged-details [5]     IMPLICIT Damaged-Details OPTIONAL,
-               -- this parameter may only be present in APDU's with a
-               -- protocol-version-num value of 2 or greater
-       note    [46]    ILL-String OPTIONAL,
-       damaged-extensions      [49]    IMPLICIT SEQUENCE OF Extension OPTIONAL
-       }
-
-Message ::= [APPLICATION 17] SEQUENCE { 
-       protocol-version-num    [0]     IMPLICIT INTEGER {
-                               version-1 (1),
-                               version-2 (2)
-                               },
-       transaction-id  [1]     IMPLICIT Transaction-Id,   
-       service-date-time       [2]     IMPLICIT Service-Date-Time,
-       requester-id    [3]     IMPLICIT System-Id OPTIONAL,   
-               -- mandatory when using store-and-forward communications
-               -- optional when using connection-oriented communications
-       responder-id    [4]     IMPLICIT System-Id OPTIONAL,   
-               -- mandatory when using store-and-forward communications
-               -- optional when using connection-oriented communications
-       note    [46]    ILL-String,
-       message-extensions      [49]    IMPLICIT SEQUENCE OF Extension OPTIONAL
-       }
-
-Status-Query ::= [APPLICATION 18] SEQUENCE {
-       protocol-version-num    [0]     IMPLICIT INTEGER {
-                               version-1 (1),
-                               version-2 (2)
-                               },
-       transaction-id  [1]     IMPLICIT Transaction-Id,
-       service-date-time       [2]     IMPLICIT Service-Date-Time,
-       requester-id    [3]     IMPLICIT System-Id OPTIONAL,
-               -- mandatory when using store-and-forward communications
-               -- optional when using connection-oriented communications
-       responder-id    [4]     IMPLICIT System-Id OPTIONAL,
-               -- mandatory when using store-and-forward communications
-               -- optional when using connection-oriented communications
-       note    [46]    ILL-String OPTIONAL,
-       status-query-extensions [49]    IMPLICIT SEQUENCE OF Extension OPTIONAL
-       }
-
-Status-Or-Error-Report ::= [APPLICATION 19] SEQUENCE {
-       protocol-version-num    [0]     IMPLICIT INTEGER {
-                               version-1 (1),
-                               version-2 (2)
-                               },
-       transaction-id  [1]     IMPLICIT Transaction-Id,   
-       service-date-time       [2]     IMPLICIT Service-Date-Time,
-       requester-id    [3]     IMPLICIT System-Id OPTIONAL,   
-               -- mandatory when using store-and-forward communications
-               -- optional when using connection-oriented communications
-       responder-id    [4]     IMPLICIT System-Id OPTIONAL,
-               -- mandatory when using store-and-forward communications
-               -- optional when using connection-oriented communications
-       reason-no-report        [43]    IMPLICIT Reason-No-Report OPTIONAL,
-               -- mandatory if no report is present;
-               -- not present otherwise
-       status-report   [44]    IMPLICIT Status-Report OPTIONAL,
-       error-report    [45]    IMPLICIT Error-Report OPTIONAL,
-       note    [46]    ILL-String OPTIONAL,
-       status-or-error-report-extensions       [49]    IMPLICIT SEQUENCE OF Extension OPTIONAL
-       }
-
-Expired ::= [APPLICATION 20] SEQUENCE {
-       protocol-version-num    [0]     IMPLICIT INTEGER {
-                               version-1 (1),
-                               version-2 (2)
-                               },
-       transaction-id  [1]     IMPLICIT Transaction-Id,
-       service-date-time       [2]     IMPLICIT Service-Date-Time,
-       requester-id    [3]     IMPLICIT System-Id OPTIONAL,
-               -- mandatory when using store-and-forward communications
-               -- optional when using connection-oriented communications
-       responder-id    [4]     IMPLICIT System-Id OPTIONAL,
-               -- mandatory when using store-and-forward communications
-               -- optional when using connection-oriented communications
-       expired-extensions      [49]    IMPLICIT SEQUENCE OF Extension OPTIONAL
-       }
-
-Account-Number ::= ILL-String
-
-Already-Forwarded ::= SEQUENCE {
-       responder-id    [0]     IMPLICIT System-Id,
-       responder-address       [1]     IMPLICIT System-Address OPTIONAL
-       }       
-
-Already-Tried-List-Type ::= SEQUENCE OF System-Id
-
-Amount ::= SEQUENCE {
-       currency-code   [0]     IMPLICIT PrintableString (SIZE (3)) OPTIONAL,
-               -- values defined in ISO 4217-1981
-       monetary-value  [1]     IMPLICIT AmountString (SIZE (1..10))
-       }
-
-AmountString ::= PrintableString (FROM ("1"|"2"|"3"|"4"|"5"|"6"|"7"|"8"|"9"|"0"|" "|"."|","))
-
-Client-Id ::= SEQUENCE {
-       client-name     [0]     ILL-String OPTIONAL,
-       client-status   [1]     ILL-String OPTIONAL,
-       client-identifier       [2]     ILL-String OPTIONAL
-       }
-
-Conditional-Results ::= SEQUENCE {
-       conditions      [0]     IMPLICIT ENUMERATED {
-                               cost-exceeds-limit                              (13),
-                               charges                                         (14),
-                               prepayment-required                     (15),
-                               lacks-copyright-compliance                      (16),
-                               library-use-only                                (22),
-                               no-reproduction                                 (23),
-                               client-signature-required                       (24),
-                               special-collections-supervision-required        (25),
-                               other                                   (27),
-                               responder-specific                              (28),
-                               proposed-delivery-service                       (30) 
-                               },
-       date-for-reply  [1]     IMPLICIT ISO-Date OPTIONAL,
-       locations       [2]     IMPLICIT SEQUENCE OF Location-Info OPTIONAL,
-       proposed-delivery-service               Delivery-Service OPTIONAL
-               -- this parameter specifies a proposed delivery service the
-               -- acceptance of which is a condition of supply.  It may be a
-               -- physical service or an electronic service.  This parameter
-               -- may only be present in APDUs with a 
-               -- protocol-version-num value of 2 or greater
-       }
-
-Cost-Info-Type ::= SEQUENCE {
-       account-number  [0]     Account-Number OPTIONAL,
-       maximum-cost    [1]     IMPLICIT Amount OPTIONAL,
-       reciprocal-agreement    [2]     IMPLICIT BOOLEAN DEFAULT FALSE,
-       will-pay-fee    [3]     IMPLICIT BOOLEAN DEFAULT FALSE,
-       payment-provided        [4]     IMPLICIT BOOLEAN DEFAULT FALSE
-       }
-
-Current-State ::= ENUMERATED {
-       nOT-SUPPLIED    (1),
-       pENDING (2),
-       iN-PROCESS      (3),
-       fORWARD (4),
-       cONDITIONAL     (5),
-       cANCEL-PENDING  (6),
-       cANCELLED       (7),
-       sHIPPED         (8),
-       rECEIVED        (9),
-       rENEW-PENDING   (10),
-       nOT-RECEIVED-OVERDUE    (11),
-       rENEW-OVERDUE   (12),
-       oVERDUE         (13),
-       rETURNED        (14),
-       cHECKED-IN      (15),
-       rECALL  (16),
-       lOST    (17),
-       uNKNOWN         (18)
-       }
-
-Damaged-Details ::= SEQUENCE {
-       document-type-id        [0]     IMPLICIT OBJECT IDENTIFIER OPTIONAL,
-               -- identifies an OSI document type registered in accordance
-               -- with ISO 9834-2, for use in an automated environment
-       damaged-portion         CHOICE {
-                               complete-document       [1]     IMPLICIT NULL,
-                               specific-units  [2]     IMPLICIT SEQUENCE 
-                                                                       OF INTEGER
-                               -- the nature and extent of a "unit" is implicit in the
-                               -- value of document-type-id if one is supplied
-                               }
-       }
-
-Date-Due ::= SEQUENCE {
-       date-due-field  [0]     IMPLICIT ISO-Date,
-       renewable       [1]     IMPLICIT BOOLEAN DEFAULT TRUE
-       }
-
-Delivery-Address ::= SEQUENCE {
-       postal-address  [0]     IMPLICIT Postal-Address OPTIONAL,
-       electronic-address      [1]     IMPLICIT System-Address OPTIONAL
-       }
-
-Delivery-Service ::= CHOICE {
-       physical-delivery       [7]     Transportation-Mode,
-       electronic-delivery     [50]    IMPLICIT SEQUENCE OF Electronic-Delivery-Service
-               -- electronic-delivery may only be present in APDUs
-               -- with a protocol-version-num value of 2 or greater
-       }
-
-Electronic-Delivery-Service ::= SEQUENCE {
-       -- the first four parameters are intended to be used in an automated
-       -- environment
-               e-delivery-service      [0] IMPLICIT SEQUENCE {
-               -- identifies the kind of electronic delivery service, e.g.
-               -- MOTIS IPM,FTAM, etc., using the assigned object
-               -- identifier for the standard e.g. {joint-iso-ccitt mhs-motis 
-               -- ipms}
-                       e-delivery-mode [0] IMPLICIT OBJECT IDENTIFIER,
-                       e-delivery-parameters   [1] ANY DEFINED BY e-delivery-mode
-                       } OPTIONAL,
-               document-type           [1] IMPLICIT SEQUENCE {
-                       document-type-id                [2] IMPLICIT OBJECT IDENTIFIER,
-                       -- identifies an OSI document type registered in accordance
-                       -- with ISO 9834-2
-                       document-type-parameters        [3] ANY DEFINED BY document-type-id
-                       -- any parameters relating to the registered document type
-                       } OPTIONAL,
-               e-delivery-description          [4] ILL-String OPTIONAL,
-               -- holds a human readable name or description of the
-               -- required electronic delivery service and document type;
-               -- this may also be used to identify an electronic delivery
-               -- service for which there is no object identifier.
-               -- This parameter may be present instead of, or in addition
-               -- to, the previous 4 parameters
-               e-delivery-details              [5] CHOICE {
-                       e-delivery-address      [0] IMPLICIT System-Address,
-                       e-delivery-id           [1] IMPLICIT System-Id
-                       },
-               name-or-code            [6] ILL-String OPTIONAL,
-               -- holds a human-readable identifier or correlation
-               -- information for the document as shipped, e.g. a directory 
-               -- and/or file name or message-id
-               delivery-time           [7] IMPLICIT ISO-Time OPTIONAL
-               -- holds the requester's preferred delivery time or
-               -- the responder's proposed or actual delivery time
-               }
-
-Error-Report ::= SEQUENCE {
-       correlation-information [0]     ILL-String,
-       report-source   [1]     IMPLICIT Report-Source,
-       user-error-report       [2]     User-Error-Report OPTIONAL,
-               -- mandatory if report-source is "user"; not present otherwise
-       provider-error-report   [3]     Provider-Error-Report OPTIONAL
-               -- mandatory if report-source is "provider"; not
-               -- present otherwise
-       }
-
-Estimate-Results ::= SEQUENCE {
-       cost-estimate   [0]     ILL-String,
-       locations       [1]     IMPLICIT SEQUENCE OF Location-Info OPTIONAL
-       }
-
-Extension ::= SEQUENCE {
-       identifier      [0]     IMPLICIT INTEGER,
-       critical        [1]     IMPLICIT BOOLEAN DEFAULT FALSE,
-       item    [2]     ANY DEFINED BY identifier
-       }
-
-General-Problem ::= ENUMERATED {
-       unrecognized-APDU       (1),
-       mistyped-APDU   (2),
-       badly-structured-APDU   (3),
-       protocol-version-not-supported  (4),
-       other   (5)
-       }
-
-History-Report ::= SEQUENCE {
-       date-requested  [0]     IMPLICIT ISO-Date OPTIONAL,
-       author  [1]     ILL-String OPTIONAL,
-       title   [2]     ILL-String OPTIONAL,
-       author-of-article       [3]     ILL-String OPTIONAL,
-       title-of-article        [4]     ILL-String OPTIONAL,
-       date-of-last-transition         [5]     IMPLICIT ISO-Date,
-       most-recent-service     [6]     IMPLICIT ENUMERATED {
-                               iLL-REQUEST                     (1),
-                               fORWARD                                 (21),
-                               fORWARD-NOTIFICATION            (2),
-                               sHIPPED                                 (3),
-                               iLL-ANSWER                      (4),
-                               cONDITIONAL-REPLY               (5),
-                               cANCEL                          (6),
-                               cANCEL-REPLY                    (7),
-                               rECEIVED                                (8),
-                               rECALL                          (9),
-                               rETURNED                                (10),
-                               cHECKED-IN                      (11),
-                               rENEW-ANSWER                    (14),
-                               lOST                            (15),
-                               dAMAGED                                 (16),
-                               mESSAGE                                 (17),
-                               sTATUS-QUERY                    (18),
-                               sTATUS-OR-ERROR-REPORT  (19),
-                               eXPIRED                                 (20)
-                               },
-       date-of-most-recent-service     [7]     IMPLICIT ISO-Date,
-       initiator-of-most-recent-service        [8]     IMPLICIT System-Id,
-       shipped-service-type    [9]     IMPLICIT Shipped-Service-Type OPTIONAL,
-               -- If the information is available, i.e. if a SHIPPED or
-               -- RECEIVED APDU has been sent or received, then the
-               -- value in this parameter shall be supplied.
-               -- Value must contain the most current information, e.g. if a
-               -- requester has received a SHIPPED APDU and then
-               -- invokes a RECEIVED.request, then the value from the
-               -- RECEIVED.request is used
-       transaction-results     [10]    IMPLICIT Transaction-Results OPTIONAL,
-               -- If the information is available, i.e. if an ILL-ANWSER
-               -- APDU has been sent or received, then the value in this
-               -- parameter shall be supplied.
-       most-recent-service-note        [11]    ILL-String OPTIONAL
-               -- If the information is available, i.e. if a note has been
-               -- supplied in the most recent service primitive, then the
-               -- value in this parameter shall be supplied.
-       }
-
-Hold-Placed-Results ::= SEQUENCE {
-       estimated-date-available        [0]     IMPLICIT ISO-Date,
-       hold-placed-medium-type [1]     IMPLICIT Medium-Type OPTIONAL,
-       locations       [2]     IMPLICIT SEQUENCE OF Location-Info OPTIONAL
-       }
-
-ILL-APDU-Type ::= ENUMERATED {
-       iLL-REQUEST     (1),
-       fORWARD-NOTIFICATION    (2),
-       sHIPPED         (3),
-       iLL-ANSWER      (4),
-       cONDITIONAL-REPLY       (5),
-       cANCEL  (6),
-       cANCEL-REPLY    (7),
-       rECEIVED        (8),
-       rECALL  (9),
-       rETURNED        (10),
-       cHECKED-IN      (11),
-       oVERDUE         (12),
-       rENEW   (13),
-       rENEW-ANSWER    (14),
-       lOST    (15),
-       dAMAGED         (16),
-       mESSAGE         (17),
-       sTATUS-QUERY    (18),
-       sTATUS-OR-ERROR-REPORT  (19),
-       eXPIRED         (20)
-       }
-
-ILL-Service-Type ::= ENUMERATED  {
-       loan    (1),
-       copy-non-returnable     (2),
-       locations       (3),
-       estimate        (4),
-       responder-specific      (5)
-       }
-
-ILL-String ::= CHOICE {
-       GeneralString,
-       -- may contain any ISO registered G (graphic) and C
-       -- (control) character set
-       EDIFACTString
-       }
-       -- may not include leading or trailing spaces
-       -- may not consist only of space (" ") or non-printing 
-       -- characters
-
-Intermediary-Problem ::= ENUMERATED {
-       cannot-send-onward      (1)
-       }
-
-ISO-Date ::= VisibleString
-       -- conforms to ISO 8601
-       -- length = 8
-       -- fixed
-       -- YYYYMMDD
-
-ISO-Time ::= VisibleString
-       -- conforms to ISO 8601
-       -- length = 6, 
-       -- fixed
-       -- HHMMSS
-       -- local time of person or institution invoking service
-
-Item-Id ::= SEQUENCE {
-       item-type       [0]     IMPLICIT ENUMERATED {
-                               monograph       (1),
-                               serial  (2),
-                               other   (3)
-                               } OPTIONAL,
-       held-medium-type        [1]     IMPLICIT Medium-Type OPTIONAL,
-       call-number     [2]     ILL-String OPTIONAL,
-       author  [3]     ILL-String OPTIONAL,
-       title   [4]     ILL-String OPTIONAL,
-       sub-title       [5]     ILL-String OPTIONAL,
-       sponsoring-body [6]     ILL-String OPTIONAL,
-       place-of-publication    [7]     ILL-String OPTIONAL,
-       publisher       [8]     ILL-String OPTIONAL,
-       series-title-number     [9]     ILL-String OPTIONAL,
-       volume-issue    [10]    ILL-String OPTIONAL,
-       edition [11]    ILL-String OPTIONAL,
-       publication-date        [12]    ILL-String OPTIONAL,
-       publication-date-of-component   [13] ILL-String OPTIONAL,
-       author-of-article       [14]    ILL-String OPTIONAL,
-       title-of-article        [15]    ILL-String OPTIONAL,
-       pagination      [16]    ILL-String OPTIONAL,
-       national-bibliography-no        [17]    EXTERNAL OPTIONAL,
-       iSBN    [18]    ILL-String (SIZE (10)) OPTIONAL,
-               -- must conform to ISO 2108-1978
-       iSSN    [19]    ILL-String (SIZE (8)) OPTIONAL,
-               -- must conform to ISO 3297-1986
-       system-no       [20]    EXTERNAL OPTIONAL,
-       additional-no-letters   [21] ILL-String OPTIONAL,
-       verification-reference-source   [22] ILL-String OPTIONAL
-       }
-
-Location-Info ::= SEQUENCE {
-       location-id     [0]     IMPLICIT System-Id,
-       location-address        [1]     IMPLICIT System-Address OPTIONAL,
-       location-note   [2]     ILL-String OPTIONAL
-       }
-
-Locations-Results ::= SEQUENCE {
-       reason-locs-provided    [0]     IMPLICIT Reason-Locs-Provided OPTIONAL,
-       locations       [1]     IMPLICIT SEQUENCE OF Location-Info
-       }
-
-Medium-Type ::= ENUMERATED {
-       printed         (1),
-       microform       (3),
-       film-or-video-recording (4),
-       audio-recording         (5),
-       machine-readable        (6),
-       other   (7)
-       }
-
-Name-Of-Person-Or-Institution ::= CHOICE {
-       name-of-person  [0]     ILL-String,
-       name-of-institution     [1]     ILL-String
-       }
-
-Person-Or-Institution-Symbol ::= CHOICE {
-       person-symbol   [0]     ILL-String,
-       institution-symbol      [1]     ILL-String
-       }
-
-Place-On-Hold-Type ::= ENUMERATED {
-       yes     (1),
-       no      (2),
-       according-to-responder-policy   (3)
-       }
-
-Postal-Address ::= SEQUENCE {
-       name-of-person-or-institution   [0]     Name-Of-Person-Or-Institution OPTIONAL,
-       extended-postal-delivery-address [1]    ILL-String OPTIONAL,
-       street-and-number       [2]     ILL-String OPTIONAL,
-       post-office-box [3]     ILL-String OPTIONAL,
-       city    [4]     ILL-String OPTIONAL,
-       region  [5]     ILL-String OPTIONAL,
-       country [6]     ILL-String OPTIONAL,
-       postal-code     [7]     ILL-String OPTIONAL
-       }
-
-Provider-Error-Report ::= CHOICE {
-       general-problem [0]     IMPLICIT General-Problem,
-       transaction-id-problem  [1]     IMPLICIT Transaction-Id-Problem,
-       state-transition-prohibited     [2]     IMPLICIT State-Transition-Prohibited
-       }
-
-Reason-Locs-Provided ::= ENUMERATED {
-       in-use-on-loan  (1),
-       in-process      (2),
-       lost    (3),
-       non-circulating         (4),
-       not-owned       (5),
-       on-order        (6),
-       volume-issue-not-yet-available  (7),
-       at-bindery      (8),
-       lacking         (9),
-       not-on-shelf    (10),
-       on-reserve      (11),
-       poor-condition  (12),
-       cost-exceeds-limit      (13),
-       on-hold         (19),
-       other   (27),
-       responder-specific      (28) 
-       }
-
-Reason-No-Report ::= ENUMERATED {
-       temporary       (1),
-       permanent       (2)
-       }
-
-Reason-Unfilled ::= ENUMERATED {
-       in-use-on-loan  (1),
-       in-process      (2),
-       lost    (3),
-       non-circulating (4),
-       not-owned       (5),
-       on-order        (6),
-       volume-issue-not-yet-available  (7),
-       at-bindery      (8),
-       lacking (9),
-       not-on-shelf    (10),
-       on-reserve      (11),
-       poor-condition  (12),
-       cost-exceeds-limit      (13),
-       charges (14),
-       prepayment-required     (15),
-       lacks-copyright-compliance      (16),
-       not-found-as-cited      (17),
-       locations-not-found     (18),
-       on-hold (19),
-       policy-problem  (20),
-       mandatory-messaging-not-supported       (21),
-       expiry-not-supported    (22) ,
-       requested-delivery-services-not-supported       (23),
-       preferred-delivery-time-not-possible    (24),
-       other   (27),
-       responder-specific      (28)
-       }
-
-Report-Source ::= ENUMERATED {
-       user    (1),
-       provider        (2)
-       }
-
-Requester-Optional-Messages-Type ::= SEQUENCE {
-       can-send-RECEIVED       [0]     IMPLICIT BOOLEAN,
-       can-send-RETURNED       [1]     IMPLICIT BOOLEAN,
-       requester-SHIPPED       [2]     IMPLICIT ENUMERATED {
-                               requires        (1),
-                               desires         (2),
-                               neither (3)
-                               },
-       requester-CHECKED-IN    [3]     IMPLICIT ENUMERATED {
-                               requires        (1),
-                               desires         (2),
-                               neither         (3)
-                               }
-       }
-
-Responder-Optional-Messages-Type ::= SEQUENCE {
-       can-send-SHIPPED        [0]     IMPLICIT BOOLEAN,
-       can-send-CHECKED-IN     [1]     IMPLICIT BOOLEAN,
-       responder-RECEIVED      [2]     IMPLICIT ENUMERATED {
-                               requires        (1),
-                               desires         (2),
-                               neither         (3)
-                               },
-       responder-RETURNED      [3]     IMPLICIT ENUMERATED {
-                               requires        (1),
-                               desires         (2),
-                               neither         (3)
-                               }
-       }
-
-Retry-Results ::= SEQUENCE {
-       reason-not-available    [0]     IMPLICIT ENUMERATED {
-                               in-use-on-loan                  (1),
-                               in-process                              (2),
-                               on-order                                (6),
-                               volume-issue-not-yet-available  (7),
-                               at-bindery                              (8),
-                               cost-exceeds-limit                      (13),
-                               charges                                 (14),
-                               prepayment-required             (15),
-                               lacks-copyright-compliance              (16),
-                               not-found-as-cited                      (17),
-                               on-hold                                 (19),
-                               other                           (27),
-                               responder-specific                      (28)
-                               } OPTIONAL,
-       retry-date      [1]     IMPLICIT ISO-Date OPTIONAL,
-       locations       [2]     IMPLICIT SEQUENCE OF Location-Info OPTIONAL
-       }
-
-Search-Type ::= SEQUENCE {
-       level-of-service        [0]     ILL-String (SIZE (1)) OPTIONAL,
-       need-before-date        [1]     IMPLICIT ISO-Date OPTIONAL,
-       expiry-flag     [2]     IMPLICIT ENUMERATED {
-                               need-Before-Date        (1),
-                               other-Date              (2),
-                               no-Expiry               (3)
-                               } DEFAULT 3,
-                               -- value of "need-Before-Date" indicates that
-                               -- need-before-date also specifies transaction expiry
-                               -- date
-       expiry-date     [3]     IMPLICIT ISO-Date OPTIONAL
-               -- alternative expiry date can be used only when expiry-flag
-               -- is set to "Other-Date"
-       }
-
-Security-Problem ::= ILL-String
-
-Send-To-List-Type ::= SEQUENCE OF SEQUENCE {
-       system-id       [0]     IMPLICIT System-Id,
-       account-number  [1]     Account-Number OPTIONAL,
-       system-address  [2]     IMPLICIT System-Address OPTIONAL
-       }
-
-Service-Date-Time ::= SEQUENCE {
-       date-time-of-this-service       [0]     IMPLICIT SEQUENCE {
-                               date    [0]     IMPLICIT ISO-Date,
-                               time    [1]     IMPLICIT ISO-Time OPTIONAL
-                               -- mandatory for 2nd and subsequent services
-                               -- invoked for a given 
-                               -- ILL-transaction on the same day
-                               },
-       date-time-of-original-service   [1]     IMPLICIT SEQUENCE {
-                               date    [0]     IMPLICIT ISO-Date,
-                               time    [1]     IMPLICIT ISO-Time OPTIONAL
-                               } OPTIONAL
-       }
-
-Shipped-Service-Type ::= ILL-Service-Type (loan | copy-non-returnable)
-       -- subtype of ILL-Service-Type
-
-State-Transition-Prohibited ::= SEQUENCE {
-       aPDU-type       [0]     IMPLICIT ILL-APDU-Type,
-       current-state   [1]     IMPLICIT Current-State
-       }
-
-Status-Report ::= SEQUENCE {
-       user-status-report      [0]     IMPLICIT History-Report,
-       provider-status-report  [1]     IMPLICIT Current-State
-       }
-
-Supplemental-Item-Description ::= SEQUENCE OF EXTERNAL
-       -- the syntax of supplementary item description information is defined outside this standard
-
-Supply-Details ::= SEQUENCE {
-       date-shipped    [0]     IMPLICIT ISO-Date OPTIONAL,
-       date-due        [1]     IMPLICIT Date-Due OPTIONAL,
-       chargeable-units        [2]     IMPLICIT INTEGER (1..9999) OPTIONAL,
-       cost    [3]     IMPLICIT Amount OPTIONAL,
-       shipped-conditions      [4]     IMPLICIT ENUMERATED {
-                               library-use-only                                (22),
-                               no-reproduction                         (23),
-                               client-signature-required                       (24),
-                               special-collections-supervision-required        (25),
-                               other                                   (27)
-                               } OPTIONAL,
-       shipped-via             CHOICE {
-                               physical-delivery       [5]     Transportation-Mode,
-                               electronic-delivery     [50]    IMPLICIT
-                                                                Electronic-Delivery-Service
-                               } OPTIONAL,
-               -- electronic-delivery may only be present in APDUs with a
-               -- protocol-version-num value of 2 or greater
-       insured-for     [6]     IMPLICIT Amount OPTIONAL,
-       return-insurance-require        [7]     IMPLICIT Amount OPTIONAL,
-       no-of-units-per-medium  [8]     IMPLICIT SEQUENCE OF Units-Per-Medium-Type      
-                               OPTIONAL
-       }
-
-Supply-Medium-Info-Type ::= SEQUENCE {
-       supply-medium-type      [0]     IMPLICIT Supply-Medium-Type,
-       medium-characteristics  [1]     ILL-String OPTIONAL
-       }
-
-Supply-Medium-Type ::= ENUMERATED {
-       printed (1),
-       photocopy       (2),
-       microform       (3),
-       film-or-video-recording (4),
-       audio-recording (5),
-       machine-readable        (6),
-       other   (7)
-       }
-
-System-Address ::= SEQUENCE {
-       telecom-service-identifier      [0]     ILL-String OPTIONAL,
-       telecom-service-address [1]     ILL-String OPTIONAL
-       }
-
-System-Id ::= SEQUENCE {
-       --at least one of the following must be present
-       person-or-institution-symbol    [0]     Person-Or-Institution-Symbol OPTIONAL,
-       name-of-person-or-institution   [1]     Name-Of-Person-Or-Institution OPTIONAL
-       }
-
-Third-Party-Info-Type ::= SEQUENCE {
-       permission-to-forward   [0]     IMPLICIT BOOLEAN DEFAULT FALSE,
-       permission-to-chain     [1]     IMPLICIT BOOLEAN DEFAULT FALSE,
-       permission-to-partition         [2]     IMPLICIT BOOLEAN DEFAULT FALSE,
-       permission-to-change-send-to-list [3]   IMPLICIT BOOLEAN DEFAULT FALSE,
-       initial-requester-address       [4]     IMPLICIT System-Address OPTIONAL,
-               -- mandatory when initiating a FORWARD service or an
-               -- ILL-REQUEST service for a partitioned ILL
-               -- sub-transaction; optional otherwise
-       preference      [5]     IMPLICIT ENUMERATED {
-                               ordered (1),
-                               unordered       (2)
-                               } DEFAULT 2,
-       send-to-list    [6]     IMPLICIT Send-To-List-Type OPTIONAL,
-       already-tried-list      [7]     IMPLICIT Already-Tried-List-Type OPTIONAL
-               -- mandatory when initiating a FORWARD service, or when
-               -- initiating an ILL-REQUEST service for an ILL
-               -- sub-transaction if the received ILL-REQUEST included an
-               -- "already-tried-list"; optional otherwise
-       }
-
-Transaction-Id ::= SEQUENCE {
-       initial-requester-id    [0]     IMPLICIT System-Id OPTIONAL,
-               -- mandatory for sub-transactions; not called
-               -- "requester-id" to distinguish id of initial-requester
-               --from id of requester of sub-transaction if there is one
-       transaction-group-qualifier     [1]     ILL-String,
-       transaction-qualifier   [2]     ILL-String,
-       sub-transaction-qualifier       [3]     ILL-String OPTIONAL
-               -- mandatory for sub-transactions
-       }
-
-Transaction-Id-Problem ::= ENUMERATED {
-       duplicate-transaction-id        (1),
-       invalid-transaction-id  (2),
-       unknown-transaction-id  (3)
-       }
-
-Transaction-Results ::= ENUMERATED {
-       conditional     (1),
-       retry   (2),
-       unfilled        (3),
-       locations-provided      (4),
-       will-supply     (5),
-       hold-placed     (6),
-       estimate        (7)
-       }
-
-Transaction-Type ::= ENUMERATED  {
-       simple  (1),
-       chained (2),
-       partitioned     (3)
-       }
-
-Transportation-Mode ::= ILL-String
-
-Unable-To-Perform ::= ENUMERATED {
-       not-available   (1),
-       resource-limitation     (2),
-       other   (3)
-       }
-
-Unfilled-Results ::= SEQUENCE {
-       reason-unfilled [0]     IMPLICIT Reason-Unfilled,
-       locations       [1]     IMPLICIT SEQUENCE OF Location-Info OPTIONAL
-       }
-
-Units-Per-Medium-Type ::= SEQUENCE {
-       medium  [0]     Supply-Medium-Type,
-       no-of-units     [1]     INTEGER (1..9999)
-       }
-
-User-Error-Report ::= CHOICE {
-       already-forwarded       [0]     IMPLICIT Already-Forwarded,
-       intermediary-problem    [1]     IMPLICIT Intermediary-Problem,
-       security-problem        [2]     Security-Problem,
-       unable-to-perform       [3]     IMPLICIT Unable-To-Perform
-       }
-
-
-Will-Supply-Results ::= SEQUENCE {
-       reason-will-supply      [0]     ENUMERATED {
-                               in-use-on-loan          (1),
-                               in-process                      (2),
-                               on-order                        (6),
-                               at-bindery                      (8),
-                               on-hold                         (19),
-                               being-processed-for-supply      (26),
-                               other                   (27),
-                               responder-specific              (28),
-                               electronic-delivery             (30)
-                               },
-       supply-date     [1]     ISO-Date OPTIONAL,
-       return-to-address       [2]     Postal-Address OPTIONAL,
-       locations       [3]     IMPLICIT SEQUENCE OF Location-Info OPTIONAL,
-       electronic-delivery-service     [4] Electronic-Delivery-Service OPTIONAL
-               -- if present, this must be one of the services proposed by 
-               -- the requester
-       }
-
-EDIFACTString ::= VisibleString 
-       (FROM ("A"|"B"|"C"|"D"|"E"|"F"|"G"|"H"|
-       "I"|"J"|"K"|"L"|"M"|"N"|"O"|"P"|"Q"|"R"|"S"|"T"|"U"|
-       "V"|"W"|"X"|"Y"|"Z"|"a"|"b"|"c"|"d"|"e"|"f"|"g"|"h"|
-       "i"|"j"|"k"|"l"|"m"|"n"|"o"|"p"|"q"|"r"|"s"|"t"|"u"|
-       "v"|"w"|"x"|"y"|"z"|"1"|"2"|"3"|"4"|"5"|"6"|"7"|"8"|
-       "9"|"0"|" "|"."|","|"-"|"("|")"|"/"|"="|"!"|"""|"%"|"&"|
-       "*"|";"|"<"|">"|"'"|"+"|":"|"?"))
-
-END
-
-
diff --git a/ill/item-req.asn b/ill/item-req.asn
deleted file mode 100644 (file)
index 612d509..0000000
+++ /dev/null
@@ -1,58 +0,0 @@
-Z39.50-extendedService-ItemOrder-ItemRequest-1 DEFINITIONS ::=
-BEGIN
-IMPORTS
-       Transaction-Id,
-       Service-Date-Time,
-       System-Id,
-       Transaction-Type,
-       Delivery-Address,
-       ILL-Service-Type,
-       Requester-Optional-Messages-Type,
-       Search-Type,
-       Supply-Medium-Info-Type,
-       Place-On-Hold-Type,
-       Client-Id,
-       Item-Id,
-       Supplemental-Item-Description,
-       Cost-Info-Type,
-       ILL-String,
-       Third-Party-Info-Type,
-       Extension
-FROM ISO-10161-ILL-1;
-
-ItemRequest ::=SEQUENCE {
-       protocol-version-num    [0]     IMPLICIT INTEGER {
-                               version-1 (1),
-                               version-2 (2)
-                               },
-       transaction-id          [1]     IMPLICIT Transaction-Id OPTIONAL,
-       service-date-time       [2]     IMPLICIT Service-Date-Time OPTIONAL,
-       requester-id            [3]     IMPLICIT System-Id OPTIONAL,
-       responder-id            [4]     IMPLICIT System-Id OPTIONAL,
-       transaction-type        [5]     IMPLICIT Transaction-Type DEFAULT 1,
-       delivery-address        [6]     IMPLICIT Delivery-Address OPTIONAL, 
-       delivery-service                Delivery-Service OPTIONAL,
-       billing-address         [8]     IMPLICIT Delivery-Address OPTIONAL,
-       iLL-service-type        [9]     IMPLICIT SEQUENCE SIZE (1..5) OF 
-                                       ILL-Service-Type OPTIONAL,
-       responder-specific-service      [10]    EXTERNAL OPTIONAL,
-               -- use direct reference style
-       requester-optional-messages     [11]    IMPLICIT Requester-Optional-Messages-Type OPTIONAL,
-       search-type             [12]    IMPLICIT Search-Type OPTIONAL,
-       supply-medium-info-type [13]    IMPLICIT SEQUENCE SIZE (1..7) OF
-                               Supply-Medium-Info-Type OPTIONAL,
-       place-on-hold           [14]    IMPLICIT Place-On-Hold-Type DEFAULT 3,
-       client-id               [15]    IMPLICIT Client-Id OPTIONAL,     
-       item-id                 [16]    IMPLICIT Item-Id OPTIONAL,
-       supplemental-item-description   [17]    IMPLICIT Supplemental-Item-Description OPTIONAL,
-       cost-info-type          [18]    IMPLICIT Cost-Info-Type OPTIONAL,
-       copyright-compliance    [19]    ILL-String OPTIONAL,
-       third-party-info-type   [20]    IMPLICIT Third-Party-Info-Type OPTIONAL,
-       retry-flag              [21]    IMPLICIT BOOLEAN DEFAULT FALSE,
-       forward-flag            [22]    IMPLICIT BOOLEAN DEFAULT FALSE,
-       requester-note          [46]    ILL-String OPTIONAL,
-       forward-note            [47]    ILL-String OPTIONAL,
-       iLL-request-extensions  [49]    IMPLICIT SEQUENCE OF Extension OPTIONAL
-       }
-END
-  
diff --git a/lib/.cvsignore b/lib/.cvsignore
deleted file mode 100644 (file)
index 8af9f14..0000000
+++ /dev/null
@@ -1,8 +0,0 @@
-.deps
-.libs
-Makefile
-Makefile.in
-yaz-config
-yaz-config.in
-*.lo
-*.la
diff --git a/lib/Makefile.am b/lib/Makefile.am
deleted file mode 100644 (file)
index 4fe2b90..0000000
+++ /dev/null
@@ -1,83 +0,0 @@
-## $Id: Makefile.am,v 1.29 2003-04-17 23:24:00 adam Exp $
-
-if ISTHR
-extra=libyazthread.la
-endif
-
-if ISSSL
-ssllib=libyazssl.la
-endif
-
-bin_SCRIPTS = yaz-config
-
-lib_LTLIBRARIES = libyaz.la $(extra) $(ssllib) libyazmalloc.la
-
-# If the line below is omitted the LINK variable is
-# not set in Makefile.in and it will NOT work ..
-EXTRA_libyaz_la_SOURCES=x.c
-
-YAZ_VERSION_INFO=2:0:0
-
-# No real sources
-libyaz_la_SOURCES=
-libyaz_la_LDFLAGS=-version-info $(YAZ_VERSION_INFO)
-
-libyazthread_la_LIBADD=nmem.lo statserv.lo eventl.lo
-libyazthread_la_SOURCES=
-libyazthread_la_LDFLAGS=-version-info $(YAZ_VERSION_INFO)
-
-libyazmalloc_la_LIBADD=xmalloc.lo
-libyazmalloc_la_SOURCES=
-libyazmalloc_la_LDFLAGS=-version-info $(YAZ_VERSION_INFO)
-
-libyazssl_la_LIBADD=tcpip.lo comstack.lo
-libyazssl_la_SOURCES=
-libyazssl_la_LDFLAGS=-version-info $(YAZ_VERSION_INFO)
-
-AM_CPPFLAGS= -I$(top_srcdir)/include -I$(top_srcdir)/server
-THREADED_FLAGS = @CFLAGSTHREADS@
-XMALLOC_FLAGS = -DTRACE_XMALLOC=2 
-
-SSL_FLAGS= -I$(top_srcdir)/include $(SSL_DEFS) $(SSL_CFLAGS)
-
-nmem.lo: $(top_srcdir)/util/nmem.c
-       $(LTCOMPILE) $(THREADED_FLAGS) -c $(top_srcdir)/util/nmem.c
-
-nmem.o: $(top_srcdir)/util/nmem.c
-       $(COMPILE) $(THREADED_FLAGS) -c $(top_srcdir)/util/nmem.c
-
-statserv.lo: $(top_srcdir)/server/statserv.c
-       $(LTCOMPILE) $(THREADED_FLAGS) -c $(top_srcdir)/server/statserv.c
-
-statserv.o: $(top_srcdir)/server/statserv.c
-       $(COMPILE) $(THREADED_FLAGS) -c $(top_srcdir)/server/statserv.c
-
-eventl.lo: $(top_srcdir)/server/eventl.c
-       $(LTCOMPILE) $(THREADED_FLAGS) -c $(top_srcdir)/server/eventl.c
-
-eventl.o: $(top_srcdir)/server/eventl.c
-       $(COMPILE) $(THREADED_FLAGS) -c $(top_srcdir)/server/eventl.c
-
-xmalloc.lo: $(top_srcdir)/util/xmalloc.c
-       $(LTCOMPILE) $(XMALLOC_FLAGS) -c $(top_srcdir)/util/xmalloc.c
-
-xmalloc.o: $(top_srcdir)/util/xmalloc.c
-       $(COMPILE) $(XMALLOC_FLAGS) -c $(top_srcdir)/util/xmalloc.c
-
-comstack.lo: $(top_srcdir)/comstack/comstack.c
-       $(LTCOMPILE) $(SSL_FLAGS) -c $(top_srcdir)/comstack/comstack.c
-
-comstack.o: $(top_srcdir)/comstack/comstack.c
-       $(COMPILE) $(SSL_FLAGS) -c $(top_srcdir)/comstack/comstack.c
-
-tcpip.lo: $(top_srcdir)/comstack/tcpip.c
-       $(LTCOMPILE) $(SSL_FLAGS) -c $(top_srcdir)/comstack/tcpip.c
-
-tcpip.o: $(top_srcdir)/comstack/tcpip.c
-       $(COMPILE) $(SSL_FLAGS) -c $(top_srcdir)/comstack/tcpip.c
-
-libyaz_la_LIBADD=../odr/libodr.la \
- ../comstack/libcomstack.la ../server/libserver.la \
- ../util/libutil.la ../ccl/libccl.la ../cql/libcql.la ../zutil/libzutil.la \
- ../ill/libill.la ../z39.50/libz39.50.la
-
diff --git a/lib/x.c b/lib/x.c
deleted file mode 100644 (file)
index e69de29..0000000
diff --git a/odr/.cvsignore b/odr/.cvsignore
deleted file mode 100644 (file)
index 569ba57..0000000
+++ /dev/null
@@ -1,8 +0,0 @@
-.deps
-.libs
-Makefile
-Makefile.in
-libodr.la
-*.lo
-tstodrcodec.c
-tstodrcodec.h
diff --git a/odr/Makefile.am b/odr/Makefile.am
deleted file mode 100644 (file)
index 17b63e6..0000000
+++ /dev/null
@@ -1,25 +0,0 @@
-## $Id: Makefile.am,v 1.11 2003-05-27 21:42:45 adam Exp $
-
-noinst_LTLIBRARIES = libodr.la
-
-AM_CPPFLAGS=-I$(top_srcdir)/include
-
-TESTS = tstodr
-
-EXTRA_PROGRAMS = tstodr
-
-EXTRA_DIST = tstodrcodec.c tstodrcodec.h tstodr.asn
-
-tstodr_LDADD = libodr.la ../util/libutil.la
-tstodr_SOURCES = tstodrcodec.c tstodrcodec.h tstodr.c
-
-# Rule for generating codecs for our small ASN.1 spec
-tstodrcodec.c tstodrcodec.h: $(srcdir)/tstodr.asn $(top_srcdir)/util/yaz-asncomp
-       cd $(srcdir); $(top_srcdir)/util/yaz-asncomp tstodr.asn
-
-libodr_la_SOURCES = odr_bool.c ber_bool.c ber_len.c ber_tag.c odr_util.c \
-        odr_null.c ber_null.c odr_int.c ber_int.c odr_tag.c odr_cons.c \
-        odr_seq.c odr_oct.c ber_oct.c odr_bit.c ber_bit.c odr_oid.c \
-        ber_oid.c odr_use.c odr_choice.c odr_any.c ber_any.c odr.c odr_mem.c \
-        dumpber.c odr_enum.c odr-priv.h
-
diff --git a/odr/ber_any.c b/odr/ber_any.c
deleted file mode 100644 (file)
index 73f8dfb..0000000
+++ /dev/null
@@ -1,152 +0,0 @@
-/*
- * Copyright (c) 1995-2003, Index Data
- * See the file LICENSE for details.
- *
- * $Id: ber_any.c,v 1.27 2003-10-21 09:30:32 adam Exp $
- */
-#if HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#include <assert.h>
-#include "odr-priv.h"
-
-int ber_any(ODR o, Odr_any **p)
-{
-    int res;
-    
-    switch (o->direction)
-    {
-    case ODR_DECODE:
-        if ((res = completeBER(o->bp, odr_max(o))) <= 0)        /* FIX THIS */
-        {
-            odr_seterror(o, OPROTO, 2);
-            return 0;
-        }
-        (*p)->buf = (unsigned char *)odr_malloc(o, res);
-        memcpy((*p)->buf, o->bp, res);
-        (*p)->len = (*p)->size = res;
-        o->bp += res;
-        return 1;
-    case ODR_ENCODE:
-        if (odr_write(o, (*p)->buf, (*p)->len) < 0)
-            return 0;
-        return 1;
-    default: odr_seterror(o, OOTHER, 3); return 0;
-    }
-}
-
-#define BER_ANY_DEBUG 0
-
-/*
- * Return length of BER-package or 0.
- */
-int completeBER_n(const unsigned char *buf, int len, int level)
-{
-    int res, ll, zclass, tag, cons;
-    const unsigned char *b = buf;
-    int bad = 0;
-    
-    if (len > 5000000 || level > 1000)
-    {
-       bad = 1;
-#if BER_ANY_DEBUG
-       yaz_log(LOG_LOG, "completeBER lev=%d len=%d", level, len);
-#endif
-       if (level > 1000)
-           return -2;
-    }
-    if (len < 2)
-       return 0;
-    if (!buf[0] && !buf[1])
-       return -2;
-    if ((res = ber_dectag(b, &zclass, &tag, &cons, len)) <= 0)
-       return 0;
-#if 0
-/* removed, since ber_dectag never reads that far .. */
-    if (res > len)
-       return 0;
-#endif
-    b += res;
-    len -= res;
-    assert (len >= 0);
-    res = ber_declen(b, &ll, len);
-    if (res == -2)
-    {
-#if BER_ANY_DEBUG
-       if (bad)
-           yaz_log(LOG_LOG, "<<<<<<<<< return1 lev=%d res=%d", level, res);
-#endif
-       return -1;  /* error */
-    }
-    if (res == -1)  
-    {
-#if BER_ANY_DEBUG
-       if (bad)
-           yaz_log(LOG_LOG, "<<<<<<<<< return3 lev=%d res=-1", level);
-#endif
-       return 0;    /* incomplete length */
-    }
-    if (ll > 5000000)
-    {
-#if BER_ANY_DEBUG
-       if (bad)
-           yaz_log(LOG_LOG, "<<<<<<<<< return2 lev=%d len=%d res=%d ll=%d",
-                   level, len, res, ll);
-#endif
-       return -1;  /* error */
-    }
-#if 0
-/* no longer necessary, since ber_declen never reads that far (returns -1) */
-    if (res > len)
-    {
-       if (bad)
-           yaz_log(LOG_LOG, "<<<<<<<<< return4 lev=%d res=%d len=%d",
-                   level, res, len);
-       return 0;
-    }
-#endif
-    b += res;
-    len -= res;
-    if (ll >= 0)
-    {   /* definite length */
-#if BER_ANY_DEBUG
-       if (bad && len < ll)
-           yaz_log(LOG_LOG, "<<<<<<<<< return5 lev=%d len=%d ll=%d",
-                   level, len, ll);
-#endif
-       return (len >= ll ? ll + (b-buf) : 0);
-    }
-    /* indefinite length */
-    if (!cons)
-    {   /* if primitive, it's an error */
-#if BER_ANY_DEBUG
-       yaz_log(LOG_LOG, "<<<<<<<<< return6 lev=%d ll=%d len=%d res=%d",
-               level, ll, len, res);
-#endif
-       return -1;   /* error */
-    }
-    /* constructed - cycle through children */
-    while (len >= 2)
-    {
-       if (b[0] == 0 && b[1] == 0)
-           break;
-       if (!(res = completeBER_n(b, len, level+1)))
-           return 0;
-       if (res == -1)
-           return -1;
-       b += res;
-       len -= res;
-    }
-    if (len < 2)
-       return 0;
-    return (b - buf) + 2;
-}
-
-int completeBER(const unsigned char *buf, int len)
-{
-    int res = completeBER_n(buf, len, 0);
-    if (res < 0)
-       return len;
-    return res;
-}
diff --git a/odr/ber_bit.c b/odr/ber_bit.c
deleted file mode 100644 (file)
index d82e116..0000000
+++ /dev/null
@@ -1,77 +0,0 @@
-/*
- * Copyright (c) 1995-2003, Index Data
- * See the file LICENSE for details.
- * Sebastian Hammer, Adam Dickmeiss
- *
- * $Id: ber_bit.c,v 1.16 2003-05-20 19:50:12 adam Exp $
- *
- */
-#if HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#include "odr-priv.h"
-
-int ber_bitstring(ODR o, Odr_bitmask *p, int cons)
-{
-    int res, len;
-    const unsigned char *base;
-
-    switch (o->direction)
-    {
-    case ODR_DECODE:
-        if ((res = ber_declen(o->bp, &len, odr_max(o))) < 0)
-        {
-            odr_seterror(o, OPROTO, 4);
-            return 0;
-        }
-        o->bp += res;
-        if (cons)       /* fetch component strings */
-        {
-            base = o->bp;
-            while (odp_more_chunks(o, base, len))
-                if (!odr_bitstring(o, &p, 0, 0))
-                    return 0;
-            return 1;
-        }
-        /* primitive bitstring */
-        if (len < 0)
-        {
-            odr_seterror(o, OOTHER, 5);
-            return 0;
-        }
-        if (len == 0)
-            return 1;
-        if (len - 1 > ODR_BITMASK_SIZE)
-        {
-            odr_seterror(o, OOTHER, 6);
-            return 0;
-        }
-        if (len > odr_max(o))
-        {
-            odr_seterror(o, OOTHER, 7);
-            return 0;
-        }
-        o->bp++;      /* silently ignore the unused-bits field */
-        len--;
-        memcpy(p->bits + p->top + 1, o->bp, len);
-        p->top += len;
-        o->bp += len;
-        return 1;
-    case ODR_ENCODE:
-        if ((res = ber_enclen(o, p->top + 2, 5, 0)) < 0)
-            return 0;
-        if (odr_putc(o, 0) < 0)    /* no unused bits here */
-            return 0;
-        if (p->top < 0)
-            return 1;
-        if (odr_write(o, p->bits, p->top + 1) < 0)
-            return 0;
-        return 1;
-    case ODR_PRINT:
-        return 1;
-    default: 
-        odr_seterror(o, OOTHER, 8);
-        return 0;
-    }
-}
diff --git a/odr/ber_bool.c b/odr/ber_bool.c
deleted file mode 100644 (file)
index 7ce8dc2..0000000
+++ /dev/null
@@ -1,53 +0,0 @@
-/*
- * Copyright (c) 1995-2003, Index Data
- * See the file LICENSE for details.
- * Sebastian Hammer, Adam Dickmeiss
- *
- * $Id: ber_bool.c,v 1.14 2003-03-11 11:03:31 adam Exp $
- */
-
-#if HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#include <stdio.h>
-#include "odr-priv.h"
-
-int ber_boolean(ODR o, int *val)
-{
-    int res, len;
-
-    switch (o->direction)
-    {
-    case ODR_ENCODE:
-        if (ber_enclen(o, 1, 1, 1) != 1)
-            return 0;
-        if (odr_putc(o, *val) < 0)
-            return 0;
-#ifdef ODR_DEBUG
-        fprintf(stderr, "[val=%d]\n", *val);
-#endif
-        return 1;
-    case ODR_DECODE:
-        if ((res = ber_declen(o->bp, &len, odr_max(o))) < 0)
-        {
-            odr_seterror(o, OPROTO, 9);
-            return 0;
-        }
-        o->bp+= res;
-        if (len != 1 || odr_max(o) < len)
-        {
-            odr_seterror(o, OPROTO, 10);
-            return 0;
-        }
-        *val = *o->bp;
-        o->bp++;
-#ifdef ODR_DEBUG
-        fprintf(stderr, "[val=%d]\n", *val);
-#endif
-        return 1;
-    case ODR_PRINT:
-        return 1;
-    default: odr_seterror(o, OOTHER, 11); return 0;
-    }
-}
diff --git a/odr/ber_int.c b/odr/ber_int.c
deleted file mode 100644 (file)
index 21aa01f..0000000
+++ /dev/null
@@ -1,105 +0,0 @@
-/*
- * Copyright (c) 1995-2003, Index Data
- * See the file LICENSE for details.
- * Sebastian Hammer, Adam Dickmeiss
- *
- * $Id: ber_int.c,v 1.22 2003-03-11 11:03:31 adam Exp $
- */
-#if HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#include <string.h>
-
-#ifdef WIN32
-#include <winsock.h>
-#else
-#include <sys/types.h>
-#include <netinet/in.h>
-#endif
-
-#include "odr-priv.h"
-
-static int ber_encinteger(ODR o, int val);
-static int ber_decinteger(const unsigned char *buf, int *val, int max);
-
-int ber_integer(ODR o, int *val)
-{
-    int res;
-
-    switch (o->direction)
-    {
-        case ODR_DECODE:
-            if ((res = ber_decinteger(o->bp, val, odr_max(o))) <= 0)
-            {
-                odr_seterror(o, OPROTO, 50);
-                return 0;
-            }
-            o->bp += res;
-            return 1;
-        case ODR_ENCODE:
-            if ((res = ber_encinteger(o, *val)) < 0)
-                return 0;
-            return 1;
-        case ODR_PRINT: return 1;
-        default: odr_seterror(o, OOTHER, 51);  return 0;
-    }
-}
-
-/*
- * Returns: number of bytes written or -1 for error (out of bounds).
- */
-int ber_encinteger(ODR o, int val)
-{
-    int a, len;
-    union { int i; unsigned char c[sizeof(int)]; } tmp;
-
-    tmp.i = htonl(val);   /* ensure that that we're big-endian */
-    for (a = 0; a < (int) sizeof(int) - 1; a++)  /* skip superfluous octets */
-        if (!((tmp.c[a] == 0 && !(tmp.c[a+1] & 0X80)) ||
-            (tmp.c[a] == 0XFF && (tmp.c[a+1] & 0X80))))
-            break;
-    len = sizeof(int) - a;
-    if (ber_enclen(o, len, 1, 1) != 1)
-        return -1;
-    if (odr_write(o, (unsigned char*) tmp.c + a, len) < 0)
-        return -1;
-#ifdef ODR_DEBUG
-    fprintf(stderr, "[val=%d]", val);
-#endif
-    return 0;
-}
-
-/*
- * Returns: Number of bytes read or 0 if no match, -1 if error.
- */
-int ber_decinteger(const unsigned char *buf, int *val, int max)
-{
-    const unsigned char *b = buf;
-    unsigned char fill;
-    int res, len, remains;
-    union { int i; unsigned char c[sizeof(int)]; } tmp;
-
-    if ((res = ber_declen(b, &len, max)) < 0)
-        return -1;
-    if (len+res > max || len < 0) /* out of bounds or indefinite encoding */
-        return -1;  
-    if (len > (int) sizeof(int))  /* let's be reasonable, here */
-        return -1;
-    b+= res;
-
-    remains = sizeof(int) - len;
-    memcpy(tmp.c + remains, b, len);
-    if (*b & 0X80)
-        fill = 0XFF;
-    else
-        fill = 0X00;
-    memset(tmp.c, fill, remains);
-    *val = ntohl(tmp.i);
-
-    b += len;
-#ifdef ODR_DEBUG
-    fprintf(stderr, "[val=%d]", *val);
-#endif
-    return b - buf;
-}
diff --git a/odr/ber_len.c b/odr/ber_len.c
deleted file mode 100644 (file)
index 2c76765..0000000
+++ /dev/null
@@ -1,133 +0,0 @@
-/*
- * Copyright (C) 1995-2003, Index Data.
- * See the file LICENSE for details.
- * Sebastian Hammer, Adam Dickmeiss
- *
- * $Id: ber_len.c,v 1.13 2003-10-20 13:44:05 adam Exp $
- */
-#if HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#include <stdio.h>
-#include "odr-priv.h"
-
-/*
- * Encode BER length octets. If exact, lenlen is the exact desired
- * encoding size, else, lenlen is the max available space. Len < 0 =
- * Indefinite encoding.
- * Returns: >0   success, number of bytes encoded.
- * Returns: =0   success, indefinite start-marker set. 1 byte encoded.
- * Returns: -1   failure, out of bounds.
- */
-int ber_enclen(ODR o, int len, int lenlen, int exact)
-{
-    unsigned char octs[sizeof(int)];
-    int n = 0;
-    int lenpos, end;
-
-#ifdef ODR_DEBUG
-    fprintf(stderr, "[len=%d]", len);
-#endif
-    if (len < 0)      /* Indefinite */
-    {
-       if (odr_putc(o, 0x80) < 0)
-           return 0;
-#ifdef ODR_DEBUG
-       fprintf(stderr, "[indefinite]");
-#endif
-       return 0;
-    }
-    if (len <= 127 && (lenlen == 1 || !exact)) /* definite short form */
-    {
-       if (odr_putc(o, (unsigned char) len) < 0)
-           return 0;
-       return 1;
-    }
-    if (lenlen == 1)
-    {
-       if (odr_putc(o, 0x80) < 0)
-           return 0;
-       return 0;
-    }
-    /* definite long form */
-    do
-    {
-       octs[n++] = len;
-       len >>= 8;
-    }
-    while (len);
-    if (n >= lenlen)
-       return -1;
-    lenpos = odr_tell(o); /* remember length-of-length position */
-    if (odr_putc(o, 0) < 0)  /* dummy */
-       return 0;
-    if (exact)
-       while (n < --lenlen)        /* pad length octets */
-           if (odr_putc(o, 0) < 0)
-               return 0;
-    while (n--)
-       if (odr_putc(o, octs[n]) < 0)
-           return 0;
-    /* set length of length */
-    end = odr_tell(o);
-    odr_seek(o, ODR_S_SET, lenpos);
-    if (odr_putc(o, (end - lenpos - 1) | 0X80) < 0)
-       return 0;
-    odr_seek(o, ODR_S_END, 0);
-    return odr_tell(o) - lenpos;
-}
-
-/*
- * Decode BER length octets. Returns 
- *  > 0  : number of bytes read 
- *   -1  : not enough room to read bytes within max bytes
- *   -2  : other error
- *
- * After return:
- * len = -1   indefinite length.
- * len >= 0   definite length
- */
-int ber_declen(const unsigned char *buf, int *len, int max)
-{
-    const unsigned char *b = buf;
-    int n;
-
-    if (max < 1)
-        return -1;
-    if (*b == 0X80)     /* Indefinite */
-    {
-       *len = -1;
-#ifdef ODR_DEBUG
-       fprintf(stderr, "[len=%d]", *len);
-#endif
-       return 1;
-    }
-    if (!(*b & 0X80))   /* Definite short form */
-    {
-       *len = (int) *b;
-#ifdef ODR_DEBUG
-       fprintf(stderr, "[len=%d]", *len);
-#endif
-       return 1;
-    }
-    if (*b == 0XFF)     /* reserved value */
-       return -2;
-    /* indefinite long form */ 
-    n = *b & 0X7F;
-    if (n >= max)
-        return -1;
-    *len = 0;
-    b++;
-    while (--n >= 0)
-    {
-       *len <<= 8;
-       *len |= *(b++);
-    }
-    if (*len < 0)
-        return -2;
-#ifdef ODR_DEBUG
-    fprintf(stderr, "[len=%d]", *len);
-#endif
-    return (b - buf);
-}
diff --git a/odr/ber_null.c b/odr/ber_null.c
deleted file mode 100644 (file)
index 3b84a1d..0000000
+++ /dev/null
@@ -1,46 +0,0 @@
-/*
- * Copyright (c) 1995-2003, Index Data
- * See the file LICENSE for details.
- * Sebastian Hammer, Adam Dickmeiss
- *
- * $Id: ber_null.c,v 1.14 2003-03-11 11:03:31 adam Exp $
- */
-#if HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#include "odr-priv.h"
-
-/*
- * BER-en/decoder for NULL type.
- */
-int ber_null(ODR o)
-{
-    switch (o->direction)
-    {
-    case ODR_ENCODE:
-        if (odr_putc(o, 0X00) < 0)
-            return 0;
-#ifdef ODR_DEBUG
-        fprintf(stderr, "[NULL]\n");
-#endif
-        return 1;
-    case ODR_DECODE:
-        if (odr_max(o) < 1)
-        {
-            odr_seterror(o, OPROTO, 39);
-            return 0;
-        }
-        if (*(o->bp++) != 0X00)
-        {
-            odr_seterror(o, OPROTO, 12);
-            return 0;
-        }
-#ifdef ODR_DEBUG
-        fprintf(stderr, "[NULL]\n");
-#endif
-        return 1;
-    case ODR_PRINT: return 1;
-    default: odr_seterror(o, OOTHER, 13); return 0;
-    }
-}
diff --git a/odr/ber_oct.c b/odr/ber_oct.c
deleted file mode 100644 (file)
index a332846..0000000
+++ /dev/null
@@ -1,75 +0,0 @@
-/*
- * Copyright (c) 1995-2003, Index Data
- * See the file LICENSE for details.
- * Sebastian Hammer, Adam Dickmeiss
- *
- * $Id: ber_oct.c,v 1.21 2003-03-11 11:03:31 adam Exp $
- */
-#if HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#include "odr-priv.h"
-
-int ber_octetstring(ODR o, Odr_oct *p, int cons)
-{
-    int res, len;
-    const unsigned char *base;
-    unsigned char *c;
-
-    switch (o->direction)
-    {
-       case ODR_DECODE:
-           if ((res = ber_declen(o->bp, &len, odr_max(o))) < 0)
-           {
-                odr_seterror(o, OPROTO, 14);
-               return 0;
-           }
-           o->bp += res;
-           if (cons)       /* fetch component strings */
-           {
-               base = o->bp;
-               while (odp_more_chunks(o, base, len))
-                   if (!odr_octetstring(o, &p, 0, 0))
-                       return 0;
-               return 1;
-           }
-           /* primitive octetstring */
-           if (len < 0)
-           {
-                odr_seterror(o, OOTHER, 15);
-               return 0;
-           }
-            if (len > odr_max(o))
-            {
-                odr_seterror(o, OOTHER, 16);
-                return 0;
-            }
-           if (len + 1 > p->size - p->len)
-           {
-               c = (unsigned char *)odr_malloc(o, p->size += len + 1);
-               if (p->len)
-                   memcpy(c, p->buf, p->len);
-               p->buf = c;
-           }
-           if (len)
-               memcpy(p->buf + p->len, o->bp, len);
-           p->len += len;
-           o->bp += len;
-           /* the final null is really not part of the buffer, but */
-           /* it helps somes applications that assumes C strings */
-           if (len)
-               p->buf[p->len] = '\0';
-           return 1;
-       case ODR_ENCODE:
-           if ((res = ber_enclen(o, p->len, 5, 0)) < 0)
-               return 0;
-           if (p->len == 0)
-               return 1;
-           if (odr_write(o, p->buf, p->len) < 0)
-               return 0;
-           return 1;
-       case ODR_PRINT: return 1;
-       default: odr_seterror(o, OOTHER, 17); return 0;
-    }
-}
diff --git a/odr/ber_oid.c b/odr/ber_oid.c
deleted file mode 100644 (file)
index 905a482..0000000
+++ /dev/null
@@ -1,113 +0,0 @@
-/*
- * Copyright (c) 1995-2003, Index Data
- * See the file LICENSE for details.
- * Sebastian Hammer, Adam Dickmeiss
- *
- * $Id: ber_oid.c,v 1.15 2003-03-11 11:03:31 adam Exp $
- */
-#if HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#include "odr-priv.h"
-
-int ber_oidc(ODR o, Odr_oid *p)
-{
-    int len, lenp, end;
-    int pos, n, res, id;
-    unsigned char octs[8];
-
-    switch (o->direction)
-    {
-    case ODR_DECODE:
-        if ((res = ber_declen(o->bp, &len, odr_max(o))) < 1)
-        {
-            odr_seterror(o, OPROTO, 18);
-            return 0;
-        }
-        if (len < 0)
-        {
-            odr_seterror(o, OPROTO, 19);
-            return 0;
-        }
-        o->bp += res;
-        if (len == 0)
-        {
-            *p = -1;
-            return 1;
-        }
-        if (len > odr_max(o))
-        {
-            odr_seterror(o, OPROTO, 20);
-            return 0;
-        }
-        p[0] = *o->bp / 40;
-        if (p[0] > 2)
-            p[0] = 2;
-        p[1] = *o->bp - p[0] * 40;
-        o->bp++;
-        pos = 2;
-        len--;
-        while (len)
-        {
-            p[pos] = 0;
-            do
-            {
-                if (!len)
-                {
-                    odr_seterror(o, OPROTO, 21);
-                    return 0;
-                }
-                p[pos] <<= 7;
-                p[pos] |= *o->bp & 0X7F;
-                len--;
-            }
-            while (*(o->bp++) & 0X80);
-            pos++;
-        }
-        p[pos] = -1;
-        return 1;
-    case ODR_ENCODE:
-        /* we'll allow ourselves the quiet luxury of only doing encodings
-           shorter than 127 */
-        lenp = odr_tell(o);
-        if (odr_putc(o, 0) < 0)   /* dummy */
-            return 0;
-        if (p[0] < 0 && p[1] <= 0)
-        {
-            odr_seterror(o, ODATA, 23);
-            return 0;
-        }
-        for (pos = 1; p[pos] >= 0; pos++)
-        {
-            id = pos > 1 ? p[pos] : p[0] * 40 + p[1];
-            n = 0;
-            do
-            {
-                octs[n++] = id & 0X7F;
-                id >>= 7;
-            }
-            while (id);
-            while (n--)
-            {
-                unsigned char p;
-
-                p = octs[n] | ((n > 0) << 7);
-                if (odr_putc(o, p) < 0)
-                    return 0;
-            }
-        }
-        end = odr_tell(o);
-        odr_seek(o, ODR_S_SET, lenp);
-        if (ber_enclen(o, (end - lenp) - 1, 1, 1) != 1)
-        {
-            odr_seterror(o, OOTHER, 52);
-            return 0;
-        }
-        odr_seek(o, ODR_S_END, 0);
-        return 1;
-    default: 
-        odr_seterror(o, OOTHER, 22);
-        return 0;
-    }
-}
diff --git a/odr/ber_tag.c b/odr/ber_tag.c
deleted file mode 100644 (file)
index 98b8a95..0000000
+++ /dev/null
@@ -1,186 +0,0 @@
-/*
- * Copyright (c) 1995-2003, Index Data
- * See the file LICENSE for details.
- * Sebastian Hammer, Adam Dickmeiss
- *
- * $Id: ber_tag.c,v 1.27 2003-05-24 19:20:14 adam Exp $
- */
-#if HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#include <stdio.h>
-#include "odr-priv.h"
-
-/* ber_tag
- * On encoding:
- *     if  p: write tag. return 1 (success) or -1 (error).
- *     if !p: return 0.
- * On decoding:
- *      if tag && zclass match up, advance pointer and return 1. set cons.
- *      else leave pointer unchanged. Return 0.
- *
- * Should perhaps be odr_tag?
- */
-int ber_tag(ODR o, void *p, int zclass, int tag, int *constructed, int opt,
-            const char *name)
-{
-    struct Odr_ber_tag *odr_ber_tag = &o->op->odr_ber_tag;
-    int rd;
-    char **pp = (char **)p;
-
-    if (o->direction == ODR_DECODE)
-       *pp = 0;
-    o->t_class = -1;
-    if (o->op->stackp < 0)
-    {
-       odr_seek(o, ODR_S_SET, 0);
-        o->top = 0;
-       o->bp = o->buf;
-        odr_ber_tag->lclass = -1;
-    }
-    switch (o->direction)
-    {
-    case ODR_ENCODE:
-        if (!*pp)
-        {
-            if (!opt)
-            {
-                odr_seterror(o, OREQUIRED, 24);
-                odr_setelement (o, name);
-            }
-            return 0;
-        }
-        if ((rd = ber_enctag(o, zclass, tag, *constructed)) < 0)
-            return -1;
-#ifdef ODR_DEBUG
-        fprintf(stderr, "\n[class=%d,tag=%d,cons=%d,stackp=%d]", zclass, tag,
-                *constructed, o->stackp);
-#endif
-        return 1;
-        
-    case ODR_DECODE:
-        if (o->op->stackp > -1 && !odr_constructed_more(o))
-        {
-            if (!opt)
-            {
-                odr_seterror(o, OREQUIRED, 25);
-                odr_setelement(o, name);
-            }
-            return 0;
-        }
-        if (odr_ber_tag->lclass < 0)
-        {
-            if ((odr_ber_tag->br =
-                 ber_dectag(o->bp, &odr_ber_tag->lclass,
-                            &odr_ber_tag->ltag, &odr_ber_tag->lcons,
-                            odr_max(o))) <= 0)
-            {
-                odr_seterror(o, OPROTO, 26);
-                odr_setelement(o, name);
-                return 0;
-            }
-#ifdef ODR_DEBUG
-            fprintf(stderr,
-                    "\n[class=%d,tag=%d,cons=%d,stackp=%d]",
-                    odr_ber_tag->lclass, odr_ber_tag->ltag,
-                    odr_ber_tag->lcons, o->stackp);
-#endif
-        }
-        if (zclass == odr_ber_tag->lclass && tag == odr_ber_tag->ltag)
-        {
-            o->bp += odr_ber_tag->br;
-            *constructed = odr_ber_tag->lcons;
-            odr_ber_tag->lclass = -1;
-            return 1;
-        }
-        else
-        {
-            if (!opt)
-            {
-                odr_seterror(o, OREQUIRED, 27);
-                odr_setelement(o, name);
-            }
-            return 0;
-        }
-    case ODR_PRINT:
-        if (!*pp && !opt)
-        {
-            odr_seterror(o,OREQUIRED, 28);
-            odr_setelement(o, name);
-        }
-        return *pp != 0;
-    default:
-        odr_seterror(o, OOTHER, 29);
-        odr_setelement(o, name);
-        return 0;
-    }
-}
-
-/* ber_enctag
- * BER-encode a zclass/tag/constructed package (identifier octets). Return
- * number of bytes encoded, or -1 if out of bounds.
- */
-int ber_enctag(ODR o, int zclass, int tag, int constructed)
-{
-    int cons = (constructed ? 1 : 0), n = 0;
-    unsigned char octs[sizeof(int)], b;
-
-    b = (zclass << 6) & 0XC0;
-    b |= (cons << 5) & 0X20;
-    if (tag <= 30)
-    {
-       b |= tag & 0X1F;
-       if (odr_putc(o, b) < 0)
-           return -1;
-       return 1;
-    }
-    else
-    {
-       b |= 0X1F;
-       if (odr_putc(o, b) < 0)
-           return -1;
-       do
-       {
-           octs[n++] = tag & 0X7F;
-           tag >>= 7;
-       }
-       while (tag);
-       while (n--)
-       {
-           unsigned char oo;
-
-           oo = octs[n] | ((n > 0) << 7);
-           if (odr_putc(o, oo) < 0)
-               return -1;
-       }
-       return 0;
-    }
-}
-
-/* ber_dectag
- * Decode BER identifier octets. Return number of bytes read or -1 for error.
- */
-int ber_dectag(const unsigned char *b, int *zclass, int *tag,
-               int *constructed, int max)
-{
-    int l = 1;
-
-    if (l > max)
-        return -1;
-
-    *zclass = *b >> 6;
-    *constructed = (*b >> 5) & 0X01;
-    if ((*tag = *b & 0x1F) <= 30)
-       return 1;
-    *tag = 0;
-    do
-    {
-        if (l >= max)
-            return -1;
-       *tag <<= 7;
-       *tag |= b[l] & 0X7F;
-    }
-    while (b[l++] & 0X80);
-    return l;
-}
diff --git a/odr/dumpber.c b/odr/dumpber.c
deleted file mode 100644 (file)
index b332f9a..0000000
+++ /dev/null
@@ -1,124 +0,0 @@
-/*
- * Copyright (c) 1995-2003, Index Data.
- * See the file LICENSE for details.
- * Sebastian Hammer, Adam Dickmeiss
- *
- * $Id: dumpber.c,v 1.16 2003-04-24 12:48:47 adam Exp $
- */
-#if HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#include <stdio.h>
-#include "odr-priv.h"
-
-static int do_dumpBER(FILE *f, const char *buf, int len, int level, int offset)
-{
-    int res, ll, zclass, tag, cons, lenlen, taglen;
-    const char *b = buf, *bp = buf;
-    
-    if (!len)
-       return 0;
-    if (!buf[0] && !buf[1])
-       return 0;
-    if ((res = ber_dectag((unsigned char*)b, &zclass, &tag, &cons, len)) <= 0)
-       return 0;
-    if (res > len)
-    {
-       fprintf(stderr, "Unexpected end of buffer\n");
-       return 0;
-    }
-    fprintf(f, "%5d: %*s", offset, level * 4, "");
-    if (zclass == ODR_UNIVERSAL)
-    {
-       static char *nl[] =
-       {
-           "[Univ 0]", "BOOLEAN", "INTEGER", "BIT STRING", "OCTET STRING",
-           "NULL", "OID", "OBJECT DESCIPTOR", "EXTERNAL", "REAL",
-           "ENUM", "[UNIV 11]", "[UNIV 12]", "[UNIV 13]", "[UNIV 14]",
-           "[UNIV 15]", "SEQUENCE", "SET", "NUMERICSTRING", "PRINTABLESTRING",
-           "[UNIV 20]", "[UNIV 21]", "[UNIV 22]", "[UNIV 23]", "[UNIV 24]",
-           "GRAPHICSTRING", "VISIBLESTRING", "GENERALSTRING", "[UNIV 28]"
-       };
-
-       if (tag >= 0 && tag < 28)
-           fprintf(f, "%s", nl[tag]);
-       else
-           fprintf(f, "[UNIV %d]", tag);
-    }
-    else if (zclass == ODR_CONTEXT)
-       fprintf(f, "[%d]", tag);
-    else
-       fprintf(f, "[%d:%d]", zclass, tag);
-    b += res;
-    taglen = res;
-    len -= res;
-    bp = b;
-    if ((res = ber_declen((unsigned char*)b, &ll, len)) <= 0)
-    {
-       fprintf(f, "\n%*sBad length\n", level*4+5, "");
-       return 0;
-    }
-    lenlen = res;
-    b += res;
-    len -= res;
-    if (ll >= 0)
-       fprintf(f, " len=%d", ll);
-    else
-       fprintf(f, " len=?");
-    fprintf(f, "       tl=%d, ll=%d cons=%d\n", taglen, lenlen, cons);
-    if (!cons)
-    {
-       if (ll < 0 || ll > len)
-       {
-           fprintf(f, "%*sBad length on primitive type. ll=%d len=%d\n",
-                    level*4+5, "", ll, len);
-           return 0;
-       }
-       return ll + (b - buf);
-    }
-    if (ll >= 0)
-    {
-        if (ll > len)
-        {
-           fprintf(f, "%*sBad length of constructed type ll=%d len=%d.\n",
-                    level*4+5, "", ll, len);
-           return 0;
-        }
-       len = ll;
-    }
-    /* constructed - cycle through children */
-    while ((ll == -1 && len >= 2) || (ll >= 0 && len))
-    {
-       if (ll == -1 && *b == 0 && *(b + 1) == 0)
-           break;
-       if (!(res = do_dumpBER(f, b, len, level + 1, offset + (b - buf))))
-       {
-           fprintf(f, "%*sDump of content element failed.\n", level*4+5, "");
-           return 0;
-       }
-       b += res;
-       len -= res;
-        if (len < 0)
-        {
-            fprintf(f, "%*sBad length\n", level*4+5, "");
-            return 0;
-        }
-    }
-    if (ll == -1)
-    {
-       if (len < 2)
-       {
-           fprintf(f, "%*sBuffer too short in indefinite length.\n",
-                    level*4+5, "");
-           return 0;
-       }
-       return (b - buf) + 2;
-    }
-    return b - buf;
-}
-
-int odr_dumpBER(FILE *f, const char *buf, int len)
-{
-    return do_dumpBER(f, buf, len, 0, 0);
-}
diff --git a/odr/odr-priv.h b/odr/odr-priv.h
deleted file mode 100644 (file)
index 80366c3..0000000
+++ /dev/null
@@ -1,95 +0,0 @@
-/*
- * Copyright (c) 1995-2003, Index Data.
- *
- * Permission to use, copy, modify, distribute, and sell this software and
- * its documentation, in whole or in part, for any purpose, is hereby granted,
- * provided that:
- *
- * 1. This copyright and permission notice appear in all copies of the
- * software and its documentation. Notices of copyright or attribution
- * which appear at the beginning of any file must remain unchanged.
- *
- * 2. The name of Index Data or the individual authors may not be used to
- * endorse or promote products derived from this software without specific
- * prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED "AS IS" AND WITHOUT WARRANTY OF ANY KIND,
- * EXPRESS, IMPLIED, OR OTHERWISE, INCLUDING WITHOUT LIMITATION, ANY
- * WARRANTY OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.
- * IN NO EVENT SHALL INDEX DATA BE LIABLE FOR ANY SPECIAL, INCIDENTAL,
- * INDIRECT OR CONSEQUENTIAL DAMAGES OF ANY KIND, OR ANY DAMAGES
- * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER OR
- * NOT ADVISED OF THE POSSIBILITY OF DAMAGE, AND ON ANY THEORY OF
- * LIABILITY, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE
- * OF THIS SOFTWARE.
- *
- * $Id: odr-priv.h,v 1.6 2003-05-24 19:20:14 adam Exp $
- */
-
-#ifndef ODR_PRIV_H
-
-#define ODR_PRIV_H
-
-#include <yaz/odr.h>
-#include <yaz/yaz-util.h>
-
-struct Odr_ber_tag {      /* used to be statics in ber_tag... */
-    int lclass;
-    int ltag;
-    int br;
-    int lcons;
-};
-
-#define odr_max(o) ((o)->size - ((o)->bp - (o)->buf))
-#define odr_offset(o) ((o)->bp - (o)->buf)
-
-struct Odr_private {
-    /* stack for constructed types */
-#define ODR_MAX_STACK 50
-    int stackp;          /* top of stack (-1 == initial state) */
-    odr_constack stack[ODR_MAX_STACK];
-
-    struct Odr_ber_tag odr_ber_tag;
-    yaz_iconv_t iconv_handle;
-    int error_id;
-    char element[80];
-};
-
-/* Private macro.
- * write a single character at the current position - grow buffer if
- * necessary.
- * (no, we're not usually this anal about our macros, but this baby is
- *  next to unreadable without some indentation  :)
- */
-#define odr_putc(o, c) \
-( \
-    ( \
-        (o)->pos < (o)->size ? \
-        ( \
-            (o)->buf[(o)->pos++] = (c), \
-            0 \
-        ) : \
-        ( \
-            odr_grow_block((o), 1) == 0 ? \
-            ( \
-                (o)->buf[(o)->pos++] = (c), \
-                0 \
-            ) : \
-            ( \
-                (o)->error = OSPACE, \
-                -1 \
-            ) \
-        ) \
-    ) == 0 ? \
-    ( \
-        (o)->pos > (o)->top ? \
-        ( \
-            (o)->top = (o)->pos, \
-            0 \
-        ) : \
-        0 \
-    ) : \
-        -1 \
-)
-
-#endif
diff --git a/odr/odr.c b/odr/odr.c
deleted file mode 100644 (file)
index aaaec46..0000000
--- a/odr/odr.c
+++ /dev/null
@@ -1,183 +0,0 @@
-/*
- * Copyright (c) 1995-2003, Index Data
- * See the file LICENSE for details.
- *
- * $Id: odr.c,v 1.46 2003-10-16 10:37:06 adam Exp $
- *
- */
-#if HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#include <stdio.h>
-#include <stdlib.h>
-
-#include <yaz/xmalloc.h>
-#include "odr-priv.h"
-
-Odr_null *ODR_NULLVAL = (Odr_null *) "NULL";  /* the presence of a null value */
-
-Odr_null *odr_nullval (void)
-{
-    return ODR_NULLVAL;
-}
-
-char *odr_errlist[] =
-{
-    "No (unknown) error",
-    "Memory allocation failed",
-    "System error",
-    "No space in buffer",
-    "Required data element missing",
-    "Unexpected tag",
-    "Other error",
-    "Protocol error",
-    "Malformed data",
-    "Stack overflow",
-    "Length of constructed type different from sum of members",
-    "Overflow writing definite length of constructed type",
-    "Bad HTTP Request"
-};
-
-char *odr_errmsg(int n)
-{
-    return odr_errlist[n];
-}
-
-void odr_perror(ODR o, const char *message)
-{
-    const char *e = odr_getelement(o);
-    int err, x;
-
-    err =  odr_geterrorx(o, &x);
-    fprintf(stderr, "%s: %s (code %d:%d)", message, odr_errlist[err], err, x);
-    if (e && *e)
-        fprintf (stderr, " element %s", e);
-    fprintf(stderr, "\n");
-}
-
-int odr_geterror(ODR o)
-{
-    return o->error;
-}
-
-int odr_geterrorx(ODR o, int *x)
-{
-    if (x)
-        *x = o->op->error_id;
-    return o->error;
-}
-
-char *odr_getelement(ODR o)
-{
-    return o->op->element;
-}
-
-void odr_seterror(ODR o, int error, int id)
-{
-    o->error = error;
-    o->op->error_id = id;
-    o->op->element[0] = '\0';
-}
-
-void odr_setelement(ODR o, const char *element)
-{
-    if (element)
-    {
-        strncpy(o->op->element, element, sizeof(o->op->element)-1);
-        o->op->element[sizeof(o->op->element)-1] = '\0';
-    }
-}
-
-void odr_setprint(ODR o, FILE *file)
-{
-    o->print = file;
-}
-
-int odr_set_charset(ODR o, const char *to, const char *from)
-{
-    if (o->op->iconv_handle)
-        yaz_iconv_close (o->op->iconv_handle);
-    o->op->iconv_handle = 0;
-    if (to && from)
-    {
-        o->op->iconv_handle = yaz_iconv_open (to, from);
-        if (o->op->iconv_handle == 0)
-            return -1;
-    }
-    return 0;
-}
-
-#include <yaz/log.h>
-
-ODR odr_createmem(int direction)
-{
-    ODR r;
-
-    if (!(r = (ODR)xmalloc(sizeof(*r))))
-        return 0;
-    r->direction = direction;
-    r->print = stderr;
-    r->buf = 0;
-    r->size = r->pos = r->top = 0;
-    r->can_grow = 1;
-    r->mem = nmem_create();
-    r->enable_bias = 1;
-    r->op = (struct Odr_private *) xmalloc (sizeof(*r->op));
-    r->op->odr_ber_tag.lclass = -1;
-    r->op->iconv_handle = 0;
-    odr_reset(r);
-    yaz_log (LOG_DEBUG, "odr_createmem dir=%d o=%p", direction, r);
-    return r;
-}
-
-void odr_reset(ODR o)
-{
-    odr_seterror(o, ONONE, 0);
-    o->bp = o->buf;
-    odr_seek(o, ODR_S_SET, 0);
-    o->top = 0;
-    o->t_class = -1;
-    o->t_tag = -1;
-    o->indent = 0;
-    o->op->stackp = -1;
-    nmem_reset(o->mem);
-    o->choice_bias = -1;
-    o->lenlen = 1;
-    if (o->op->iconv_handle != 0)
-        yaz_iconv(o->op->iconv_handle, 0, 0, 0, 0);
-    yaz_log (LOG_DEBUG, "odr_reset o=%p", o);
-}
-    
-void odr_destroy(ODR o)
-{
-    nmem_destroy(o->mem);
-    if (o->buf && o->can_grow)
-       xfree(o->buf);
-    if (o->print && o->print != stderr)
-        fclose(o->print);
-    if (o->op->iconv_handle != 0)
-        yaz_iconv_close (o->op->iconv_handle);
-    xfree(o->op);
-    xfree(o);
-    yaz_log (LOG_DEBUG, "odr_destroy o=%p", o);
-}
-
-void odr_setbuf(ODR o, char *buf, int len, int can_grow)
-{
-    o->bp = (unsigned char *) buf;
-
-    o->buf = (unsigned char *) buf;
-    o->can_grow = can_grow;
-    o->top = o->pos = 0;
-    o->size = len;
-}
-
-char *odr_getbuf(ODR o, int *len, int *size)
-{
-    *len = o->top;
-    if (size)
-        *size = o->size;
-    return (char*) o->buf;
-}
-
diff --git a/odr/odr_any.c b/odr/odr_any.c
deleted file mode 100644 (file)
index e464872..0000000
+++ /dev/null
@@ -1,36 +0,0 @@
-/*
- * Copyright (c) 1995-2003, Index Data
- * See the file LICENSE for details.
- * Sebastian Hammer, Adam Dickmeiss
- *
- * $Id: odr_any.c,v 1.14 2003-05-20 19:55:30 adam Exp $
- */
-#if HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#include "odr-priv.h"
-
-/*
- * This is a catch-all type. It stuffs a random ostring (assumed to be properly
- * encoded) into the stream, or reads a full data element. Implicit tagging
- * does not work, and neither does the optional flag, unless the element
- * is the last in a sequence.
- */
-int odr_any(ODR o, Odr_any **p, int opt, const char *name)
-{
-    if (o->error)
-       return 0;
-    if (o->direction == ODR_PRINT)
-    {
-       odr_prname(o, name);
-       fprintf(o->print, "ANY (len=%d)\n", (*p)->len);
-       return 1;
-    }
-    if (o->direction == ODR_DECODE)
-       *p = (Odr_oct *)odr_malloc(o, sizeof(**p));
-    if (ber_any(o, p))
-       return 1;
-    *p = 0;
-    return odr_missing(o, opt, name);
-}
diff --git a/odr/odr_bit.c b/odr/odr_bit.c
deleted file mode 100644 (file)
index 07d0647..0000000
+++ /dev/null
@@ -1,54 +0,0 @@
-/*
- * Copyright (c) 1995-2003, Index Data
- * See the file LICENSE for details.
- * Sebastian Hammer, Adam Dickmeiss
- *
- * $Id: odr_bit.c,v 1.18 2003-05-20 19:55:30 adam Exp $
- */
-#if HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#include <string.h>
-#include "odr-priv.h"
-
-/*
- * Top level bitstring string en/decoder.
- * Returns 1 on success, 0 on error.
- */
-int odr_bitstring(ODR o, Odr_bitmask **p, int opt, const char *name)
-{
-    int res, cons = 0;
-
-    if (o->error)
-       return 0;
-    if (o->t_class < 0)
-    {
-       o->t_class = ODR_UNIVERSAL;
-       o->t_tag = ODR_BITSTRING;
-    }
-    if ((res = ber_tag(o, p, o->t_class, o->t_tag, &cons, opt, name)) < 0)
-       return 0;
-    if (!res)
-       return odr_missing(o, opt, name);
-    if (o->direction == ODR_PRINT)
-    {
-       odr_prname(o, name);
-       fprintf(o->print, "BITSTRING(len=%d)\n",(*p)->top + 1);
-       return 1;
-    }
-    if (o->direction == ODR_DECODE)
-    {
-       *p = (Odr_bitmask *)odr_malloc(o, sizeof(Odr_bitmask));
-       memset((*p)->bits, 0, ODR_BITMASK_SIZE);
-       (*p)->top = -1;
-    }
-#if 0
-    /* ignoring the cons helps with at least one target. 
-     * http://bugzilla.indexdata.dk/cgi-bin/bugzilla/show_bug.cgi?id=24
-     */
-    return ber_bitstring(o, *p, 0);
-#else
-    return ber_bitstring(o, *p, cons);
-#endif
-}
diff --git a/odr/odr_bool.c b/odr/odr_bool.c
deleted file mode 100644 (file)
index 9ad56a8..0000000
+++ /dev/null
@@ -1,45 +0,0 @@
-/*
- * Copyright (c) 1995-2003, Index Data
- * See the file LICENSE for details.
- * Sebastian Hammer, Adam Dickmeiss
- *
- * $Id: odr_bool.c,v 1.15 2003-05-20 19:55:30 adam Exp $
- */
-#if HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#include <stdio.h>
-#include "odr-priv.h"
-
-/*
- * Top level boolean en/decoder.
- * Returns 1 on success, 0 on error.
- */
-int odr_bool(ODR o, int **p, int opt, const char *name)
-{
-    int res, cons = 0;
-
-    if (o->error)
-       return 0;
-    if (o->t_class < 0)
-    {
-       o->t_class = ODR_UNIVERSAL;
-       o->t_tag = ODR_BOOLEAN;
-    }
-    if ((res = ber_tag(o, p, o->t_class, o->t_tag, &cons, opt, name)) < 0)
-       return 0;
-    if (!res)
-       return odr_missing(o, opt, name);
-    if (o->direction == ODR_PRINT)
-    {
-       odr_prname(o, name);
-       fprintf(o->print, "%s\n", (**p ? "TRUE" : "FALSE"));
-       return 1;
-    }
-    if (cons)
-       return 0;
-    if (o->direction == ODR_DECODE)
-       *p = (int *)odr_malloc(o, sizeof(int));
-    return ber_boolean(o, *p);
-}
diff --git a/odr/odr_choice.c b/odr/odr_choice.c
deleted file mode 100644 (file)
index 51f6b2f..0000000
+++ /dev/null
@@ -1,96 +0,0 @@
-/*
- * Copyright (c) 1995-2003, Index Data
- * See the file LICENSE for details.
- * Sebastian Hammer, Adam Dickmeiss
- *
- * $Id: odr_choice.c,v 1.22 2003-03-11 11:03:31 adam Exp $
- */
-#if HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#include "odr-priv.h"
-
-int odr_choice(ODR o, Odr_arm arm[], void *p, void *whichp,
-              const char *name)
-{
-    int i, cl = -1, tg, cn, *which = (int *)whichp, bias = o->choice_bias;
-
-    if (o->error)
-       return 0;
-    if (o->direction != ODR_DECODE && !*(char**)p)
-       return 0;
-
-    if (o->direction == ODR_DECODE)
-    {
-        *which = -1;
-        *(char**)p = 0;
-    }
-    o->choice_bias = -1;
-
-    if (o->direction == ODR_PRINT)
-    {
-       if (name)
-       {
-           odr_prname(o, name);
-           fprintf (o->print, "choice\n");
-       }
-    }
-    for (i = 0; arm[i].fun; i++)
-    {
-       if (o->direction == ODR_DECODE)
-       {
-           if (bias >= 0 && bias != arm[i].which)
-               continue;
-           *which = arm[i].which;
-       }
-       else if (*which != arm[i].which)
-           continue;
-
-       if (arm[i].tagmode != ODR_NONE)
-       {
-           if (o->direction == ODR_DECODE && cl < 0)
-           {
-               if (o->op->stackp > -1 && !odr_constructed_more(o))
-                   return 0;
-               if (ber_dectag(o->bp, &cl, &tg, &cn, odr_max(o)) <= 0)
-                   return 0;
-           }
-           else if (o->direction != ODR_DECODE)
-           {
-               cl = arm[i].zclass;
-               tg = arm[i].tag;
-           }
-           if (tg == arm[i].tag && cl == arm[i].zclass)
-           {
-               if (arm[i].tagmode == ODR_IMPLICIT)
-               {
-                   odr_implicit_settag(o, cl, tg);
-                   return (*arm[i].fun)(o, (char **)p, 0, arm[i].name);
-               }
-               /* explicit */
-               if (!odr_constructed_begin(o, p, cl, tg, 0))
-                   return 0;
-               return (*arm[i].fun)(o, (char **)p, 0, arm[i].name) &&
-                   odr_constructed_end(o);
-           }
-       }
-       else  /* no tagging. Have to poll type */
-       {
-           if ((*arm[i].fun)(o, (char **)p, 1, arm[i].name) && *(char**)p)
-               return 1;
-       }
-    }
-    return 0;
-}
-
-void odr_choice_bias(ODR o, int what)
-{
-    if (o->enable_bias)
-        o->choice_bias = what;
-}
-
-void odr_choice_enable_bias (ODR o, int mode)
-{
-    o->enable_bias = mode;
-}
diff --git a/odr/odr_cons.c b/odr/odr_cons.c
deleted file mode 100644 (file)
index 1521343..0000000
+++ /dev/null
@@ -1,180 +0,0 @@
-/*
- * Copyright (c) 1995-2003, Index Data
- * See the file LICENSE for details.
- *
- * $Id: odr_cons.c,v 1.26 2003-05-20 19:55:30 adam Exp $
- *
- */
-#if HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#include "odr-priv.h"
-
-void odr_setlenlen(ODR o, int len)
-{
-    o->lenlen = len;
-}
-
-int odr_constructed_begin(ODR o, void *p, int zclass, int tag,
-                         const char *name)
-{
-    int res;
-    int cons = 1;
-    int lenlen = o->lenlen;
-
-    if (o->error)
-       return 0;
-    o->lenlen = 1; /* reset lenlen */
-    if (o->t_class < 0)
-    {
-       o->t_class = zclass;
-       o->t_tag = tag;
-    }
-    if ((res = ber_tag(o, p, o->t_class, o->t_tag, &cons, 1, name)) < 0)
-       return 0;
-    if (!res || !cons)
-       return 0;
-
-    if (o->op->stackp == ODR_MAX_STACK - 1)
-    {
-        odr_seterror(o, OSTACK, 30);
-       return 0;
-    }
-    o->op->stack[++(o->op->stackp)].lenb = o->bp;
-    o->op->stack[o->op->stackp].len_offset = odr_tell(o);
-#ifdef ODR_DEBUG
-    fprintf(stderr, "[cons_begin(%d)]", o->op->stackp);
-#endif
-    if (o->direction == ODR_ENCODE)
-    {
-       static unsigned char dummy[sizeof(int)+1];
-
-       o->op->stack[o->op->stackp].lenlen = lenlen;
-
-       if (odr_write(o, dummy, lenlen) < 0)  /* dummy */
-        {
-            --(o->op->stackp);
-           return 0;
-        }
-    }
-    else if (o->direction == ODR_DECODE)
-    {
-       if ((res = ber_declen(o->bp, &o->op->stack[o->op->stackp].len,
-                              odr_max(o))) < 0)
-        {
-            odr_seterror(o, OOTHER, 31);
-            --(o->op->stackp);
-           return 0;
-        }
-       o->op->stack[o->op->stackp].lenlen = res;
-       o->bp += res;
-        if (o->op->stack[o->op->stackp].len > odr_max(o))
-        {
-            odr_seterror(o, OOTHER, 32);
-            --(o->op->stackp);
-           return 0;
-        }
-    }
-    else if (o->direction == ODR_PRINT)
-    {
-       odr_prname(o, name);
-       fprintf(o->print, "{\n");
-       o->indent++;
-    }
-    else
-    {
-        odr_seterror(o, OOTHER, 33);
-        --(o->op->stackp);
-       return 0;
-    }
-    o->op->stack[o->op->stackp].base = o->bp;
-    o->op->stack[o->op->stackp].base_offset = odr_tell(o);
-    return 1;
-}
-
-int odr_constructed_more(ODR o)
-{
-    if (o->error)
-       return 0;
-    if (o->op->stackp < 0)
-       return 0;
-    if (o->op->stack[o->op->stackp].len >= 0)
-       return o->bp - o->op->stack[o->op->stackp].base < o->op->stack[o->op->stackp].len;
-    else
-       return (!(*o->bp == 0 && *(o->bp + 1) == 0));
-}
-
-int odr_constructed_end(ODR o)
-{
-    int res;
-    int pos;
-
-    if (o->error)
-       return 0;
-    if (o->op->stackp < 0)
-    {
-        odr_seterror(o, OOTHER, 34);
-       return 0;
-    }
-    switch (o->direction)
-    {
-    case ODR_DECODE:
-        if (o->op->stack[o->op->stackp].len < 0)
-        {
-            if (*o->bp++ == 0 && *(o->bp++) == 0)
-            {
-                   o->op->stackp--;
-                   return 1;
-            }
-            else
-            {
-                odr_seterror(o, OOTHER, 35);
-                return 0;
-            }
-        }
-        else if (o->bp - o->op->stack[o->op->stackp].base !=
-                 o->op->stack[o->op->stackp].len)
-        {
-            odr_seterror(o, OCONLEN, 36);
-            return 0;
-        }
-        o->op->stackp--;
-        return 1;
-    case ODR_ENCODE:
-        pos = odr_tell(o);
-        odr_seek(o, ODR_S_SET, o->op->stack[o->op->stackp].len_offset);
-        if ((res = ber_enclen(o, pos - o->op->stack[o->op->stackp].base_offset,
-                              o->op->stack[o->op->stackp].lenlen, 1)) < 0)
-        {
-            odr_seterror(o, OLENOV, 37);
-            return 0;
-        }
-        odr_seek(o, ODR_S_END, 0);
-        if (res == 0)   /* indefinite encoding */
-        {
-#ifdef ODR_DEBUG
-            fprintf(stderr, "[cons_end(%d): indefinite]", o->op->stackp);
-#endif
-            if (odr_putc(o, 0) < 0 || odr_putc(o, 0) < 0)
-                return 0;
-        }
-#ifdef ODR_DEBUG
-        else
-        {
-            fprintf(stderr, "[cons_end(%d): definite]", o->op->stackp);
-        }
-#endif
-        o->op->stackp--;
-        return 1;
-    case ODR_PRINT:
-        o->op->stackp--;
-        o->indent--;
-        odr_prname(o, 0);
-        fprintf(o->print, "}\n");
-        return 1;
-    default:
-        odr_seterror(o, OOTHER, 38);
-        return 0;
-    }
-}
diff --git a/odr/odr_enum.c b/odr/odr_enum.c
deleted file mode 100644 (file)
index 22c20d8..0000000
+++ /dev/null
@@ -1,47 +0,0 @@
-/*
- * Copyright (c) 1995-2003, Index Data
- * See the file LICENSE for details.
- * Sebastian Hammer, Adam Dickmeiss
- *
- * $Id: odr_enum.c,v 1.9 2003-05-20 19:55:30 adam Exp $
- */
-#if HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#include "odr-priv.h"
-
-/*
- * Top level enum en/decoder.
- * Returns 1 on success, 0 on error.
- */
-int odr_enum(ODR o, int **p, int opt, const char *name)
-{
-    int res, cons = 0;
-
-    if (o->error)
-        return 0;
-    if (o->t_class < 0)
-    {
-        o->t_class = ODR_UNIVERSAL;
-        o->t_tag = ODR_ENUM;
-    }
-    if ((res = ber_tag(o, p, o->t_class, o->t_tag, &cons, opt, name)) < 0)
-        return 0;
-    if (!res)
-        return odr_missing(o, opt, name);
-    if (o->direction == ODR_PRINT)
-    {
-       odr_prname(o, name);
-        fprintf(o->print, "%d\n", **p);
-        return 1;
-    }
-    if (cons)
-    {
-        odr_seterror(o, OPROTO, 54);
-        return 0;
-    }
-    if (o->direction == ODR_DECODE)
-        *p = (int *)odr_malloc(o, sizeof(int));
-    return ber_integer(o, *p);
-}
diff --git a/odr/odr_int.c b/odr/odr_int.c
deleted file mode 100644 (file)
index a685761..0000000
+++ /dev/null
@@ -1,47 +0,0 @@
-/*
- * Copyright (c) 1995-2003, Index Data
- * See the file LICENSE for details.
- * Sebastian Hammer, Adam Dickmeiss
- *
- * $Id: odr_int.c,v 1.19 2003-05-20 19:55:30 adam Exp $
- */
-#if HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#include "odr-priv.h"
-
-/*
- * Top level integer en/decoder.
- * Returns 1 on success, 0 on error.
- */
-int odr_integer(ODR o, int **p, int opt, const char *name)
-{
-    int res, cons = 0;
-
-    if (o->error)
-        return 0;
-    if (o->t_class < 0)
-    {
-        o->t_class = ODR_UNIVERSAL;
-        o->t_tag = ODR_INTEGER;
-    }
-    if ((res = ber_tag(o, p, o->t_class, o->t_tag, &cons, opt, name)) < 0)
-        return 0;
-    if (!res)
-        return odr_missing(o, opt, name);
-    if (o->direction == ODR_PRINT)
-    {
-       odr_prname(o, name);
-        fprintf(o->print, "%d\n", **p);
-        return 1;
-    }
-    if (cons)
-    {
-        odr_seterror(o, OPROTO, 1);
-        return 0;
-    }
-    if (o->direction == ODR_DECODE)
-        *p = (int *)odr_malloc(o, sizeof(int));
-    return ber_integer(o, *p);
-}
diff --git a/odr/odr_mem.c b/odr/odr_mem.c
deleted file mode 100644 (file)
index 2ec348a..0000000
+++ /dev/null
@@ -1,109 +0,0 @@
-/*
- * Copyright (c) 1995-2003, Index Data
- * See the file LICENSE for details.
- *
- * $Id: odr_mem.c,v 1.23 2003-03-18 13:34:35 adam Exp $
- */
-#if HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#include <stdlib.h>
-#include "odr-priv.h"
-#include <yaz/xmalloc.h>
-
-/* ------------------------ NIBBLE MEMORY ---------------------- */
-
-/*
- * Extract the memory control block from o.
- */
-NMEM odr_extract_mem(ODR o)
-{
-    NMEM r = o->mem;
-
-    o->mem = 0;
-    return r;
-}
-
-void *odr_malloc(ODR o, int size)
-{
-    if (o && !o->mem)
-       o->mem = nmem_create();
-    return nmem_malloc(o ? o->mem : 0, size);
-}
-
-char *odr_strdup(ODR o, const char *str)
-{
-    return nmem_strdup(o->mem, str);
-}
-
-char *odr_strdupn(ODR o, const char *str, size_t n)
-{
-    return nmem_strdupn(o->mem, str, n);
-}
-
-int *odr_intdup(ODR o, int v)
-{
-    return nmem_intdup(o->mem, v);
-}
-
-int odr_total(ODR o)
-{
-    return o->mem ? nmem_total(o->mem) : 0;
-}
-
-/* ---------- memory management for data encoding ----------*/
-
-
-int odr_grow_block(ODR b, int min_bytes)
-{
-    int togrow;
-
-    if (!b->can_grow)
-       return -1;
-    if (!b->size)
-       togrow = 1024;
-    else
-       togrow = b->size;
-    if (togrow < min_bytes)
-       togrow = min_bytes;
-    if (b->size && !(b->buf =
-                    (unsigned char *) xrealloc(b->buf, b->size += togrow)))
-       abort();
-    else if (!b->size && !(b->buf = (unsigned char *)
-                          xmalloc(b->size = togrow)))
-       abort();
-#ifdef ODR_DEBUG
-    fprintf(stderr, "New size for encode_buffer: %d\n", b->size);
-#endif
-    return 0;
-}
-
-int odr_write(ODR o, unsigned char *buf, int bytes)
-{
-    if (o->pos + bytes >= o->size && odr_grow_block(o, bytes))
-    {
-        odr_seterror(o, OSPACE, 40);
-       return -1;
-    }
-    memcpy(o->buf + o->pos, buf, bytes);
-    o->pos += bytes;
-    if (o->pos > o->top)
-       o->top = o->pos;
-    return 0;
-}
-
-int odr_seek(ODR o, int whence, int offset)
-{
-    if (whence == ODR_S_CUR)
-       offset += o->pos;
-    else if (whence == ODR_S_END)
-       offset += o->top;
-    if (offset > o->size && odr_grow_block(o, offset - o->size))
-    {
-        odr_seterror(o, OSPACE, 41);
-       return -1;
-    }
-    o->pos = offset;
-    return 0;
-}
diff --git a/odr/odr_null.c b/odr/odr_null.c
deleted file mode 100644 (file)
index 8e7d85d..0000000
+++ /dev/null
@@ -1,51 +0,0 @@
-/*
- * Copyright (c) 1995-2003, Index Data
- * See the file LICENSE for details.
- * Sebastian Hammer, Adam Dickmeiss
- *
- * $Id: odr_null.c,v 1.17 2003-05-20 19:55:30 adam Exp $
- */
-#if HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#include "odr-priv.h"
-
-/*
- * Top level null en/decoder.
- * Returns 1 on success, 0 on error.
- */
-int odr_null(ODR o, Odr_null **p, int opt, const char *name)
-{
-    int res, cons = 0;
-
-    if (o->error)
-       return 0;
-    if (o->t_class < 0)
-    {
-       o->t_class = ODR_UNIVERSAL;
-       o->t_tag = ODR_NULL;
-    }
-    if ((res = ber_tag(o, p, o->t_class, o->t_tag, &cons, opt, name)) < 0)
-       return 0;
-    if (!res)
-       return odr_missing(o, opt, name);
-    if (o->direction == ODR_PRINT)
-    {
-       odr_prname(o, name);
-       fprintf(o->print, "NULL\n");
-       return 1;
-    }
-    if (cons)
-    {
-#ifdef ODR_STRICT_NULL
-        odr_seterror(OPROTO, 42);
-       return 0;
-#else
-       fprintf(stderr, "odr: Warning: Bad NULL\n");
-#endif
-    }
-    if (o->direction == ODR_DECODE)
-       *p = odr_nullval();
-    return ber_null(o);
-}
diff --git a/odr/odr_oct.c b/odr/odr_oct.c
deleted file mode 100644 (file)
index c0458dd..0000000
+++ /dev/null
@@ -1,206 +0,0 @@
-/*
- * Copyright (c) 1995-2003, Index Data
- * See the file LICENSE for details.
- * Sebastian Hammer, Adam Dickmeiss
- *
- * $Id: odr_oct.c,v 1.22 2003-05-20 19:55:30 adam Exp $
- */
-#if HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#include <yaz/log.h>
-#include "odr-priv.h"
-
-/*
- * Top level octet string en/decoder.
- * Returns 1 on success, 0 on error.
- */
-int odr_octetstring(ODR o, Odr_oct **p, int opt, const char *name)
-{
-    int res, cons = 0;
-
-    if (o->error)
-       return 0;
-    if (o->t_class < 0)
-    {
-       o->t_class = ODR_UNIVERSAL;
-       o->t_tag = ODR_OCTETSTRING;
-    }
-    if ((res = ber_tag(o, p, o->t_class, o->t_tag, &cons, opt, name)) < 0)
-       return 0;
-    if (!res)
-       return odr_missing(o, opt, name);
-    if (o->direction == ODR_PRINT)
-    {
-        int i;
-       odr_prname(o, name);
-       fprintf(o->print, "OCTETSTRING(len=%d)", (*p)->len);
-        for (i = 0; i<(*p)->len; i++)
-        {
-           if (i < 5 || i > ((*p)->len - 4))
-            {
-                fprintf (o->print, " %02X", (*p)->buf[i]);
-            }
-            else if (i == 5)
-                fprintf (o->print, " .. ");
-        }
-        fprintf(o->print, "\n");
-       return 1;
-    }
-    if (o->direction == ODR_DECODE)
-    {
-       *p = (Odr_oct *)odr_malloc(o, sizeof(Odr_oct));
-       (*p)->size= 0;
-       (*p)->len = 0;
-       (*p)->buf = 0;
-    }
-    if (ber_octetstring(o, *p, cons))
-       return 1;
-    odr_seterror(o, OOTHER, 43);
-    return 0;
-}
-
-/*
- * Friendlier interface to octetstring.
- */
-int odr_cstring(ODR o, char **p, int opt, const char *name)
-{
-    int cons = 0, res;
-    Odr_oct *t;
-
-    if (o->error)
-       return 0;
-    if (o->t_class < 0)
-    {
-       o->t_class = ODR_UNIVERSAL;
-       o->t_tag = ODR_OCTETSTRING;
-    }
-    if ((res = ber_tag(o, p, o->t_class, o->t_tag, &cons, opt, name)) < 0)
-       return 0;
-    if (!res)
-       return odr_missing(o, opt, name);
-    if (o->direction == ODR_PRINT)
-    {
-       odr_prname(o, name);
-       fprintf(o->print, "'%s'\n", *p);
-       return 1;
-    }
-    t = (Odr_oct *)odr_malloc(o, sizeof(Odr_oct)); /* wrapper for octstring */
-    if (o->direction == ODR_ENCODE)
-    {
-       t->buf = (unsigned char *) *p;
-       t->size = t->len = strlen(*p);
-    }
-    else
-    {
-       t->size= 0;
-       t->len = 0;
-       t->buf = 0;
-    }
-    if (!ber_octetstring(o, t, cons))
-       return 0;
-    if (o->direction == ODR_DECODE)
-    {
-       *p = (char *) t->buf;
-       *(*p + t->len) = '\0';  /* ber_octs reserves space for this */
-    }
-    return 1;
-}
-
-/*
- * iconv interface to octetstring.
- */
-int odr_iconv_string(ODR o, char **p, int opt, const char *name)
-{
-    int cons = 0, res;
-    Odr_oct *t;
-
-    if (o->error)
-       return 0;
-    if (o->t_class < 0)
-    {
-       o->t_class = ODR_UNIVERSAL;
-       o->t_tag = ODR_OCTETSTRING;
-    }
-    if ((res = ber_tag(o, p, o->t_class, o->t_tag, &cons, opt, name)) < 0)
-       return 0;
-    if (!res)
-       return odr_missing(o, opt, name);
-    if (o->direction == ODR_PRINT)
-    {
-       odr_prname(o, name);
-       fprintf(o->print, "'%s'\n", *p);
-       return 1;
-    }
-    t = (Odr_oct *)odr_malloc(o, sizeof(Odr_oct)); /* wrapper for octstring */
-    if (o->direction == ODR_ENCODE)
-    {
-        t->buf = 0;
-
-        if (o->op->iconv_handle != 0)
-        {
-            size_t inleft = strlen(*p);
-            char *inbuf = *p;
-            size_t outleft = 4 * inleft + 2;
-            char *outbuf = (char *) odr_malloc (o, outleft);
-            size_t ret;
-            
-            t->buf = (unsigned char *) outbuf;
-            
-            ret = yaz_iconv (o->op->iconv_handle, &inbuf, &inleft,
-                             &outbuf, &outleft);
-            if (ret == (size_t)(-1))
-            {
-                odr_seterror(o, ODATA, 44);
-                return 0;
-            }
-            t->size = t->len = outbuf - (char*) t->buf;
-        }
-        if (!t->buf)
-        {
-            t->buf = (unsigned char *) *p;
-            t->size = t->len = strlen(*p);
-        }
-    }
-    else
-    {
-       t->size= 0;
-       t->len = 0;
-       t->buf = 0;
-    }
-    if (!ber_octetstring(o, t, cons))
-       return 0;
-    if (o->direction == ODR_DECODE)
-    {
-        *p = 0;
-
-        if (o->op->iconv_handle != 0)
-        {
-            size_t inleft = t->len;
-            char *inbuf = (char *) t->buf;
-            size_t outleft = 4 * inleft + 2;
-            char *outbuf = (char *) odr_malloc (o, outleft);
-            size_t ret;
-
-            *p = outbuf;
-            
-            ret = yaz_iconv (o->op->iconv_handle, &inbuf, &inleft,
-                             &outbuf, &outleft);
-            if (ret == (size_t)(-1))
-            {
-                odr_seterror(o, ODATA, 45);
-                return 0;
-            }
-            inleft = outbuf - (char*) *p;
-            
-            (*p)[inleft] = '\0';    /* null terminate it */
-        }
-        if (!*p)
-        {
-            *p = (char *) t->buf;
-            *(*p + t->len) = '\0';  /* ber_octs reserves space for this */
-        }
-    }
-    return 1;
-}
diff --git a/odr/odr_oid.c b/odr/odr_oid.c
deleted file mode 100644 (file)
index 4077f36..0000000
+++ /dev/null
@@ -1,53 +0,0 @@
-/*
- * Copyright (c) 1995-2003, Index Data
- * See the file LICENSE for details.
- * Sebastian Hammer, Adam Dickmeiss
- *
- * $Id: odr_oid.c,v 1.20 2003-05-20 19:55:30 adam Exp $
- */
-#if HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#include "odr-priv.h"
-#include <yaz/oid.h>
-
-/*
- * Top level oid en/decoder.
- * Returns 1 on success, 0 on error.
- */
-int odr_oid(ODR o, Odr_oid **p, int opt, const char *name)
-{
-    int res, cons = 0;
-
-    if (o->error)
-       return 0;
-    if (o->t_class < 0)
-    {
-       o->t_class = ODR_UNIVERSAL;
-       o->t_tag = ODR_OID;
-    }
-    if ((res = ber_tag(o, p, o->t_class, o->t_tag, &cons, opt, name)) < 0)
-       return 0;
-    if (!res)
-       return odr_missing(o, opt, name);
-    if (cons)
-    {
-        odr_seterror(o, OPROTO, 46);
-       return 0;
-    }
-    if (o->direction == ODR_PRINT)
-    {
-       int i;
-
-       odr_prname(o, name);
-       fprintf(o->print, "OID:");
-       for (i = 0; (*p)[i] > -1; i++)
-           fprintf(o->print, " %d", (*p)[i]);
-       fprintf(o->print, "\n");
-       return 1;
-    }
-    if (o->direction == ODR_DECODE)
-       *p = (int *)odr_malloc(o, OID_SIZE * sizeof(**p));
-    return ber_oidc(o, *p);
-}
diff --git a/odr/odr_seq.c b/odr/odr_seq.c
deleted file mode 100644 (file)
index ab68a76..0000000
+++ /dev/null
@@ -1,150 +0,0 @@
-/*
- * Copyright (c) 1995-2003, Index Data
- * See the file LICENSE for details.
- * Sebastian Hammer, Adam Dickmeiss
- *
- * $Id: odr_seq.c,v 1.30 2003-03-11 11:03:31 adam Exp $
- */
-
-#if HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#include "odr-priv.h"
-
-int odr_sequence_begin(ODR o, void *p, int size, const char *name)
-{
-    char **pp = (char**) p;
-
-    if (o->error)
-       return 0;
-    if (o->t_class < 0)
-    {
-       o->t_class = ODR_UNIVERSAL;
-       o->t_tag = ODR_SEQUENCE;
-    }
-    if (o->direction == ODR_DECODE)
-       *pp = 0;
-    if (odr_constructed_begin(o, p, o->t_class, o->t_tag, name))
-    {
-       if (o->direction == ODR_DECODE && size)
-           *pp = (char *)odr_malloc(o, size);
-       return 1;
-    }
-    else
-       return 0;
-}
-
-int odr_set_begin(ODR o, void *p, int size, const char *name)
-{
-    char **pp = (char**) p;
-
-    if (o->error)
-       return 0;
-    if (o->t_class < 0)
-    {
-       o->t_class = ODR_UNIVERSAL;
-       o->t_tag = ODR_SET;
-    }
-    if (o->direction == ODR_DECODE)
-       *pp = 0;
-    if (odr_constructed_begin(o, p, o->t_class, o->t_tag, name))
-    {
-       if (o->direction == ODR_DECODE && size)
-           *pp = (char *)odr_malloc(o, size);
-       return 1;
-    }
-    else
-       return 0;
-}
-
-int odr_sequence_end(ODR o)
-{
-    return odr_constructed_end(o);    
-}
-
-int odr_set_end(ODR o)
-{
-    return odr_constructed_end(o);    
-}
-
-static int odr_sequence_more(ODR o)
-{
-    return odr_constructed_more(o);
-}
-
-static int odr_sequence_x (ODR o, Odr_fun type, void *p, int *num)
-{
-    char ***pp = (char***) p;  /* for dereferencing */
-    char **tmp = 0;
-    int size = 0, i;
-
-    switch (o->direction)
-    {
-       case ODR_DECODE:
-           *num = 0;
-           *pp = (char **)odr_nullval();
-           while (odr_sequence_more(o))
-           {
-               /* outgrown array? */
-               if (*num * (int) sizeof(void*) >= size)
-               {
-                   /* double the buffer size */
-                   tmp = (char **)odr_malloc(o, sizeof(void*) *
-                                             (size += size ? size : 128));
-                   if (*num)
-                   {
-                       memcpy(tmp, *pp, *num * sizeof(void*));
-                       /*
-                        * For now, we just throw the old *p away, since we use
-                        * nibble memory anyway (disgusting, isn't it?).
-                        */
-                   }
-                   *pp = tmp;
-               }
-               if (!(*type)(o, (*pp) + *num, 0, 0))
-                   return 0;
-               (*num)++;
-           }
-           break;
-       case ODR_ENCODE: case ODR_PRINT:
-#ifdef ODR_DEBUG
-           fprintf(stderr, "[seqof: num=%d]", *num);
-#endif
-           for (i = 0; i < *num; i++)
-           {
-#ifdef ODR_DEBUG
-               fprintf(stderr, "[seqof: elem #%d]", i);
-#endif
-               if (!(*type)(o, *pp + i, 0, 0))
-                   return 0;
-           }
-           break;
-       default:
-            odr_seterror(o, OOTHER, 47);
-           return 0;
-    }
-    return odr_sequence_end(o);
-}
-
-int odr_set_of(ODR o, Odr_fun type, void *p, int *num, const char *name)
-{
-    if (!odr_set_begin(o, p, 0, name)) {
-       if (o->direction == ODR_DECODE)
-           *num = 0;
-       return 0;
-    }
-    return odr_sequence_x (o, type, p, num);
-}
-
-int odr_sequence_of(ODR o, Odr_fun type, void *p, int *num,
-                   const char *name)
-{
-    if (!odr_sequence_begin(o, p, 0, name)) {
-       if (o->direction == ODR_DECODE)
-           *num = 0;
-       return 0;
-    }
-    return odr_sequence_x (o, type, p, num);
-}
-
diff --git a/odr/odr_tag.c b/odr/odr_tag.c
deleted file mode 100644 (file)
index 8e40213..0000000
+++ /dev/null
@@ -1,57 +0,0 @@
-/*
- * Copyright (c) 1995-2003, Index Data
- * See the file LICENSE for details.
- * Sebastian Hammer, Adam Dickmeiss
- *
- * $Id: odr_tag.c,v 1.14 2003-03-11 11:03:31 adam Exp $
- */
-#if HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#include "odr-priv.h"
-
-int odr_peektag(ODR o, int *zclass, int *tag, int *cons)
-{
-    if (o->direction != ODR_DECODE)
-    {
-        odr_seterror(o, OOTHER, 48);
-       return 0;
-    }
-    if (o->op->stackp > -1 && !odr_constructed_more(o))
-       return 0;
-    if (ber_dectag(o->bp, zclass, tag, cons, odr_max(o)) <= 0)
-    {
-        odr_seterror(o, OREQUIRED, 49);
-       return 0;
-    }
-    return 1;
-}
-
-int odr_implicit_settag(ODR o, int zclass, int tag)
-{
-    if (o->error)
-       return 0;
-    if (o->t_class < 0)
-    {
-       o->t_class = zclass;
-       o->t_tag = tag;
-    }
-    return 1;
-}
-
-int odr_initmember(ODR o, void *p, int size)
-{
-    char **pp = (char **) p;
-
-    if (o->error)
-       return 0;
-    if (o->direction == ODR_DECODE)
-       *pp = (char *)odr_malloc(o, size);
-    else if (!*pp)
-    {
-       o->t_class = -1;
-       return 0;
-    }
-    return 1;
-}
diff --git a/odr/odr_use.c b/odr/odr_use.c
deleted file mode 100644 (file)
index 918d69d..0000000
+++ /dev/null
@@ -1,66 +0,0 @@
-/*
- * Copyright (c) 1995-2003, Index Data
- * See the file LICENSE for details.
- * Sebastian Hammer, Adam Dickmeiss
- *
- * $Id: odr_use.c,v 1.14 2003-05-20 19:55:30 adam Exp $
- */
-#if HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#include "odr-priv.h"
-
-int odr_external(ODR o, Odr_external **p, int opt, const char *name)
-{
-    Odr_external *pp;
-    static Odr_arm arm[] =
-    {
-       {ODR_EXPLICIT, ODR_CONTEXT, 0, ODR_EXTERNAL_single, 
-        (Odr_fun)odr_any, "single"},
-       {ODR_IMPLICIT, ODR_CONTEXT, 1, ODR_EXTERNAL_octet,
-        (Odr_fun)odr_octetstring, "octet"},
-       {ODR_IMPLICIT, ODR_CONTEXT, 2, ODR_EXTERNAL_arbitrary,
-        (Odr_fun)odr_bitstring, "arbitrary"},
-       {-1, -1, -1, -1, 0, 0}
-    };
-
-    odr_implicit_settag(o, ODR_UNIVERSAL, ODR_EXTERNAL);
-    if (!odr_sequence_begin(o, p, sizeof(Odr_external), name))
-       return odr_missing(o, opt, name);
-    pp = *p;
-    return
-       odr_oid(o, &pp->direct_reference, 1, "direct") &&
-       odr_integer(o, &pp->indirect_reference, 1, "indirect") &&
-       odr_graphicstring(o, &pp->descriptor, 1, "descriptor") &&
-       odr_choice(o, arm, &pp->u, &pp->which, 0) &&
-       odr_sequence_end(o);
-}
-
-int odr_visiblestring(ODR o, char **p, int opt, const char *name)
-{
-    return odr_implicit_tag(o, odr_cstring, p, ODR_UNIVERSAL,
-                           ODR_VISIBLESTRING, opt, name);
-}    
-
-/*
- * a char may not be sufficient to hold a general string, but we'll deal
- * with that once we start looking more closely at UniCode & co.
- */
-int odr_generalstring(ODR o, char **p, int opt, const char *name)
-{
-    return odr_implicit_tag(o, odr_iconv_string, p, ODR_UNIVERSAL,
-                           ODR_GENERALSTRING,opt, name);
-}    
-
-int odr_graphicstring(ODR o, char **p, int opt, const char *name)
-{
-    return odr_implicit_tag(o, odr_cstring, p, ODR_UNIVERSAL,
-                       ODR_GRAPHICSTRING, opt, name);
-}    
-
-int odr_generalizedtime(ODR o, char **p, int opt, const char *name)
-{
-    return odr_implicit_tag(o, odr_cstring, p, ODR_UNIVERSAL,
-                           ODR_GENERALIZEDTIME, opt, name);
-}
diff --git a/odr/odr_util.c b/odr/odr_util.c
deleted file mode 100644 (file)
index 5da4088..0000000
+++ /dev/null
@@ -1,94 +0,0 @@
-/*
- * Copyright (c) 1995-2003, Index Data
- * See the file LICENSE for details.
- *
- * $Id: odr_util.c,v 1.25 2003-05-24 19:20:14 adam Exp $
- */
-#if HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#include <stdlib.h>
-#include <string.h>
-#include <ctype.h>
-#include "odr-priv.h"
-#include <yaz/oid.h>
-
-void odr_prname(ODR o, const char *name)
-{
-    if (name)
-       fprintf (o->print, "%*s%s ", o->indent*4, "", name);
-    else
-       fprintf (o->print, "%*s", o->indent*4, "");
-}
-
-int odp_more_chunks(ODR o, const unsigned char *base, int len)
-{
-    if (!len)
-       return 0;
-    if (len < 0) /* indefinite length */
-    {
-       if (*o->bp == 0 && *(o->bp + 1) == 0)
-       {
-           o->bp += 2;
-           return 0;
-       }
-       else
-           return 1;
-    }
-    else
-        return o->bp - base < len;
-}
-
-Odr_oid *odr_oiddup_nmem(NMEM nmem, Odr_oid *o)
-{
-    Odr_oid *r;
-
-    if (!o)
-       return 0;
-    if (!(r = (int *)nmem_malloc(nmem, (oid_oidlen(o) + 1) * sizeof(int))))
-       return 0;
-    oid_oidcpy(r, o);
-    return r;
-}
-
-Odr_oid *odr_oiddup(ODR odr, Odr_oid *o)
-{
-    return odr_oiddup_nmem (odr->mem, o);
-}
-
-Odr_oid *odr_getoidbystr_nmem(NMEM nmem, const char *str)
-{
-    int num = 1, i = 0;
-    const char *p = str;
-    Odr_oid *ret;
-
-    if (!isdigit(*str))
-       return 0;
-    while ((p = strchr(p, '.')))
-       num++, p++;
-    ret = (int *)nmem_malloc(nmem, sizeof(*ret)*(num + 1));
-    p = str;
-    do
-       ret[i++] = atoi(p);
-    while ((p = strchr(p, '.')) && *++p);
-    ret[i] = -1;
-    return ret;
-}
-
-Odr_oid *odr_getoidbystr(ODR o, const char *str)
-{
-    return odr_getoidbystr_nmem (o->mem, str);
-}
-
-int odr_missing(ODR o, int opt, const char *name)
-{
-    if (o->error)
-        return 0;
-    if (!opt)
-    {
-        odr_seterror(o, OREQUIRED, 53);
-        odr_setelement(o, name);
-    }
-    return opt;
-}
diff --git a/odr/tstodr.asn b/odr/tstodr.asn
deleted file mode 100644 (file)
index 7a3f309..0000000
+++ /dev/null
@@ -1,16 +0,0 @@
--- Small ASN.1 spec for tstodr test
--- $Id: tstodr.asn,v 1.1 2003-05-06 10:08:30 adam Exp $
-tstodrcodec
-{tstodrcodec} DEFINITIONS ::=
-BEGIN
-MySequence ::= SEQUENCE {
-       first [1] IMPLICIT INTEGER,
-       second [2] IMPLICIT OCTET STRING,
-        third [3] IMPLICIT BOOLEAN,
-        fourth [4] IMPLICIT NULL,
-        fifth [5] IMPLICIT INTEGER {
-                enum1(0),
-                enum2(1)
-        }
-}
-END                              
diff --git a/odr/tstodr.c b/odr/tstodr.c
deleted file mode 100644 (file)
index ead978d..0000000
+++ /dev/null
@@ -1,115 +0,0 @@
-/*
- * Copyright (c) 1995-2003, Index Data
- * See the file LICENSE for details.
- *
- * $Id: tstodr.c,v 1.5 2003-05-26 13:47:23 adam Exp $
- *
- */
-#include <stdio.h>
-#include <yaz/odr.h>
-#include "tstodrcodec.h"
-
-void tst_MySequence1(ODR encode, ODR decode)
-{
-    char *ber_buf;
-    int ber_len;
-    Yc_MySequence *s = odr_malloc(encode, sizeof(*s));
-    Yc_MySequence *t;
-
-    s->first = odr_intdup(encode, 12345);
-    s->second = odr_malloc(encode, sizeof(*s->second));
-    s->second->buf = "hello";
-    s->second->len = 5;
-    s->second->size = 0;
-    s->third = odr_intdup(encode, 1);
-    s->fourth = odr_nullval();
-    s->fifth = odr_intdup(encode, YC_MySequence_enum1);
-
-    if (!yc_MySequence(encode, &s, 0, 0))
-        exit(1);
-    
-    ber_buf = odr_getbuf(encode, &ber_len, 0);
-
-    odr_setbuf(decode, ber_buf, ber_len, 0);
-
-    if (!yc_MySequence(decode, &t, 0, 0))
-        exit(2);
-    if (!t->first || *t->first != 12345)
-        exit(3);
-    if (!t->second || !t->second->buf || t->second->len != 5)
-        exit(4);
-    if (memcmp(t->second->buf, "hello", t->second->len))
-        exit(5);
-    if (!t->third || *t->third != 1)
-        exit(6);
-    if (!t->fourth)
-        exit(7);
-    if (!t->fifth || *t->fifth != YC_MySequence_enum1)
-        exit(8);
-}
-
-void tst_MySequence2(ODR encode, ODR decode)
-{
-    char *ber_buf;
-    int ber_len;
-    Yc_MySequence *s = odr_malloc(encode, sizeof(*s));
-    Yc_MySequence *t;
-
-    s->first = 0;  /* deliberately miss this .. */
-    s->second = odr_malloc(encode, sizeof(*s->second));
-    s->second->buf = "hello";
-    s->second->len = 5;
-    s->second->size = 0;
-    s->third = odr_intdup(encode, 1);
-    s->fourth = odr_nullval();
-    s->fifth = odr_intdup(encode, YC_MySequence_enum1);
-
-    if (yc_MySequence(encode, &s, 0, 0)) /* should fail */
-        exit(9);
-    if (odr_geterror(encode) != OREQUIRED)
-        exit(10);
-    if (strcmp(odr_getelement(encode), "first"))
-        exit(11);
-    odr_reset(encode);
-
-    if (odr_geterror(encode) != ONONE)
-        exit(12);
-    if (strcmp(odr_getelement(encode), ""))
-        exit(13);
-}
-
-void tst_MySequence3(ODR encode, ODR decode)
-{
-    char buf[40];
-    int i;
-    Yc_MySequence *t;
-
-    srand(123);
-    for (i = 0; i<1000; i++)
-    {
-        int j;
-        for (j = 0; j<sizeof(buf); j++)
-            buf[j] = rand();
-
-        for (j = 1; j<sizeof(buf); j++)
-        {
-            odr_setbuf(decode, buf, j, 0);
-            yc_MySequence(decode, &t, 0, 0);
-            odr_reset(decode);
-        }
-    }
-}
-
-int main(int argc, char **argv)
-{
-    ODR odr_encode = odr_createmem(ODR_ENCODE);
-    ODR odr_decode = odr_createmem(ODR_DECODE);
-
-    tst_MySequence1(odr_encode, odr_decode);
-    tst_MySequence2(odr_encode, odr_decode);
-    tst_MySequence3(odr_encode, odr_decode);
-
-    odr_destroy(odr_encode);
-    odr_destroy(odr_decode);
-    exit(0);
-}
diff --git a/retrieval/.cvsignore b/retrieval/.cvsignore
deleted file mode 100644 (file)
index 2f76d9e..0000000
+++ /dev/null
@@ -1,6 +0,0 @@
-.deps
-.libs
-Makefile
-Makefile.in
-libret.la
-*.lo
diff --git a/server/.cvsignore b/server/.cvsignore
deleted file mode 100644 (file)
index bd8d047..0000000
+++ /dev/null
@@ -1,6 +0,0 @@
-.deps
-.libs
-Makefile
-Makefile.in
-libserver.la
-*.lo
diff --git a/server/Makefile.am b/server/Makefile.am
deleted file mode 100644 (file)
index 70dec76..0000000
+++ /dev/null
@@ -1,10 +0,0 @@
-
-
-noinst_LTLIBRARIES=libserver.la
-
-libserver_la_SOURCES = eventl.c seshigh.c statserv.c requestq.c tcpdchk.c \
- eventl.h service.h session.h
-
-EXTRA_DIST=service.c
-
-AM_CPPFLAGS=-I$(top_srcdir)/include  $(XML2_CFLAGS) -DDOCDIR=\"$(datadir)/doc/$(PACKAGE)\"
diff --git a/server/eventl.c b/server/eventl.c
deleted file mode 100644 (file)
index 668eeb7..0000000
+++ /dev/null
@@ -1,188 +0,0 @@
-/*
- * Copyright (c) 1995-2003, Index Data
- * See the file LICENSE for details.
- * Sebastian Hammer, Adam Dickmeiss
- *
- * $Id: eventl.c,v 1.39 2003-02-21 12:08:59 adam Exp $
- */
-
-#include <stdio.h>
-#include <assert.h>
-#ifdef WIN32
-#include <winsock.h>
-#else
-#include <unistd.h>
-#endif
-#include <stdlib.h>
-#include <errno.h>
-#include <string.h>
-
-#include <yaz/yconfig.h>
-#include <yaz/log.h>
-#include <yaz/comstack.h>
-#include <yaz/xmalloc.h>
-#include "eventl.h"
-#include "session.h"
-#include <yaz/statserv.h>
-
-#if YAZ_GNU_THREADS
-#include <pth.h>
-#define YAZ_EV_SELECT pth_select
-#endif
-
-#ifndef YAZ_EV_SELECT
-#define YAZ_EV_SELECT select
-#endif
-
-IOCHAN iochan_create(int fd, IOC_CALLBACK cb, int flags)
-{
-    IOCHAN new_iochan;
-
-    if (!(new_iochan = (IOCHAN)xmalloc(sizeof(*new_iochan))))
-       return 0;
-    new_iochan->destroyed = 0;
-    new_iochan->fd = fd;
-    new_iochan->flags = flags;
-    new_iochan->fun = cb;
-    new_iochan->force_event = 0;
-    new_iochan->last_event = new_iochan->max_idle = 0;
-    new_iochan->next = NULL;
-    return new_iochan;
-}
-
-int event_loop(IOCHAN *iochans)
-{
-    do /* loop as long as there are active associations to process */
-    {
-       IOCHAN p, nextp;
-       fd_set in, out, except;
-       int res, max;
-       static struct timeval to;
-        time_t now = time(0);
-
-        if (statserv_must_terminate())
-        {
-            for (p = *iochans; p; p = p->next)
-                p->force_event = EVENT_TIMEOUT;
-        }
-       FD_ZERO(&in);
-       FD_ZERO(&out);
-       FD_ZERO(&except);
-       to.tv_sec = 3600;
-       to.tv_usec = 0;
-       max = 0;
-       for (p = *iochans; p; p = p->next)
-       {
-            time_t w, ftime;
-            yaz_log(LOG_DEBUG, "fd=%d flags=%d force_event=%d",
-                    p->fd, p->flags, p->force_event);
-           if (p->force_event)
-                to.tv_sec = 0;          /* polling select */
-           if (p->flags & EVENT_INPUT)
-               FD_SET(p->fd, &in);
-           if (p->flags & EVENT_OUTPUT)
-               FD_SET(p->fd, &out);
-           if (p->flags & EVENT_EXCEPT)
-               FD_SET(p->fd, &except);
-           if (p->fd > max)
-               max = p->fd;
-            if (p->max_idle && p->last_event)
-            {
-                ftime = p->last_event + p->max_idle;
-                if (ftime < now)
-                    w = p->max_idle;
-                else
-                    w = ftime - now;
-                if (w < to.tv_sec)
-                    to.tv_sec = w;
-            }
-       }
-        yaz_log(LOG_DEBUG, "select start %ld", (long) to.tv_sec);
-       res = YAZ_EV_SELECT(max + 1, &in, &out, &except, &to);
-        yaz_log(LOG_DEBUG, "select end");
-       if (res < 0)
-       {
-           if (yaz_errno() == EINTR)
-            {
-                if (statserv_must_terminate())
-                {
-                    for (p = *iochans; p; p = p->next)
-                        p->force_event = EVENT_TIMEOUT;
-                }
-                continue;
-            }
-            else
-            {
-                /* Destroy the first member in the chain, and try again */
-                association *assoc = (association *)iochan_getdata(*iochans);
-                COMSTACK conn = assoc->client_link;
-
-                cs_close(conn);
-               destroy_association(assoc);
-               iochan_destroy(*iochans);
-                yaz_log(LOG_DEBUG, "error select, destroying iochan %p",
-                       *iochans);
-            }
-       }
-        now = time(0);
-       for (p = *iochans; p; p = p->next)
-       {
-           int force_event = p->force_event;
-
-           p->force_event = 0;
-           if (!p->destroyed && (FD_ISSET(p->fd, &in) ||
-               force_event == EVENT_INPUT))
-           {
-               p->last_event = now;
-               (*p->fun)(p, EVENT_INPUT);
-           }
-           if (!p->destroyed && (FD_ISSET(p->fd, &out) ||
-               force_event == EVENT_OUTPUT))
-           {
-               p->last_event = now;
-               (*p->fun)(p, EVENT_OUTPUT);
-           }
-           if (!p->destroyed && (FD_ISSET(p->fd, &except) ||
-               force_event == EVENT_EXCEPT))
-           {
-               p->last_event = now;
-               (*p->fun)(p, EVENT_EXCEPT);
-           }
-           if (!p->destroyed && ((p->max_idle && now - p->last_event >=
-               p->max_idle) || force_event == EVENT_TIMEOUT))
-           {
-               p->last_event = now;
-               (*p->fun)(p, EVENT_TIMEOUT);
-           }
-       }
-       for (p = *iochans; p; p = nextp)
-       {
-           nextp = p->next;
-
-           if (p->destroyed)
-           {
-               IOCHAN tmp = p, pr;
-
-                /* We need to inform the threadlist that this channel has been destroyed */
-                statserv_remove(p);
-
-               /* Now reset the pointers */
-                if (p == *iochans)
-                   *iochans = p->next;
-               else
-               {
-                   for (pr = *iochans; pr; pr = pr->next)
-                       if (pr->next == p)
-                           break;
-                   assert(pr); /* grave error if it weren't there */
-                   pr->next = p->next;
-               }
-               if (nextp == p)
-                   nextp = p->next;
-               xfree(tmp);
-           }
-       }
-    }
-    while (*iochans);
-    return 0;
-}
diff --git a/server/eventl.h b/server/eventl.h
deleted file mode 100644 (file)
index 95e45a4..0000000
+++ /dev/null
@@ -1,56 +0,0 @@
-/*
- * Copyright (c) 1995-2003, Index Data
- * See the file LICENSE for details.
- * Sebastian Hammer, Adam Dickmeiss
- *
- * $Id: eventl.h,v 1.12 2003-02-12 15:06:43 adam Exp $
- */
-
-#ifndef EVENTL_H
-#define EVENTL_H
-
-#include <time.h>
-
-struct iochan;
-
-typedef void (*IOC_CALLBACK)(struct iochan *i, int event);
-
-typedef struct iochan
-{
-    int fd;
-    int flags;
-#define EVENT_INPUT     0x01
-#define EVENT_OUTPUT    0x02
-#define EVENT_EXCEPT    0x04
-#define EVENT_TIMEOUT   0x08
-#define EVENT_WORK      0x10
-int force_event;
-    IOC_CALLBACK fun;
-    void *data;
-    int destroyed;
-    time_t last_event;
-    time_t max_idle;
-    
-    struct iochan *next;
-} *IOCHAN;
-
-#define iochan_destroy(i) (void)((i)->destroyed = 1)
-#define iochan_getfd(i) ((i)->fd)
-#define iochan_setfd(i, f) ((i)->fd = (f))
-#define iochan_getdata(i) ((i)->data)
-#define iochan_setdata(i, d) ((i)->data = d)
-#define iochan_getflags(i) ((i)->flags)
-#define iochan_setflags(i, d) ((i)->flags = d)
-#define iochan_setflag(i, d) ((i)->flags |= d)
-#define iochan_clearflag(i, d) ((i)->flags &= ~(d))
-#define iochan_getflag(i, d) ((i)->flags & d ? 1 : 0)
-#define iochan_getfun(i) ((i)->fun)
-#define iochan_setfun(i, d) ((i)->fun = d)
-#define iochan_setevent(i, e) ((i)->force_event = (e))
-#define iochan_getnext(i) ((i)->next)
-#define iochan_settimeout(i, t) ((i)->max_idle = (t), (i)->last_event = time(0))
-
-IOCHAN iochan_create(int fd, IOC_CALLBACK cb, int flags);
-int event_loop(IOCHAN *iochans);
-void statserv_remove (IOCHAN pIOChannel);
-#endif
diff --git a/server/requestq.c b/server/requestq.c
deleted file mode 100644 (file)
index 63ce3f3..0000000
+++ /dev/null
@@ -1,100 +0,0 @@
-/*
- * Copyright (C) 1994-2003, Index Data.
- * See the file LICENSE for details.
- * Sebastian Hammer, Adam Dickmeiss
- *
- * $Id: requestq.c,v 1.10 2003-10-20 18:20:55 adam Exp $
- *
- */
-
-/*
- * Simple queue management.
- *
- * We also use the request-freelist to store encoding buffers, rather than
- * freeing and xmalloc'ing them on each cycle.
- */
-
-#include <stdlib.h>
-
-#include <yaz/xmalloc.h>
-#include "session.h"
-
-void request_enq(request_q *q, request *r)
-{
-    if (q->tail)
-       q->tail->next = r;
-    else
-       q->head = r;
-    q->tail = r;
-    q->num++;
-}
-
-request *request_head(request_q *q)
-{
-    return q->head;
-}
-
-request *request_deq(request_q *q)
-{
-    request *r = q->head;
-
-    if (!r)
-       return 0;
-    q->head = q->head->next;
-    if (!q->head)
-       q->tail = 0;
-    q->num--;
-    return r;
-}
-
-void request_initq(request_q *q)
-{
-    q->head = q->tail = q->list = 0;
-    q->num = 0;
-}
-
-void request_delq(request_q *q)
-{
-    request *r1, *r = q->list;
-    while (r)
-    {
-       xfree (r->response);
-        r1 = r;
-        r = r->next;
-        xfree (r1);
-    }
-}
-
-request *request_get(request_q *q)
-{
-    request *r = q->list;
-
-    if (r)
-       q->list = r->next;
-    else
-    {
-       if (!(r = (request *)xmalloc(sizeof(*r))))
-           abort();
-       r->response = 0;
-       r->size_response = 0;
-    }
-    r->q = q;
-    r->len_refid = 0;
-    r->refid = 0;
-    r->gdu_request = 0;
-    r->apdu_request = 0;
-    r->request_mem = 0;
-    r->len_response = 0;
-    r->clientData = 0;
-    r->state = REQUEST_IDLE;
-    r->next = 0;
-    return r;
-}
-
-void request_release(request *r)
-{
-    request_q *q = r->q;
-    r->next = q->list;
-    q->list = r;
-}
-
diff --git a/server/service.c b/server/service.c
deleted file mode 100644 (file)
index 9108beb..0000000
+++ /dev/null
@@ -1,500 +0,0 @@
-/*
- * NT Service interface Utility.
- *  Based on code written by
- *     Chas Woodfield, Fretwell Downing Informatics.
- * $Log: service.c,v $
- * Revision 1.5  2001-11-13 23:00:42  adam
- * Separate malloc debug library. Removal of ASN_COMPILED-#ifdefs.
- *
- * Revision 1.4  2000/12/05 19:05:10  adam
- * Service automatically starts in the directory from which it was installed.
- *
- * Revision 1.3  1999/06/10 11:45:30  adam
- * Added bend_start, bend_stop handlers and removed pre_init.
- * Handlers bend_start/bend_stop are called when service/daemon is
- * started/stopped.
- *
- * Revision 1.2  1999/02/02 13:57:36  adam
- * Uses preprocessor define WIN32 instead of WINDOWS to build code
- * for Microsoft WIN32.
- *
- * Revision 1.1  1997/11/07 13:31:52  adam
- * Added NT Service name part of statserv_options_block. Moved NT
- * service utility to server library.
- *
- * Revision 1.6  1997/09/18 08:49:14  adam
- * Option -runnormal no needed to run server in standalone mode.
- *
- * Revision 1.5  1997/09/17 12:10:43  adam
- * YAZ version 1.4.
- *
- * Revision 1.4  1997/09/09 10:10:20  adam
- * Another MSV5.0 port. Changed projects to include proper
- * library/include paths.
- * Server starts server in test-mode when no options are given.
- *
- * Revision 1.3  1997/09/04 13:50:30  adam
- * Bug fix in ztest.
- *
- */
-
-/************************************************************/
-/* Note this file is shared by all processes                */
-/* Should really put it somewhere other than here           */
-/* For some strange reason it won't work when part of a lib */
-/************************************************************/
-
-#ifdef WIN32
-
-#include <windows.h>
-#include <stdio.h>
-#include <tchar.h>
-#include <direct.h>
-
-#include "service.h"
-
-static AppService *pService = NULL;
-static BOOL bRunAsService = TRUE;
-static void *pAppHandle = NULL;
-
-/* Private functions to this module */
-void Service_Create(LPTSTR pAppName, LPTSTR pServiceName, LPTSTR pServiceDisplayName, LPTSTR pDependancies, int argc, char **argv);
-void Service_Delete();
-void Service_Initialize();
-BOOL NotifyServiceController();
-BOOL UpdateServiceStatus(DWORD Status);
-void FailServiceStart(DWORD Win32Code, DWORD PrivateCode);
-void CmdInstallService(int argc, char *argv[], BOOL bAutoStart);
-void CmdRemoveService();
-LPTSTR GetLastErrorText(LPTSTR lpszBuf, DWORD dwSize);
-BOOL CheckServiceArguments(int argc, char *argv[]);
-
-/* Callback functions for thee service manager */
-void WINAPI ServiceMain(DWORD argc, LPTSTR argv[]);
-void WINAPI ServiceControlHandler(DWORD fdwControl);
-
-/* Function to handle Ctrl + C etc... */
-BOOL EventHandlerRoutine(DWORD dwCtrlType);
-
-void Service_Create(LPTSTR pAppName, LPTSTR pServiceName, LPTSTR pServiceDisplayName, LPTSTR pDependancies, int argc, char **argv)
-{
-    pService = malloc(sizeof(AppService));
-    pService->pAppName = pAppName;
-    pService->pServiceName = pServiceName;
-    pService->pServiceDisplayName = pServiceDisplayName;
-    pService->pDependancies = pDependancies;
-    pService->hService = 0;
-    pService->ServiceTable[0].lpServiceName = pServiceName; 
-    pService->ServiceTable[0].lpServiceProc = ServiceMain; 
-    pService->ServiceTable[1].lpServiceName = NULL; 
-    pService->ServiceTable[1].lpServiceProc = NULL; 
-    pService->argc = argc;
-    pService->argv = argv;
-}
-
-void Service_Delete()
-{
-    if (pService != NULL)
-    {
-        /* Mark the service as stopping */
-        UpdateServiceStatus(SERVICE_STOP_PENDING);
-
-        /* Stop the service */
-        StopAppService(pAppHandle);
-
-        /* Service has now stopped */
-        UpdateServiceStatus(SERVICE_STOPPED);
-
-        /* Free the memory */
-        free(pService);
-        pService = NULL;
-    }
-}
-
-void Service_Initialize()
-{
-    if (pService != NULL)
-    {
-        /* Register ourselves with the control dispatcher */
-        StartServiceCtrlDispatcher(pService->ServiceTable);
-    }
-}
-
-void WINAPI ServiceMain(DWORD argc, LPTSTR argv[])
-{
-    if (pService != NULL)
-    {
-        if (NotifyServiceController())
-        {
-            /* Set the status to pending */
-            UpdateServiceStatus(SERVICE_START_PENDING);
-
-            /* Lets attempt to start the service */
-            if (StartAppService(pAppHandle, pService->argc, pService->argv))
-            {
-                /* Service is now up and running */
-                UpdateServiceStatus(SERVICE_RUNNING);
-
-                /* Lets wait for our clients */
-                RunAppService(pAppHandle);
-            }
-            else
-            {
-                FailServiceStart(GetLastError(), 0);
-                Service_Delete();
-            }
-        }
-    }
-}
-
-BOOL NotifyServiceController()
-{
-    if (pService == NULL)
-    {
-        return(FALSE);
-    }
-    else
-    {
-        if (bRunAsService)
-        {
-            pService->ServiceStatus.dwServiceType = SERVICE_WIN32_OWN_PROCESS;
-            pService->ServiceStatus.dwCurrentState = SERVICE_STOPPED;
-            pService->ServiceStatus.dwControlsAccepted = SERVICE_ACCEPT_STOP;
-            pService->ServiceStatus.dwWin32ExitCode = 0;
-            pService->ServiceStatus.dwServiceSpecificExitCode = 0;
-            pService->ServiceStatus.dwCheckPoint = 0;
-            pService->ServiceStatus.dwWaitHint = 0;
-            pService->hService = RegisterServiceCtrlHandler(pService->pServiceName, ServiceControlHandler);
-
-            if (pService->hService)
-                UpdateServiceStatus(SERVICE_START_PENDING);
-            else
-                return(FALSE);
-        }
-        return(TRUE);
-    }
-}
-
-void WINAPI ServiceControlHandler(DWORD fdwControl)
-{
-    if (pService != NULL)
-    {
-        switch (fdwControl)
-        {
-            case SERVICE_CONTROL_STOP:
-                /* Update the service status to be pending */
-                Service_Delete();
-                break;
-
-            case SERVICE_CONTROL_INTERROGATE:
-                UpdateServiceStatus(pService->ServiceStatus.dwCurrentState);
-                break;
-
-            default:
-                break;
-        }
-    }
-}
-
-BOOL UpdateServiceStatus(DWORD Status)
-{
-    if (pService != NULL)
-    {
-        if (pService->hService)
-        {
-            pService->ServiceStatus.dwCurrentState = Status;
-            if ((Status == SERVICE_START_PENDING) || (Status == SERVICE_STOP_PENDING))
-            {
-                pService->ServiceStatus.dwCheckPoint ++;
-                pService->ServiceStatus.dwWaitHint = 5000;    /* 5 sec.*/
-            }
-            else
-            {
-                pService->ServiceStatus.dwCheckPoint = 0;
-                pService->ServiceStatus.dwWaitHint = 0;
-            }
-
-            return(SetServiceStatus(pService->hService, &pService->ServiceStatus));
-        }
-    }
-
-    return(FALSE);
-}
-
-void FailServiceStart(DWORD Win32Code, DWORD PrivateCode)
-{
-    if (pService != NULL)
-    {
-        pService->ServiceStatus.dwWin32ExitCode = Win32Code;
-        pService->ServiceStatus.dwServiceSpecificExitCode = PrivateCode;
-        UpdateServiceStatus(SERVICE_STOPPED);
-    }
-}
-
-void CmdInstallService(int argc, char *argv[], BOOL bAutoStart)
-{
-    if (pService != NULL)
-    {
-        SC_HANDLE   schService;
-        SC_HANDLE   schSCManager;
-
-        TCHAR szPath[2048];
-
-        if (GetModuleFileName(NULL, szPath, 512) == 0)
-        {
-            _tprintf(TEXT("Unable to install %s - %s\n"), TEXT(pService->pServiceDisplayName), GetLastErrorText(pService->szErr, 256));
-        }
-        else
-        {
-            int i;
-            char cwdstr[_MAX_PATH];
-
-            if (!_getcwd(cwdstr, sizeof(cwdstr)))
-                strcpy (cwdstr, ".");
-
-            strcat (szPath, TEXT(" -runservice \""));
-            strcat (szPath, cwdstr);
-            strcat (szPath, "\"");
-
-            for (i = 1; i < argc; i++)
-            {
-                /* We will add the given command line arguments to the command */
-                /* We are not interested in the install and remove options */
-                if ((stricmp("-install", argv[i]) != 0) &&
-                    (stricmp("-installa", argv[i]) != 0) &&
-                    (stricmp("-remove", argv[i]) != 0))
-                {
-                    strcat(szPath, TEXT(" "));
-                    strcat(szPath, argv[i]);
-                }
-            }
-
-            schSCManager = OpenSCManager(NULL,                   /* machine (NULL == local) */
-                                         NULL,                   /* database (NULL == default) */
-                                         SC_MANAGER_ALL_ACCESS); /* access required */
-            if (schSCManager)
-            {
-                schService = CreateService(schSCManager,               /* SCManager database */
-                                           TEXT(pService->pServiceName),        /* name of service */
-                                           TEXT(pService->pServiceDisplayName), /* name to display */
-                                           SERVICE_ALL_ACCESS,         /* desired access */
-                                           SERVICE_WIN32_OWN_PROCESS,  /* service type */
-                                           bAutoStart ? SERVICE_AUTO_START :
-                                                        SERVICE_DEMAND_START, /* start type */
-                                           SERVICE_ERROR_NORMAL,       /* error control type */
-                                           szPath,                     /* service's binary */
-                                           NULL,                       /* no load ordering group */
-                                           NULL,                       /* no tag identifier */
-                                           TEXT(pService->pDependancies),       /* dependencies */
-                                           NULL,                       /* LocalSystem account */
-                                           NULL);                      /* no password */
-
-                if (schService)
-                {
-                    _tprintf(TEXT("%s installed.\n"), TEXT(pService->pServiceDisplayName));
-                    CloseServiceHandle(schService);
-                }
-                else
-                {
-                    _tprintf(TEXT("CreateService failed - %s\n"), GetLastErrorText(pService->szErr, 256));
-                }
-
-                CloseServiceHandle(schSCManager);
-            }
-            else
-                _tprintf(TEXT("OpenSCManager failed - %s\n"), GetLastErrorText(pService->szErr,256));
-        }
-    }
-}
-
-void CmdRemoveService()
-{
-    if (pService != NULL)
-    {
-        SC_HANDLE   schService;
-        SC_HANDLE   schSCManager;
-
-        schSCManager = OpenSCManager(NULL,                   /* machine (NULL == local) */
-                                     NULL,                   /* database (NULL == default) */
-                                     SC_MANAGER_ALL_ACCESS); /* access required */
-        if (schSCManager)
-        {
-            schService = OpenService(schSCManager, TEXT(pService->pServiceName), SERVICE_ALL_ACCESS);
-
-            if (schService)
-            {
-                /* try to stop the service */
-                if (ControlService(schService, SERVICE_CONTROL_STOP, &pService->ServiceStatus))
-                {
-                    _tprintf(TEXT("Stopping %s."), TEXT(pService->pServiceDisplayName));
-                    Sleep(1000);
-
-                    while (QueryServiceStatus(schService, &pService->ServiceStatus))
-                    {
-                        if (pService->ServiceStatus.dwCurrentState == SERVICE_STOP_PENDING)
-                        {
-                            _tprintf(TEXT("."));
-                            Sleep( 1000 );
-                        }
-                        else
-                            break;
-                    }
-
-                    if (pService->ServiceStatus.dwCurrentState == SERVICE_STOPPED)
-                        _tprintf(TEXT("\n%s stopped.\n"), TEXT(pService->pServiceDisplayName));
-                    else
-                        _tprintf(TEXT("\n%s failed to stop.\n"), TEXT(pService->pServiceDisplayName));
-
-                }
-
-                /* now remove the service */
-                if(DeleteService(schService))
-                    _tprintf(TEXT("%s removed.\n"), TEXT(pService->pServiceDisplayName));
-                else
-                    _tprintf(TEXT("DeleteService failed - %s\n"), GetLastErrorText(pService->szErr,256));
-
-                CloseServiceHandle(schService);
-            }
-            else
-                _tprintf(TEXT("OpenService failed - %s\n"), GetLastErrorText(pService->szErr,256));
-
-            CloseServiceHandle(schSCManager);
-        }
-        else
-            _tprintf(TEXT("OpenSCManager failed - %s\n"), GetLastErrorText(pService->szErr,256));
-    }
-}
-
-LPTSTR GetLastErrorText(LPTSTR lpszBuf, DWORD dwSize)
-{
-    DWORD dwRet;
-    LPTSTR lpszTemp = NULL;
-
-    dwRet = FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM |FORMAT_MESSAGE_ARGUMENT_ARRAY,
-                          NULL,
-                          GetLastError(),
-                          LANG_NEUTRAL,
-                          (LPTSTR)&lpszTemp,
-                          0,
-                          NULL);
-
-    /* supplied buffer is not long enough */
-    if (!dwRet || ((long)dwSize < (long)dwRet + 14))
-        lpszBuf[0] = TEXT('\0');
-    else
-    {
-        lpszTemp[lstrlen(lpszTemp)-2] = TEXT('\0');  /* remove cr and newline character */
-        _stprintf(lpszBuf, TEXT("%s (0x%x)"), lpszTemp, GetLastError());
-    }
-
-    if (lpszTemp)
-        LocalFree((HLOCAL)lpszTemp);
-
-    return(lpszBuf);
-}
-
-BOOL CheckServiceArguments(int argc, char *argv[])
-{
-    int i;
-
-    /* Lets process the arguments */
-    for (i = 1; i < argc; i++)
-    {
-        if (stricmp("-install", argv[i]) == 0)
-        {
-            /* They want to install the service */
-            CmdInstallService(argc, argv, FALSE);
-
-            /* We don't carry on, after we have installed the service */
-            return(FALSE);
-        }
-        else if (stricmp("-installa", argv[i]) == 0)
-        {
-            /* They want to install the service */
-            CmdInstallService(argc, argv, TRUE);
-
-            /* We don't carry on, after we have installed the service */
-            return(FALSE);
-        }
-        else if (stricmp("-remove", argv[i]) == 0)
-        {
-            /* Here they want to remove it */
-            CmdRemoveService();
-
-            /* We don't carry on, after we have removed the service */
-            return(FALSE);
-        }
-        else if (stricmp ("-runservice", argv[i]) == 0)
-        {
-            /* We can carry on, if we reached here */
-            chdir(argv[i+1]);
-            argv[i] = "";
-            argv[i+1] = "";
-            return(TRUE);
-        }
-    }
-    bRunAsService = FALSE;
-    return(TRUE);
-}
-
-BOOL SetupService(int argc, char *argv[], void *pHandle, LPTSTR pAppName, LPTSTR pServiceName, LPTSTR pServiceDisplayName, LPTSTR pDependancies)
-{
-    BOOL bDeleteService = TRUE;
-    BOOL bResult = FALSE;
-
-    /* Save the handle for later use */
-    pAppHandle = pHandle;
-
-    /* Create our service class */
-    Service_Create(pAppName, pServiceName, pServiceDisplayName, pDependancies, argc, argv);
-
-    if (CheckServiceArguments(argc, argv))
-    {
-        if (bRunAsService)
-        {
-            /* No need to set the console control handler, as the service manager handles all this for us */
-            Service_Initialize();
-            bDeleteService = FALSE;
-        }
-        else
-        {
-            /* Set the console control handler for exiting the program */
-            SetConsoleCtrlHandler((PHANDLER_ROUTINE)EventHandlerRoutine, TRUE);
-
-            /* Now do the main work */
-            ServiceMain(argc, argv);
-        }
-
-        /* We have been successful initializing, so let the caller know */
-        bResult = TRUE;
-    }
-
-    if (bDeleteService)
-    {
-        /* Finished with the service now */
-        Service_Delete();
-    }
-    return(bResult);
-}
-
-BOOL EventHandlerRoutine(DWORD dwCtrlType)
-{
-    /* This routine dosn't seem to get called all the time, Why ??? */
-    switch (dwCtrlType)
-    {
-        case CTRL_C_EVENT:        /* A CTRL+C signal was received, either from keyboard input or from a signal generated by the GenerateConsoleCtrlEvent function.*/
-        case CTRL_BREAK_EVENT:    /* A CTRL+BREAK signal was received, either from keyboard input or from a signal generated by GenerateConsoleCtrlEvent.*/
-        case CTRL_CLOSE_EVENT:    /* A signal that the system sends to all processes attached to a console when the user closes the console (either by choosing the Close command from the console window's System menu, or by choosing the End Task command from the Task List).*/
-        case CTRL_LOGOFF_EVENT:   /* A signal that the system sends to all console processes when a user is logging off. This signal does not indicate which user is logging off, so no assumptions can be made.*/
-        case CTRL_SHUTDOWN_EVENT: /* A signal that the system sends to all console processes when the system */
-            /* We are basically shutting down, so call Service_Delete */
-            Service_Delete();
-            return(FALSE);
-            break;
-
-        default:
-            /* we are not handling this one, so return FALSE */
-            return(FALSE);
-    }
-}
-#endif
diff --git a/server/service.h b/server/service.h
deleted file mode 100644 (file)
index 347357c..0000000
+++ /dev/null
@@ -1,51 +0,0 @@
-/*
- * NT Service interface Utility.
- *  Based on code written by
- *     Chas Woodfield, Fretwell Downing Datasystems.
- * $Log: service.h,v $
- * Revision 1.1  1997-11-07 13:31:52  adam
- * Added NT Service name part of statserv_options_block. Moved NT
- * service utility to server library.
- *
- * Revision 1.2  1997/09/04 13:50:30  adam
- * Bug fix in ztest.
- *
- */
-
-#ifndef SERVICE_INCLUDED
-#define SERVICE_INCLUDED
-
-#ifdef WIN32
-
-#include <windows.h>
-
-typedef struct _Service
-{
-    LPTSTR pAppName;
-    LPTSTR pServiceName;
-    LPTSTR pServiceDisplayName;
-    LPTSTR pDependancies;
-    TCHAR szErr[256];
-    SERVICE_STATUS_HANDLE hService;
-    SERVICE_STATUS ServiceStatus;
-    SERVICE_TABLE_ENTRY ServiceTable[2];
-    int argc;
-    char **argv;
-} AppService;
-
-/* Called by the app to initialize the service */
-BOOL SetupService(int argc, char *argv[], void *pHandle, LPTSTR pAppName, LPTSTR pServiceName, LPTSTR pServiceDisplayName, LPTSTR pDependancies);
-
-#endif /* WIN32 */
-
-/* Functions that must be in the main application */
-/* Initializes the app */
-int StartAppService(void *pHandle, int argc, char **argv);
-
-/* Now we wait for any connections */
-void RunAppService(void *pHandle);
-
-/* Time to tidyup and stop the service */
-void StopAppService(void *pHandle);
-
-#endif
diff --git a/server/seshigh.c b/server/seshigh.c
deleted file mode 100644 (file)
index 34223f1..0000000
+++ /dev/null
@@ -1,2605 +0,0 @@
-/*
- * Copyright (c) 1995-2003, Index Data
- * See the file LICENSE for details.
- *
- * $Id: seshigh.c,v 1.164 2003-10-21 09:48:23 adam Exp $
- */
-
-/*
- * Frontend server logic.
- *
- * This code receives incoming APDUs, and handles client requests by means
- * of the backend API.
- *
- * Some of the code is getting quite involved, compared to simpler servers -
- * primarily because it is asynchronous both in the communication with
- * the user and the backend. We think the complexity will pay off in
- * the form of greater flexibility when more asynchronous facilities
- * are implemented.
- *
- * Memory management has become somewhat involved. In the simple case, where
- * only one PDU is pending at a time, it will simply reuse the same memory,
- * once it has found its working size. When we enable multiple concurrent
- * operations, perhaps even with multiple parallel calls to the backend, it
- * will maintain a pool of buffers for encoding and decoding, trying to
- * minimize memory allocation/deallocation during normal operation.
- *
- */
-
-#include <stdlib.h>
-#include <stdio.h>
-#include <sys/types.h>
-#ifdef WIN32
-#include <io.h>
-#define S_ISREG(x) (x & _S_IFREG)
-#include <process.h>
-#include <sys/stat.h>
-#else
-#include <sys/stat.h>
-#include <unistd.h>
-#endif
-#include <assert.h>
-#include <ctype.h>
-
-#include <yaz/yconfig.h>
-#include <yaz/xmalloc.h>
-#include <yaz/comstack.h>
-#include "eventl.h"
-#include "session.h"
-#include <yaz/proto.h>
-#include <yaz/oid.h>
-#include <yaz/log.h>
-#include <yaz/logrpn.h>
-#include <yaz/statserv.h>
-#include <yaz/diagbib1.h>
-#include <yaz/charneg.h>
-#include <yaz/otherinfo.h>
-#include <yaz/yaz-util.h>
-#include <yaz/pquery.h>
-
-#include <yaz/srw.h>
-#include <yaz/backend.h>
-
-static void process_gdu_request(association *assoc, request *req);
-static int process_z_request(association *assoc, request *req, char **msg);
-void backend_response(IOCHAN i, int event);
-static int process_gdu_response(association *assoc, request *req, Z_GDU *res);
-static int process_z_response(association *assoc, request *req, Z_APDU *res);
-static Z_APDU *process_initRequest(association *assoc, request *reqb);
-static Z_External *init_diagnostics(ODR odr, int errcode, char *errstring);
-static Z_APDU *process_searchRequest(association *assoc, request *reqb,
-    int *fd);
-static Z_APDU *response_searchRequest(association *assoc, request *reqb,
-    bend_search_rr *bsrr, int *fd);
-static Z_APDU *process_presentRequest(association *assoc, request *reqb,
-    int *fd);
-static Z_APDU *process_scanRequest(association *assoc, request *reqb, int *fd);
-static Z_APDU *process_sortRequest(association *assoc, request *reqb, int *fd);
-static void process_close(association *assoc, request *reqb);
-void save_referenceId (request *reqb, Z_ReferenceId *refid);
-static Z_APDU *process_deleteRequest(association *assoc, request *reqb,
-    int *fd);
-static Z_APDU *process_segmentRequest (association *assoc, request *reqb);
-
-static FILE *apduf = 0; /* for use in static mode */
-static statserv_options_block *control_block = 0;
-
-static Z_APDU *process_ESRequest(association *assoc, request *reqb, int *fd);
-
-/*
- * Create and initialize a new association-handle.
- *  channel  : iochannel for the current line.
- *  link     : communications channel.
- * Returns: 0 or a new association handle.
- */
-association *create_association(IOCHAN channel, COMSTACK link)
-{
-    association *anew;
-
-    if (!control_block)
-       control_block = statserv_getcontrol();
-    if (!(anew = (association *)xmalloc(sizeof(*anew))))
-       return 0;
-    anew->init = 0;
-    anew->version = 0;
-    anew->client_chan = channel;
-    anew->client_link = link;
-    anew->cs_get_mask = 0;
-    anew->cs_put_mask = 0;
-    anew->cs_accept_mask = 0;
-    if (!(anew->decode = odr_createmem(ODR_DECODE)) ||
-       !(anew->encode = odr_createmem(ODR_ENCODE)))
-       return 0;
-    if (*control_block->apdufile)
-    {
-       char filename[256];
-       FILE *f;
-
-       strcpy(filename, control_block->apdufile);
-       if (!(anew->print = odr_createmem(ODR_PRINT)))
-           return 0;
-       if (*control_block->apdufile == '@')
-        {
-           odr_setprint(anew->print, yaz_log_file());
-       }       
-       else if (*control_block->apdufile != '-')
-       {
-           strcpy(filename, control_block->apdufile);
-           if (!control_block->dynamic)
-           {
-               if (!apduf)
-               {
-                   if (!(apduf = fopen(filename, "w")))
-                   {
-                       yaz_log(LOG_WARN|LOG_ERRNO, "%s", filename);
-                       return 0;
-                   }
-                   setvbuf(apduf, 0, _IONBF, 0);
-               }
-               f = apduf;
-           }
-           else 
-           {
-               sprintf(filename + strlen(filename), ".%d", getpid());
-               if (!(f = fopen(filename, "w")))
-               {
-                   yaz_log(LOG_WARN|LOG_ERRNO, "%s", filename);
-                   return 0;
-               }
-               setvbuf(f, 0, _IONBF, 0);
-           }
-           odr_setprint(anew->print, f);
-       }
-    }
-    else
-       anew->print = 0;
-    anew->input_buffer = 0;
-    anew->input_buffer_len = 0;
-    anew->backend = 0;
-    anew->state = ASSOC_NEW;
-    request_initq(&anew->incoming);
-    request_initq(&anew->outgoing);
-    anew->proto = cs_getproto(link);
-    return anew;
-}
-
-/*
- * Free association and release resources.
- */
-void destroy_association(association *h)
-{
-    statserv_options_block *cb = statserv_getcontrol();
-    request *req;
-
-    xfree(h->init);
-    odr_destroy(h->decode);
-    odr_destroy(h->encode);
-    if (h->print)
-       odr_destroy(h->print);
-    if (h->input_buffer)
-    xfree(h->input_buffer);
-    if (h->backend)
-       (*cb->bend_close)(h->backend);
-    while ((req = request_deq(&h->incoming)))
-       request_release(req);
-    while ((req = request_deq(&h->outgoing)))
-       request_release(req);
-    request_delq(&h->incoming);
-    request_delq(&h->outgoing);
-    xfree(h);
-    xmalloc_trav("session closed");
-    if (control_block && control_block->one_shot)
-    {
-       exit (0);
-    }
-}
-
-static void do_close_req(association *a, int reason, char *message,
-                        request *req)
-{
-    Z_APDU apdu;
-    Z_Close *cls = zget_Close(a->encode);
-    
-    /* Purge request queue */
-    while (request_deq(&a->incoming));
-    while (request_deq(&a->outgoing));
-    if (a->version >= 3)
-    {
-       yaz_log(LOG_LOG, "Sending Close PDU, reason=%d, message=%s",
-           reason, message ? message : "none");
-       apdu.which = Z_APDU_close;
-       apdu.u.close = cls;
-       *cls->closeReason = reason;
-       cls->diagnosticInformation = message;
-       process_z_response(a, req, &apdu);
-       iochan_settimeout(a->client_chan, 20);
-    }
-    else
-    {
-       request_release(req);
-       yaz_log(LOG_DEBUG, "v2 client. No Close PDU");
-       iochan_setevent(a->client_chan, EVENT_TIMEOUT); /* force imm close */
-    }
-    a->state = ASSOC_DEAD;
-}
-
-static void do_close(association *a, int reason, char *message)
-{
-    request *req = request_get(&a->outgoing);
-    do_close_req (a, reason, message, req);
-}
-
-/*
- * This is where PDUs from the client are read and the further
- * processing is initiated. Flow of control moves down through the
- * various process_* functions below, until the encoded result comes back up
- * to the output handler in here.
- * 
- *  h     : the I/O channel that has an outstanding event.
- *  event : the current outstanding event.
- */
-void ir_session(IOCHAN h, int event)
-{
-    int res;
-    association *assoc = (association *)iochan_getdata(h);
-    COMSTACK conn = assoc->client_link;
-    request *req;
-
-    assert(h && conn && assoc);
-    if (event == EVENT_TIMEOUT)
-    {
-       if (assoc->state != ASSOC_UP)
-       {
-           yaz_log(LOG_LOG, "Final timeout - closing connection.");
-           cs_close(conn);
-           destroy_association(assoc);
-           iochan_destroy(h);
-       }
-       else
-       {
-           yaz_log(LOG_LOG, "Session idle too long. Sending close.");
-           do_close(assoc, Z_Close_lackOfActivity, 0);
-       }
-       return;
-    }
-    if (event & assoc->cs_accept_mask)
-    {
-       yaz_log (LOG_DEBUG, "ir_session (accept)");
-       if (!cs_accept (conn))
-       {
-           yaz_log (LOG_LOG, "accept failed");
-           destroy_association(assoc);
-           iochan_destroy(h);
-       }
-       iochan_clearflag (h, EVENT_OUTPUT|EVENT_OUTPUT);
-       if (conn->io_pending) 
-       {   /* cs_accept didn't complete */
-           assoc->cs_accept_mask = 
-               ((conn->io_pending & CS_WANT_WRITE) ? EVENT_OUTPUT : 0) |
-               ((conn->io_pending & CS_WANT_READ) ? EVENT_INPUT : 0);
-
-           iochan_setflag (h, assoc->cs_accept_mask);
-       }
-       else
-       {   /* cs_accept completed. Prepare for reading (cs_get) */
-           assoc->cs_accept_mask = 0;
-           assoc->cs_get_mask = EVENT_INPUT;
-           iochan_setflag (h, assoc->cs_get_mask);
-       }
-       return;
-    }
-    if ((event & assoc->cs_get_mask) || (event & EVENT_WORK)) /* input */
-    {
-       if ((assoc->cs_put_mask & EVENT_INPUT) == 0 && (event & assoc->cs_get_mask))
-       {
-           yaz_log(LOG_DEBUG, "ir_session (input)");
-           /* We aren't speaking to this fellow */
-           if (assoc->state == ASSOC_DEAD)
-           {
-               yaz_log(LOG_LOG, "Connection closed - end of session");
-               cs_close(conn);
-               destroy_association(assoc);
-               iochan_destroy(h);
-               return;
-           }
-           assoc->cs_get_mask = EVENT_INPUT;
-           if ((res = cs_get(conn, &assoc->input_buffer,
-               &assoc->input_buffer_len)) <= 0)
-           {
-               yaz_log(LOG_LOG, "Connection closed by client");
-               cs_close(conn);
-               destroy_association(assoc);
-               iochan_destroy(h);
-               return;
-           }
-           else if (res == 1) /* incomplete read - wait for more  */
-           {
-               if (conn->io_pending & CS_WANT_WRITE)
-                   assoc->cs_get_mask |= EVENT_OUTPUT;
-               iochan_setflag(h, assoc->cs_get_mask);
-               return;
-           }
-           if (cs_more(conn)) /* more stuff - call us again later, please */
-               iochan_setevent(h, EVENT_INPUT);
-               
-           /* we got a complete PDU. Let's decode it */
-           yaz_log(LOG_DEBUG, "Got PDU, %d bytes: lead=%02X %02X %02X", res,
-                           assoc->input_buffer[0] & 0xff,
-                           assoc->input_buffer[1] & 0xff,
-                           assoc->input_buffer[2] & 0xff);
-           req = request_get(&assoc->incoming); /* get a new request */
-           odr_reset(assoc->decode);
-           odr_setbuf(assoc->decode, assoc->input_buffer, res, 0);
-           if (!z_GDU(assoc->decode, &req->gdu_request, 0, 0))
-           {
-               yaz_log(LOG_LOG, "ODR error on incoming PDU: %s [element %s] "
-                        "[near byte %d] ",
-                       odr_errmsg(odr_geterror(assoc->decode)),
-                        odr_getelement(assoc->decode),
-                       odr_offset(assoc->decode));
-                if (assoc->decode->error != OHTTP)
-                {
-                    yaz_log(LOG_LOG, "PDU dump:");
-                    odr_dumpBER(yaz_log_file(), assoc->input_buffer, res);
-                   request_release(req);
-                    do_close(assoc, Z_Close_protocolError,"Malformed package");
-                }
-                else
-                {
-                    Z_GDU *p = z_get_HTTP_Response(assoc->encode, 400);
-                    assoc->state = ASSOC_DEAD;
-                    process_gdu_response(assoc, req, p);
-                }
-               return;
-           }
-           req->request_mem = odr_extract_mem(assoc->decode);
-           if (assoc->print && !z_GDU(assoc->print, &req->gdu_request, 0, 0))
-           {
-               yaz_log(LOG_WARN, "ODR print error: %s", 
-                   odr_errmsg(odr_geterror(assoc->print)));
-               odr_reset(assoc->print);
-           }
-           request_enq(&assoc->incoming, req);
-       }
-
-       /* can we do something yet? */
-       req = request_head(&assoc->incoming);
-       if (req->state == REQUEST_IDLE)
-       {
-           request_deq(&assoc->incoming);
-           process_gdu_request(assoc, req);
-       }
-    }
-    if (event & assoc->cs_put_mask)
-    {
-       request *req = request_head(&assoc->outgoing);
-
-       assoc->cs_put_mask = 0;
-       yaz_log(LOG_DEBUG, "ir_session (output)");
-        req->state = REQUEST_PENDING;
-       switch (res = cs_put(conn, req->response, req->len_response))
-       {
-       case -1:
-           yaz_log(LOG_LOG, "Connection closed by client");
-           cs_close(conn);
-           destroy_association(assoc);
-           iochan_destroy(h);
-           break;
-       case 0: /* all sent - release the request structure */
-           yaz_log(LOG_DEBUG, "Wrote PDU, %d bytes", req->len_response);
-#if 0
-           yaz_log(LOG_DEBUG, "HTTP out:\n%.*s", req->len_response,
-                    req->response);
-#endif
-           nmem_destroy(req->request_mem);
-           request_deq(&assoc->outgoing);
-           request_release(req);
-           if (!request_head(&assoc->outgoing))
-           {   /* restore mask for cs_get operation ... */
-               iochan_clearflag(h, EVENT_OUTPUT|EVENT_INPUT);
-               iochan_setflag(h, assoc->cs_get_mask);
-                if (assoc->state == ASSOC_DEAD)
-                    iochan_setevent(assoc->client_chan, EVENT_TIMEOUT);
-           }
-            else
-            {
-                assoc->cs_put_mask = EVENT_OUTPUT;
-            }
-           break;
-       default:
-           if (conn->io_pending & CS_WANT_WRITE)
-               assoc->cs_put_mask |= EVENT_OUTPUT;
-           if (conn->io_pending & CS_WANT_READ)
-               assoc->cs_put_mask |= EVENT_INPUT;
-           iochan_setflag(h, assoc->cs_put_mask);
-       }
-    }
-    if (event & EVENT_EXCEPT)
-    {
-       yaz_log(LOG_LOG, "ir_session (exception)");
-       cs_close(conn);
-       destroy_association(assoc);
-       iochan_destroy(h);
-    }
-}
-
-static int process_z_request(association *assoc, request *req, char **msg);
-
-static void assoc_init_reset(association *assoc)
-{
-    xfree (assoc->init);
-    assoc->init = (bend_initrequest *) xmalloc (sizeof(*assoc->init));
-
-    assoc->init->stream = assoc->encode;
-    assoc->init->print = assoc->print;
-    assoc->init->auth = 0;
-    assoc->init->referenceId = 0;
-    assoc->init->implementation_version = 0;
-    assoc->init->implementation_id = 0;
-    assoc->init->implementation_name = 0;
-    assoc->init->bend_sort = NULL;
-    assoc->init->bend_search = NULL;
-    assoc->init->bend_present = NULL;
-    assoc->init->bend_esrequest = NULL;
-    assoc->init->bend_delete = NULL;
-    assoc->init->bend_scan = NULL;
-    assoc->init->bend_segment = NULL;
-    assoc->init->bend_fetch = NULL;
-    assoc->init->bend_explain = NULL;
-
-    assoc->init->charneg_request = NULL;
-    assoc->init->charneg_response = NULL;
-
-    assoc->init->decode = assoc->decode;
-    assoc->init->peer_name = 
-        odr_strdup (assoc->encode, cs_addrstr(assoc->client_link));
-}
-
-static int srw_bend_init(association *assoc)
-{
-    const char *encoding = "UTF-8";
-    Z_External *ce;
-    bend_initresult *binitres;
-    statserv_options_block *cb = statserv_getcontrol();
-    
-    assoc_init_reset(assoc);
-
-    assoc->maximumRecordSize = 3000000;
-    assoc->preferredMessageSize = 3000000;
-#if 1
-    ce = yaz_set_proposal_charneg(assoc->decode, &encoding, 1, 0, 0, 1);
-    assoc->init->charneg_request = ce->u.charNeg3;
-#endif
-    if (!(binitres = (*cb->bend_init)(assoc->init)))
-    {
-       yaz_log(LOG_WARN, "Bad response from backend.");
-       return 0;
-    }
-    assoc->backend = binitres->handle;
-    return 1;
-}
-
-static int srw_bend_fetch(association *assoc, int pos,
-                          Z_SRW_searchRetrieveRequest *srw_req,
-                          Z_SRW_record *record)
-{
-    bend_fetch_rr rr;
-    ODR o = assoc->encode;
-
-    rr.setname = "default";
-    rr.number = pos;
-    rr.referenceId = 0;
-    rr.request_format = VAL_TEXT_XML;
-    rr.request_format_raw = yaz_oidval_to_z3950oid(assoc->decode,
-                                                   CLASS_TRANSYN,
-                                                   VAL_TEXT_XML);
-    rr.comp = (Z_RecordComposition *)
-           odr_malloc(assoc->decode, sizeof(*rr.comp));
-    rr.comp->which = Z_RecordComp_complex;
-    rr.comp->u.complex = (Z_CompSpec *)
-           odr_malloc(assoc->decode, sizeof(Z_CompSpec));
-    rr.comp->u.complex->selectAlternativeSyntax = (bool_t *)
-        odr_malloc(assoc->encode, sizeof(bool_t));
-    *rr.comp->u.complex->selectAlternativeSyntax = 0;    
-    rr.comp->u.complex->num_dbSpecific = 0;
-    rr.comp->u.complex->dbSpecific = 0;
-    rr.comp->u.complex->num_recordSyntax = 0; 
-    rr.comp->u.complex->recordSyntax = 0;
-
-    rr.comp->u.complex->generic = (Z_Specification *) 
-           odr_malloc(assoc->decode, sizeof(Z_Specification));
-    rr.comp->u.complex->generic->which = Z_Schema_uri;
-    rr.comp->u.complex->generic->schema.uri = srw_req->recordSchema;
-    rr.comp->u.complex->generic->elementSpec = 0;
-    
-    rr.stream = assoc->encode;
-    rr.print = assoc->print;
-
-    rr.basename = 0;
-    rr.len = 0;
-    rr.record = 0;
-    rr.last_in_set = 0;
-    rr.output_format = VAL_TEXT_XML;
-    rr.output_format_raw = 0;
-    rr.errcode = 0;
-    rr.errstring = 0;
-    rr.surrogate_flag = 0;
-    rr.schema = srw_req->recordSchema;
-
-    if (!assoc->init->bend_fetch)
-        return 1;
-
-    (*assoc->init->bend_fetch)(assoc->backend, &rr);
-
-    if (rr.len >= 0)
-    {
-        record->recordData_buf = rr.record;
-        record->recordData_len = rr.len;
-        record->recordPosition = odr_intdup(o, pos);
-        if (rr.schema)
-            record->recordSchema = odr_strdup(o, rr.schema);
-        else
-            record->recordSchema = 0;
-    }
-    return rr.errcode;
-}
-
-static void srw_bend_search(association *assoc, request *req,
-                            Z_SRW_searchRetrieveRequest *srw_req,
-                            Z_SRW_searchRetrieveResponse *srw_res)
-{
-    int srw_error = 0;
-    bend_search_rr rr;
-    Z_External *ext;
-    
-    yaz_log(LOG_LOG, "Got SRW SearchRetrieveRequest");
-    yaz_log(LOG_DEBUG, "srw_bend_search");
-    if (!assoc->init)
-    {
-        yaz_log(LOG_DEBUG, "srw_bend_init");
-        if (!srw_bend_init(assoc))
-        {
-            srw_error = 3;  /* assume Authentication error */
-
-            srw_res->num_diagnostics = 1;
-            srw_res->diagnostics = (Z_SRW_diagnostic *)
-                odr_malloc(assoc->encode, sizeof(*srw_res->diagnostics));
-            srw_res->diagnostics[0].code = 
-                odr_intdup(assoc->encode, srw_error);
-            srw_res->diagnostics[0].details = 0;
-            return;
-        }
-    }
-    
-    rr.setname = "default";
-    rr.replace_set = 1;
-    rr.num_bases = 1;
-    rr.basenames = &srw_req->database;
-    rr.referenceId = 0;
-
-    rr.query = (Z_Query *) odr_malloc (assoc->decode, sizeof(*rr.query));
-
-    if (srw_req->query_type == Z_SRW_query_type_cql)
-    {
-        ext = (Z_External *) odr_malloc(assoc->decode, sizeof(*ext));
-        ext->direct_reference = odr_getoidbystr(assoc->decode, 
-                                                "1.2.840.10003.16.2");
-        ext->indirect_reference = 0;
-        ext->descriptor = 0;
-        ext->which = Z_External_CQL;
-        ext->u.cql = srw_req->query.cql;
-
-        rr.query->which = Z_Query_type_104;
-        rr.query->u.type_104 =  ext;
-    }
-    else if (srw_req->query_type == Z_SRW_query_type_pqf)
-    {
-        Z_RPNQuery *RPNquery;
-        YAZ_PQF_Parser pqf_parser;
-
-        pqf_parser = yaz_pqf_create ();
-
-        RPNquery = yaz_pqf_parse (pqf_parser, assoc->decode,
-                                  srw_req->query.pqf);
-        if (!RPNquery)
-        {
-            const char *pqf_msg;
-            size_t off;
-            int code = yaz_pqf_error (pqf_parser, &pqf_msg, &off);
-            yaz_log(LOG_LOG, "%*s^\n", off+4, "");
-            yaz_log(LOG_LOG, "Bad PQF: %s (code %d)\n", pqf_msg, code);
-            
-            srw_error = 10;
-        }
-
-        rr.query->which = Z_Query_type_1;
-        rr.query->u.type_1 =  RPNquery;
-
-        yaz_pqf_destroy (pqf_parser);
-    }
-    else
-        srw_error = 11;
-
-    if (!srw_error && srw_req->sort_type != Z_SRW_sort_type_none)
-        srw_error = 80;
-
-    if (!srw_error && !assoc->init->bend_search)
-        srw_error = 1;
-
-    if (srw_error)
-    {
-        yaz_log(LOG_DEBUG, "srw_bend_search returned SRW error %d", srw_error);
-        srw_res->num_diagnostics = 1;
-        srw_res->diagnostics = (Z_SRW_diagnostic *)
-           odr_malloc(assoc->encode, sizeof(*srw_res->diagnostics));
-        srw_res->diagnostics[0].code = 
-            odr_intdup(assoc->encode, srw_error);
-        srw_res->diagnostics[0].details = 0;
-        return;
-    }
-    
-    rr.stream = assoc->encode;
-    rr.decode = assoc->decode;
-    rr.print = assoc->print;
-    rr.request = req;
-    rr.association = assoc;
-    rr.fd = 0;
-    rr.hits = 0;
-    rr.errcode = 0;
-    rr.errstring = 0;
-    rr.search_info = 0;
-    yaz_log_zquery(rr.query);
-    (assoc->init->bend_search)(assoc->backend, &rr);
-    srw_res->numberOfRecords = odr_intdup(assoc->encode, rr.hits);
-    if (rr.errcode)
-    {
-        yaz_log(LOG_DEBUG, "bend_search returned Bib-1 code %d", rr.errcode);
-        srw_res->num_diagnostics = 1;
-        srw_res->diagnostics = (Z_SRW_diagnostic *)
-           odr_malloc(assoc->encode, sizeof(*srw_res->diagnostics));
-        srw_res->diagnostics[0].code = 
-            odr_intdup(assoc->encode, 
-                       yaz_diag_bib1_to_srw (rr.errcode));
-        srw_res->diagnostics[0].details = rr.errstring;
-        yaz_log(LOG_DEBUG, "srw_bend_search returned SRW error %d",
-                *srw_res->diagnostics[0].code);
-                
-    }
-    else
-    {
-        int number = srw_req->maximumRecords ? *srw_req->maximumRecords : 0;
-        int start = srw_req->startRecord ? *srw_req->startRecord : 1;
-
-        yaz_log(LOG_LOG, "Request to pack %d+%d out of %d",
-                start, number, rr.hits);
-
-        srw_res->numberOfRecords = odr_intdup(assoc->encode, rr.hits);
-        if (number > 0)
-        {
-            int i;
-
-            if (start > rr.hits)
-            {
-                yaz_log(LOG_LOG, "Request out or range");
-            }
-            else
-            {
-                int j = 0;
-                int packing = Z_SRW_recordPacking_string;
-                if (start + number > rr.hits)
-                    number = rr.hits - start + 1;
-                if (srw_req->recordPacking && 
-                    !strcmp(srw_req->recordPacking, "xml"))
-                    packing = Z_SRW_recordPacking_XML;
-                srw_res->records = (Z_SRW_record *)
-                    odr_malloc(assoc->encode,
-                               number * sizeof(*srw_res->records));
-                for (i = 0; i<number; i++)
-                {
-                    int errcode;
-                    
-                    srw_res->records[j].recordPacking = packing;
-                    srw_res->records[j].recordData_buf = 0;
-                    yaz_log(LOG_DEBUG, "srw_bend_fetch %d", i+start);
-                    errcode = srw_bend_fetch(assoc, i+start, srw_req,
-                                             srw_res->records + j);
-                    if (errcode)
-                    {
-                        srw_res->num_diagnostics = 1;
-                        srw_res->diagnostics = (Z_SRW_diagnostic *)
-                            odr_malloc(assoc->encode, 
-                                       sizeof(*srw_res->diagnostics));
-                        srw_res->diagnostics[0].code = 
-                            odr_intdup(assoc->encode, 
-                                       yaz_diag_bib1_to_srw (errcode));
-                        srw_res->diagnostics[0].details = rr.errstring;
-                        break;
-                    }
-                    if (srw_res->records[j].recordData_buf)
-                        j++;
-                }
-                srw_res->num_records = j;
-                if (!j)
-                    srw_res->records = 0;
-            }
-        }
-    }
-}
-
-
-static void srw_bend_explain(association *assoc, request *req,
-                             Z_SRW_explainRequest *srw_req,
-                             Z_SRW_explainResponse *srw_res)
-{
-    yaz_log(LOG_LOG, "Got SRW ExplainRequest");
-    if (!assoc->init)
-    {
-        yaz_log(LOG_DEBUG, "srw_bend_init");
-        if (!srw_bend_init(assoc))
-            return;
-    }
-    if (assoc->init && assoc->init->bend_explain)
-    {
-        bend_explain_rr rr;
-
-        rr.stream = assoc->encode;
-        rr.decode = assoc->decode;
-        rr.print = assoc->print;
-        rr.explain_buf = 0;
-        (*assoc->init->bend_explain)(assoc->backend, &rr);
-        if (rr.explain_buf)
-        {
-            srw_res->explainData_buf = rr.explain_buf;
-            srw_res->explainData_len = strlen(rr.explain_buf);
-        }
-    }
-}
-
-static int hex_digit (int ch)
-{
-    if (ch >= '0' && ch <= '9')
-        return ch - '0';
-    else if (ch >= 'a' && ch <= 'f')
-        return ch - 'a'+10;
-    else if (ch >= 'A' && ch <= 'F')
-        return ch - 'A'+10;
-    return 0;
-}
-
-static char *uri_val(const char *path, const char *name, ODR o)
-{
-    size_t nlen = strlen(name);
-    if (*path != '?')
-        return 0;
-    path++;
-    while (path && *path)
-    {
-        const char *p1 = strchr(path, '=');
-        if (!p1)
-            break;
-        if ((size_t)(p1 - path) == nlen && !memcmp(path, name, nlen))
-        {
-            size_t i = 0;
-            char *ret;
-            
-            path = p1 + 1;
-            p1 = strchr(path, '&');
-            if (!p1)
-                p1 = strlen(path) + path;
-            ret = odr_malloc(o, p1 - path + 1);
-            while (*path && *path != '&')
-            {
-                if (*path == '+')
-                {
-                    ret[i++] = ' ';
-                    path++;
-                }
-                else if (*path == '%' && path[1] && path[2])
-                {
-                    ret[i++] = hex_digit (path[1])*16 + hex_digit (path[2]);
-                    path = path + 3;
-                }
-                else
-                    ret[i++] = *path++;
-            }
-            ret[i] = '\0';
-            return ret;
-        }
-        path = strchr(p1, '&');
-        if (path)
-            path++;
-    }
-    return 0;
-}
-
-void uri_val_int(const char *path, const char *name, ODR o, int **intp)
-{
-    const char *v = uri_val(path, name, o);
-    if (v)
-        *intp = odr_intdup(o, atoi(v));
-}
-
-static void process_http_request(association *assoc, request *req)
-{
-    Z_HTTP_Request *hreq = req->gdu_request->u.HTTP_Request;
-    ODR o = assoc->encode;
-    Z_GDU *p = 0;
-    Z_HTTP_Response *hres = 0;
-    int keepalive = 1;
-
-    if (!strcmp(hreq->method, "GET"))
-    {
-        char *db = "Default";
-        const char *p0 = hreq->path, *p1;
-#if HAVE_XML2
-        int ret = -1;
-        char *charset = 0;
-        Z_SOAP *soap_package = 0;
-        static Z_SOAP_Handler soap_handlers[2] = {
-            {"http://www.loc.gov/zing/srw/v1.0/", 0,
-             (Z_SOAP_fun) yaz_srw_codec},
-            {0, 0, 0}
-        };
-#endif
-        
-        if (*p0 == '/')
-            p0++;
-        p1 = strchr(p0, '?');
-        if (!p1)
-            p1 = p0 + strlen(p0);
-        if (p1 != p0)
-        {
-            db = odr_malloc(assoc->decode, p1 - p0 + 1);
-            memcpy (db, p0, p1 - p0);
-            db[p1 - p0] = '\0';
-        }
-#if HAVE_XML2
-        if (p1 && *p1 == '?' && p1[1])
-        {
-            Z_SRW_PDU *res = yaz_srw_get(o, Z_SRW_searchRetrieve_response);
-            Z_SRW_PDU *sr = yaz_srw_get(o, Z_SRW_searchRetrieve_request);
-            char *query = uri_val(p1, "query", o);
-            char *pQuery = uri_val(p1, "pQuery", o);
-            char *sortKeys = uri_val(p1, "sortKeys", o);
-            
-            if (query)
-            {
-                sr->u.request->query_type = Z_SRW_query_type_cql;
-                sr->u.request->query.cql = query;
-            }
-            if (pQuery)
-            {
-                sr->u.request->query_type = Z_SRW_query_type_pqf;
-                sr->u.request->query.pqf = pQuery;
-            }
-            if (sortKeys)
-            {
-                sr->u.request->sort_type = Z_SRW_sort_type_sort;
-                sr->u.request->sort.sortKeys = sortKeys;
-            }
-            sr->u.request->recordSchema = uri_val(p1, "recordSchema", o);
-            sr->u.request->recordPacking = uri_val(p1, "recordPacking", o);
-            if (!sr->u.request->recordPacking)
-                sr->u.request->recordPacking = "xml";
-            uri_val_int(p1, "maximumRecords", o, 
-                        &sr->u.request->maximumRecords);
-            uri_val_int(p1, "startRecord", o,
-                        &sr->u.request->startRecord);
-            if (sr->u.request->startRecord)
-                yaz_log(LOG_LOG, "startRecord=%d", *sr->u.request->startRecord);
-            sr->u.request->database = db;
-            srw_bend_search(assoc, req, sr->u.request, res->u.response);
-            
-            soap_package = odr_malloc(o, sizeof(*soap_package));
-            soap_package->which = Z_SOAP_generic;
-
-            soap_package->u.generic =
-                odr_malloc(o, sizeof(*soap_package->u.generic));
-
-            soap_package->u.generic->p = res;
-            soap_package->u.generic->ns = soap_handlers[0].ns;
-            soap_package->u.generic->no = 0;
-            
-            soap_package->ns = "SRU";
-
-            p = z_get_HTTP_Response(o, 200);
-            hres = p->u.HTTP_Response;
-
-            ret = z_soap_codec_enc(assoc->encode, &soap_package,
-                                   &hres->content_buf, &hres->content_len,
-                                   soap_handlers, charset);
-            if (!charset)
-                z_HTTP_header_add(o, &hres->headers, "Content-Type", "text/xml");
-            else
-            {
-                char ctype[60];
-                strcpy(ctype, "text/xml; charset=");
-                strcat(ctype, charset);
-                z_HTTP_header_add(o, &hres->headers, "Content-Type", ctype);
-            }
-
-        }
-        else
-        {
-            Z_SRW_PDU *res = yaz_srw_get(o, Z_SRW_explain_response);
-            Z_SRW_PDU *sr = yaz_srw_get(o, Z_SRW_explain_request);
-
-            srw_bend_explain(assoc, req, sr->u.explain_request,
-                            res->u.explain_response);
-
-            if (res->u.explain_response->explainData_buf)
-            {
-                soap_package = odr_malloc(o, sizeof(*soap_package));
-                soap_package->which = Z_SOAP_generic;
-                
-                soap_package->u.generic =
-                    odr_malloc(o, sizeof(*soap_package->u.generic));
-                
-                soap_package->u.generic->p = res;
-                soap_package->u.generic->ns = soap_handlers[0].ns;
-                soap_package->u.generic->no = 0;
-                
-                soap_package->ns = "SRU";
-                
-                p = z_get_HTTP_Response(o, 200);
-                hres = p->u.HTTP_Response;
-                
-                ret = z_soap_codec_enc(assoc->encode, &soap_package,
-                                       &hres->content_buf, &hres->content_len,
-                                       soap_handlers, charset);
-                if (!charset)
-                    z_HTTP_header_add(o, &hres->headers, "Content-Type", "text/xml");
-                else
-                {
-                    char ctype[60];
-                    strcpy(ctype, "text/xml; charset=");
-                    strcat(ctype, charset);
-                    z_HTTP_header_add(o, &hres->headers, "Content-Type",
-                                      ctype);
-                }
-            }
-        }
-#endif
-#ifdef DOCDIR
-       if (strlen(hreq->path) >= 5 && strlen(hreq->path) < 80 &&
-                        !memcmp(hreq->path, "/doc/", 5))
-        {
-           FILE *f;
-            char fpath[120];
-
-           strcpy(fpath, DOCDIR);
-           strcat(fpath, hreq->path+4);
-           f = fopen(fpath, "rb");
-           if (f) {
-                struct stat sbuf;
-                if (fstat(fileno(f), &sbuf) || !S_ISREG(sbuf.st_mode))
-                {
-                    fclose(f);
-                    f = 0;
-                }
-            }
-            if (f)
-            {
-               long sz;
-               fseek(f, 0L, SEEK_END);
-               sz = ftell(f);
-               if (sz >= 0 && sz < 500000)
-               {
-                   const char *ctype = "application/octet-stream";
-                   const char *cp;
-
-                    p = z_get_HTTP_Response(o, 200);
-                    hres = p->u.HTTP_Response;
-                   hres->content_buf = (char *) odr_malloc(o, sz + 1);
-                   hres->content_len = sz;
-                   fseek(f, 0L, SEEK_SET);
-                   fread(hres->content_buf, 1, sz, f);
-                   if ((cp = strrchr(fpath, '.'))) {
-                       cp++;
-                       if (!strcmp(cp, "png"))
-                           ctype = "image/png";
-                       else if (!strcmp(cp, "gif"))
-                           ctype = "image/gif";
-                       else if (!strcmp(cp, "xml"))
-                           ctype = "text/xml";
-                       else if (!strcmp(cp, "html"))
-                           ctype = "text/html";
-                   }
-                    z_HTTP_header_add(o, &hres->headers, "Content-Type", ctype);
-               }
-               fclose(f);
-           }
-       }
-#endif
-
-#if 0
-       if (!strcmp(hreq->path, "/")) 
-        {
-#ifdef DOCDIR
-            struct stat sbuf;
-#endif
-            const char *doclink = "";
-            p = z_get_HTTP_Response(o, 200);
-            hres = p->u.HTTP_Response;
-            hres->content_buf = (char *) odr_malloc(o, 400);
-#ifdef DOCDIR
-            if (stat(DOCDIR "/yaz.html", &sbuf) == 0 && S_ISREG(sbuf.st_mode))
-                doclink = "<P><A HREF=\"/doc/yaz.html\">Documentation</A></P>";
-#endif
-            sprintf (hres->content_buf, 
-                     "<!DOCTYPE HTML PUBLIC \"-//IETF//DTD HTML 2.0//EN\">\n"
-                     "<HTML>\n"
-                     " <HEAD>\n"
-                     "  <TITLE>YAZ " YAZ_VERSION "</TITLE>\n"
-                     " </HEAD>\n"
-                     " <BODY>\n"
-                     "  <P><A HREF=\"http://www.indexdata.dk/yaz/\">YAZ</A> " 
-                     YAZ_VERSION "</P>\n"
-                     "%s"
-                     " </BODY>\n"
-                     "</HTML>\n", doclink);
-            hres->content_len = strlen(hres->content_buf);
-            z_HTTP_header_add(o, &hres->headers, "Content-Type", "text/html");
-        }
-#endif
-
-        if (!p)
-        {
-            p = z_get_HTTP_Response(o, 404);
-        }
-    }
-    else if (!strcmp(hreq->method, "POST"))
-    {
-        const char *content_type = z_HTTP_header_lookup(hreq->headers,
-                                                        "Content-Type");
-        if (content_type && !yaz_strcmp_del("text/xml", content_type, "; "))
-        {
-            Z_SOAP *soap_package = 0;
-            int ret = -1;
-            int http_code = 500;
-            const char *charset_p = 0;
-            char *charset = 0;
-
-            static Z_SOAP_Handler soap_handlers[2] = {
-#if HAVE_XML2
-                {"http://www.loc.gov/zing/srw/v1.0/", 0,
-                 (Z_SOAP_fun) yaz_srw_codec},
-#endif
-                {0, 0, 0}
-            };
-            if ((charset_p = strstr(content_type, "; charset=")))
-            {
-                int i = 0;
-                charset_p += 10;
-                while (i < 20 && charset_p[i] &&
-                       !strchr("; \n\r", charset_p[i]))
-                    i++;
-                charset = odr_malloc(assoc->encode, i+1);
-                memcpy(charset, charset_p, i);
-                charset[i] = '\0';
-                yaz_log(LOG_LOG, "SOAP encoding %s", charset);
-            }
-            ret = z_soap_codec(assoc->decode, &soap_package, 
-                               &hreq->content_buf, &hreq->content_len,
-                               soap_handlers);
-#if HAVE_XML2
-            if (!ret && soap_package->which == Z_SOAP_generic &&
-                soap_package->u.generic->no == 0)
-            {
-                /* SRW package */
-                Z_SRW_PDU *sr = soap_package->u.generic->p;
-                
-                if (sr->which == Z_SRW_searchRetrieve_request)
-                {
-                    Z_SRW_PDU *res =
-                        yaz_srw_get(assoc->encode,
-                                    Z_SRW_searchRetrieve_response);
-
-                    if (!sr->u.request->database)
-                    {
-                        const char *p0 = hreq->path, *p1;
-                        if (*p0 == '/')
-                            p0++;
-                        p1 = strchr(p0, '?');
-                        if (!p1)
-                            p1 = p0 + strlen(p0);
-                        if (p1 != p0)
-                        {
-                            sr->u.request->database =
-                                odr_malloc(assoc->decode, p1 - p0 + 1);
-                            memcpy (sr->u.request->database, p0, p1 - p0);
-                            sr->u.request->database[p1 - p0] = '\0';
-                        }
-                        else
-                            sr->u.request->database = "Default";
-                    }
-                    srw_bend_search(assoc, req, sr->u.request,
-                                    res->u.response);
-                    
-                    soap_package->u.generic->p = res;
-                    http_code = 200;
-                }
-                else if (sr->which == Z_SRW_explain_request)
-                {
-                    Z_SRW_PDU *res =
-                        yaz_srw_get(assoc->encode, Z_SRW_explain_response);
-
-                    srw_bend_explain(assoc, req, sr->u.explain_request,
-                                     res->u.explain_response);
-                    if (!res->u.explain_response->explainData_buf)
-                    {
-                        z_soap_error(assoc->encode, soap_package,
-                                     "SOAP-ENV:Client", "Explain Not Supported", 0);
-                    }
-                    else
-                    {
-                        soap_package->u.generic->p = res;
-                        http_code = 200;
-                    }
-                }
-                else
-                {
-                    z_soap_error(assoc->encode, soap_package,
-                                 "SOAP-ENV:Client", "Bad method", 0); 
-                }
-            }
-#endif
-            p = z_get_HTTP_Response(o, 200);
-            hres = p->u.HTTP_Response;
-            ret = z_soap_codec_enc(assoc->encode, &soap_package,
-                                   &hres->content_buf, &hres->content_len,
-                                   soap_handlers, charset);
-            hres->code = http_code;
-            if (!charset)
-                z_HTTP_header_add(o, &hres->headers, "Content-Type", "text/xml");
-            else
-            {
-                char ctype[60];
-                strcpy(ctype, "text/xml; charset=");
-                strcat(ctype, charset);
-                z_HTTP_header_add(o, &hres->headers, "Content-Type", ctype);
-            }
-        }
-        if (!p) /* still no response ? */
-            p = z_get_HTTP_Response(o, 500);
-    }
-    else
-    {
-        p = z_get_HTTP_Response(o, 405);
-        hres = p->u.HTTP_Response;
-
-        z_HTTP_header_add(o, &hres->headers, "Allow", "GET, POST");
-    }
-    hres = p->u.HTTP_Response;
-    if (!strcmp(hreq->version, "1.0")) 
-    {
-        const char *v = z_HTTP_header_lookup(hreq->headers, "Connection");
-        if (v && !strcmp(v, "Keep-Alive"))
-            keepalive = 1;
-        else
-            keepalive = 0;
-        hres->version = "1.0";
-    }
-    else
-    {
-        const char *v = z_HTTP_header_lookup(hreq->headers, "Connection");
-        if (v && !strcmp(v, "close"))
-            keepalive = 0;
-        else
-            keepalive = 1;
-        hres->version = "1.1";
-    }
-    if (!keepalive)
-    {
-        z_HTTP_header_add(o, &hres->headers, "Connection", "close");
-        assoc->state = ASSOC_DEAD;
-    }
-    else
-    {
-        int t;
-        const char *alive = z_HTTP_header_lookup(hreq->headers, "Keep-Alive");
-
-        if (alive && isdigit(*alive))
-            t = atoi(alive);
-        else
-            t = 15;
-        if (t < 0 || t > 3600)
-            t = 3600;
-        iochan_settimeout(assoc->client_chan,t);
-        z_HTTP_header_add(o, &hres->headers, "Connection", "Keep-Alive");
-    }
-    process_gdu_response(assoc, req, p);
-}
-
-static void process_gdu_request(association *assoc, request *req)
-{
-    if (req->gdu_request->which == Z_GDU_Z3950)
-    {
-        char *msg = 0;
-        req->apdu_request = req->gdu_request->u.z3950;
-        if (process_z_request(assoc, req, &msg) < 0)
-            do_close_req(assoc, Z_Close_systemProblem, msg, req);
-    }
-    else if (req->gdu_request->which == Z_GDU_HTTP_Request)
-        process_http_request(assoc, req);
-    else
-    {
-        do_close_req(assoc, Z_Close_systemProblem, "bad protocol packet", req);
-    }
-}
-
-/*
- * Initiate request processing.
- */
-static int process_z_request(association *assoc, request *req, char **msg)
-{
-    int fd = -1;
-    Z_APDU *res;
-    int retval;
-    
-    *msg = "Unknown Error";
-    assert(req && req->state == REQUEST_IDLE);
-    if (req->apdu_request->which != Z_APDU_initRequest && !assoc->init)
-    {
-       *msg = "Missing InitRequest";
-       return -1;
-    }
-    switch (req->apdu_request->which)
-    {
-    case Z_APDU_initRequest:
-        iochan_settimeout(assoc->client_chan,
-                          statserv_getcontrol()->idle_timeout * 60);
-       res = process_initRequest(assoc, req); break;
-    case Z_APDU_searchRequest:
-       res = process_searchRequest(assoc, req, &fd); break;
-    case Z_APDU_presentRequest:
-       res = process_presentRequest(assoc, req, &fd); break;
-    case Z_APDU_scanRequest:
-       if (assoc->init->bend_scan)
-           res = process_scanRequest(assoc, req, &fd);
-       else
-       {
-           *msg = "Cannot handle Scan APDU";
-           return -1;
-       }
-       break;
-    case Z_APDU_extendedServicesRequest:
-       if (assoc->init->bend_esrequest)
-           res = process_ESRequest(assoc, req, &fd);
-       else
-       {
-           *msg = "Cannot handle Extended Services APDU";
-           return -1;
-       }
-       break;
-    case Z_APDU_sortRequest:
-       if (assoc->init->bend_sort)
-           res = process_sortRequest(assoc, req, &fd);
-       else
-       {
-           *msg = "Cannot handle Sort APDU";
-           return -1;
-       }
-       break;
-    case Z_APDU_close:
-       process_close(assoc, req);
-       return 0;
-    case Z_APDU_deleteResultSetRequest:
-       if (assoc->init->bend_delete)
-           res = process_deleteRequest(assoc, req, &fd);
-       else
-       {
-           *msg = "Cannot handle Delete APDU";
-           return -1;
-       }
-       break;
-    case Z_APDU_segmentRequest:
-       if (assoc->init->bend_segment)
-       {
-           res = process_segmentRequest (assoc, req);
-       }
-       else
-       {
-           *msg = "Cannot handle Segment APDU";
-           return -1;
-       }
-       break;
-    default:
-       *msg = "Bad APDU received";
-       return -1;
-    }
-    if (res)
-    {
-       yaz_log(LOG_DEBUG, "  result immediately available");
-       retval = process_z_response(assoc, req, res);
-    }
-    else if (fd < 0)
-    {
-       yaz_log(LOG_DEBUG, "  result unavailble");
-       retval = 0;
-    }
-    else /* no result yet - one will be provided later */
-    {
-       IOCHAN chan;
-
-       /* Set up an I/O handler for the fd supplied by the backend */
-
-       yaz_log(LOG_DEBUG, "   establishing handler for result");
-       req->state = REQUEST_PENDING;
-       if (!(chan = iochan_create(fd, backend_response, EVENT_INPUT)))
-           abort();
-       iochan_setdata(chan, assoc);
-       retval = 0;
-    }
-    return retval;
-}
-
-/*
- * Handle message from the backend.
- */
-void backend_response(IOCHAN i, int event)
-{
-    association *assoc = (association *)iochan_getdata(i);
-    request *req = request_head(&assoc->incoming);
-    Z_APDU *res;
-    int fd;
-
-    yaz_log(LOG_DEBUG, "backend_response");
-    assert(assoc && req && req->state != REQUEST_IDLE);
-    /* determine what it is we're waiting for */
-    switch (req->apdu_request->which)
-    {
-       case Z_APDU_searchRequest:
-           res = response_searchRequest(assoc, req, 0, &fd); break;
-#if 0
-       case Z_APDU_presentRequest:
-           res = response_presentRequest(assoc, req, 0, &fd); break;
-       case Z_APDU_scanRequest:
-           res = response_scanRequest(assoc, req, 0, &fd); break;
-#endif
-       default:
-           yaz_log(LOG_WARN, "Serious programmer's lapse or bug");
-           abort();
-    }
-    if ((res && process_z_response(assoc, req, res) < 0) || fd < 0)
-    {
-       yaz_log(LOG_LOG, "Fatal error when talking to backend");
-       do_close(assoc, Z_Close_systemProblem, 0);
-       iochan_destroy(i);
-       return;
-    }
-    else if (!res) /* no result yet - try again later */
-    {
-       yaz_log(LOG_DEBUG, "   no result yet");
-       iochan_setfd(i, fd); /* in case fd has changed */
-    }
-}
-
-/*
- * Encode response, and transfer the request structure to the outgoing queue.
- */
-static int process_gdu_response(association *assoc, request *req, Z_GDU *res)
-{
-    odr_setbuf(assoc->encode, req->response, req->size_response, 1);
-
-    if (assoc->print && !z_GDU(assoc->print, &res, 0, 0))
-    {
-       yaz_log(LOG_WARN, "ODR print error: %s", 
-           odr_errmsg(odr_geterror(assoc->print)));
-       odr_reset(assoc->print);
-    }
-    if (!z_GDU(assoc->encode, &res, 0, 0))
-    {
-       yaz_log(LOG_WARN, "ODR error when encoding PDU: %s [element %s]",
-                odr_errmsg(odr_geterror(assoc->decode)),
-                odr_getelement(assoc->decode));
-       request_release(req);
-       return -1;
-    }
-    req->response = odr_getbuf(assoc->encode, &req->len_response,
-       &req->size_response);
-    odr_setbuf(assoc->encode, 0, 0, 0); /* don'txfree if we abort later */
-    odr_reset(assoc->encode);
-    req->state = REQUEST_IDLE;
-    request_enq(&assoc->outgoing, req);
-    /* turn the work over to the ir_session handler */
-    iochan_setflag(assoc->client_chan, EVENT_OUTPUT);
-    assoc->cs_put_mask = EVENT_OUTPUT;
-    /* Is there more work to be done? give that to the input handler too */
-#if 1
-    if (request_head(&assoc->incoming))
-    {
-       yaz_log (LOG_DEBUG, "more work to be done");
-       iochan_setevent(assoc->client_chan, EVENT_WORK);
-    }
-#endif
-    return 0;
-}
-
-/*
- * Encode response, and transfer the request structure to the outgoing queue.
- */
-static int process_z_response(association *assoc, request *req, Z_APDU *res)
-{
-    Z_GDU *gres = (Z_GDU *) odr_malloc(assoc->encode, sizeof(*res));
-    gres->which = Z_GDU_Z3950;
-    gres->u.z3950 = res;
-
-    return process_gdu_response(assoc, req, gres);
-}
-
-
-/*
- * Handle init request.
- * At the moment, we don't check the options
- * anywhere else in the code - we just try not to do anything that would
- * break a naive client. We'll toss 'em into the association block when
- * we need them there.
- */
-static Z_APDU *process_initRequest(association *assoc, request *reqb)
-{
-    statserv_options_block *cb = statserv_getcontrol();
-    Z_InitRequest *req = reqb->apdu_request->u.initRequest;
-    Z_APDU *apdu = zget_APDU(assoc->encode, Z_APDU_initResponse);
-    Z_InitResponse *resp = apdu->u.initResponse;
-    bend_initresult *binitres;
-
-    char options[140];
-
-    yaz_log(LOG_LOG, "Got initRequest");
-    if (req->implementationId)
-       yaz_log(LOG_LOG, "Id:        %s", req->implementationId);
-    if (req->implementationName)
-       yaz_log(LOG_LOG, "Name:      %s", req->implementationName);
-    if (req->implementationVersion)
-       yaz_log(LOG_LOG, "Version:   %s", req->implementationVersion);
-
-    assoc_init_reset(assoc);
-
-    assoc->init->auth = req->idAuthentication;
-    assoc->init->referenceId = req->referenceId;
-
-    if (ODR_MASK_GET(req->options, Z_Options_negotiationModel))
-    {
-        Z_CharSetandLanguageNegotiation *negotiation =
-            yaz_get_charneg_record (req->otherInfo);
-        if (negotiation->which == Z_CharSetandLanguageNegotiation_proposal)
-            assoc->init->charneg_request = negotiation;
-    }
-    
-    if (!(binitres = (*cb->bend_init)(assoc->init)))
-    {
-       yaz_log(LOG_WARN, "Bad response from backend.");
-       return 0;
-    }
-
-    assoc->backend = binitres->handle;
-    if ((assoc->init->bend_sort))
-       yaz_log (LOG_DEBUG, "Sort handler installed");
-    if ((assoc->init->bend_search))
-       yaz_log (LOG_DEBUG, "Search handler installed");
-    if ((assoc->init->bend_present))
-       yaz_log (LOG_DEBUG, "Present handler installed");   
-    if ((assoc->init->bend_esrequest))
-       yaz_log (LOG_DEBUG, "ESRequest handler installed");   
-    if ((assoc->init->bend_delete))
-       yaz_log (LOG_DEBUG, "Delete handler installed");   
-    if ((assoc->init->bend_scan))
-       yaz_log (LOG_DEBUG, "Scan handler installed");   
-    if ((assoc->init->bend_segment))
-       yaz_log (LOG_DEBUG, "Segment handler installed");   
-    
-    resp->referenceId = req->referenceId;
-    *options = '\0';
-    /* let's tell the client what we can do */
-    if (ODR_MASK_GET(req->options, Z_Options_search))
-    {
-       ODR_MASK_SET(resp->options, Z_Options_search);
-       strcat(options, "srch");
-    }
-    if (ODR_MASK_GET(req->options, Z_Options_present))
-    {
-       ODR_MASK_SET(resp->options, Z_Options_present);
-       strcat(options, " prst");
-    }
-    if (ODR_MASK_GET(req->options, Z_Options_delSet) &&
-       assoc->init->bend_delete)
-    {
-       ODR_MASK_SET(resp->options, Z_Options_delSet);
-       strcat(options, " del");
-    }
-    if (ODR_MASK_GET(req->options, Z_Options_extendedServices) &&
-       assoc->init->bend_esrequest)
-    {
-       ODR_MASK_SET(resp->options, Z_Options_extendedServices);
-       strcat (options, " extendedServices");
-    }
-    if (ODR_MASK_GET(req->options, Z_Options_namedResultSets))
-    {
-       ODR_MASK_SET(resp->options, Z_Options_namedResultSets);
-       strcat(options, " namedresults");
-    }
-    if (ODR_MASK_GET(req->options, Z_Options_scan) && assoc->init->bend_scan)
-    {
-       ODR_MASK_SET(resp->options, Z_Options_scan);
-       strcat(options, " scan");
-    }
-    if (ODR_MASK_GET(req->options, Z_Options_concurrentOperations))
-    {
-       ODR_MASK_SET(resp->options, Z_Options_concurrentOperations);
-       strcat(options, " concurrop");
-    }
-    if (ODR_MASK_GET(req->options, Z_Options_sort) && assoc->init->bend_sort)
-    {
-       ODR_MASK_SET(resp->options, Z_Options_sort);
-       strcat(options, " sort");
-    }
-
-    if (ODR_MASK_GET(req->options, Z_Options_negotiationModel)
-        && assoc->init->charneg_response)
-    {
-       Z_OtherInformation **p;
-       Z_OtherInformationUnit *p0;
-       
-       yaz_oi_APDU(apdu, &p);
-       
-       if ((p0=yaz_oi_update(p, assoc->encode, NULL, 0, 0))) {
-            ODR_MASK_SET(resp->options, Z_Options_negotiationModel);
-            
-            p0->which = Z_OtherInfo_externallyDefinedInfo;
-            p0->information.externallyDefinedInfo =
-                assoc->init->charneg_response;
-        }
-       ODR_MASK_SET(resp->options, Z_Options_negotiationModel);
-       strcat(options, " negotiation");
-    }
-
-    if (ODR_MASK_GET(req->protocolVersion, Z_ProtocolVersion_1))
-    {
-       ODR_MASK_SET(resp->protocolVersion, Z_ProtocolVersion_1);
-       assoc->version = 2; /* 1 & 2 are equivalent */
-    }
-    if (ODR_MASK_GET(req->protocolVersion, Z_ProtocolVersion_2))
-    {
-       ODR_MASK_SET(resp->protocolVersion, Z_ProtocolVersion_2);
-       assoc->version = 2;
-    }
-    if (ODR_MASK_GET(req->protocolVersion, Z_ProtocolVersion_3))
-    {
-       ODR_MASK_SET(resp->protocolVersion, Z_ProtocolVersion_3);
-       assoc->version = 3;
-    }
-
-    yaz_log(LOG_LOG, "Negotiated to v%d: %s", assoc->version, options);
-    assoc->maximumRecordSize = *req->maximumRecordSize;
-    if (assoc->maximumRecordSize > control_block->maxrecordsize)
-       assoc->maximumRecordSize = control_block->maxrecordsize;
-    assoc->preferredMessageSize = *req->preferredMessageSize;
-    if (assoc->preferredMessageSize > assoc->maximumRecordSize)
-       assoc->preferredMessageSize = assoc->maximumRecordSize;
-
-    resp->preferredMessageSize = &assoc->preferredMessageSize;
-    resp->maximumRecordSize = &assoc->maximumRecordSize;
-
-    resp->implementationName = "GFS/YAZ";
-
-    if (assoc->init->implementation_id)
-    {
-       char *nv = (char *)
-           odr_malloc (assoc->encode,
-                       strlen(assoc->init->implementation_id) + 10 + 
-                              strlen(resp->implementationId));
-       sprintf (nv, "%s / %s",
-                resp->implementationId, assoc->init->implementation_id);
-        resp->implementationId = nv;
-    }
-    if (assoc->init->implementation_name)
-    {
-       char *nv = (char *)
-           odr_malloc (assoc->encode,
-                       strlen(assoc->init->implementation_name) + 10 + 
-                              strlen(resp->implementationName));
-       sprintf (nv, "%s / %s",
-                resp->implementationName, assoc->init->implementation_name);
-        resp->implementationName = nv;
-    }
-    if (assoc->init->implementation_version)
-    {
-       char *nv = (char *)
-           odr_malloc (assoc->encode,
-                       strlen(assoc->init->implementation_version) + 10 + 
-                              strlen(resp->implementationVersion));
-       sprintf (nv, "YAZ %s / %s",
-                resp->implementationVersion,
-                assoc->init->implementation_version);
-        resp->implementationVersion = nv;
-    }
-
-    if (binitres->errcode)
-    {
-       yaz_log(LOG_LOG, "Connection rejected by backend.");
-       *resp->result = 0;
-       assoc->state = ASSOC_DEAD;
-       resp->userInformationField = init_diagnostics(assoc->encode,
-                                                     binitres->errcode,
-                                                     binitres->errstring);
-    }
-    else
-       assoc->state = ASSOC_UP;
-    return apdu;
-}
-
-/*
- * Diagnostic in default format, to be returned as either a surrogate
- * or non-surrogate diagnostic in the context of an open session, or
- * as User-information when an Init is refused.
- */
-static Z_DefaultDiagFormat *justdiag(ODR odr, int error, char *addinfo)
-{
-    int *err = odr_intdup(odr, error);
-    Z_DefaultDiagFormat *dr = (Z_DefaultDiagFormat *)
-       odr_malloc (odr, sizeof(*dr));
-
-    yaz_log(LOG_LOG, "[%d] %s%s%s", error, diagbib1_str(error),
-        addinfo ? " -- " : "", addinfo ? addinfo : "");
-
-    dr->diagnosticSetId =
-       yaz_oidval_to_z3950oid (odr, CLASS_DIAGSET, VAL_BIB1);
-    dr->condition = err;
-    dr->which = Z_DefaultDiagFormat_v2Addinfo;
-    dr->u.v2Addinfo = odr_strdup (odr, addinfo ? addinfo : "");
-    return dr;
-}
-
-/*
- * Set the specified `errcode' and `errstring' into a UserInfo-1
- * external to be returned to the client in accordance with Z35.90
- * Implementor Agreement 5 (Returning diagnostics in an InitResponse):
- *     http://lcweb.loc.gov/z3950/agency/agree/initdiag.html
- */
-static Z_External *init_diagnostics(ODR odr, int error, char *addinfo)
-{
-    Z_External *x, *x2;
-    oident oid;
-    Z_OtherInformation *u;
-    Z_OtherInformationUnit *l;
-    Z_DiagnosticFormat *d;
-    Z_DiagnosticFormat_s *e;
-
-    x = (Z_External*) odr_malloc(odr, sizeof *x);
-    x->descriptor = 0;
-    x->indirect_reference = 0; 
-    oid.proto = PROTO_Z3950;
-    oid.oclass = CLASS_USERINFO;
-    oid.value = VAL_USERINFO1;
-    x->direct_reference = odr_oiddup(odr, oid_getoidbyent(&oid));
-    x->which = Z_External_userInfo1;
-
-    u = odr_malloc(odr, sizeof *u);
-    x->u.userInfo1 = u;
-    u->num_elements = 1;
-    u->list = (Z_OtherInformationUnit**) odr_malloc(odr, sizeof *u->list);
-    u->list[0] = (Z_OtherInformationUnit*) odr_malloc(odr, sizeof *u->list[0]);
-    l = u->list[0];
-    l->category = 0;
-    l->which = Z_OtherInfo_externallyDefinedInfo;
-
-    x2 = (Z_External*) odr_malloc(odr, sizeof *x);
-    l->information.externallyDefinedInfo = x2;
-    x2->descriptor = 0;
-    x2->indirect_reference = 0;
-    oid.oclass = CLASS_DIAGSET;
-    oid.value = VAL_DIAG1;
-    x2->direct_reference = odr_oiddup(odr, oid_getoidbyent(&oid));
-    x2->which = Z_External_diag1;
-
-    d = (Z_DiagnosticFormat*) odr_malloc(odr, sizeof *d);
-    x2->u.diag1 = d;
-    d->num = 1;
-    d->elements = (Z_DiagnosticFormat_s**) odr_malloc (odr, sizeof *d->elements);
-    d->elements[0] = (Z_DiagnosticFormat_s*) odr_malloc (odr, sizeof *d->elements[0]);
-    e = d->elements[0];
-
-    e->which = Z_DiagnosticFormat_s_defaultDiagRec;
-    e->u.defaultDiagRec = justdiag(odr, error, addinfo);
-    return x;
-}
-
-/*
- * nonsurrogate diagnostic record.
- */
-static Z_Records *diagrec(association *assoc, int error, char *addinfo)
-{
-    Z_Records *rec = (Z_Records *)
-       odr_malloc (assoc->encode, sizeof(*rec));
-    rec->which = Z_Records_NSD;
-    rec->u.nonSurrogateDiagnostic = justdiag(assoc->encode, error, addinfo);
-    return rec;
-}
-
-/*
- * surrogate diagnostic.
- */
-static Z_NamePlusRecord *surrogatediagrec(association *assoc, char *dbname,
-                                         int error, char *addinfo)
-{
-    Z_NamePlusRecord *rec = (Z_NamePlusRecord *)
-       odr_malloc (assoc->encode, sizeof(*rec));
-    Z_DiagRec *drec = (Z_DiagRec *)odr_malloc (assoc->encode, sizeof(*drec));
-    
-    yaz_log(LOG_DEBUG, "SurrogateDiagnotic: %d -- %s", error, addinfo);
-    rec->databaseName = dbname;
-    rec->which = Z_NamePlusRecord_surrogateDiagnostic;
-    rec->u.surrogateDiagnostic = drec;
-    drec->which = Z_DiagRec_defaultFormat;
-    drec->u.defaultFormat = justdiag(assoc->encode, error, addinfo);
-
-    return rec;
-}
-
-/*
- * multiple nonsurrogate diagnostics.
- */
-static Z_DiagRecs *diagrecs(association *assoc, int error, char *addinfo)
-{
-    Z_DiagRecs *recs = (Z_DiagRecs *)odr_malloc (assoc->encode, sizeof(*recs));
-    int *err = odr_intdup(assoc->encode, error);
-    Z_DiagRec **recp = (Z_DiagRec **)odr_malloc (assoc->encode, sizeof(*recp));
-    Z_DiagRec *drec = (Z_DiagRec *)odr_malloc (assoc->encode, sizeof(*drec));
-    Z_DefaultDiagFormat *rec = (Z_DefaultDiagFormat *)
-       odr_malloc (assoc->encode, sizeof(*rec));
-
-    yaz_log(LOG_DEBUG, "DiagRecs: %d -- %s", error, addinfo ? addinfo : "");
-
-    recs->num_diagRecs = 1;
-    recs->diagRecs = recp;
-    recp[0] = drec;
-    drec->which = Z_DiagRec_defaultFormat;
-    drec->u.defaultFormat = rec;
-
-    rec->diagnosticSetId =
-       yaz_oidval_to_z3950oid (assoc->encode, CLASS_DIAGSET, VAL_BIB1);
-    rec->condition = err;
-
-    rec->which = Z_DefaultDiagFormat_v2Addinfo;
-    rec->u.v2Addinfo = odr_strdup (assoc->encode, addinfo ? addinfo : "");
-    return recs;
-}
-
-static Z_Records *pack_records(association *a, char *setname, int start,
-                              int *num, Z_RecordComposition *comp,
-                              int *next, int *pres, oid_value format,
-                              Z_ReferenceId *referenceId,
-                              int *oid)
-{
-    int recno, total_length = 0, toget = *num, dumped_records = 0;
-    Z_Records *records =
-       (Z_Records *) odr_malloc (a->encode, sizeof(*records));
-    Z_NamePlusRecordList *reclist =
-       (Z_NamePlusRecordList *) odr_malloc (a->encode, sizeof(*reclist));
-    Z_NamePlusRecord **list =
-       (Z_NamePlusRecord **) odr_malloc (a->encode, sizeof(*list) * toget);
-
-    records->which = Z_Records_DBOSD;
-    records->u.databaseOrSurDiagnostics = reclist;
-    reclist->num_records = 0;
-    reclist->records = list;
-    *pres = Z_PRES_SUCCESS;
-    *num = 0;
-    *next = 0;
-
-    yaz_log(LOG_LOG, "Request to pack %d+%d+%s", start, toget, setname);
-    yaz_log(LOG_DEBUG, "pms=%d, mrs=%d", a->preferredMessageSize,
-       a->maximumRecordSize);
-    for (recno = start; reclist->num_records < toget; recno++)
-    {
-       bend_fetch_rr freq;
-       Z_NamePlusRecord *thisrec;
-       int this_length = 0;
-       /*
-        * we get the number of bytes allocated on the stream before any
-        * allocation done by the backend - this should give us a reasonable
-        * idea of the total size of the data so far.
-        */
-       total_length = odr_total(a->encode) - dumped_records;
-       freq.errcode = 0;
-       freq.errstring = 0;
-       freq.basename = 0;
-       freq.len = 0;
-       freq.record = 0;
-       freq.last_in_set = 0;
-       freq.setname = setname;
-       freq.surrogate_flag = 0;
-       freq.number = recno;
-       freq.comp = comp;
-       freq.request_format = format;
-       freq.request_format_raw = oid;
-       freq.output_format = format;
-       freq.output_format_raw = 0;
-       freq.stream = a->encode;
-       freq.print = a->print;
-       freq.referenceId = referenceId;
-        freq.schema = 0;
-       (*a->init->bend_fetch)(a->backend, &freq);
-       /* backend should be able to signal whether error is system-wide
-          or only pertaining to current record */
-       if (freq.errcode)
-       {
-           if (!freq.surrogate_flag)
-           {
-               char s[20];
-               *pres = Z_PRES_FAILURE;
-               /* for 'present request out of range',
-                   set addinfo to record position if not set */
-               if (freq.errcode == 13 && freq.errstring == 0)
-               {
-                   sprintf (s, "%d", recno);
-                   freq.errstring = s;
-               }
-               return diagrec(a, freq.errcode, freq.errstring);
-           }
-           reclist->records[reclist->num_records] =
-               surrogatediagrec(a, freq.basename, freq.errcode,
-                                freq.errstring);
-           reclist->num_records++;
-           *next = freq.last_in_set ? 0 : recno + 1;
-           continue;
-       }
-       if (freq.len >= 0)
-           this_length = freq.len;
-       else
-           this_length = odr_total(a->encode) - total_length;
-       yaz_log(LOG_DEBUG, "  fetched record, len=%d, total=%d",
-           this_length, total_length);
-       if (this_length + total_length > a->preferredMessageSize)
-       {
-           /* record is small enough, really */
-           if (this_length <= a->preferredMessageSize)
-           {
-               yaz_log(LOG_DEBUG, "  Dropped last normal-sized record");
-               *pres = Z_PRES_PARTIAL_2;
-               break;
-           }
-           /* record can only be fetched by itself */
-           if (this_length < a->maximumRecordSize)
-           {
-               yaz_log(LOG_DEBUG, "  Record > prefmsgsz");
-               if (toget > 1)
-               {
-                   yaz_log(LOG_DEBUG, "  Dropped it");
-                   reclist->records[reclist->num_records] =
-                        surrogatediagrec(a, freq.basename, 16, 0);
-                   reclist->num_records++;
-                   *next = freq.last_in_set ? 0 : recno + 1;
-                   dumped_records += this_length;
-                   continue;
-               }
-           }
-           else /* too big entirely */
-           {
-               yaz_log(LOG_LOG, "Record > maxrcdsz this=%d max=%d", this_length, a->maximumRecordSize);
-               reclist->records[reclist->num_records] =
-                   surrogatediagrec(a, freq.basename, 17, 0);
-               reclist->num_records++;
-               *next = freq.last_in_set ? 0 : recno + 1;
-               dumped_records += this_length;
-               continue;
-           }
-       }
-
-       if (!(thisrec = (Z_NamePlusRecord *)
-             odr_malloc(a->encode, sizeof(*thisrec))))
-           return 0;
-       if (!(thisrec->databaseName = (char *)odr_malloc(a->encode,
-           strlen(freq.basename) + 1)))
-           return 0;
-       strcpy(thisrec->databaseName, freq.basename);
-       thisrec->which = Z_NamePlusRecord_databaseRecord;
-
-       if (freq.output_format_raw)
-       {
-           struct oident *ident = oid_getentbyoid(freq.output_format_raw);
-           freq.output_format = ident->value;
-       }
-       thisrec->u.databaseRecord = z_ext_record(a->encode, freq.output_format,
-                                                freq.record, freq.len);
-       if (!thisrec->u.databaseRecord)
-           return 0;
-       reclist->records[reclist->num_records] = thisrec;
-       reclist->num_records++;
-       *next = freq.last_in_set ? 0 : recno + 1;
-    }
-    *num = reclist->num_records;
-    return records;
-}
-
-static Z_APDU *process_searchRequest(association *assoc, request *reqb,
-    int *fd)
-{
-    Z_SearchRequest *req = reqb->apdu_request->u.searchRequest;
-    bend_search_rr *bsrr = 
-       (bend_search_rr *)nmem_malloc (reqb->request_mem, sizeof(*bsrr));
-    
-    yaz_log(LOG_LOG, "Got SearchRequest.");
-    bsrr->fd = fd;
-    bsrr->request = reqb;
-    bsrr->association = assoc;
-    bsrr->referenceId = req->referenceId;
-    save_referenceId (reqb, bsrr->referenceId);
-
-    yaz_log (LOG_LOG, "ResultSet '%s'", req->resultSetName);
-    if (req->databaseNames)
-    {
-       int i;
-       for (i = 0; i < req->num_databaseNames; i++)
-           yaz_log (LOG_LOG, "Database '%s'", req->databaseNames[i]);
-    }
-    yaz_log_zquery(req->query);
-
-    if (assoc->init->bend_search)
-    {
-       bsrr->setname = req->resultSetName;
-       bsrr->replace_set = *req->replaceIndicator;
-       bsrr->num_bases = req->num_databaseNames;
-       bsrr->basenames = req->databaseNames;
-       bsrr->query = req->query;
-       bsrr->stream = assoc->encode;
-       bsrr->decode = assoc->decode;
-       bsrr->print = assoc->print;
-       bsrr->errcode = 0;
-       bsrr->hits = 0;
-       bsrr->errstring = NULL;
-        bsrr->search_info = NULL;
-       (assoc->init->bend_search)(assoc->backend, bsrr);
-       if (!bsrr->request)
-           return 0;
-    }
-    return response_searchRequest(assoc, reqb, bsrr, fd);
-}
-
-int bend_searchresponse(void *handle, bend_search_rr *bsrr) {return 0;}
-
-/*
- * Prepare a searchresponse based on the backend results. We probably want
- * to look at making the fetching of records nonblocking as well, but
- * so far, we'll keep things simple.
- * If bsrt is null, that means we're called in response to a communications
- * event, and we'll have to get the response for ourselves.
- */
-static Z_APDU *response_searchRequest(association *assoc, request *reqb,
-    bend_search_rr *bsrt, int *fd)
-{
-    Z_SearchRequest *req = reqb->apdu_request->u.searchRequest;
-    Z_APDU *apdu = (Z_APDU *)odr_malloc (assoc->encode, sizeof(*apdu));
-    Z_SearchResponse *resp = (Z_SearchResponse *)
-       odr_malloc (assoc->encode, sizeof(*resp));
-    int *nulint = odr_intdup (assoc->encode, 0);
-    bool_t *sr = odr_intdup(assoc->encode, 1);
-    int *next = odr_intdup(assoc->encode, 0);
-    int *none = odr_intdup(assoc->encode, Z_RES_NONE);
-
-    apdu->which = Z_APDU_searchResponse;
-    apdu->u.searchResponse = resp;
-    resp->referenceId = req->referenceId;
-    resp->additionalSearchInfo = 0;
-    resp->otherInfo = 0;
-    *fd = -1;
-    if (!bsrt && !bend_searchresponse(assoc->backend, bsrt))
-    {
-       yaz_log(LOG_FATAL, "Bad result from backend");
-       return 0;
-    }
-    else if (bsrt->errcode)
-    {
-       resp->records = diagrec(assoc, bsrt->errcode, bsrt->errstring);
-       resp->resultCount = nulint;
-       resp->numberOfRecordsReturned = nulint;
-       resp->nextResultSetPosition = nulint;
-       resp->searchStatus = nulint;
-       resp->resultSetStatus = none;
-       resp->presentStatus = 0;
-    }
-    else
-    {
-       int *toget = odr_intdup(assoc->encode, 0);
-        int *presst = odr_intdup(assoc->encode, 0);
-       Z_RecordComposition comp, *compp = 0;
-
-        yaz_log (LOG_LOG, "resultCount: %d", bsrt->hits);
-
-       resp->records = 0;
-       resp->resultCount = &bsrt->hits;
-
-       comp.which = Z_RecordComp_simple;
-       /* how many records does the user agent want, then? */
-       if (bsrt->hits <= *req->smallSetUpperBound)
-       {
-           *toget = bsrt->hits;
-           if ((comp.u.simple = req->smallSetElementSetNames))
-               compp = &comp;
-       }
-       else if (bsrt->hits < *req->largeSetLowerBound)
-       {
-           *toget = *req->mediumSetPresentNumber;
-           if (*toget > bsrt->hits)
-               *toget = bsrt->hits;
-           if ((comp.u.simple = req->mediumSetElementSetNames))
-               compp = &comp;
-       }
-       else
-           *toget = 0;
-
-       if (*toget && !resp->records)
-       {
-           oident *prefformat;
-           oid_value form;
-
-           if (!(prefformat = oid_getentbyoid(req->preferredRecordSyntax)))
-               form = VAL_NONE;
-           else
-               form = prefformat->value;
-           resp->records = pack_records(assoc, req->resultSetName, 1,
-               toget, compp, next, presst, form, req->referenceId,
-                                        req->preferredRecordSyntax);
-           if (!resp->records)
-               return 0;
-           resp->numberOfRecordsReturned = toget;
-           resp->nextResultSetPosition = next;
-           resp->searchStatus = sr;
-           resp->resultSetStatus = 0;
-           resp->presentStatus = presst;
-       }
-       else
-       {
-           if (*resp->resultCount)
-               *next = 1;
-           resp->numberOfRecordsReturned = nulint;
-           resp->nextResultSetPosition = next;
-           resp->searchStatus = sr;
-           resp->resultSetStatus = 0;
-           resp->presentStatus = 0;
-       }
-    }
-    resp->additionalSearchInfo = bsrt->search_info;
-    return apdu;
-}
-
-/*
- * Maybe we got a little over-friendly when we designed bend_fetch to
- * get only one record at a time. Some backends can optimise multiple-record
- * fetches, and at any rate, there is some overhead involved in
- * all that selecting and hopping around. Problem is, of course, that the
- * frontend can't know ahead of time how many records it'll need to
- * fill the negotiated PDU size. Annoying. Segmentation or not, Z/SR
- * is downright lousy as a bulk data transfer protocol.
- *
- * To start with, we'll do the fetching of records from the backend
- * in one operation: To save some trips in and out of the event-handler,
- * and to simplify the interface to pack_records. At any rate, asynch
- * operation is more fun in operations that have an unpredictable execution
- * speed - which is normally more true for search than for present.
- */
-static Z_APDU *process_presentRequest(association *assoc, request *reqb,
-                                     int *fd)
-{
-    Z_PresentRequest *req = reqb->apdu_request->u.presentRequest;
-    oident *prefformat;
-    oid_value form;
-    Z_APDU *apdu;
-    Z_PresentResponse *resp;
-    int *next;
-    int *num;
-
-    yaz_log(LOG_LOG, "Got PresentRequest.");
-
-    if (!(prefformat = oid_getentbyoid(req->preferredRecordSyntax)))
-       form = VAL_NONE;
-    else
-       form = prefformat->value;
-    resp = (Z_PresentResponse *)odr_malloc (assoc->encode, sizeof(*resp));
-    resp->records = 0;
-    resp->presentStatus = odr_intdup(assoc->encode, 0);
-    if (assoc->init->bend_present)
-    {
-       bend_present_rr *bprr = (bend_present_rr *)
-           nmem_malloc (reqb->request_mem, sizeof(*bprr));
-       bprr->setname = req->resultSetId;
-       bprr->start = *req->resultSetStartPoint;
-       bprr->number = *req->numberOfRecordsRequested;
-       bprr->format = form;
-       bprr->comp = req->recordComposition;
-       bprr->referenceId = req->referenceId;
-       bprr->stream = assoc->encode;
-       bprr->print = assoc->print;
-       bprr->request = reqb;
-       bprr->association = assoc;
-       bprr->errcode = 0;
-       bprr->errstring = NULL;
-       (*assoc->init->bend_present)(assoc->backend, bprr);
-       
-       if (!bprr->request)
-           return 0;
-       if (bprr->errcode)
-       {
-           resp->records = diagrec(assoc, bprr->errcode, bprr->errstring);
-           *resp->presentStatus = Z_PRES_FAILURE;
-       }
-    }
-    apdu = (Z_APDU *)odr_malloc (assoc->encode, sizeof(*apdu));
-    next = odr_intdup(assoc->encode, 0);
-    num = odr_intdup(assoc->encode, 0);
-    
-    apdu->which = Z_APDU_presentResponse;
-    apdu->u.presentResponse = resp;
-    resp->referenceId = req->referenceId;
-    resp->otherInfo = 0;
-    
-    if (!resp->records)
-    {
-       *num = *req->numberOfRecordsRequested;
-       resp->records =
-           pack_records(assoc, req->resultSetId, *req->resultSetStartPoint,
-                    num, req->recordComposition, next, resp->presentStatus,
-                        form, req->referenceId, req->preferredRecordSyntax);
-    }
-    if (!resp->records)
-       return 0;
-    resp->numberOfRecordsReturned = num;
-    resp->nextResultSetPosition = next;
-    
-    return apdu;
-}
-
-/*
- * Scan was implemented rather in a hurry, and with support for only the basic
- * elements of the service in the backend API. Suggestions are welcome.
- */
-static Z_APDU *process_scanRequest(association *assoc, request *reqb, int *fd)
-{
-    Z_ScanRequest *req = reqb->apdu_request->u.scanRequest;
-    Z_APDU *apdu = (Z_APDU *)odr_malloc (assoc->encode, sizeof(*apdu));
-    Z_ScanResponse *res = (Z_ScanResponse *)
-       odr_malloc (assoc->encode, sizeof(*res));
-    int *scanStatus = odr_intdup(assoc->encode, Z_Scan_failure);
-    int *numberOfEntriesReturned = odr_intdup(assoc->encode, 0);
-    Z_ListEntries *ents = (Z_ListEntries *)
-       odr_malloc (assoc->encode, sizeof(*ents));
-    Z_DiagRecs *diagrecs_p = NULL;
-    oident *attset;
-    bend_scan_rr *bsrr = (bend_scan_rr *)
-        odr_malloc (assoc->encode, sizeof(*bsrr));
-    struct scan_entry *save_entries;
-
-    yaz_log(LOG_LOG, "Got ScanRequest");
-
-    apdu->which = Z_APDU_scanResponse;
-    apdu->u.scanResponse = res;
-    res->referenceId = req->referenceId;
-
-    /* if step is absent, set it to 0 */
-    res->stepSize = odr_intdup(assoc->encode, 0);
-    if (req->stepSize)
-       *res->stepSize = *req->stepSize;
-
-    res->scanStatus = scanStatus;
-    res->numberOfEntriesReturned = numberOfEntriesReturned;
-    res->positionOfTerm = 0;
-    res->entries = ents;
-    ents->num_entries = 0;
-    ents->entries = NULL;
-    ents->num_nonsurrogateDiagnostics = 0;
-    ents->nonsurrogateDiagnostics = NULL;
-    res->attributeSet = 0;
-    res->otherInfo = 0;
-
-    if (req->databaseNames)
-    {
-        int i;
-        for (i = 0; i < req->num_databaseNames; i++)
-            yaz_log (LOG_LOG, "Database '%s'", req->databaseNames[i]);
-    }
-    bsrr->num_bases = req->num_databaseNames;
-    bsrr->basenames = req->databaseNames;
-    bsrr->num_entries = *req->numberOfTermsRequested;
-    bsrr->term = req->termListAndStartPoint;
-    bsrr->referenceId = req->referenceId;
-    bsrr->stream = assoc->encode;
-    bsrr->print = assoc->print;
-    bsrr->step_size = res->stepSize;
-    bsrr->entries = 0;
-    /* Note that version 2.0 of YAZ and older did not set entries .. 
-       We do now. And when we do it's easier to extend the scan entry 
-       We know that if the scan handler did set entries, it will
-       not know of new member display_term.
-    */
-    if (bsrr->num_entries > 0) 
-    {
-        int i;
-        bsrr->entries = odr_malloc(assoc->decode, sizeof(*bsrr->entries) *
-                                   bsrr->num_entries);
-        for (i = 0; i<bsrr->num_entries; i++)
-        {
-            bsrr->entries[i].term = 0;
-            bsrr->entries[i].occurrences = 0;
-            bsrr->entries[i].errcode = 0;
-            bsrr->entries[i].errstring = 0;
-            bsrr->entries[i].display_term = 0;
-        }
-    }
-    save_entries = bsrr->entries;  /* save it so we can compare later */
-
-    if (req->attributeSet &&
-        (attset = oid_getentbyoid(req->attributeSet)) &&
-        (attset->oclass == CLASS_ATTSET || attset->oclass == CLASS_GENERAL))
-        bsrr->attributeset = attset->value;
-    else
-        bsrr->attributeset = VAL_NONE;
-    log_scan_term (req->termListAndStartPoint, bsrr->attributeset);
-    bsrr->term_position = req->preferredPositionInResponse ?
-        *req->preferredPositionInResponse : 1;
-    ((int (*)(void *, bend_scan_rr *))
-     (*assoc->init->bend_scan))(assoc->backend, bsrr);
-    if (bsrr->errcode)
-        diagrecs_p = diagrecs(assoc, bsrr->errcode, bsrr->errstring);
-    else
-    {
-        int i;
-        Z_Entry **tab = (Z_Entry **)
-            odr_malloc (assoc->encode, sizeof(*tab) * bsrr->num_entries);
-        
-        if (bsrr->status == BEND_SCAN_PARTIAL)
-            *scanStatus = Z_Scan_partial_5;
-        else
-            *scanStatus = Z_Scan_success;
-        ents->entries = tab;
-        ents->num_entries = bsrr->num_entries;
-        res->numberOfEntriesReturned = &ents->num_entries;         
-        res->positionOfTerm = &bsrr->term_position;
-        for (i = 0; i < bsrr->num_entries; i++)
-        {
-            Z_Entry *e;
-            Z_TermInfo *t;
-            Odr_oct *o;
-            
-            tab[i] = e = (Z_Entry *)odr_malloc(assoc->encode, sizeof(*e));
-            if (bsrr->entries[i].occurrences >= 0)
-            {
-                e->which = Z_Entry_termInfo;
-                e->u.termInfo = t = (Z_TermInfo *)
-                    odr_malloc(assoc->encode, sizeof(*t));
-                t->suggestedAttributes = 0;
-                t->displayTerm = 0;
-                if (save_entries == bsrr->entries && 
-                    bsrr->entries[i].display_term)
-                {
-                    /* the entries was NOT set by the handler. So it's
-                       safe to test for new member display_term. It is
-                       NULL'ed by us.
-                    */
-                    t->displayTerm = odr_strdup(assoc->encode,
-                                                bsrr->entries[i].display_term);
-                }
-                t->alternativeTerm = 0;
-                t->byAttributes = 0;
-                t->otherTermInfo = 0;
-                t->globalOccurrences = &bsrr->entries[i].occurrences;
-                t->term = (Z_Term *)
-                    odr_malloc(assoc->encode, sizeof(*t->term));
-                t->term->which = Z_Term_general;
-                t->term->u.general = o =
-                    (Odr_oct *)odr_malloc(assoc->encode, sizeof(Odr_oct));
-                o->buf = (unsigned char *)
-                    odr_malloc(assoc->encode, o->len = o->size =
-                               strlen(bsrr->entries[i].term));
-                memcpy(o->buf, bsrr->entries[i].term, o->len);
-                yaz_log(LOG_DEBUG, "  term #%d: '%s' (%d)", i,
-                        bsrr->entries[i].term, bsrr->entries[i].occurrences);
-            }
-            else
-            {
-                Z_DiagRecs *drecs = diagrecs (assoc,
-                                              bsrr->entries[i].errcode,
-                                              bsrr->entries[i].errstring);
-                assert (drecs->num_diagRecs == 1);
-                e->which = Z_Entry_surrogateDiagnostic;
-                assert (drecs->diagRecs[0]);
-                e->u.surrogateDiagnostic = drecs->diagRecs[0];
-            }
-        }
-    }
-    if (diagrecs_p)
-    {
-       ents->num_nonsurrogateDiagnostics = diagrecs_p->num_diagRecs;
-       ents->nonsurrogateDiagnostics = diagrecs_p->diagRecs;
-    }
-    return apdu;
-}
-
-static Z_APDU *process_sortRequest(association *assoc, request *reqb,
-    int *fd)
-{
-    Z_SortRequest *req = reqb->apdu_request->u.sortRequest;
-    Z_SortResponse *res = (Z_SortResponse *)
-       odr_malloc (assoc->encode, sizeof(*res));
-    bend_sort_rr *bsrr = (bend_sort_rr *)
-       odr_malloc (assoc->encode, sizeof(*bsrr));
-
-    Z_APDU *apdu = (Z_APDU *)odr_malloc (assoc->encode, sizeof(*apdu));
-
-    yaz_log(LOG_LOG, "Got SortRequest.");
-
-    bsrr->num_input_setnames = req->num_inputResultSetNames;
-    bsrr->input_setnames = req->inputResultSetNames;
-    bsrr->referenceId = req->referenceId;
-    bsrr->output_setname = req->sortedResultSetName;
-    bsrr->sort_sequence = req->sortSequence;
-    bsrr->stream = assoc->encode;
-    bsrr->print = assoc->print;
-
-    bsrr->sort_status = Z_SortStatus_failure;
-    bsrr->errcode = 0;
-    bsrr->errstring = 0;
-    
-    (*assoc->init->bend_sort)(assoc->backend, bsrr);
-    
-    res->referenceId = bsrr->referenceId;
-    res->sortStatus = odr_intdup(assoc->encode, bsrr->sort_status);
-    res->resultSetStatus = 0;
-    if (bsrr->errcode)
-    {
-       Z_DiagRecs *dr = diagrecs (assoc, bsrr->errcode, bsrr->errstring);
-       res->diagnostics = dr->diagRecs;
-       res->num_diagnostics = dr->num_diagRecs;
-    }
-    else
-    {
-       res->num_diagnostics = 0;
-       res->diagnostics = 0;
-    }
-    res->resultCount = 0;
-    res->otherInfo = 0;
-
-    apdu->which = Z_APDU_sortResponse;
-    apdu->u.sortResponse = res;
-    return apdu;
-}
-
-static Z_APDU *process_deleteRequest(association *assoc, request *reqb,
-    int *fd)
-{
-    Z_DeleteResultSetRequest *req =
-        reqb->apdu_request->u.deleteResultSetRequest;
-    Z_DeleteResultSetResponse *res = (Z_DeleteResultSetResponse *)
-       odr_malloc (assoc->encode, sizeof(*res));
-    bend_delete_rr *bdrr = (bend_delete_rr *)
-       odr_malloc (assoc->encode, sizeof(*bdrr));
-    Z_APDU *apdu = (Z_APDU *)odr_malloc (assoc->encode, sizeof(*apdu));
-
-    yaz_log(LOG_LOG, "Got DeleteRequest.");
-
-    bdrr->num_setnames = req->num_resultSetList;
-    bdrr->setnames = req->resultSetList;
-    bdrr->stream = assoc->encode;
-    bdrr->print = assoc->print;
-    bdrr->function = *req->deleteFunction;
-    bdrr->referenceId = req->referenceId;
-    bdrr->statuses = 0;
-    if (bdrr->num_setnames > 0)
-    {
-       int i;
-       bdrr->statuses = (int*) 
-           odr_malloc(assoc->encode, sizeof(*bdrr->statuses) *
-                      bdrr->num_setnames);
-       for (i = 0; i < bdrr->num_setnames; i++)
-           bdrr->statuses[i] = 0;
-    }
-    (*assoc->init->bend_delete)(assoc->backend, bdrr);
-    
-    res->referenceId = req->referenceId;
-
-    res->deleteOperationStatus = odr_intdup(assoc->encode,bdrr->delete_status);
-
-    res->deleteListStatuses = 0;
-    if (bdrr->num_setnames > 0)
-    {
-       int i;
-       res->deleteListStatuses = (Z_ListStatuses *)
-           odr_malloc(assoc->encode, sizeof(*res->deleteListStatuses));
-       res->deleteListStatuses->num = bdrr->num_setnames;
-       res->deleteListStatuses->elements =
-           (Z_ListStatus **)
-           odr_malloc (assoc->encode, 
-                       sizeof(*res->deleteListStatuses->elements) *
-                       bdrr->num_setnames);
-       for (i = 0; i<bdrr->num_setnames; i++)
-       {
-           res->deleteListStatuses->elements[i] =
-               (Z_ListStatus *)
-               odr_malloc (assoc->encode,
-                           sizeof(**res->deleteListStatuses->elements));
-           res->deleteListStatuses->elements[i]->status = bdrr->statuses+i;
-           res->deleteListStatuses->elements[i]->id =
-               odr_strdup (assoc->encode, bdrr->setnames[i]);
-           
-       }
-    }
-    res->numberNotDeleted = 0;
-    res->bulkStatuses = 0;
-    res->deleteMessage = 0;
-    res->otherInfo = 0;
-
-    apdu->which = Z_APDU_deleteResultSetResponse;
-    apdu->u.deleteResultSetResponse = res;
-    return apdu;
-}
-
-static void process_close(association *assoc, request *reqb)
-{
-    Z_Close *req = reqb->apdu_request->u.close;
-    static char *reasons[] =
-    {
-       "finished",
-       "shutdown",
-       "systemProblem",
-       "costLimit",
-       "resources",
-       "securityViolation",
-       "protocolError",
-       "lackOfActivity",
-       "peerAbort",
-       "unspecified"
-    };
-
-    yaz_log(LOG_LOG, "Got Close, reason %s, message %s",
-       reasons[*req->closeReason], req->diagnosticInformation ?
-       req->diagnosticInformation : "NULL");
-    if (assoc->version < 3) /* to make do_force respond with close */
-       assoc->version = 3;
-    do_close_req(assoc, Z_Close_finished,
-                "Association terminated by client", reqb);
-}
-
-void save_referenceId (request *reqb, Z_ReferenceId *refid)
-{
-    if (refid)
-    {
-       reqb->len_refid = refid->len;
-       reqb->refid = (char *)nmem_malloc (reqb->request_mem, refid->len);
-       memcpy (reqb->refid, refid->buf, refid->len);
-    }
-    else
-    {
-       reqb->len_refid = 0;
-       reqb->refid = NULL;
-    }
-}
-
-void bend_request_send (bend_association a, bend_request req, Z_APDU *res)
-{
-    process_z_response (a, req, res);
-}
-
-bend_request bend_request_mk (bend_association a)
-{
-    request *nreq = request_get (&a->outgoing);
-    nreq->request_mem = nmem_create ();
-    return nreq;
-}
-
-Z_ReferenceId *bend_request_getid (ODR odr, bend_request req)
-{
-    Z_ReferenceId *id;
-    if (!req->refid)
-       return 0;
-    id = (Odr_oct *)odr_malloc (odr, sizeof(*odr));
-    id->buf = (unsigned char *)odr_malloc (odr, req->len_refid);
-    id->len = id->size = req->len_refid;
-    memcpy (id->buf, req->refid, req->len_refid);
-    return id;
-}
-
-void bend_request_destroy (bend_request *req)
-{
-    nmem_destroy((*req)->request_mem);
-    request_release(*req);
-    *req = NULL;
-}
-
-int bend_backend_respond (bend_association a, bend_request req)
-{
-    char *msg;
-    int r;
-    r = process_z_request (a, req, &msg);
-    if (r < 0)
-       yaz_log (LOG_WARN, "%s", msg);
-    return r;
-}
-
-void bend_request_setdata(bend_request r, void *p)
-{
-    r->clientData = p;
-}
-
-void *bend_request_getdata(bend_request r)
-{
-    return r->clientData;
-}
-
-static Z_APDU *process_segmentRequest (association *assoc, request *reqb)
-{
-    bend_segment_rr req;
-
-    req.segment = reqb->apdu_request->u.segmentRequest;
-    req.stream = assoc->encode;
-    req.decode = assoc->decode;
-    req.print = assoc->print;
-    req.association = assoc;
-    
-    (*assoc->init->bend_segment)(assoc->backend, &req);
-
-    return 0;
-}
-
-static Z_APDU *process_ESRequest(association *assoc, request *reqb, int *fd)
-{
-    bend_esrequest_rr esrequest;
-
-    Z_ExtendedServicesRequest *req =
-        reqb->apdu_request->u.extendedServicesRequest;
-    Z_APDU *apdu = zget_APDU(assoc->encode, Z_APDU_extendedServicesResponse);
-
-    Z_ExtendedServicesResponse *resp = apdu->u.extendedServicesResponse;
-
-    yaz_log(LOG_DEBUG,"inside Process esRequest");
-
-    esrequest.esr = reqb->apdu_request->u.extendedServicesRequest;
-    esrequest.stream = assoc->encode;
-    esrequest.decode = assoc->decode;
-    esrequest.print = assoc->print;
-    esrequest.errcode = 0;
-    esrequest.errstring = NULL;
-    esrequest.request = reqb;
-    esrequest.association = assoc;
-    esrequest.taskPackage = 0;
-    esrequest.referenceId = req->referenceId;
-    
-    (*assoc->init->bend_esrequest)(assoc->backend, &esrequest);
-    
-    /* If the response is being delayed, return NULL */
-    if (esrequest.request == NULL)
-        return(NULL);
-
-    resp->referenceId = req->referenceId;
-
-    if (esrequest.errcode == -1)
-    {
-        /* Backend service indicates request will be processed */
-        yaz_log(LOG_DEBUG,"Request could be processed...Accepted !");
-        *resp->operationStatus = Z_ExtendedServicesResponse_accepted;
-    }
-    else if (esrequest.errcode == 0)
-    {
-        /* Backend service indicates request will be processed */
-        yaz_log(LOG_DEBUG,"Request could be processed...Done !");
-        *resp->operationStatus = Z_ExtendedServicesResponse_done;
-    }
-    else
-    {
-       Z_DiagRecs *diagRecs = diagrecs (assoc, esrequest.errcode,
-                                        esrequest.errstring);
-
-        /* Backend indicates error, request will not be processed */
-        yaz_log(LOG_DEBUG,"Request could not be processed...failure !");
-        *resp->operationStatus = Z_ExtendedServicesResponse_failure;
-       resp->num_diagnostics = diagRecs->num_diagRecs;
-       resp->diagnostics = diagRecs->diagRecs;
-    }
-    /* Do something with the members of bend_extendedservice */
-    if (esrequest.taskPackage)
-       resp->taskPackage = z_ext_record (assoc->encode, VAL_EXTENDED,
-                                        (const char *)  esrequest.taskPackage,
-                                         -1);
-    yaz_log(LOG_DEBUG,"Send the result apdu");
-    return apdu;
-}
-
diff --git a/server/session.h b/server/session.h
deleted file mode 100644 (file)
index 4254cd2..0000000
+++ /dev/null
@@ -1,107 +0,0 @@
-/*
- * Copyright (C) 1995-2003, Index Data
- * See the file LICENSE for details.
- * Sebastian Hammer, Adam Dickmeiss
- *
- * $Id: session.h,v 1.29 2003-02-17 21:23:31 adam Exp $
- */
-
-#ifndef SESSION_H
-#define SESSION_H
-
-#include <sys/types.h>
-#include <yaz/comstack.h>
-#include <yaz/odr.h>
-#include <yaz/oid.h>
-#include <yaz/proto.h>
-#include "eventl.h"
-
-typedef enum {
-       REQUEST_IDLE,    /* the request is just sitting in the queue */
-       REQUEST_PENDING  /* operation pending (b'end processing or network I/O*/
-       /* this list will have more elements when acc/res control is added */
-} request_state;
-
-typedef struct request
-{
-    int len_refid;          /* length of referenceid */
-    char *refid;            /* referenceid */
-    request_state state;
-
-    Z_GDU *gdu_request;     /* Current request */
-    Z_APDU *apdu_request;   /* Current Z39.50 request */
-    NMEM request_mem;    /* memory handle for request */
-
-    int size_response;     /* size of buffer */
-    int len_response;      /* length of encoded data */
-    char *response;        /* encoded data waiting for transmission */
-
-    void *clientData;
-    struct request *next;
-    struct request_q *q; 
-} request;
-
-typedef struct request_q
-{
-    request *head;
-    request *tail;
-    request *list;
-    int num;
-} request_q;
-
-/*
- * association state.
- */
-typedef enum
-{
-    ASSOC_NEW,                /* not initialized yet */
-    ASSOC_UP,                 /* normal operation */
-    ASSOC_DEAD                /* dead. Close if input arrives */
-} association_state;
-
-typedef struct association
-{
-    IOCHAN client_chan;           /* event-loop control */
-    COMSTACK client_link;         /* communication handle */
-    ODR decode;                   /* decoding stream */
-    ODR encode;                   /* encoding stream */
-    ODR print;                    /* printing stream (for -a) */
-    char *encode_buffer;          /* temporary buffer for encoded data */
-    int encoded_len;              /* length of encoded data */
-    char *input_buffer;           /* input buffer (allocated by comstack) */
-    int input_buffer_len;         /* length (size) of buffer */
-    int input_apdu_len;           /* length of current incoming APDU */
-    oid_proto proto;              /* protocol (PROTO_Z3950/PROTO_SR) */
-    void *backend;                /* backend handle */
-    request_q incoming;           /* Q of incoming PDUs */
-    request_q outgoing;           /* Q of outgoing data buffers (enc. PDUs) */
-    association_state state;
-
-    /* session parameters */
-    int preferredMessageSize;
-    int maximumRecordSize;
-    int version;                  /* highest version-bit set (2 or 3) */
-
-    unsigned cs_get_mask;
-    unsigned cs_put_mask;
-    unsigned cs_accept_mask;
-
-    struct bend_initrequest *init;
-} association;
-
-association *create_association(IOCHAN channel, COMSTACK link);
-void destroy_association(association *h);
-void ir_session(IOCHAN h, int event);
-
-void request_enq(request_q *q, request *r);
-request *request_head(request_q *q);
-request *request_deq(request_q *q);
-request *request_deq_x(request_q *q, request *r);
-void request_initq(request_q *q);
-void request_delq(request_q *q);
-request *request_get(request_q *q);
-void request_release(request *r);
-
-int statserv_must_terminate(void);
-
-#endif
diff --git a/server/statserv.c b/server/statserv.c
deleted file mode 100644 (file)
index 4e3db64..0000000
+++ /dev/null
@@ -1,961 +0,0 @@
-/*
- * Copyright (c) 1995-2003, Index Data
- * See the file LICENSE for details.
- * Sebastian Hammer, Adam Dickmeiss
- *
- * NT threaded server code by
- *   Chas Woodfield, Fretwell Downing Informatics.
- *
- * $Id: statserv.c,v 1.98 2003-03-03 19:57:35 adam Exp $
- */
-
-#include <stdio.h>
-#include <string.h>
-#ifdef WIN32
-#include <process.h>
-#include <winsock.h>
-#include <direct.h>
-#include "service.h"
-#else
-#include <unistd.h>
-#include <pwd.h>
-#endif
-
-#if YAZ_POSIX_THREADS
-#include <pthread.h>
-#elif YAZ_GNU_THREADS
-#include <pth.h>
-#endif
-
-#include <fcntl.h>
-#include <signal.h>
-#include <errno.h>
-
-#include <yaz/comstack.h>
-#include <yaz/tcpip.h>
-#include <yaz/options.h>
-#ifdef USE_XTIMOSI
-#include <yaz/xmosi.h>
-#endif
-#include <yaz/log.h>
-#include "eventl.h"
-#include "session.h"
-#include <yaz/statserv.h>
-
-static IOCHAN pListener = NULL;
-
-static char *me = "statserver";
-/*
- * default behavior.
- */
-int check_options(int argc, char **argv);
-statserv_options_block control_block = {
-    1,                          /* dynamic mode */
-    0,                          /* threaded mode */
-    0,                          /* one shot (single session) */
-    LOG_DEFAULT_LEVEL,          /* log level */
-    "",                         /* no PDUs */
-    "",                         /* diagnostic output to stderr */
-    "tcp:@:9999",               /* default listener port */
-    PROTO_Z3950,                /* default application protocol */
-    15,                         /* idle timeout (minutes) */
-    1024*1024,                  /* maximum PDU size (approx.) to allow */
-    "default-config",           /* configuration name to pass to backend */
-    "",                         /* set user id */
-    0,                          /* bend_start handler */
-    0,                          /* bend_stop handler */
-    check_options,              /* Default routine, for checking the run-time arguments */
-    check_ip_tcpd,
-    "",
-    0,                          /* default value for inet deamon */
-    0,                          /* handle (for service, etc) */
-    0,                          /* bend_init handle */
-    0,                          /* bend_close handle */
-#ifdef WIN32
-    "Z39.50 Server",            /* NT Service Name */
-    "Server",                   /* NT application Name */
-    "",                         /* NT Service Dependencies */
-    "Z39.50 Server",            /* NT Service Display Name */
-#endif /* WIN32 */
-    0                           /* SOAP handlers */
-};
-
-static int max_sessions = 0;
-
-/*
- * handle incoming connect requests.
- * The dynamic mode is a bit tricky mostly because we want to avoid
- * doing all of the listening and accepting in the parent - it's
- * safer that way.
- */
-#ifdef WIN32
-
-typedef struct _ThreadList ThreadList;
-
-struct _ThreadList
-{
-    HANDLE hThread;
-    IOCHAN pIOChannel;
-    ThreadList *pNext;
-};
-
-static ThreadList *pFirstThread;
-static CRITICAL_SECTION Thread_CritSect;
-static BOOL bInitialized = FALSE;
-
-static void ThreadList_Initialize()
-{
-    /* Initialize the critical Sections */
-    InitializeCriticalSection(&Thread_CritSect);
-
-     /* Set the first thraed */
-    pFirstThread = NULL;
-
-    /* we have been initialized */
-    bInitialized = TRUE;
-}
-
-static void statserv_add(HANDLE hThread, IOCHAN pIOChannel)
-{
-    /* Only one thread can go through this section at a time */
-    EnterCriticalSection(&Thread_CritSect);
-
-    {
-        /* Lets create our new object */
-        ThreadList *pNewThread = (ThreadList *)malloc(sizeof(ThreadList));
-        pNewThread->hThread = hThread;
-        pNewThread->pIOChannel = pIOChannel;
-        pNewThread->pNext = pFirstThread;
-        pFirstThread = pNewThread;
-
-        /* Lets let somebody else create a new object now */
-        LeaveCriticalSection(&Thread_CritSect);
-    }
-}
-
-void statserv_remove(IOCHAN pIOChannel)
-{
-    /* Only one thread can go through this section at a time */
-    EnterCriticalSection(&Thread_CritSect);
-
-    {
-        ThreadList *pCurrentThread = pFirstThread;
-        ThreadList *pNextThread;
-        ThreadList *pPrevThread =NULL;
-
-        /* Step through alll the threads */
-        for (; pCurrentThread != NULL; pCurrentThread = pNextThread)
-        {
-            /* We only need to compare on the IO Channel */
-            if (pCurrentThread->pIOChannel == pIOChannel)
-            {
-                /* We have found the thread we want to delete */
-                /* First of all reset the next pointers */
-                if (pPrevThread == NULL)
-                    pFirstThread = pCurrentThread->pNext;
-                else
-                    pPrevThread->pNext = pCurrentThread->pNext;
-
-                /* All we need todo now is delete the memory */
-                free(pCurrentThread);
-
-                /* No need to look at any more threads */
-                pNextThread = NULL;
-            }
-            else
-            {
-                /* We need to look at another thread */
-                pNextThread = pCurrentThread->pNext;
-                pPrevThread = pCurrentThread;
-            }
-        }
-
-        /* Lets let somebody else remove an object now */
-        LeaveCriticalSection(&Thread_CritSect);
-    }
-}
-
-/* WIN32 statserv_closedown */
-void statserv_closedown()
-{
-    /* Shouldn't do anything if we are not initialized */
-    if (bInitialized)
-    {
-        int iHandles = 0;
-        HANDLE *pThreadHandles = NULL;
-
-        /* We need to stop threads adding and removing while we */
-       /* start the closedown process */
-        EnterCriticalSection(&Thread_CritSect);
-
-        {
-            /* We have exclusive access to the thread stuff now */
-            /* Y didn't i use a semaphore - Oh well never mind */
-            ThreadList *pCurrentThread = pFirstThread;
-
-            /* Before we do anything else, we need to shutdown the listener */
-            if (pListener != NULL)
-                iochan_destroy(pListener);
-
-            for (; pCurrentThread != NULL; pCurrentThread = pCurrentThread->pNext)
-            {
-                /* Just destroy the IOCHAN, that should do the trick */
-                iochan_destroy(pCurrentThread->pIOChannel);
-                closesocket(pCurrentThread->pIOChannel->fd);
-
-                /* Keep a running count of our handles */
-                iHandles++;
-            }
-
-            if (iHandles > 0)
-            {
-                HANDLE *pCurrentHandle ;
-
-                /* Allocate the thread handle array */
-                pThreadHandles = (HANDLE *)malloc(sizeof(HANDLE) * iHandles);
-                pCurrentHandle = pThreadHandles; 
-
-                for (pCurrentThread = pFirstThread;
-                     pCurrentThread != NULL;
-                     pCurrentThread = pCurrentThread->pNext, pCurrentHandle++)
-                {
-                    /* Just the handle */
-                    *pCurrentHandle = pCurrentThread->hThread;
-                }
-            }
-
-            /* We can now leave the critical section */
-            LeaveCriticalSection(&Thread_CritSect);
-        }
-
-        /* Now we can really do something */
-        if (iHandles > 0)
-        {
-            logf (LOG_LOG, "waiting for %d to die", iHandles);
-            /* This will now wait, until all the threads close */
-            WaitForMultipleObjects(iHandles, pThreadHandles, TRUE, INFINITE);
-
-            /* Free the memory we allocated for the handle array */
-            free(pThreadHandles);
-        }
-
-       if (control_block.bend_stop)
-           (*control_block.bend_stop)(&control_block);
-        /* No longer require the critical section, since all threads are dead */
-        DeleteCriticalSection(&Thread_CritSect);
-    }
-}
-
-void __cdecl event_loop_thread (IOCHAN iochan)
-{
-    event_loop (&iochan);
-}
-
-/* WIN32 listener */
-static void listener(IOCHAN h, int event)   
-{
-    COMSTACK line = (COMSTACK) iochan_getdata(h);
-    association *newas;
-    int res;
-    HANDLE newHandle;
-
-    if (event == EVENT_INPUT)
-    {
-        if ((res = cs_listen(line, 0, 0)) < 0)
-        {
-           yaz_log(LOG_FATAL, "cs_listen failed");
-           return;
-        }
-        else if (res == 1)
-            return;
-        yaz_log(LOG_DEBUG, "listen ok");
-        iochan_setevent(h, EVENT_OUTPUT);
-        iochan_setflags(h, EVENT_OUTPUT | EVENT_EXCEPT); /* set up for acpt */
-    }
-    else if (event == EVENT_OUTPUT)
-    {
-       COMSTACK new_line = cs_accept(line);
-       IOCHAN new_chan;
-       char *a = NULL;
-
-       if (!new_line)
-       {
-           yaz_log(LOG_FATAL, "Accept failed.");
-           iochan_setflags(h, EVENT_INPUT | EVENT_EXCEPT);
-           return;
-       }
-       yaz_log(LOG_DEBUG, "Accept ok");
-
-       if (!(new_chan = iochan_create(cs_fileno(new_line), ir_session,
-                                      EVENT_INPUT)))
-       {
-           yaz_log(LOG_FATAL, "Failed to create iochan");
-            iochan_destroy(h);
-            return;
-       }
-
-       yaz_log(LOG_DEBUG, "Creating association");
-       if (!(newas = create_association(new_chan, new_line)))
-       {
-           yaz_log(LOG_FATAL, "Failed to create new assoc.");
-            iochan_destroy(h);
-            return;
-       }
-       newas->cs_get_mask = EVENT_INPUT;
-       newas->cs_put_mask = 0;
-       newas->cs_accept_mask = 0;
-
-       yaz_log(LOG_DEBUG, "Setting timeout %d", control_block.idle_timeout);
-       iochan_setdata(new_chan, newas);
-       iochan_settimeout(new_chan, 60);
-
-       /* Now what we need todo is create a new thread with this iochan as
-          the parameter */
-        newHandle = (HANDLE) _beginthread(event_loop_thread, 0, new_chan);
-        if (newHandle == (HANDLE) -1)
-       {
-           
-           yaz_log(LOG_FATAL|LOG_ERRNO, "Failed to create new thread.");
-            iochan_destroy(h);
-            return;
-       }
-        /* We successfully created the thread, so add it to the list */
-        statserv_add(newHandle, new_chan);
-
-        yaz_log(LOG_DEBUG, "Created new thread, id = %ld iochan %p",(long) newHandle, new_chan);
-        iochan_setflags(h, EVENT_INPUT | EVENT_EXCEPT); /* reset listener */
-    }
-    else
-    {
-       yaz_log(LOG_FATAL, "Bad event on listener.");
-        iochan_destroy(h);
-        return;
-    }
-}
-
-int statserv_must_terminate(void)
-{
-    return 0;
-}
-
-#else /* ! WIN32 */
-
-static int term_flag = 0;
-/* To save having an #ifdef in event_loop we need to
-   define this empty function 
-*/
-int statserv_must_terminate(void)
-{
-    return term_flag;
-}
-
-void statserv_remove(IOCHAN pIOChannel)
-{
-}
-
-void statserv_closedown()
-{
-    IOCHAN p;
-
-    if (control_block.bend_stop)
-        (*control_block.bend_stop)(&control_block);
-    for (p = pListener; p; p = p->next)
-    {
-        iochan_destroy(p);
-    }
-}
-
-void sigterm(int sig)
-{
-    term_flag = 1;
-}
-
-static void *new_session (void *vp);
-static int no_sessions = 0;
-
-/* UNIX listener */
-static void listener(IOCHAN h, int event)
-{
-    COMSTACK line = (COMSTACK) iochan_getdata(h);
-    static int hand[2];
-    static int child = 0;
-    int res;
-
-    if (event == EVENT_INPUT)
-    {
-       if (control_block.dynamic && !child) 
-       {
-           int res;
-
-            ++no_sessions;
-           if (pipe(hand) < 0)
-           {
-               yaz_log(LOG_FATAL|LOG_ERRNO, "pipe");
-                iochan_destroy(h);
-                return;
-           }
-           if ((res = fork()) < 0)
-           {
-               yaz_log(LOG_FATAL|LOG_ERRNO, "fork");
-                iochan_destroy(h);
-                return;
-           }
-           else if (res == 0) /* child */
-           {
-               char nbuf[100];
-               IOCHAN pp;
-
-               close(hand[0]);
-               child = 1;
-               for (pp = pListener; pp; pp = iochan_getnext(pp))
-               {
-                   if (pp != h)
-                   {
-                       COMSTACK l = (COMSTACK)iochan_getdata(pp);
-                       cs_close(l);
-                       iochan_destroy(pp);
-                   }
-               }
-               sprintf(nbuf, "%s(%d)", me, getpid());
-               yaz_log_init(control_block.loglevel, nbuf, 0);
-                /* ensure that bend_stop is not called when each child exits -
-                   only for the main process .. 
-                */
-                control_block.bend_stop = 0;
-           }
-           else /* parent */
-           {
-               close(hand[1]);
-               /* wait for child to take the call */
-               for (;;)
-               {
-                   char dummy[1];
-                   int res;
-                   
-                   if ((res = read(hand[0], dummy, 1)) < 0 &&
-                                    yaz_errno() != EINTR)
-                   {
-                       yaz_log(LOG_FATAL|LOG_ERRNO, "handshake read");
-                        return;
-                   }
-                   else if (res >= 0)
-                       break;
-               }
-               yaz_log(LOG_DEBUG, "P: Child has taken the call");
-               close(hand[0]);
-               return;
-           }
-       }
-       if ((res = cs_listen_check(line, 0, 0, control_block.check_ip,
-                                  control_block.daemon_name)) < 0)
-       {
-           yaz_log(LOG_WARN|LOG_ERRNO, "cs_listen failed");
-           return;
-       }
-       else if (res == 1)
-           return;
-       yaz_log(LOG_DEBUG, "listen ok");
-       iochan_setevent(h, EVENT_OUTPUT);
-       iochan_setflags(h, EVENT_OUTPUT | EVENT_EXCEPT); /* set up for acpt */
-    }
-    /* in dynamic mode, only the child ever comes down here */
-    else if (event == EVENT_OUTPUT)
-    {
-       COMSTACK new_line = cs_accept(line);
-
-       if (!new_line)
-       {
-           yaz_log(LOG_FATAL, "Accept failed.");
-           iochan_setflags(h, EVENT_INPUT | EVENT_EXCEPT); /* reset listener */
-           return;
-       }
-       yaz_log(LOG_DEBUG, "accept ok");
-       if (control_block.dynamic)
-       {
-           IOCHAN pp;
-           /* close our half of the listener socket */
-           for (pp = pListener; pp; pp = iochan_getnext(pp))
-           {
-               COMSTACK l = (COMSTACK)iochan_getdata(pp);
-               cs_close(l);
-               iochan_destroy(pp);
-           }
-           /* release dad */
-           yaz_log(LOG_DEBUG, "Releasing parent");
-           close(hand[1]);
-       }
-       else
-       {
-           iochan_setflags(h, EVENT_INPUT | EVENT_EXCEPT); /* reset listener */
-           ++no_sessions;
-       }
-#if YAZ_POSIX_THREADS
-       if (control_block.threads)
-       {
-           pthread_t child_thread;
-           pthread_create (&child_thread, 0, new_session, new_line);
-           pthread_detach (child_thread);
-       }
-       else
-           new_session(new_line);
-#elif YAZ_GNU_THREADS
-       if (control_block.threads)
-       {
-           pth_attr_t attr;
-           pth_t child_thread;
-
-            attr = pth_attr_new ();
-            pth_attr_set (attr, PTH_ATTR_JOINABLE, FALSE);
-            pth_attr_set (attr, PTH_ATTR_STACK_SIZE, 32*1024);
-            pth_attr_set (attr, PTH_ATTR_NAME, "session");
-            yaz_log (LOG_LOG, "pth_spawn begin");
-           child_thread = pth_spawn (attr, new_session, new_line);
-            yaz_log (LOG_LOG, "pth_spawn finish");
-            pth_attr_destroy (attr);
-       }
-       else
-           new_session(new_line);
-#else
-       new_session(new_line);
-#endif
-    }
-    else if (event == EVENT_TIMEOUT)
-    {
-       yaz_log(LOG_LOG, "Shutting down listener.");
-        iochan_destroy(h);
-    }
-    else
-    {
-       yaz_log(LOG_FATAL, "Bad event on listener.");
-        iochan_destroy(h);
-    }
-}
-
-static void *new_session (void *vp)
-{
-    char *a;
-    association *newas;
-    IOCHAN new_chan;
-    COMSTACK new_line = (COMSTACK) vp;
-
-    unsigned cs_get_mask, cs_accept_mask, mask =  
-       ((new_line->io_pending & CS_WANT_WRITE) ? EVENT_OUTPUT : 0) |
-       ((new_line->io_pending & CS_WANT_READ) ? EVENT_INPUT : 0);
-
-    if (mask)    
-    {
-       cs_accept_mask = mask;  /* accept didn't complete */
-       cs_get_mask = 0;
-    }
-    else
-    {
-       cs_accept_mask = 0;     /* accept completed.  */
-       cs_get_mask = mask = EVENT_INPUT;
-    }
-
-    if (!(new_chan = iochan_create(cs_fileno(new_line), ir_session, mask)))
-    {
-       yaz_log(LOG_FATAL, "Failed to create iochan");
-       return 0;
-    }
-    if (!(newas = create_association(new_chan, new_line)))
-    {
-       yaz_log(LOG_FATAL, "Failed to create new assoc.");
-       return 0;
-    }
-    newas->cs_accept_mask = cs_accept_mask;
-    newas->cs_get_mask = cs_get_mask;
-
-    iochan_setdata(new_chan, newas);
-    iochan_settimeout(new_chan, 60);
-#if 1
-    a = cs_addrstr(new_line);
-#else
-    a = 0;
-#endif
-    yaz_log(LOG_LOG, "Starting session %d from %s",
-        no_sessions, a ? a : "[Unknown]");
-    if (max_sessions && no_sessions == max_sessions)
-        control_block.one_shot = 1;
-    if (control_block.threads)
-    {
-       event_loop(&new_chan);
-    }
-    else
-    {
-       new_chan->next = pListener;
-       pListener = new_chan;
-    }
-    return 0;
-}
-
-/* UNIX */
-#endif
-
-static void inetd_connection(int what)
-{
-    COMSTACK line;
-    IOCHAN chan;
-    association *assoc;
-    char *addr;
-
-    if ((line = cs_createbysocket(0, tcpip_type, 0, what)))
-    {
-        if ((chan = iochan_create(cs_fileno(line), ir_session, EVENT_INPUT)))
-        {
-            if ((assoc = create_association(chan, line)))
-            {
-                iochan_setdata(chan, assoc);
-                iochan_settimeout(chan, 60);
-                addr = cs_addrstr(line);
-                yaz_log(LOG_LOG, "Inetd association from %s",
-                        addr ? addr : "[UNKNOWN]");
-               assoc->cs_get_mask = EVENT_INPUT;
-            }
-            else
-            {
-               yaz_log(LOG_FATAL, "Failed to create association structure");
-            }
-            chan->next = pListener;
-            pListener = chan;
-        }
-        else
-        {
-            yaz_log(LOG_FATAL, "Failed to create iochan");
-        }
-    }
-    else
-    {
-       yaz_log(LOG_ERRNO|LOG_FATAL, "Failed to create comstack on socket 0");
-    }
-}
-
-/*
- * Set up a listening endpoint, and give it to the event-handler.
- */
-static int add_listener(char *where, int what)
-{
-    COMSTACK l;
-    void *ap;
-    IOCHAN lst = NULL;
-    const char *mode;
-
-    if (control_block.dynamic)
-       mode = "dynamic";
-    else if (control_block.threads)
-       mode = "threaded";
-    else
-       mode = "static";
-
-    yaz_log(LOG_LOG, "Adding %s %s listener on %s", mode,
-           what == PROTO_SR ? "SR" : "Z3950", where);
-
-    l = cs_create_host(where, 0, &ap);
-    if (!l)
-    {
-       yaz_log(LOG_FATAL|LOG_ERRNO, "Failed to listen on %s", where);
-       return -1;
-    }
-    if (cs_bind(l, ap, CS_SERVER) < 0)
-    {
-       yaz_log(LOG_FATAL|LOG_ERRNO, "Failed to bind to %s", where);
-       cs_close (l);
-       return -1;
-    }
-    if (!(lst = iochan_create(cs_fileno(l), listener, EVENT_INPUT |
-        EVENT_EXCEPT)))
-    {
-       yaz_log(LOG_FATAL|LOG_ERRNO, "Failed to create IOCHAN-type");
-       cs_close (l);
-       return -1;
-    }
-    iochan_setdata(lst, l);
-
-    /* Ensure our listener chain is setup properly */
-    lst->next = pListener;
-    pListener = lst;
-    return 0; /* OK */
-}
-
-#ifndef WIN32
-/* UNIX only (for windows we don't need to catch the signals) */
-static void catchchld(int num)
-{
-    while (waitpid(-1, 0, WNOHANG) > 0)
-       ;
-    signal(SIGCHLD, catchchld);
-}
-#endif
-
-statserv_options_block *statserv_getcontrol(void)
-{
-    static statserv_options_block cb;
-
-    memcpy(&cb, &control_block, sizeof(cb));
-    return &cb;
-}
-
-void statserv_setcontrol(statserv_options_block *block)
-{
-    memcpy(&control_block, block, sizeof(*block));
-}
-
-static void statserv_reset(void)
-{
-}
-
-int statserv_start(int argc, char **argv)
-{
-    int ret;
-
-#ifdef WIN32
-    /* We need to initialize the thread list */
-    ThreadList_Initialize();
-/* WIN32 */
-#endif
-    
-#ifdef WIN32
-    if ((me = strrchr (argv[0], '\\')))
-       me++;
-    else
-       me = argv[0];
-#else
-    me = argv[0];
-#endif
-    if (control_block.options_func(argc, argv))
-        return(1);
-    
-    if (control_block.bend_start)
-        (*control_block.bend_start)(&control_block);
-#ifdef WIN32
-    yaz_log (LOG_LOG, "Starting server %s", me);
-#else
-/* UNIX */
-    if (control_block.inetd)
-       inetd_connection(control_block.default_proto);
-    else
-    {
-       yaz_log (LOG_LOG, "Starting server %s pid=%d", me, getpid());
-#if 0
-       sigset_t sigs_to_block;
-       
-       sigemptyset(&sigs_to_block);
-       sigaddset (&sigs_to_block, SIGTERM);
-       pthread_sigmask (SIG_BLOCK, &sigs_to_block, 0);
-       /* missing... */
-#endif
-       if (control_block.dynamic)
-           signal(SIGCHLD, catchchld);
-    }
-    signal (SIGPIPE, SIG_IGN);
-    signal (SIGTERM, sigterm);
-    if (*control_block.setuid)
-    {
-       struct passwd *pw;
-       
-       if (!(pw = getpwnam(control_block.setuid)))
-       {
-           yaz_log(LOG_FATAL, "%s: Unknown user", control_block.setuid);
-           return(1);
-       }
-       if (setuid(pw->pw_uid) < 0)
-       {
-           yaz_log(LOG_FATAL|LOG_ERRNO, "setuid");
-           exit(1);
-       }
-    }
-/* UNIX */
-#endif
-    
-    
-    if ((pListener == NULL) && *control_block.default_listen)
-       add_listener(control_block.default_listen,
-                    control_block.default_proto);
-       
-    if (pListener == NULL)
-       ret = 1;
-    else
-    {
-       yaz_log(LOG_LOG, "Entering event loop.");
-        ret = event_loop(&pListener);
-    }
-    return ret;
-}
-
-int check_options(int argc, char **argv)
-{
-    int ret = 0, r;
-    char *arg;
-
-    while ((ret = options("1a:iszSTl:v:u:c:w:t:k:d:D:", argv, argc, &arg)) != -2)
-    {
-       switch (ret)
-       {
-       case 0:
-           if (add_listener(arg, control_block.default_proto))
-                return 1;  /* failed to create listener */
-           break;
-       case '1':        
-           control_block.one_shot = 1;
-           control_block.dynamic = 0;
-           break;
-       case 'z':
-           control_block.default_proto = PROTO_Z3950;
-           break;
-       case 's':
-            fprintf (stderr, "%s: SR protocol no longer supported\n", me);
-            exit (1);
-           break;
-       case 'S':
-           control_block.dynamic = 0;
-           break;
-       case 'T':
-#if YAZ_POSIX_THREADS
-           control_block.dynamic = 0;
-           control_block.threads = 1;
-#elif YAZ_GNU_THREADS
-           control_block.dynamic = 0;
-           control_block.threads = 1;
-#else
-           fprintf(stderr, "%s: Threaded mode not available.\n", me);
-           return 1;
-#endif
-           break;
-       case 'l':
-           strcpy(control_block.logfile, arg ? arg : "");
-           yaz_log_init(control_block.loglevel, me, control_block.logfile);
-           break;
-       case 'v':
-           control_block.loglevel = yaz_log_mask_str(arg);
-           yaz_log_init(control_block.loglevel, me, control_block.logfile);
-           break;
-       case 'a':
-           strcpy(control_block.apdufile, arg ? arg : "");
-           break;
-       case 'u':
-           strcpy(control_block.setuid, arg ? arg : "");
-           break;
-       case 'c':
-           strcpy(control_block.configname, arg ? arg : "");
-           break;
-       case 'd':
-           strcpy(control_block.daemon_name, arg ? arg : "");
-           break;
-       case 't':
-           if (!arg || !(r = atoi(arg)))
-           {
-               fprintf(stderr, "%s: Specify positive timeout for -t.\n", me);
-               return(1);
-           }
-           control_block.idle_timeout = r;
-           break;
-       case  'k':
-           if (!arg || !(r = atoi(arg)))
-           {
-               fprintf(stderr, "%s: Specify positive size for -k.\n", me);
-               return(1);
-           }
-           control_block.maxrecordsize = r * 1024;
-           break;
-       case 'i':
-           control_block.inetd = 1;
-           break;
-       case 'w':
-           if (chdir(arg))
-           {
-               perror(arg);            
-               return 1;
-           }
-           break;
-        case 'D':
-            max_sessions = atoi(arg);
-            break;
-       default:
-           fprintf(stderr, "Usage: %s [ -a <pdufile> -v <loglevel>"
-                   " -l <logfile> -u <user> -c <config> -t <minutes>"
-                   " -k <kilobytes> -d <daemon>"
-                        " -ziST1 -w <directory> <listender-addr>... ]\n", me);
-           return 1;
-        }
-    }
-    return 0;
-}
-
-#ifdef WIN32
-typedef struct _Args
-{
-    char **argv;
-    int argc;
-} Args; 
-
-static Args ArgDetails;
-
-/* name of the executable */
-#define SZAPPNAME            "server"
-
-/* list of service dependencies - "dep1\0dep2\0\0" */
-#define SZDEPENDENCIES       ""
-
-int statserv_main(int argc, char **argv,
-                 bend_initresult *(*bend_init)(bend_initrequest *r),
-                 void (*bend_close)(void *handle))
-{
-    statserv_options_block *cb = statserv_getcontrol();
-    
-    cb->bend_init = bend_init;
-    cb->bend_close = bend_close;
-
-    statserv_setcontrol(cb);
-
-    /* Lets setup the Arg structure */
-    ArgDetails.argc = argc;
-    ArgDetails.argv = argv;
-    
-    /* Now setup the service with the service controller */
-    SetupService(argc, argv, &ArgDetails, SZAPPNAME,
-                cb->service_name, /* internal service name */
-                cb->service_display_name, /* displayed name */
-                SZDEPENDENCIES);
-    return 0;
-}
-
-int StartAppService(void *pHandle, int argc, char **argv)
-{
-    /* Initializes the App */
-    return 1;
-}
-
-void RunAppService(void *pHandle)
-{
-    Args *pArgs = (Args *)pHandle;
-    
-    /* Starts the app running */
-    statserv_start(pArgs->argc, pArgs->argv);
-}
-
-void StopAppService(void *pHandle)
-{
-    /* Stops the app */
-    statserv_closedown();
-    statserv_reset();
-}
-/* WIN32 */
-#else
-/* UNIX */
-int statserv_main(int argc, char **argv,
-                 bend_initresult *(*bend_init)(bend_initrequest *r),
-                 void (*bend_close)(void *handle))
-{
-    int ret;
-    statserv_options_block *cb = statserv_getcontrol();
-    
-    cb->bend_init = bend_init;
-    cb->bend_close = bend_close;
-
-    statserv_setcontrol(cb);
-    ret = statserv_start (argc, argv);
-    statserv_closedown ();
-    statserv_reset();
-    return ret;
-}
-#endif
diff --git a/server/tcpdchk.c b/server/tcpdchk.c
deleted file mode 100644 (file)
index 35c53aa..0000000
+++ /dev/null
@@ -1,97 +0,0 @@
-/*
- * Copyright (c) 1995-2000, Index Data
- * See the file LICENSE for details.
- * Sebastian Hammer, Adam Dickmeiss
- *
- * $Log: tcpdchk.c,v $
- * Revision 1.5  2000-02-28 11:20:06  adam
- * Using autoconf. New definitions: YAZ_BEGIN_CDECL/YAZ_END_CDECL.
- *
- * Revision 1.4  1999/11/30 13:47:12  adam
- * Improved installation. Moved header files to include/yaz.
- *
- * Revision 1.3  1999/08/27 09:40:32  adam
- * Renamed logf function to yaz_log. Removed VC++ project files.
- *
- * Revision 1.2  1999/04/20 09:56:48  adam
- * Added 'name' paramter to encoder/decoder routines (typedef Odr_fun).
- * Modified all encoders/decoders to reflect this change.
- *
- * Revision 1.1  1999/04/16 14:45:55  adam
- * Added interface for tcpd wrapper for access control.
- *
- */
-
-#include <stdio.h>
-#include <string.h>
-
-#include <yaz/yconfig.h>
-#include <yaz/comstack.h>
-
-#if HAVE_TCPD_H
-#include <syslog.h>
-#include <tcpd.h>
-
-
-int allow_severity = LOG_INFO;
-int deny_severity = LOG_WARNING;
-
-#ifdef LOG_DEBUG
-#undef LOG_DEBUG
-#endif
-#ifdef LOG_WARN
-#undef LOG_WARN
-#endif
-
-#endif
-
-#include <yaz/statserv.h>
-#include <yaz/log.h>
-
-int check_ip_tcpd(void *cd, const char *addr, int len, int type)
-{
-    const char *daemon_name = (const char *) cd;
-
-    if (type == AF_INET)
-    {
-       if (daemon_name && *daemon_name)
-       {
-#if HAVE_TCPD_H
-           struct request_info request_info;
-           int i;
-#endif
-           char *host_name = 0, *host_addr = 0;
-           struct hostent *host;
-
-           struct sockaddr_in *addr_in = (struct sockaddr_in *) addr;
-           
-           if ((host = gethostbyaddr((char*)&addr_in->sin_addr,
-                                     sizeof(addr_in->sin_addr),
-                                     AF_INET)))
-               host_name = (char*) host->h_name;
-           host_addr = inet_ntoa(addr_in->sin_addr);
-#if HAVE_TCPD_H
-           if (host_addr)
-               request_init(&request_info, RQ_DAEMON, daemon_name,
-                            RQ_CLIENT_NAME, host_name,
-                            RQ_CLIENT_SIN, addr_in,
-                            RQ_CLIENT_ADDR, host_addr, 0);
-           else
-               request_init(&request_info, RQ_DAEMON, daemon_name,
-                            RQ_CLIENT_SIN, addr_in,
-                            RQ_CLIENT_ADDR, host_addr, 0);
-           i = hosts_access(&request_info);
-           if (!i)
-           {
-               yaz_log (LOG_DEBUG, "access denied from %s",
-                        host_name ? host_name : host_addr);
-               return 1;
-           }
-           yaz_log (LOG_DEBUG, "access granted from %s",
-                    host_name ? host_name : host_addr);
-#endif
-       }
-    }
-    return 0;
-}
-
diff --git a/src/.cvsignore b/src/.cvsignore
new file mode 100644 (file)
index 0000000..f69fe03
--- /dev/null
@@ -0,0 +1,13 @@
+Makefile.in
+Makefile
+.deps
+.libs
+*.o
+*.lo
+*.la
+zes-*.c
+z-*.c
+item-req.c
+ill-core.c
+marc8.c
+cql.c
diff --git a/src/Makefile.am b/src/Makefile.am
new file mode 100644 (file)
index 0000000..9295705
--- /dev/null
@@ -0,0 +1,167 @@
+## Copyright (C) 1994-2003, Index Data
+## All rights reserved.
+## $Id: Makefile.am,v 1.1 2003-10-27 12:21:30 adam Exp $
+
+if ISTHR
+thrlib=libyazthread.la
+endif
+
+if ISSSL
+ssllib=libyazssl.la
+endif
+
+YAZ_VERSION_INFO=2:0:0
+
+lib_LTLIBRARIES = libyaz.la $(thrlib) $(ssllib)
+
+TESTS = $(check_PROGRAMS)
+
+tabdatadir = $(pkgdatadir)/z39.50
+tabdata_DATA=datetime.asn esupdate.asn univres.asn z3950v3.asn z.tcl \
+ esadmin.asn charneg-3.asn mterm2.asn oclcui.asn
+
+illdatadir=$(pkgdatadir)/ill
+illdata_DATA=ill9702.asn item-req.asn ill.tcl
+
+EXTRA_DIST=$(tabdata_DATA) $(illdata_DATA) \
+ charconv.tcl charconv.sgm charconv_cjk.xml 
+
+YAZCOMP = $(top_srcdir)/util/yaz-asncomp
+YAZCOMPLINE = $(YAZCOMP) -d z.tcl -i yaz -I../include $(YCFLAGS)
+
+AM_CPPFLAGS=-I$(top_srcdir)/include $(XML2_CFLAGS)
+AM_YFLAGS=-p cql_
+THREADED_FLAGS = @CFLAGSTHREADS@
+
+# MARC8 conversion is generated from charconv.sgm
+marc8.c: charconv.sgm charconv.tcl
+       cd $(srcdir); ./charconv.tcl -p marc8 -s 50 charconv.sgm -o marc8.c
+
+libyaz_la_SOURCES=version.c options.c log.c marcdisp.c oid.c wrbuf.c \
+  nmemsdup.c xmalloc.c readconf.c tpath.c nmem.c matchstr.c atoin.c \
+  siconv.c marc8.c \
+  odr_bool.c ber_bool.c ber_len.c ber_tag.c odr_util.c \
+  odr_null.c ber_null.c odr_int.c ber_int.c odr_tag.c odr_cons.c \
+  odr_seq.c odr_oct.c ber_oct.c odr_bit.c ber_bit.c odr_oid.c \
+  ber_oid.c odr_use.c odr_choice.c odr_any.c ber_any.c odr.c odr_mem.c \
+  dumpber.c odr_enum.c odr-priv.h \
+  comstack.c tcpip.c waislen.c unix.c \
+  z-accdes1.c z-accform1.c z-acckrb1.c z-core.c \
+  z-diag1.c z-espec1.c z-estask.c z-exp.c z-grs.c z-mterm2.c z-opac.c \
+  z-uifr1.c z-rrf1.c z-rrf2.c z-sum.c z-sutrs.c z-oclcui.c\
+  zes-expi.c zes-exps.c zes-order.c zes-pquery.c zes-psched.c \
+  zes-pset.c zes-update0.c z-date.c z-univ.c zes-update.c zes-admin.c \
+  z-charneg.c \
+  prt-ext.c \
+  ill-core.c item-req.c ill-get.c \
+  zget.c yaz-ccl.c diagbib1.c logrpn.c \
+  otherinfo.c pquery.c sortspec.c z3950oid.c charneg.c \
+  zoom-c.c zoom-opt.c zoom-p.h grs1disp.c zgdu.c soap.c srw.c opacdisp.c \
+  cclfind.c ccltoken.c cclerrms.c cclqual.c cclptree.c \
+  cclqfile.c cclstr.c \
+  cql.y cqlstdio.c cqltransform.c cqlutil.c xcqlutil.c cqlstring.c \
+  cqlstrer.c lexer.h \
+  eventl.c seshigh.c statserv.c requestq.c tcpdchk.c \
+  eventl.h service.c service.h session.h
+libyaz_la_LDFLAGS=-version-info $(YAZ_VERSION_INFO)
+
+libyazthread_la_SOURCES=
+libyazthread_la_LIBADD=thr-nmem.lo thr-statserv.lo thr-eventl.lo
+libyazthread_la_LDFLAGS=-version-info $(YAZ_VERSION_INFO)
+
+libyazssl_la_SOURCES=
+libyazssl_la_LIBADD=ssl-comstack.lo ssl-tcpip.lo
+libyazssl_la_LDFLAGS=-version-info $(YAZ_VERSION_INFO)
+
+# Rules for Z39.50 V3
+$(srcdir)/z-accdes1.c \
+$(srcdir)/z-accform1.c \
+$(srcdir)/z-acckrb1.c \
+$(srcdir)/z-core.c \
+$(srcdir)/z-diag1.c \
+$(srcdir)/z-espec1.c \
+$(srcdir)/z-estask.c \
+$(srcdir)/z-exp.c \
+$(srcdir)/z-grs.c \
+$(srcdir)/z-opac.c \
+$(srcdir)/z-uifr1.c \
+$(srcdir)/z-rrf1.c \
+$(srcdir)/z-rrf2.c \
+$(srcdir)/z-sum.c \
+$(srcdir)/z-sutrs.c \
+$(srcdir)/zes-expi.c \
+$(srcdir)/zes-exps.c \
+$(srcdir)/zes-order.c \
+$(srcdir)/zes-pquery.c \
+$(srcdir)/zes-psched.c \
+$(srcdir)/zes-pset.c \
+$(srcdir)/zes-update0.c \
+$(top_srcdir)/include/z-accdes1.h \
+$(top_srcdir)/include/z-core.h: \
+$(srcdir)/z.tcl $(srcdir)/z3950v3.asn $(YAZCOMP)
+       cd $(srcdir); $(YAZCOMPLINE) z3950v3.asn
+
+# Date extension
+$(srcdir)/z-date.c \
+$(top_srcdir)/include/yaz/z-date.h: $(srcdir)/z.tcl $(srcdir)/datetime.asn $(YAZCOMP)
+       cd $(srcdir); $(YAZCOMPLINE) datetime.asn
+
+# UNIverse extension
+$(srcdir)/z-univ.c \
+$(top_srcdir)/include/yaz/z-univ.h: \
+$(srcdir)/z.tcl $(srcdir)/univres.asn $(YAZCOMP)
+       cd $(srcdir); $(YAZCOMPLINE) univres.asn
+
+# New Update extended service
+$(srcdir)/zes-update.c \
+$(top_srcdir)/include/yaz/zes-update.h: \
+$(srcdir)/z.tcl $(srcdir)/esupdate.asn $(YAZCOMP)
+       cd $(srcdir); $(YAZCOMPLINE) esupdate.asn
+
+# Admin extended service
+$(srcdir)/zes-admin.c \
+$(top_srcdir)/include/yaz/zes-admin.h: \
+$(srcdir)/z.tcl $(srcdir)/esadmin.asn $(YAZCOMP)
+       cd $(srcdir); $(YAZCOMPLINE) esadmin.asn
+
+# Charset negotiation
+$(srcdir)/z-charneg.c: $(srcdir)/z.tcl $(srcdir)/charneg-3.asn
+       cd $(srcdir); $(YAZCOMPLINE) $(YCFLAGS) charneg-3.asn
+
+# UserInfoFormat-multipleSearchTerms-2
+$(srcdir)/z-mterm2.c: $(srcdir)/z.tcl $(srcdir)/mterm2.asn
+       cd $(srcdir); $(YAZCOMPLINE) mterm2.asn
+
+# UserInfoFormat-multipleSearchTerms-2
+$(srcdir)/z-oclcui.c: $(srcdir)/z.tcl $(srcdir)/oclcui.asn
+       cd $(srcdir); $(YAZCOMPLINE) oclcui.asn
+
+# ILL protocol
+$(srcdir)/ill-core.c \
+$(top_srcdir)/include/yaz/ill-core.h: \
+$(srcdir)/ill.tcl $(srcdir)/ill9702.asn $(YAZCOMP)
+       cd $(srcdir); $(YAZCOMP) -d ill.tcl -i yaz -I ../include $(YCFLAGS) ill9702.asn
+
+# Item Request
+$(srcdir)/item-req.c \
+$(top_srcdir)/include/yaz/item-req.h: \
+$(srcdir)/ill.tcl $(srcdir)/item-req.asn $(YAZCOMP)
+       cd $(srcdir); $(YAZCOMP) -d ill.tcl -i yaz -I ../include $(YCFLAGS) item-req.asn
+
+# Threaded versions of objects.
+thr-nmem.lo: nmem.c
+       $(LTCOMPILE) $(THREADED_FLAGS) -c $(srcdir)/nmem.c -o thr-nmem.lo
+
+thr-statserv.lo: statserv.c
+       $(LTCOMPILE) $(THREADED_FLAGS) -c $(srcdir)/statserv.c -o thr-statserv.lo
+thr-eventl.lo: eventl.c
+       $(LTCOMPILE) $(THREADED_FLAGS) -c $(srcdir)/eventl.c -o thr-eventl.lo
+
+# SSL versions of objects.
+ssl-comstack.lo: comstack.c
+       $(LTCOMPILE) $(SSL_FLAGS) -c $(srcdir)/comstack.c -o ssl-comstack.lo
+
+ssl-tcpip.lo: tcpip.c
+       $(LTCOMPILE) $(SSL_FLAGS) -c $(srcdir)/tcpip.c -o ssl-tcpip.lo
+
+
diff --git a/src/atoin.c b/src/atoin.c
new file mode 100644 (file)
index 0000000..1bc5947
--- /dev/null
@@ -0,0 +1,28 @@
+/*
+ * Copyright (c) 1997-2003, Index Data
+ * See the file LICENSE for details.
+ *
+ * $Id: atoin.c,v 1.1 2003-10-27 12:21:30 adam Exp $
+ */
+
+#if HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include <string.h>
+#include <ctype.h>
+#include <yaz/yaz-util.h>
+
+int atoi_n (const char *buf, int len)
+{
+    int val = 0;
+
+    while (--len >= 0)
+    {
+        if (isdigit (*buf))
+            val = val*10 + (*buf - '0');
+       buf++;
+    }
+    return val;
+}
+
diff --git a/src/ber_any.c b/src/ber_any.c
new file mode 100644 (file)
index 0000000..c28ebb5
--- /dev/null
@@ -0,0 +1,152 @@
+/*
+ * Copyright (c) 1995-2003, Index Data
+ * See the file LICENSE for details.
+ *
+ * $Id: ber_any.c,v 1.1 2003-10-27 12:21:30 adam Exp $
+ */
+#if HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include <assert.h>
+#include "odr-priv.h"
+
+int ber_any(ODR o, Odr_any **p)
+{
+    int res;
+    
+    switch (o->direction)
+    {
+    case ODR_DECODE:
+        if ((res = completeBER(o->bp, odr_max(o))) <= 0)        /* FIX THIS */
+        {
+            odr_seterror(o, OPROTO, 2);
+            return 0;
+        }
+        (*p)->buf = (unsigned char *)odr_malloc(o, res);
+        memcpy((*p)->buf, o->bp, res);
+        (*p)->len = (*p)->size = res;
+        o->bp += res;
+        return 1;
+    case ODR_ENCODE:
+        if (odr_write(o, (*p)->buf, (*p)->len) < 0)
+            return 0;
+        return 1;
+    default: odr_seterror(o, OOTHER, 3); return 0;
+    }
+}
+
+#define BER_ANY_DEBUG 0
+
+/*
+ * Return length of BER-package or 0.
+ */
+int completeBER_n(const unsigned char *buf, int len, int level)
+{
+    int res, ll, zclass, tag, cons;
+    const unsigned char *b = buf;
+    int bad = 0;
+    
+    if (len > 5000000 || level > 1000)
+    {
+       bad = 1;
+#if BER_ANY_DEBUG
+       yaz_log(LOG_LOG, "completeBER lev=%d len=%d", level, len);
+#endif
+       if (level > 1000)
+           return -2;
+    }
+    if (len < 2)
+       return 0;
+    if (!buf[0] && !buf[1])
+       return -2;
+    if ((res = ber_dectag(b, &zclass, &tag, &cons, len)) <= 0)
+       return 0;
+#if 0
+/* removed, since ber_dectag never reads that far .. */
+    if (res > len)
+       return 0;
+#endif
+    b += res;
+    len -= res;
+    assert (len >= 0);
+    res = ber_declen(b, &ll, len);
+    if (res == -2)
+    {
+#if BER_ANY_DEBUG
+       if (bad)
+           yaz_log(LOG_LOG, "<<<<<<<<< return1 lev=%d res=%d", level, res);
+#endif
+       return -1;  /* error */
+    }
+    if (res == -1)  
+    {
+#if BER_ANY_DEBUG
+       if (bad)
+           yaz_log(LOG_LOG, "<<<<<<<<< return3 lev=%d res=-1", level);
+#endif
+       return 0;    /* incomplete length */
+    }
+    if (ll > 5000000)
+    {
+#if BER_ANY_DEBUG
+       if (bad)
+           yaz_log(LOG_LOG, "<<<<<<<<< return2 lev=%d len=%d res=%d ll=%d",
+                   level, len, res, ll);
+#endif
+       return -1;  /* error */
+    }
+#if 0
+/* no longer necessary, since ber_declen never reads that far (returns -1) */
+    if (res > len)
+    {
+       if (bad)
+           yaz_log(LOG_LOG, "<<<<<<<<< return4 lev=%d res=%d len=%d",
+                   level, res, len);
+       return 0;
+    }
+#endif
+    b += res;
+    len -= res;
+    if (ll >= 0)
+    {   /* definite length */
+#if BER_ANY_DEBUG
+       if (bad && len < ll)
+           yaz_log(LOG_LOG, "<<<<<<<<< return5 lev=%d len=%d ll=%d",
+                   level, len, ll);
+#endif
+       return (len >= ll ? ll + (b-buf) : 0);
+    }
+    /* indefinite length */
+    if (!cons)
+    {   /* if primitive, it's an error */
+#if BER_ANY_DEBUG
+       yaz_log(LOG_LOG, "<<<<<<<<< return6 lev=%d ll=%d len=%d res=%d",
+               level, ll, len, res);
+#endif
+       return -1;   /* error */
+    }
+    /* constructed - cycle through children */
+    while (len >= 2)
+    {
+       if (b[0] == 0 && b[1] == 0)
+           break;
+       if (!(res = completeBER_n(b, len, level+1)))
+           return 0;
+       if (res == -1)
+           return -1;
+       b += res;
+       len -= res;
+    }
+    if (len < 2)
+       return 0;
+    return (b - buf) + 2;
+}
+
+int completeBER(const unsigned char *buf, int len)
+{
+    int res = completeBER_n(buf, len, 0);
+    if (res < 0)
+       return len;
+    return res;
+}
diff --git a/src/ber_bit.c b/src/ber_bit.c
new file mode 100644 (file)
index 0000000..38260f0
--- /dev/null
@@ -0,0 +1,77 @@
+/*
+ * Copyright (c) 1995-2003, Index Data
+ * See the file LICENSE for details.
+ * Sebastian Hammer, Adam Dickmeiss
+ *
+ * $Id: ber_bit.c,v 1.1 2003-10-27 12:21:30 adam Exp $
+ *
+ */
+#if HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include "odr-priv.h"
+
+int ber_bitstring(ODR o, Odr_bitmask *p, int cons)
+{
+    int res, len;
+    const unsigned char *base;
+
+    switch (o->direction)
+    {
+    case ODR_DECODE:
+        if ((res = ber_declen(o->bp, &len, odr_max(o))) < 0)
+        {
+            odr_seterror(o, OPROTO, 4);
+            return 0;
+        }
+        o->bp += res;
+        if (cons)       /* fetch component strings */
+        {
+            base = o->bp;
+            while (odp_more_chunks(o, base, len))
+                if (!odr_bitstring(o, &p, 0, 0))
+                    return 0;
+            return 1;
+        }
+        /* primitive bitstring */
+        if (len < 0)
+        {
+            odr_seterror(o, OOTHER, 5);
+            return 0;
+        }
+        if (len == 0)
+            return 1;
+        if (len - 1 > ODR_BITMASK_SIZE)
+        {
+            odr_seterror(o, OOTHER, 6);
+            return 0;
+        }
+        if (len > odr_max(o))
+        {
+            odr_seterror(o, OOTHER, 7);
+            return 0;
+        }
+        o->bp++;      /* silently ignore the unused-bits field */
+        len--;
+        memcpy(p->bits + p->top + 1, o->bp, len);
+        p->top += len;
+        o->bp += len;
+        return 1;
+    case ODR_ENCODE:
+        if ((res = ber_enclen(o, p->top + 2, 5, 0)) < 0)
+            return 0;
+        if (odr_putc(o, 0) < 0)    /* no unused bits here */
+            return 0;
+        if (p->top < 0)
+            return 1;
+        if (odr_write(o, p->bits, p->top + 1) < 0)
+            return 0;
+        return 1;
+    case ODR_PRINT:
+        return 1;
+    default: 
+        odr_seterror(o, OOTHER, 8);
+        return 0;
+    }
+}
diff --git a/src/ber_bool.c b/src/ber_bool.c
new file mode 100644 (file)
index 0000000..2e4cca3
--- /dev/null
@@ -0,0 +1,53 @@
+/*
+ * Copyright (c) 1995-2003, Index Data
+ * See the file LICENSE for details.
+ * Sebastian Hammer, Adam Dickmeiss
+ *
+ * $Id: ber_bool.c,v 1.1 2003-10-27 12:21:30 adam Exp $
+ */
+
+#if HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include <stdio.h>
+#include "odr-priv.h"
+
+int ber_boolean(ODR o, int *val)
+{
+    int res, len;
+
+    switch (o->direction)
+    {
+    case ODR_ENCODE:
+        if (ber_enclen(o, 1, 1, 1) != 1)
+            return 0;
+        if (odr_putc(o, *val) < 0)
+            return 0;
+#ifdef ODR_DEBUG
+        fprintf(stderr, "[val=%d]\n", *val);
+#endif
+        return 1;
+    case ODR_DECODE:
+        if ((res = ber_declen(o->bp, &len, odr_max(o))) < 0)
+        {
+            odr_seterror(o, OPROTO, 9);
+            return 0;
+        }
+        o->bp+= res;
+        if (len != 1 || odr_max(o) < len)
+        {
+            odr_seterror(o, OPROTO, 10);
+            return 0;
+        }
+        *val = *o->bp;
+        o->bp++;
+#ifdef ODR_DEBUG
+        fprintf(stderr, "[val=%d]\n", *val);
+#endif
+        return 1;
+    case ODR_PRINT:
+        return 1;
+    default: odr_seterror(o, OOTHER, 11); return 0;
+    }
+}
diff --git a/src/ber_int.c b/src/ber_int.c
new file mode 100644 (file)
index 0000000..7b1aba8
--- /dev/null
@@ -0,0 +1,105 @@
+/*
+ * Copyright (c) 1995-2003, Index Data
+ * See the file LICENSE for details.
+ * Sebastian Hammer, Adam Dickmeiss
+ *
+ * $Id: ber_int.c,v 1.1 2003-10-27 12:21:30 adam Exp $
+ */
+#if HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include <string.h>
+
+#ifdef WIN32
+#include <winsock.h>
+#else
+#include <sys/types.h>
+#include <netinet/in.h>
+#endif
+
+#include "odr-priv.h"
+
+static int ber_encinteger(ODR o, int val);
+static int ber_decinteger(const unsigned char *buf, int *val, int max);
+
+int ber_integer(ODR o, int *val)
+{
+    int res;
+
+    switch (o->direction)
+    {
+        case ODR_DECODE:
+            if ((res = ber_decinteger(o->bp, val, odr_max(o))) <= 0)
+            {
+                odr_seterror(o, OPROTO, 50);
+                return 0;
+            }
+            o->bp += res;
+            return 1;
+        case ODR_ENCODE:
+            if ((res = ber_encinteger(o, *val)) < 0)
+                return 0;
+            return 1;
+        case ODR_PRINT: return 1;
+        default: odr_seterror(o, OOTHER, 51);  return 0;
+    }
+}
+
+/*
+ * Returns: number of bytes written or -1 for error (out of bounds).
+ */
+int ber_encinteger(ODR o, int val)
+{
+    int a, len;
+    union { int i; unsigned char c[sizeof(int)]; } tmp;
+
+    tmp.i = htonl(val);   /* ensure that that we're big-endian */
+    for (a = 0; a < (int) sizeof(int) - 1; a++)  /* skip superfluous octets */
+        if (!((tmp.c[a] == 0 && !(tmp.c[a+1] & 0X80)) ||
+            (tmp.c[a] == 0XFF && (tmp.c[a+1] & 0X80))))
+            break;
+    len = sizeof(int) - a;
+    if (ber_enclen(o, len, 1, 1) != 1)
+        return -1;
+    if (odr_write(o, (unsigned char*) tmp.c + a, len) < 0)
+        return -1;
+#ifdef ODR_DEBUG
+    fprintf(stderr, "[val=%d]", val);
+#endif
+    return 0;
+}
+
+/*
+ * Returns: Number of bytes read or 0 if no match, -1 if error.
+ */
+int ber_decinteger(const unsigned char *buf, int *val, int max)
+{
+    const unsigned char *b = buf;
+    unsigned char fill;
+    int res, len, remains;
+    union { int i; unsigned char c[sizeof(int)]; } tmp;
+
+    if ((res = ber_declen(b, &len, max)) < 0)
+        return -1;
+    if (len+res > max || len < 0) /* out of bounds or indefinite encoding */
+        return -1;  
+    if (len > (int) sizeof(int))  /* let's be reasonable, here */
+        return -1;
+    b+= res;
+
+    remains = sizeof(int) - len;
+    memcpy(tmp.c + remains, b, len);
+    if (*b & 0X80)
+        fill = 0XFF;
+    else
+        fill = 0X00;
+    memset(tmp.c, fill, remains);
+    *val = ntohl(tmp.i);
+
+    b += len;
+#ifdef ODR_DEBUG
+    fprintf(stderr, "[val=%d]", *val);
+#endif
+    return b - buf;
+}
diff --git a/src/ber_len.c b/src/ber_len.c
new file mode 100644 (file)
index 0000000..bb4c08a
--- /dev/null
@@ -0,0 +1,133 @@
+/*
+ * Copyright (C) 1995-2003, Index Data.
+ * See the file LICENSE for details.
+ * Sebastian Hammer, Adam Dickmeiss
+ *
+ * $Id: ber_len.c,v 1.1 2003-10-27 12:21:30 adam Exp $
+ */
+#if HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include <stdio.h>
+#include "odr-priv.h"
+
+/*
+ * Encode BER length octets. If exact, lenlen is the exact desired
+ * encoding size, else, lenlen is the max available space. Len < 0 =
+ * Indefinite encoding.
+ * Returns: >0   success, number of bytes encoded.
+ * Returns: =0   success, indefinite start-marker set. 1 byte encoded.
+ * Returns: -1   failure, out of bounds.
+ */
+int ber_enclen(ODR o, int len, int lenlen, int exact)
+{
+    unsigned char octs[sizeof(int)];
+    int n = 0;
+    int lenpos, end;
+
+#ifdef ODR_DEBUG
+    fprintf(stderr, "[len=%d]", len);
+#endif
+    if (len < 0)      /* Indefinite */
+    {
+       if (odr_putc(o, 0x80) < 0)
+           return 0;
+#ifdef ODR_DEBUG
+       fprintf(stderr, "[indefinite]");
+#endif
+       return 0;
+    }
+    if (len <= 127 && (lenlen == 1 || !exact)) /* definite short form */
+    {
+       if (odr_putc(o, (unsigned char) len) < 0)
+           return 0;
+       return 1;
+    }
+    if (lenlen == 1)
+    {
+       if (odr_putc(o, 0x80) < 0)
+           return 0;
+       return 0;
+    }
+    /* definite long form */
+    do
+    {
+       octs[n++] = len;
+       len >>= 8;
+    }
+    while (len);
+    if (n >= lenlen)
+       return -1;
+    lenpos = odr_tell(o); /* remember length-of-length position */
+    if (odr_putc(o, 0) < 0)  /* dummy */
+       return 0;
+    if (exact)
+       while (n < --lenlen)        /* pad length octets */
+           if (odr_putc(o, 0) < 0)
+               return 0;
+    while (n--)
+       if (odr_putc(o, octs[n]) < 0)
+           return 0;
+    /* set length of length */
+    end = odr_tell(o);
+    odr_seek(o, ODR_S_SET, lenpos);
+    if (odr_putc(o, (end - lenpos - 1) | 0X80) < 0)
+       return 0;
+    odr_seek(o, ODR_S_END, 0);
+    return odr_tell(o) - lenpos;
+}
+
+/*
+ * Decode BER length octets. Returns 
+ *  > 0  : number of bytes read 
+ *   -1  : not enough room to read bytes within max bytes
+ *   -2  : other error
+ *
+ * After return:
+ * len = -1   indefinite length.
+ * len >= 0   definite length
+ */
+int ber_declen(const unsigned char *buf, int *len, int max)
+{
+    const unsigned char *b = buf;
+    int n;
+
+    if (max < 1)
+        return -1;
+    if (*b == 0X80)     /* Indefinite */
+    {
+       *len = -1;
+#ifdef ODR_DEBUG
+       fprintf(stderr, "[len=%d]", *len);
+#endif
+       return 1;
+    }
+    if (!(*b & 0X80))   /* Definite short form */
+    {
+       *len = (int) *b;
+#ifdef ODR_DEBUG
+       fprintf(stderr, "[len=%d]", *len);
+#endif
+       return 1;
+    }
+    if (*b == 0XFF)     /* reserved value */
+       return -2;
+    /* indefinite long form */ 
+    n = *b & 0X7F;
+    if (n >= max)
+        return -1;
+    *len = 0;
+    b++;
+    while (--n >= 0)
+    {
+       *len <<= 8;
+       *len |= *(b++);
+    }
+    if (*len < 0)
+        return -2;
+#ifdef ODR_DEBUG
+    fprintf(stderr, "[len=%d]", *len);
+#endif
+    return (b - buf);
+}
diff --git a/src/ber_null.c b/src/ber_null.c
new file mode 100644 (file)
index 0000000..b0db7f3
--- /dev/null
@@ -0,0 +1,46 @@
+/*
+ * Copyright (c) 1995-2003, Index Data
+ * See the file LICENSE for details.
+ * Sebastian Hammer, Adam Dickmeiss
+ *
+ * $Id: ber_null.c,v 1.1 2003-10-27 12:21:30 adam Exp $
+ */
+#if HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include "odr-priv.h"
+
+/*
+ * BER-en/decoder for NULL type.
+ */
+int ber_null(ODR o)
+{
+    switch (o->direction)
+    {
+    case ODR_ENCODE:
+        if (odr_putc(o, 0X00) < 0)
+            return 0;
+#ifdef ODR_DEBUG
+        fprintf(stderr, "[NULL]\n");
+#endif
+        return 1;
+    case ODR_DECODE:
+        if (odr_max(o) < 1)
+        {
+            odr_seterror(o, OPROTO, 39);
+            return 0;
+        }
+        if (*(o->bp++) != 0X00)
+        {
+            odr_seterror(o, OPROTO, 12);
+            return 0;
+        }
+#ifdef ODR_DEBUG
+        fprintf(stderr, "[NULL]\n");
+#endif
+        return 1;
+    case ODR_PRINT: return 1;
+    default: odr_seterror(o, OOTHER, 13); return 0;
+    }
+}
diff --git a/src/ber_oct.c b/src/ber_oct.c
new file mode 100644 (file)
index 0000000..133a64b
--- /dev/null
@@ -0,0 +1,75 @@
+/*
+ * Copyright (c) 1995-2003, Index Data
+ * See the file LICENSE for details.
+ * Sebastian Hammer, Adam Dickmeiss
+ *
+ * $Id: ber_oct.c,v 1.1 2003-10-27 12:21:30 adam Exp $
+ */
+#if HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include "odr-priv.h"
+
+int ber_octetstring(ODR o, Odr_oct *p, int cons)
+{
+    int res, len;
+    const unsigned char *base;
+    unsigned char *c;
+
+    switch (o->direction)
+    {
+       case ODR_DECODE:
+           if ((res = ber_declen(o->bp, &len, odr_max(o))) < 0)
+           {
+                odr_seterror(o, OPROTO, 14);
+               return 0;
+           }
+           o->bp += res;
+           if (cons)       /* fetch component strings */
+           {
+               base = o->bp;
+               while (odp_more_chunks(o, base, len))
+                   if (!odr_octetstring(o, &p, 0, 0))
+                       return 0;
+               return 1;
+           }
+           /* primitive octetstring */
+           if (len < 0)
+           {
+                odr_seterror(o, OOTHER, 15);
+               return 0;
+           }
+            if (len > odr_max(o))
+            {
+                odr_seterror(o, OOTHER, 16);
+                return 0;
+            }
+           if (len + 1 > p->size - p->len)
+           {
+               c = (unsigned char *)odr_malloc(o, p->size += len + 1);
+               if (p->len)
+                   memcpy(c, p->buf, p->len);
+               p->buf = c;
+           }
+           if (len)
+               memcpy(p->buf + p->len, o->bp, len);
+           p->len += len;
+           o->bp += len;
+           /* the final null is really not part of the buffer, but */
+           /* it helps somes applications that assumes C strings */
+           if (len)
+               p->buf[p->len] = '\0';
+           return 1;
+       case ODR_ENCODE:
+           if ((res = ber_enclen(o, p->len, 5, 0)) < 0)
+               return 0;
+           if (p->len == 0)
+               return 1;
+           if (odr_write(o, p->buf, p->len) < 0)
+               return 0;
+           return 1;
+       case ODR_PRINT: return 1;
+       default: odr_seterror(o, OOTHER, 17); return 0;
+    }
+}
diff --git a/src/ber_oid.c b/src/ber_oid.c
new file mode 100644 (file)
index 0000000..276b49b
--- /dev/null
@@ -0,0 +1,113 @@
+/*
+ * Copyright (c) 1995-2003, Index Data
+ * See the file LICENSE for details.
+ * Sebastian Hammer, Adam Dickmeiss
+ *
+ * $Id: ber_oid.c,v 1.1 2003-10-27 12:21:30 adam Exp $
+ */
+#if HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include "odr-priv.h"
+
+int ber_oidc(ODR o, Odr_oid *p)
+{
+    int len, lenp, end;
+    int pos, n, res, id;
+    unsigned char octs[8];
+
+    switch (o->direction)
+    {
+    case ODR_DECODE:
+        if ((res = ber_declen(o->bp, &len, odr_max(o))) < 1)
+        {
+            odr_seterror(o, OPROTO, 18);
+            return 0;
+        }
+        if (len < 0)
+        {
+            odr_seterror(o, OPROTO, 19);
+            return 0;
+        }
+        o->bp += res;
+        if (len == 0)
+        {
+            *p = -1;
+            return 1;
+        }
+        if (len > odr_max(o))
+        {
+            odr_seterror(o, OPROTO, 20);
+            return 0;
+        }
+        p[0] = *o->bp / 40;
+        if (p[0] > 2)
+            p[0] = 2;
+        p[1] = *o->bp - p[0] * 40;
+        o->bp++;
+        pos = 2;
+        len--;
+        while (len)
+        {
+            p[pos] = 0;
+            do
+            {
+                if (!len)
+                {
+                    odr_seterror(o, OPROTO, 21);
+                    return 0;
+                }
+                p[pos] <<= 7;
+                p[pos] |= *o->bp & 0X7F;
+                len--;
+            }
+            while (*(o->bp++) & 0X80);
+            pos++;
+        }
+        p[pos] = -1;
+        return 1;
+    case ODR_ENCODE:
+        /* we'll allow ourselves the quiet luxury of only doing encodings
+           shorter than 127 */
+        lenp = odr_tell(o);
+        if (odr_putc(o, 0) < 0)   /* dummy */
+            return 0;
+        if (p[0] < 0 && p[1] <= 0)
+        {
+            odr_seterror(o, ODATA, 23);
+            return 0;
+        }
+        for (pos = 1; p[pos] >= 0; pos++)
+        {
+            id = pos > 1 ? p[pos] : p[0] * 40 + p[1];
+            n = 0;
+            do
+            {
+                octs[n++] = id & 0X7F;
+                id >>= 7;
+            }
+            while (id);
+            while (n--)
+            {
+                unsigned char p;
+
+                p = octs[n] | ((n > 0) << 7);
+                if (odr_putc(o, p) < 0)
+                    return 0;
+            }
+        }
+        end = odr_tell(o);
+        odr_seek(o, ODR_S_SET, lenp);
+        if (ber_enclen(o, (end - lenp) - 1, 1, 1) != 1)
+        {
+            odr_seterror(o, OOTHER, 52);
+            return 0;
+        }
+        odr_seek(o, ODR_S_END, 0);
+        return 1;
+    default: 
+        odr_seterror(o, OOTHER, 22);
+        return 0;
+    }
+}
diff --git a/src/ber_tag.c b/src/ber_tag.c
new file mode 100644 (file)
index 0000000..19c412f
--- /dev/null
@@ -0,0 +1,186 @@
+/*
+ * Copyright (c) 1995-2003, Index Data
+ * See the file LICENSE for details.
+ * Sebastian Hammer, Adam Dickmeiss
+ *
+ * $Id: ber_tag.c,v 1.1 2003-10-27 12:21:30 adam Exp $
+ */
+#if HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include <stdio.h>
+#include "odr-priv.h"
+
+/* ber_tag
+ * On encoding:
+ *     if  p: write tag. return 1 (success) or -1 (error).
+ *     if !p: return 0.
+ * On decoding:
+ *      if tag && zclass match up, advance pointer and return 1. set cons.
+ *      else leave pointer unchanged. Return 0.
+ *
+ * Should perhaps be odr_tag?
+ */
+int ber_tag(ODR o, void *p, int zclass, int tag, int *constructed, int opt,
+            const char *name)
+{
+    struct Odr_ber_tag *odr_ber_tag = &o->op->odr_ber_tag;
+    int rd;
+    char **pp = (char **)p;
+
+    if (o->direction == ODR_DECODE)
+       *pp = 0;
+    o->t_class = -1;
+    if (o->op->stackp < 0)
+    {
+       odr_seek(o, ODR_S_SET, 0);
+        o->top = 0;
+       o->bp = o->buf;
+        odr_ber_tag->lclass = -1;
+    }
+    switch (o->direction)
+    {
+    case ODR_ENCODE:
+        if (!*pp)
+        {
+            if (!opt)
+            {
+                odr_seterror(o, OREQUIRED, 24);
+                odr_setelement (o, name);
+            }
+            return 0;
+        }
+        if ((rd = ber_enctag(o, zclass, tag, *constructed)) < 0)
+            return -1;
+#ifdef ODR_DEBUG
+        fprintf(stderr, "\n[class=%d,tag=%d,cons=%d,stackp=%d]", zclass, tag,
+                *constructed, o->stackp);
+#endif
+        return 1;
+        
+    case ODR_DECODE:
+        if (o->op->stackp > -1 && !odr_constructed_more(o))
+        {
+            if (!opt)
+            {
+                odr_seterror(o, OREQUIRED, 25);
+                odr_setelement(o, name);
+            }
+            return 0;
+        }
+        if (odr_ber_tag->lclass < 0)
+        {
+            if ((odr_ber_tag->br =
+                 ber_dectag(o->bp, &odr_ber_tag->lclass,
+                            &odr_ber_tag->ltag, &odr_ber_tag->lcons,
+                            odr_max(o))) <= 0)
+            {
+                odr_seterror(o, OPROTO, 26);
+                odr_setelement(o, name);
+                return 0;
+            }
+#ifdef ODR_DEBUG
+            fprintf(stderr,
+                    "\n[class=%d,tag=%d,cons=%d,stackp=%d]",
+                    odr_ber_tag->lclass, odr_ber_tag->ltag,
+                    odr_ber_tag->lcons, o->stackp);
+#endif
+        }
+        if (zclass == odr_ber_tag->lclass && tag == odr_ber_tag->ltag)
+        {
+            o->bp += odr_ber_tag->br;
+            *constructed = odr_ber_tag->lcons;
+            odr_ber_tag->lclass = -1;
+            return 1;
+        }
+        else
+        {
+            if (!opt)
+            {
+                odr_seterror(o, OREQUIRED, 27);
+                odr_setelement(o, name);
+            }
+            return 0;
+        }
+    case ODR_PRINT:
+        if (!*pp && !opt)
+        {
+            odr_seterror(o,OREQUIRED, 28);
+            odr_setelement(o, name);
+        }
+        return *pp != 0;
+    default:
+        odr_seterror(o, OOTHER, 29);
+        odr_setelement(o, name);
+        return 0;
+    }
+}
+
+/* ber_enctag
+ * BER-encode a zclass/tag/constructed package (identifier octets). Return
+ * number of bytes encoded, or -1 if out of bounds.
+ */
+int ber_enctag(ODR o, int zclass, int tag, int constructed)
+{
+    int cons = (constructed ? 1 : 0), n = 0;
+    unsigned char octs[sizeof(int)], b;
+
+    b = (zclass << 6) & 0XC0;
+    b |= (cons << 5) & 0X20;
+    if (tag <= 30)
+    {
+       b |= tag & 0X1F;
+       if (odr_putc(o, b) < 0)
+           return -1;
+       return 1;
+    }
+    else
+    {
+       b |= 0X1F;
+       if (odr_putc(o, b) < 0)
+           return -1;
+       do
+       {
+           octs[n++] = tag & 0X7F;
+           tag >>= 7;
+       }
+       while (tag);
+       while (n--)
+       {
+           unsigned char oo;
+
+           oo = octs[n] | ((n > 0) << 7);
+           if (odr_putc(o, oo) < 0)
+               return -1;
+       }
+       return 0;
+    }
+}
+
+/* ber_dectag
+ * Decode BER identifier octets. Return number of bytes read or -1 for error.
+ */
+int ber_dectag(const unsigned char *b, int *zclass, int *tag,
+               int *constructed, int max)
+{
+    int l = 1;
+
+    if (l > max)
+        return -1;
+
+    *zclass = *b >> 6;
+    *constructed = (*b >> 5) & 0X01;
+    if ((*tag = *b & 0x1F) <= 30)
+       return 1;
+    *tag = 0;
+    do
+    {
+        if (l >= max)
+            return -1;
+       *tag <<= 7;
+       *tag |= b[l] & 0X7F;
+    }
+    while (b[l++] & 0X80);
+    return l;
+}
diff --git a/src/cclerrms.c b/src/cclerrms.c
new file mode 100644 (file)
index 0000000..53d4ac5
--- /dev/null
@@ -0,0 +1,100 @@
+/*
+ * Copyright (c) 1995, the EUROPAGATE consortium (see below).
+ *
+ * The EUROPAGATE consortium members are:
+ *
+ *    University College Dublin
+ *    Danmarks Teknologiske Videnscenter
+ *    An Chomhairle Leabharlanna
+ *    Consejo Superior de Investigaciones Cientificas
+ *
+ * Permission to use, copy, modify, distribute, and sell this software and
+ * its documentation, in whole or in part, for any purpose, is hereby granted,
+ * provided that:
+ *
+ * 1. This copyright and permission notice appear in all copies of the
+ * software and its documentation. Notices of copyright or attribution
+ * which appear at the beginning of any file must remain unchanged.
+ *
+ * 2. The names of EUROPAGATE or the project partners may not be used to
+ * endorse or promote products derived from this software without specific
+ * prior written permission.
+ *
+ * 3. Users of this software (implementors and gateway operators) agree to
+ * inform the EUROPAGATE consortium of their use of the software. This
+ * information will be used to evaluate the EUROPAGATE project and the
+ * software, and to plan further developments. The consortium may use
+ * the information in later publications.
+ * 
+ * 4. Users of this software agree to make their best efforts, when
+ * documenting their use of the software, to acknowledge the EUROPAGATE
+ * consortium, and the role played by the software in their work.
+ *
+ * THIS SOFTWARE IS PROVIDED "AS IS" AND WITHOUT WARRANTY OF ANY KIND,
+ * EXPRESS, IMPLIED, OR OTHERWISE, INCLUDING WITHOUT LIMITATION, ANY
+ * WARRANTY OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.
+ * IN NO EVENT SHALL THE EUROPAGATE CONSORTIUM OR ITS MEMBERS BE LIABLE
+ * FOR ANY SPECIAL, INCIDENTAL, INDIRECT OR CONSEQUENTIAL DAMAGES OF
+ * ANY KIND, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA
+ * OR PROFITS, WHETHER OR NOT ADVISED OF THE POSSIBILITY OF DAMAGE, AND
+ * ON ANY THEORY OF LIABILITY, ARISING OUT OF OR IN CONNECTION WITH THE
+ * USE OR PERFORMANCE OF THIS SOFTWARE.
+ *
+ */
+/*
+ * Europagate, 1995
+ *
+ * $Id: cclerrms.c,v 1.1 2003-10-27 12:21:30 adam Exp $
+ *
+ * Old Europagate Log:
+ *
+ * Revision 1.8  1995/05/16  09:39:25  adam
+ * LICENSE.
+ *
+ * Revision 1.7  1995/04/17  09:31:40  adam
+ * Improved handling of qualifiers. Aliases or reserved words.
+ *
+ * Revision 1.6  1995/02/23  08:31:59  adam
+ * Changed header.
+ *
+ * Revision 1.4  1995/02/14  16:20:54  adam
+ * Qualifiers are read from a file now.
+ *
+ * Revision 1.3  1995/02/14  10:25:56  adam
+ * The constructions 'qualifier rel term ...' implemented.
+ *
+ * Revision 1.2  1995/02/13  15:15:06  adam
+ * Added handling of qualifiers. Not finished yet.
+ *
+ * Revision 1.1  1995/02/13  12:35:20  adam
+ * First version of CCL. Qualifiers aren't handled yet.
+ *
+ */
+
+#include <yaz/ccl.h>
+
+static char *err_msg_array[] = {
+    "Ok",
+    "Search word expected",
+    "')' expected",
+    "Set name expected",
+    "Operator expected",
+    "Unbalanced ')'",
+    "Unknown qualifier",
+    "Qualifiers applied twice",
+    "'=' expected",
+    "Bad relation",
+    "Left truncation not supported",
+    "Both left - and right truncation not supported",
+    "Right truncation not supported"
+};
+
+/*
+ * ccl_err_msg: return name of CCL error
+ * ccl_errno:   Error no.
+ * return:      Name of error.
+ */
+const char *ccl_err_msg (int ccl_errno)
+{
+    return err_msg_array[ccl_errno];
+}
diff --git a/src/cclfind.c b/src/cclfind.c
new file mode 100644 (file)
index 0000000..7cad1ab
--- /dev/null
@@ -0,0 +1,1114 @@
+/*
+ * Copyright (c) 1995, the EUROPAGATE consortium (see below).
+ *
+ * The EUROPAGATE consortium members are:
+ *
+ *    University College Dublin
+ *    Danmarks Teknologiske Videnscenter
+ *    An Chomhairle Leabharlanna
+ *    Consejo Superior de Investigaciones Cientificas
+ *
+ * Permission to use, copy, modify, distribute, and sell this software and
+ * its documentation, in whole or in part, for any purpose, is hereby granted,
+ * provided that:
+ *
+ * 1. This copyright and permission notice appear in all copies of the
+ * software and its documentation. Notices of copyright or attribution
+ * which appear at the beginning of any file must remain unchanged.
+ *
+ * 2. The names of EUROPAGATE or the project partners may not be used to
+ * endorse or promote products derived from this software without specific
+ * prior written permission.
+ *
+ * 3. Users of this software (implementors and gateway operators) agree to
+ * inform the EUROPAGATE consortium of their use of the software. This
+ * information will be used to evaluate the EUROPAGATE project and the
+ * software, and to plan further developments. The consortium may use
+ * the information in later publications.
+ * 
+ * 4. Users of this software agree to make their best efforts, when
+ * documenting their use of the software, to acknowledge the EUROPAGATE
+ * consortium, and the role played by the software in their work.
+ *
+ * THIS SOFTWARE IS PROVIDED "AS IS" AND WITHOUT WARRANTY OF ANY KIND,
+ * EXPRESS, IMPLIED, OR OTHERWISE, INCLUDING WITHOUT LIMITATION, ANY
+ * WARRANTY OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.
+ * IN NO EVENT SHALL THE EUROPAGATE CONSORTIUM OR ITS MEMBERS BE LIABLE
+ * FOR ANY SPECIAL, INCIDENTAL, INDIRECT OR CONSEQUENTIAL DAMAGES OF
+ * ANY KIND, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA
+ * OR PROFITS, WHETHER OR NOT ADVISED OF THE POSSIBILITY OF DAMAGE, AND
+ * ON ANY THEORY OF LIABILITY, ARISING OUT OF OR IN CONNECTION WITH THE
+ * USE OR PERFORMANCE OF THIS SOFTWARE.
+ *
+ */
+/* CCL find (to rpn conversion)
+ * Europagate, 1995
+ *
+ * $Id: cclfind.c,v 1.1 2003-10-27 12:21:30 adam Exp $
+ *
+ * Old Europagate log:
+ *
+ * Revision 1.16  1996/01/08  08:41:13  adam
+ * Removed unused function.
+ *
+ * Revision 1.15  1995/07/20  08:14:34  adam
+ * Qualifiers were observed too often. Instead tokens are treated as
+ * qualifiers only when separated by comma.
+ *
+ * Revision 1.14  1995/05/16  09:39:26  adam
+ * LICENSE.
+ *
+ * Revision 1.13  1995/04/17  09:31:42  adam
+ * Improved handling of qualifiers. Aliases or reserved words.
+ *
+ * Revision 1.12  1995/03/20  15:27:43  adam
+ * Minor changes.
+ *
+ * Revision 1.11  1995/02/23  08:31:59  adam
+ * Changed header.
+ *
+ * Revision 1.9  1995/02/16  13:20:06  adam
+ * Spell fix.
+ *
+ * Revision 1.8  1995/02/14  19:59:42  adam
+ * Removed a syntax error.
+ *
+ * Revision 1.7  1995/02/14  19:55:10  adam
+ * Header files ccl.h/cclp.h are gone! They have been merged an
+ * moved to ../include/ccl.h.
+ * Node kind(s) in ccl_rpn_node have changed names.
+ *
+ * Revision 1.6  1995/02/14  16:20:55  adam
+ * Qualifiers are read from a file now.
+ *
+ * Revision 1.5  1995/02/14  14:12:41  adam
+ * Ranges for ordered qualfiers implemented (e.g. pd=1980-1990).
+ *
+ * Revision 1.4  1995/02/14  13:16:29  adam
+ * Left and/or right truncation implemented.
+ *
+ * Revision 1.3  1995/02/14  10:25:56  adam
+ * The constructions 'qualifier rel term ...' implemented.
+ *
+ * Revision 1.2  1995/02/13  15:15:07  adam
+ * Added handling of qualifiers. Not finished yet.
+ *
+ * Revision 1.1  1995/02/13  12:35:20  adam
+ * First version of CCL. Qualifiers aren't handled yet.
+ *
+ */
+
+#include <stdlib.h>
+#include <string.h>
+
+#include <yaz/ccl.h>
+
+/* returns type of current lookahead */
+#define KIND (cclp->look_token->kind)
+
+/* move one token forward */
+#define ADVANCE cclp->look_token = cclp->look_token->next
+
+/* 
+ * qual_val_type: test for existance of attribute type/value pair.
+ * qa:     Attribute array
+ * type:   Type of attribute to search for
+ * value:  Value of attribute to seach for
+ * return: 1 if found; 0 otherwise.
+ */
+static int qual_val_type (struct ccl_rpn_attr **qa, int type, int value,
+                           char **attset)
+{
+    int i;
+    struct ccl_rpn_attr *q;
+
+    if (!qa)
+        return 0;
+    for (i = 0;  (q=qa[i]); i++)
+        while (q)
+        {
+            if (q->type == type && q->kind == CCL_RPN_ATTR_NUMERIC &&
+               q->value.numeric == value)
+            {
+                if (attset)
+                    *attset = q->set;
+                return 1;
+            }
+            q = q->next;
+        }
+    return 0;
+}
+
+/*
+ * strxcat: concatenate strings.
+ * n:      Null-terminated Destination string 
+ * src:    Source string to be appended (not null-terminated)
+ * len:    Length of source string.
+ */
+static void strxcat (char *n, const char *src, int len)
+{
+    while (*n)
+        n++;
+    while (--len >= 0)
+        *n++ = *src++;
+    *n = '\0';
+}
+
+/*
+ * copy_token_name: Return copy of CCL token name
+ * tp:      Pointer to token info.
+ * return:  malloc(3) allocated copy of token name.
+ */
+static char *copy_token_name (struct ccl_token *tp)
+{
+    char *str = (char *)xmalloc (tp->len + 1);
+    ccl_assert (str);
+    memcpy (str, tp->name, tp->len);
+    str[tp->len] = '\0';
+    return str;
+}
+
+/*
+ * mk_node: Create RPN node.
+ * kind:   Type of node.
+ * return: pointer to allocated node.
+ */
+static struct ccl_rpn_node *mk_node (int kind)
+{
+    struct ccl_rpn_node *p;
+    p = (struct ccl_rpn_node *)xmalloc (sizeof(*p));
+    ccl_assert (p);
+    p->kind = kind;
+    return p;
+}
+
+/*
+ * ccl_rpn_delete: Delete RPN tree.
+ * rpn:   Pointer to tree.
+ */
+void ccl_rpn_delete (struct ccl_rpn_node *rpn)
+{
+    struct ccl_rpn_attr *attr, *attr1;
+    if (!rpn)
+        return;
+    switch (rpn->kind)
+    {
+    case CCL_RPN_AND:
+    case CCL_RPN_OR:
+    case CCL_RPN_NOT:
+        ccl_rpn_delete (rpn->u.p[0]);
+        ccl_rpn_delete (rpn->u.p[1]);
+        break;
+    case CCL_RPN_TERM:
+        xfree (rpn->u.t.term);
+        for (attr = rpn->u.t.attr_list; attr; attr = attr1)
+        {
+            attr1 = attr->next;
+           if (attr->kind == CCL_RPN_ATTR_STRING)
+               xfree(attr->value.str);
+            if (attr->set)
+                xfree (attr->set);
+            xfree (attr);
+        }
+        break;
+    case CCL_RPN_SET:
+        xfree (rpn->u.setname);
+        break;
+    case CCL_RPN_PROX:
+        ccl_rpn_delete (rpn->u.p[0]);
+        ccl_rpn_delete (rpn->u.p[1]);
+        break;
+    }
+    xfree (rpn);
+}
+
+static struct ccl_rpn_node *find_spec (CCL_parser cclp,
+                                       struct ccl_rpn_attr **qa);
+
+static int is_term_ok (int look, int *list)
+{
+    for (;*list >= 0; list++)
+        if (look == *list)
+            return 1;
+    return 0;
+}
+
+static struct ccl_rpn_node *search_terms (CCL_parser cclp,
+                                          struct ccl_rpn_attr **qa);
+
+static struct ccl_rpn_attr *add_attr_node (struct ccl_rpn_node *p,
+                                          const char *set, int type)
+{
+    struct ccl_rpn_attr *n;
+    
+    n = (struct ccl_rpn_attr *)xmalloc (sizeof(*n));
+    ccl_assert (n);
+    if (set)
+    {
+        n->set = (char*) xmalloc (strlen(set)+1);
+        strcpy (n->set, set);
+    }
+    else
+        n->set = 0;
+    n->type = type;
+    n->next = p->u.t.attr_list;
+    p->u.t.attr_list = n;
+    
+    n->kind = CCL_RPN_ATTR_NUMERIC;
+    n->value.numeric = 0;
+    return n;
+}
+
+/*
+ * add_attr_numeric: Add attribute (type/value) to RPN term node.
+ * p:     RPN node of type term.
+ * type:  Type of attribute
+ * value: Value of attribute
+ * set: Attribute set name
+ */
+static void add_attr_numeric (struct ccl_rpn_node *p, const char *set,
+                             int type, int value)
+{
+    struct ccl_rpn_attr *n;
+
+    n = add_attr_node(p, set, type);
+    n->kind = CCL_RPN_ATTR_NUMERIC;
+    n->value.numeric = value;
+}
+
+static void add_attr_string (struct ccl_rpn_node *p, const char *set,
+                            int type, char *value)
+{
+    struct ccl_rpn_attr *n;
+
+    n = add_attr_node(p, set, type);
+    n->kind = CCL_RPN_ATTR_STRING;
+    n->value.str = xstrdup(value);
+}
+
+
+/*
+ * search_term: Parse CCL search term. 
+ * cclp:   CCL Parser
+ * qa:     Qualifier attributes already applied.
+ * term_list: tokens we accept as terms in context
+ * multi:  whether we accept "multiple" tokens
+ * return: pointer to node(s); NULL on error.
+ */
+static struct ccl_rpn_node *search_term_x (CCL_parser cclp,
+                                           struct ccl_rpn_attr **qa,
+                                           int *term_list, int multi)
+{
+    struct ccl_rpn_node *p_top = 0;
+    struct ccl_token *lookahead = cclp->look_token;
+    int and_list = 0;
+    int or_list = 0;
+    char *attset;
+    const char *truncation_aliases;
+
+    truncation_aliases =
+       ccl_qual_search_special(cclp->bibset, "truncation");
+    if (!truncation_aliases)
+       truncation_aliases = "?";
+
+    if (qual_val_type (qa, CCL_BIB1_STR, CCL_BIB1_STR_AND_LIST, 0))
+        and_list = 1;
+    if (qual_val_type (qa, CCL_BIB1_STR, CCL_BIB1_STR_OR_LIST, 0))
+        or_list = 1;
+    while (1)
+    {
+        struct ccl_rpn_node *p;
+        size_t no, i;
+        int no_spaces = 0;
+        int left_trunc = 0;
+        int right_trunc = 0;
+        int mid_trunc = 0;
+        int relation_value = -1;
+        int position_value = -1;
+        int structure_value = -1;
+        int truncation_value = -1;
+        int completeness_value = -1;
+        int len = 0;
+        size_t max = 200;
+        if (and_list || or_list || !multi)
+            max = 1;
+       
+       /* ignore commas when dealing with and-lists .. */
+        if (and_list && lookahead && lookahead->kind == CCL_TOK_COMMA)
+        {
+           lookahead = lookahead->next;
+            ADVANCE;
+           continue;
+        }
+        /* go through each TERM token. If no truncation attribute is yet
+           met, then look for left/right truncation markers (?) and
+           set left_trunc/right_trunc/mid_trunc accordingly */
+        for (no = 0; no < max && is_term_ok(lookahead->kind, term_list); no++)
+        {
+            for (i = 0; i<lookahead->len; i++)
+                if (lookahead->name[i] == ' ')
+                   no_spaces++;
+               else if (strchr(truncation_aliases, lookahead->name[i]))
+                {
+                    if (no == 0 && i == 0 && lookahead->len >= 1)
+                        left_trunc = 1;
+                    else if (!is_term_ok(lookahead->next->kind, term_list) &&
+                             i == lookahead->len-1 && i >= 1)
+                        right_trunc = 1;
+                    else
+                        mid_trunc = 1;
+                }
+            len += 1+lookahead->len;
+            lookahead = lookahead->next;
+        }
+
+        if (len == 0)
+            break;      /* no more terms . stop . */
+
+
+        if (p_top)
+        {
+            if (or_list)
+                p = mk_node (CCL_RPN_OR);
+            else if (and_list)
+                p = mk_node (CCL_RPN_AND);
+            else
+                p = mk_node (CCL_RPN_AND);
+            p->u.p[0] = p_top;
+            p_top = p;
+        }
+                
+        /* create the term node, but wait a moment before adding the term */
+        p = mk_node (CCL_RPN_TERM);
+        p->u.t.attr_list = NULL;
+        p->u.t.term = NULL;
+
+        /* make the top node point to us.. */
+        if (p_top)
+            p_top->u.p[1] = p;
+        else
+            p_top = p;
+
+        
+        /* go through all attributes and add them to the attribute list */
+        for (i=0; qa && qa[i]; i++)
+        {
+            struct ccl_rpn_attr *attr;
+            
+            for (attr = qa[i]; attr; attr = attr->next)
+               switch(attr->kind)
+               {
+               case CCL_RPN_ATTR_STRING:
+                   add_attr_string(p, attr->set, attr->type,
+                                   attr->value.str);
+                   break;
+               case CCL_RPN_ATTR_NUMERIC:
+                   if (attr->value.numeric > 0)
+                   {   /* deal only with REAL attributes (positive) */
+                       switch (attr->type)
+                       {
+                       case CCL_BIB1_REL:
+                           if (relation_value != -1)
+                               continue;
+                           relation_value = attr->value.numeric;
+                           break;
+                       case CCL_BIB1_POS:
+                           if (position_value != -1)
+                               continue;
+                           position_value = attr->value.numeric;
+                           break;
+                       case CCL_BIB1_STR:
+                           if (structure_value != -1)
+                               continue;
+                           structure_value = attr->value.numeric;
+                           break;
+                       case CCL_BIB1_TRU:
+                           if (truncation_value != -1)
+                               continue;
+                           truncation_value = attr->value.numeric;
+                           left_trunc = right_trunc = mid_trunc = 0;
+                           break;
+                       case CCL_BIB1_COM:
+                           if (completeness_value != -1)
+                               continue;
+                           completeness_value = attr->value.numeric;
+                           break;
+                       }
+                       add_attr_numeric(p, attr->set, attr->type,
+                                        attr->value.numeric);
+                   }
+               }
+        }
+        /* len now holds the number of characters in the RPN term */
+        /* no holds the number of CCL tokens (1 or more) */
+        
+        if (structure_value == -1 && 
+            qual_val_type (qa, CCL_BIB1_STR, CCL_BIB1_STR_WP, &attset))
+        {   /* no structure attribute met. Apply either structure attribute 
+               WORD or PHRASE depending on number of CCL tokens */
+            if (no == 1 && no_spaces == 0)
+                add_attr_numeric (p, attset, CCL_BIB1_STR, 2);
+            else
+                add_attr_numeric (p, attset, CCL_BIB1_STR, 1);
+        }
+        
+        /* make the RPN token */
+        p->u.t.term = (char *)xmalloc (len);
+        ccl_assert (p->u.t.term);
+        p->u.t.term[0] = '\0';
+        for (i = 0; i<no; i++)
+        {
+            const char *src_str = cclp->look_token->name;
+            int src_len = cclp->look_token->len;
+            
+            if (i == 0 && left_trunc)
+            {
+                src_len--;
+                src_str++;
+            }
+            else if (i == no-1 && right_trunc)
+                src_len--;
+            if (src_len)
+            {
+                int len = strlen(p->u.t.term);
+                if (len &&
+                    !strchr("-+", *src_str) &&
+                    !strchr("-+", p->u.t.term[len-1]))
+                {
+                    strcat (p->u.t.term, " ");
+                }
+            }
+            strxcat (p->u.t.term, src_str, src_len);
+            ADVANCE;
+        }
+        if (left_trunc && right_trunc)
+        {
+            if (!qual_val_type (qa, CCL_BIB1_TRU, CCL_BIB1_TRU_CAN_BOTH,
+                                &attset))
+            {
+                cclp->error_code = CCL_ERR_TRUNC_NOT_BOTH;
+                ccl_rpn_delete (p);
+                return NULL;
+            }
+            add_attr_numeric (p, attset, CCL_BIB1_TRU, 3);
+        }
+        else if (right_trunc)
+        {
+            if (!qual_val_type (qa, CCL_BIB1_TRU, CCL_BIB1_TRU_CAN_RIGHT,
+                                 &attset))
+            {
+                cclp->error_code = CCL_ERR_TRUNC_NOT_RIGHT;
+                ccl_rpn_delete (p);
+                return NULL;
+            }
+            add_attr_numeric (p, attset, CCL_BIB1_TRU, 1);
+        }
+        else if (left_trunc)
+        {
+            if (!qual_val_type (qa, CCL_BIB1_TRU, CCL_BIB1_TRU_CAN_LEFT,
+                                &attset))
+            {
+                cclp->error_code = CCL_ERR_TRUNC_NOT_LEFT;
+                ccl_rpn_delete (p);
+                return NULL;
+            }
+            add_attr_numeric (p, attset, CCL_BIB1_TRU, 2);
+        }
+        else
+        {
+            if (qual_val_type (qa, CCL_BIB1_TRU, CCL_BIB1_TRU_CAN_NONE,
+                               &attset))
+                add_attr_numeric (p, attset, CCL_BIB1_TRU, 100);
+        }
+        if (!multi)
+            break;
+    }
+    if (!p_top)
+        cclp->error_code = CCL_ERR_TERM_EXPECTED;
+    return p_top;
+}
+
+static struct ccl_rpn_node *search_term (CCL_parser cclp,
+                                         struct ccl_rpn_attr **qa)
+{
+    static int list[] = {CCL_TOK_TERM, CCL_TOK_COMMA, -1};
+    return search_term_x(cclp, qa, list, 0);
+}
+
+static struct ccl_rpn_node *qualifiers2 (CCL_parser cclp,
+                                         struct ccl_rpn_attr **ap)
+{
+    char *attset;
+    int rel;
+
+    if (!qual_val_type(ap, CCL_BIB1_REL, CCL_BIB1_REL_ORDER, &attset))
+    {                
+        /* unordered relation */
+        struct ccl_rpn_node *p;
+        if (KIND != CCL_TOK_EQ)
+        {
+            cclp->error_code = CCL_ERR_EQ_EXPECTED;
+            return NULL;
+        }
+        ADVANCE;
+        if (KIND == CCL_TOK_LP)
+        {
+            ADVANCE;
+            if (!(p = find_spec (cclp, ap)))
+            {
+                return NULL;
+            }
+            if (KIND != CCL_TOK_RP)
+            {
+                cclp->error_code = CCL_ERR_RP_EXPECTED;
+                ccl_rpn_delete (p);
+                return NULL;
+            }
+            ADVANCE;
+        }
+        else
+            p = search_terms (cclp, ap);
+        return p;
+    }
+    /* ordered relation ... */
+    rel = 0;
+    if (cclp->look_token->len == 1)
+    {
+        if (cclp->look_token->name[0] == '<')
+            rel = 1;
+        else if (cclp->look_token->name[0] == '=')
+            rel = 3;
+        else if (cclp->look_token->name[0] == '>')
+            rel = 5;
+    }
+    else if (cclp->look_token->len == 2)
+    {
+        if (!memcmp (cclp->look_token->name, "<=", 2))
+            rel = 2;
+        else if (!memcmp (cclp->look_token->name, ">=", 2))
+            rel = 4;
+        else if (!memcmp (cclp->look_token->name, "<>", 2))
+            rel = 6;
+    }
+    if (!rel)
+        cclp->error_code = CCL_ERR_BAD_RELATION;
+    else
+    {
+        struct ccl_rpn_node *p;
+        
+        ADVANCE;                      /* skip relation */
+        if (KIND == CCL_TOK_TERM &&
+            cclp->look_token->next && cclp->look_token->next->len == 1 &&
+            cclp->look_token->next->name[0] == '-')
+        {
+            struct ccl_rpn_node *p1;
+            if (!(p1 = search_term (cclp, ap)))
+                return NULL;
+            ADVANCE;                   /* skip '-' */
+            if (KIND == CCL_TOK_TERM)  /* = term - term  ? */
+            {
+                struct ccl_rpn_node *p2;
+                
+                if (!(p2 = search_term (cclp, ap)))
+                {
+                    ccl_rpn_delete (p1);
+                    return NULL;
+                }
+                p = mk_node (CCL_RPN_AND);
+                p->u.p[0] = p1;
+                add_attr_numeric (p1, attset, CCL_BIB1_REL, 4);
+                p->u.p[1] = p2;
+                add_attr_numeric (p2, attset, CCL_BIB1_REL, 2);
+                return p;
+            }
+            else                       /* = term -    */
+            {
+                add_attr_numeric (p1, attset, CCL_BIB1_REL, 4);
+                return p1;
+            }
+        }
+        else if (cclp->look_token->len == 1 &&
+                 cclp->look_token->name[0] == '-')   /* = - term  ? */
+        {
+            ADVANCE;
+            if (!(p = search_term (cclp, ap)))
+                return NULL;
+            add_attr_numeric (p, attset, CCL_BIB1_REL, 2);
+            return p;
+        }
+        else if (KIND == CCL_TOK_LP)
+        {
+            ADVANCE;
+            if (!(p = find_spec (cclp, ap)))
+                return NULL;
+            if (KIND != CCL_TOK_RP)
+            {
+                cclp->error_code = CCL_ERR_RP_EXPECTED;
+                ccl_rpn_delete (p);
+                return NULL;
+            }
+            ADVANCE;
+            return p;
+        }
+        else
+        {
+            if (!(p = search_terms (cclp, ap)))
+                return NULL;
+            add_attr_numeric (p, attset, CCL_BIB1_REL, rel);
+            return p;
+        }
+        cclp->error_code = CCL_ERR_TERM_EXPECTED;
+    }
+    return NULL;
+}
+
+/*
+ * qualifiers1: Parse CCL qualifiers and search terms. 
+ * cclp:   CCL Parser
+ * la:     Token pointer to RELATION token.
+ * qa:     Qualifier attributes already applied.
+ * return: pointer to node(s); NULL on error.
+ */
+static struct ccl_rpn_node *qualifiers1 (CCL_parser cclp, struct ccl_token *la,
+                                         struct ccl_rpn_attr **qa)
+{
+    struct ccl_token *lookahead = cclp->look_token;
+    struct ccl_token *look_start = cclp->look_token;
+    struct ccl_rpn_attr **ap;
+    struct ccl_rpn_node *node = 0;
+    const char *field_str;
+    int no = 0;
+    int seq = 0;
+    int i;
+    int mode_merge = 1;
+#if 0
+    if (qa)
+    {
+        cclp->error_code = CCL_ERR_DOUBLE_QUAL;
+        return NULL;
+    }
+#endif
+    for (lookahead = cclp->look_token; lookahead != la;
+         lookahead=lookahead->next)
+        no++;
+    if (qa)
+        for (i=0; qa[i]; i++)
+            no++;
+    ap = (struct ccl_rpn_attr **)xmalloc ((no ? (no+1) : 2) * sizeof(*ap));
+    ccl_assert (ap);
+
+    field_str = ccl_qual_search_special(cclp->bibset, "field");
+    if (field_str)
+    {
+        if (!strcmp (field_str, "or"))
+            mode_merge = 0;
+        else if (!strcmp (field_str, "merge"))
+            mode_merge = 1;
+    }
+    if (!mode_merge)
+    {
+        /* consider each field separately and OR */
+        lookahead = look_start;
+        while (lookahead != la)
+        {
+            ap[1] = 0;
+            seq = 0;
+            while ((ap[0] = ccl_qual_search (cclp, lookahead->name,
+                                             lookahead->len, seq)) != 0)
+            {
+                struct ccl_rpn_node *node_sub;
+                cclp->look_token = la;
+                
+                node_sub = qualifiers2(cclp, ap);
+                if (!node_sub)
+                {
+                    ccl_rpn_delete (node);
+                    xfree (ap);
+                    return 0;
+                }
+                if (node)
+                {
+                    struct ccl_rpn_node *node_this = mk_node(CCL_RPN_OR);
+                    node_this->u.p[0] = node;
+                    node_this->u.p[1] = node_sub;
+                    node = node_this;
+                }
+                else
+                    node = node_sub;
+                seq++;
+            }
+            if (seq == 0)
+            {
+                cclp->look_token = lookahead;
+                cclp->error_code = CCL_ERR_UNKNOWN_QUAL;
+                xfree (ap);
+                return NULL;
+            }
+            lookahead = lookahead->next;
+            if (lookahead->kind == CCL_TOK_COMMA)
+                lookahead = lookahead->next;
+        }
+    }
+    else
+    {
+        /* merge attributes from ALL fields - including inherited ones */
+        while (1)
+        {
+            struct ccl_rpn_node *node_sub;
+            int found = 0;
+            lookahead = look_start;
+            for (i = 0; lookahead != la; i++)
+            {
+                ap[i] = ccl_qual_search (cclp, lookahead->name,
+                                         lookahead->len, seq);
+                if (ap[i])
+                    found++;
+                if (!ap[i] && seq > 0)
+                    ap[i] = ccl_qual_search (cclp, lookahead->name,
+                                             lookahead->len, 0);
+                if (!ap[i])
+                {
+                    cclp->look_token = lookahead;
+                    cclp->error_code = CCL_ERR_UNKNOWN_QUAL;
+                    xfree (ap);
+                    return NULL;
+                }
+                lookahead = lookahead->next;
+                if (lookahead->kind == CCL_TOK_COMMA)
+                    lookahead = lookahead->next;
+            }
+            if (qa)
+            {
+                struct ccl_rpn_attr **qa0 = qa;
+                
+                while (*qa0)
+                    ap[i++] = *qa0++;
+            }
+            ap[i] = NULL;
+            
+            if (!found)
+                break;
+            
+            cclp->look_token = lookahead;
+            
+            node_sub = qualifiers2(cclp, ap);
+            if (!node_sub)
+            {
+                ccl_rpn_delete (node);
+                break;
+            }
+            if (node)
+            {
+                struct ccl_rpn_node *node_this = mk_node(CCL_RPN_OR);
+                node_this->u.p[0] = node;
+                node_this->u.p[1] = node_sub;
+                node = node_this;
+            }
+            else
+                node = node_sub;
+            seq++;
+        }
+    }
+    xfree (ap);
+    return node;
+}
+
+
+/*
+ * search_terms: Parse CCL search terms - including proximity.
+ * cclp:   CCL Parser
+ * qa:     Qualifier attributes already applied.
+ * return: pointer to node(s); NULL on error.
+ */
+static struct ccl_rpn_node *search_terms (CCL_parser cclp,
+                                          struct ccl_rpn_attr **qa)
+{
+    static int list[] = {
+        CCL_TOK_TERM, CCL_TOK_COMMA,CCL_TOK_EQ, CCL_TOK_REL, CCL_TOK_SET, -1};
+    struct ccl_rpn_node *p1, *p2, *pn;
+    p1 = search_term_x (cclp, qa, list, 1);
+    if (!p1)
+        return NULL;
+    while (1)
+    {
+        if (KIND == CCL_TOK_PROX)
+        {
+            struct ccl_rpn_node *p_prox = 0;
+            /* ! word order specified */
+            /* % word order not specified */
+            p_prox = mk_node(CCL_RPN_TERM);
+            p_prox->u.t.term = (char *) xmalloc(cclp->look_token->len);
+            memcpy(p_prox->u.t.term, cclp->look_token->name,
+                   cclp->look_token->len);
+            p_prox->u.t.term[cclp->look_token->len] = 0;
+            p_prox->u.t.attr_list = 0;
+
+            ADVANCE;
+            p2 = search_term_x (cclp, qa, list, 1);
+            if (!p2)
+            {
+                ccl_rpn_delete (p1);
+                return NULL;
+            }
+            pn = mk_node (CCL_RPN_PROX);
+            pn->u.p[0] = p1;
+            pn->u.p[1] = p2;
+            pn->u.p[2] = p_prox;
+            p1 = pn;
+        }
+        else if (is_term_ok(KIND, list))
+        {
+            p2 = search_term_x (cclp, qa, list, 1);
+            if (!p2)
+            {
+                ccl_rpn_delete (p1);
+                return NULL;
+            }
+            pn = mk_node (CCL_RPN_PROX);
+            pn->u.p[0] = p1;
+            pn->u.p[1] = p2;
+            pn->u.p[2] = 0;
+            p1 = pn;
+        }
+        else
+            break;
+    }
+    return p1;
+}
+
+/*
+ * search_elements: Parse CCL search elements
+ * cclp:   CCL Parser
+ * qa:     Qualifier attributes already applied.
+ * return: pointer to node(s); NULL on error.
+ */
+static struct ccl_rpn_node *search_elements (CCL_parser cclp,
+                                             struct ccl_rpn_attr **qa)
+{
+    struct ccl_rpn_node *p1;
+    struct ccl_token *lookahead;
+    if (KIND == CCL_TOK_LP)
+    {
+        ADVANCE;
+        p1 = find_spec (cclp, qa);
+        if (!p1)
+            return NULL;
+        if (KIND != CCL_TOK_RP)
+        {
+            cclp->error_code = CCL_ERR_RP_EXPECTED;
+            ccl_rpn_delete (p1);
+            return NULL;
+        }
+        ADVANCE;
+        return p1;
+    }
+    else if (KIND == CCL_TOK_SET)
+    {
+        ADVANCE;
+        if (KIND == CCL_TOK_EQ)
+            ADVANCE;
+        if (KIND != CCL_TOK_TERM)
+        {
+            cclp->error_code = CCL_ERR_SETNAME_EXPECTED;
+            return NULL;
+        }
+        p1 = mk_node (CCL_RPN_SET);
+        p1->u.setname = copy_token_name (cclp->look_token);
+        ADVANCE;
+        return p1;
+    }
+    lookahead = cclp->look_token;
+
+    while (lookahead->kind==CCL_TOK_TERM)
+    {
+        lookahead = lookahead->next;
+        if (lookahead->kind == CCL_TOK_REL || lookahead->kind == CCL_TOK_EQ)
+            return qualifiers1 (cclp, lookahead, qa);
+        if (lookahead->kind != CCL_TOK_COMMA)
+            break;
+        lookahead = lookahead->next;
+    }
+    if (qa)
+        return search_terms (cclp, qa);
+    else
+    {
+        struct ccl_rpn_attr *qa[2];
+        struct ccl_rpn_node *node = 0;
+        int seq;
+        lookahead = cclp->look_token;
+
+        qa[1] = 0;
+        for(seq = 0; ;seq++)
+        {
+            struct ccl_rpn_node *node_sub;
+            qa[0] = ccl_qual_search(cclp, "term", 4, seq);
+            if (!qa[0])
+                break;
+
+            cclp->look_token = lookahead;
+
+            node_sub = search_terms (cclp, qa);
+            if (!node_sub)
+            {
+                ccl_rpn_delete (node);
+                return 0;
+            }
+            if (node)
+            {
+                struct ccl_rpn_node *node_this = mk_node(CCL_RPN_OR);
+                node_this->u.p[0] = node;
+                node_this->u.p[1] = node_sub;
+                node_this->u.p[2] = 0;
+                node = node_this;
+            }
+            else
+                node = node_sub;
+        }
+        if (!node)
+            node = search_terms (cclp, 0);
+        return node;
+    }
+}
+
+/*
+ * find_spec: Parse CCL find specification
+ * cclp:   CCL Parser
+ * qa:     Qualifier attributes already applied.
+ * return: pointer to node(s); NULL on error.
+ */
+static struct ccl_rpn_node *find_spec (CCL_parser cclp,
+                                       struct ccl_rpn_attr **qa)
+{
+    struct ccl_rpn_node *p1, *p2, *pn;
+    if (!(p1 = search_elements (cclp, qa)))
+        return NULL;
+    while (1)
+    {
+        switch (KIND)
+        {
+        case CCL_TOK_AND:
+            ADVANCE;
+            p2 = search_elements (cclp, qa);
+            if (!p2)
+            {
+                ccl_rpn_delete (p1);
+                return NULL;
+            }
+            pn = mk_node (CCL_RPN_AND);
+            pn->u.p[0] = p1;
+            pn->u.p[1] = p2;
+            pn->u.p[2] = 0;
+            p1 = pn;
+            continue;
+        case CCL_TOK_OR:
+            ADVANCE;
+            p2 = search_elements (cclp, qa);
+            if (!p2)
+            {
+                ccl_rpn_delete (p1);
+                return NULL;
+            }
+            pn = mk_node (CCL_RPN_OR);
+            pn->u.p[0] = p1;
+            pn->u.p[1] = p2;
+            pn->u.p[2] = 0;
+            p1 = pn;
+            continue;
+        case CCL_TOK_NOT:
+            ADVANCE;
+            p2 = search_elements (cclp, qa);
+            if (!p2)
+            {
+                ccl_rpn_delete (p1);
+                return NULL;
+            }
+            pn = mk_node (CCL_RPN_NOT);
+            pn->u.p[0] = p1;
+            pn->u.p[1] = p2;
+            pn->u.p[2] = 0;
+            p1 = pn;
+            continue;
+        }
+        break;
+    }
+    return p1;
+}
+
+struct ccl_rpn_node *ccl_parser_find (CCL_parser cclp, struct ccl_token *list)
+{
+    struct ccl_rpn_node *p;
+
+    
+
+    cclp->look_token = list;
+    p = find_spec (cclp, NULL);
+    if (p && KIND != CCL_TOK_EOL)
+    {
+        if (KIND == CCL_TOK_RP)
+            cclp->error_code = CCL_ERR_BAD_RP;
+        else
+            cclp->error_code = CCL_ERR_OP_EXPECTED;
+        ccl_rpn_delete (p);
+        p = NULL;
+    }
+    cclp->error_pos = cclp->look_token->name;
+    if (p)
+        cclp->error_code = CCL_ERR_OK;
+    else
+        cclp->error_code = cclp->error_code;
+    return p;
+}
+
+/*
+ * ccl_find: Parse CCL find - token representation
+ * bibset:  Bibset to be used for the parsing
+ * list:    List of tokens
+ * error:   Pointer to integer. Holds error no. on completion.
+ * pos:     Pointer to char position. Holds approximate error position.
+ * return:  RPN tree on successful completion; NULL otherwise.
+ */
+struct ccl_rpn_node *ccl_find (CCL_bibset bibset, struct ccl_token *list,
+                               int *error, const char **pos)
+{
+    struct ccl_rpn_node *p;
+    CCL_parser cclp = ccl_parser_create ();
+
+    cclp->bibset = bibset;
+
+    p = ccl_parser_find (cclp, list);
+
+    *error = cclp->error_code;
+    *pos = cclp->error_pos;
+
+    ccl_parser_destroy (cclp);
+
+    return p;
+}
+
+/*
+ * ccl_find_str: Parse CCL find - string representation
+ * bibset:  Bibset to be used for the parsing
+ * str:     String to be parsed
+ * error:   Pointer to integer. Holds error no. on completion.
+ * pos:     Pointer to char position. Holds approximate error position.
+ * return:  RPN tree on successful completion; NULL otherwise.
+ */
+struct ccl_rpn_node *ccl_find_str (CCL_bibset bibset, const char *str,
+                                   int *error, int *pos)
+{
+    CCL_parser cclp = ccl_parser_create ();
+    struct ccl_token *list;
+    struct ccl_rpn_node *p;
+
+    cclp->bibset = bibset;
+
+    list = ccl_parser_tokenize (cclp, str);
+    p = ccl_parser_find (cclp, list);
+
+    *error = cclp->error_code;
+    if (*error)
+        *pos = cclp->error_pos - str;
+    ccl_parser_destroy (cclp);
+    ccl_token_del (list);
+    return p;
+}
diff --git a/src/cclptree.c b/src/cclptree.c
new file mode 100644 (file)
index 0000000..1c36a03
--- /dev/null
@@ -0,0 +1,271 @@
+/*
+ * Copyright (c) 1995, the EUROPAGATE consortium (see below).
+ *
+ * The EUROPAGATE consortium members are:
+ *
+ *    University College Dublin
+ *    Danmarks Teknologiske Videnscenter
+ *    An Chomhairle Leabharlanna
+ *    Consejo Superior de Investigaciones Cientificas
+ *
+ * Permission to use, copy, modify, distribute, and sell this software and
+ * its documentation, in whole or in part, for any purpose, is hereby granted,
+ * provided that:
+ *
+ * 1. This copyright and permission notice appear in all copies of the
+ * software and its documentation. Notices of copyright or attribution
+ * which appear at the beginning of any file must remain unchanged.
+ *
+ * 2. The names of EUROPAGATE or the project partners may not be used to
+ * endorse or promote products derived from this software without specific
+ * prior written permission.
+ *
+ * 3. Users of this software (implementors and gateway operators) agree to
+ * inform the EUROPAGATE consortium of their use of the software. This
+ * information will be used to evaluate the EUROPAGATE project and the
+ * software, and to plan further developments. The consortium may use
+ * the information in later publications.
+ * 
+ * 4. Users of this software agree to make their best efforts, when
+ * documenting their use of the software, to acknowledge the EUROPAGATE
+ * consortium, and the role played by the software in their work.
+ *
+ * THIS SOFTWARE IS PROVIDED "AS IS" AND WITHOUT WARRANTY OF ANY KIND,
+ * EXPRESS, IMPLIED, OR OTHERWISE, INCLUDING WITHOUT LIMITATION, ANY
+ * WARRANTY OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.
+ * IN NO EVENT SHALL THE EUROPAGATE CONSORTIUM OR ITS MEMBERS BE LIABLE
+ * FOR ANY SPECIAL, INCIDENTAL, INDIRECT OR CONSEQUENTIAL DAMAGES OF
+ * ANY KIND, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA
+ * OR PROFITS, WHETHER OR NOT ADVISED OF THE POSSIBILITY OF DAMAGE, AND
+ * ON ANY THEORY OF LIABILITY, ARISING OUT OF OR IN CONNECTION WITH THE
+ * USE OR PERFORMANCE OF THIS SOFTWARE.
+ *
+ */
+/* CCL print rpn tree - infix notation
+ * Europagate, 1995
+ *
+ * $Id: cclptree.c,v 1.1 2003-10-27 12:21:30 adam Exp $
+ *
+ * Old Europagate Log:
+ *
+ * Revision 1.6  1995/05/16  09:39:26  adam
+ * LICENSE.
+ *
+ * Revision 1.5  1995/02/23  08:31:59  adam
+ * Changed header.
+ *
+ * Revision 1.3  1995/02/15  17:42:16  adam
+ * Minor changes of the api of this module. FILE* argument added
+ * to ccl_pr_tree.
+ *
+ * Revision 1.2  1995/02/14  19:55:11  adam
+ * Header files ccl.h/cclp.h are gone! They have been merged an
+ * moved to ../include/ccl.h.
+ * Node kind(s) in ccl_rpn_node have changed names.
+ *
+ * Revision 1.1  1995/02/14  10:25:56  adam
+ * The constructions 'qualifier rel term ...' implemented.
+ *
+ */
+
+#include <stdio.h>
+#include <string.h>
+#include <ctype.h>
+
+#include <yaz/ccl.h>
+
+void fprintSpaces(int indent,FILE * fd_out) 
+{
+       char buf[100];
+       sprintf(buf,"%%%d.s",indent);
+       fprintf(fd_out,buf," ");
+}
+
+void ccl_pr_tree_as_qrpn(struct ccl_rpn_node *rpn, FILE *fd_out, int indent)
+{
+       if(indent>0) fprintSpaces(indent,fd_out);
+    switch (rpn->kind)
+    {
+    case CCL_RPN_TERM:
+        if (rpn->u.t.attr_list)
+        {
+            struct ccl_rpn_attr *attr;
+            for (attr = rpn->u.t.attr_list; attr; attr = attr->next)
+                       {
+                               if (attr->set)
+                                       fprintf(fd_out, "@attr %s", attr->set);
+                               else
+                                       fprintf(fd_out, "@attr ");
+                               switch(attr->kind)
+                               {
+                               case CCL_RPN_ATTR_NUMERIC:
+                    fprintf (fd_out, "%d=%d ", attr->type,
+                             attr->value.numeric);
+                                       break;
+                               case CCL_RPN_ATTR_STRING:
+                    fprintf (fd_out, "%d=%s ", attr->type,
+                                                        attr->value.str);
+                               }
+                       }
+        }
+               fprintf (fd_out, "\"%s\"\n", rpn->u.t.term);
+        break;
+    case CCL_RPN_AND:
+        fprintf (fd_out, "@and \n");
+        ccl_pr_tree_as_qrpn (rpn->u.p[0], fd_out,indent+2);
+        ccl_pr_tree_as_qrpn (rpn->u.p[1], fd_out,indent+2);
+        break;
+    case CCL_RPN_OR:
+        fprintf (fd_out, "@or \n");
+        ccl_pr_tree_as_qrpn (rpn->u.p[0], fd_out,indent+2);
+        ccl_pr_tree_as_qrpn (rpn->u.p[1], fd_out,indent+2);
+        break;
+    case CCL_RPN_NOT:
+        fprintf (fd_out, "@not ");
+        ccl_pr_tree_as_qrpn (rpn->u.p[0], fd_out,indent+2);
+        ccl_pr_tree_as_qrpn (rpn->u.p[1], fd_out,indent+2);
+        break;
+    case CCL_RPN_SET:
+        fprintf (fd_out, "set=%s ", rpn->u.setname);
+        break;
+    case CCL_RPN_PROX:
+        if (rpn->u.p[2] && rpn->u.p[2]->kind == CCL_RPN_TERM)
+        {
+            const char *cp = rpn->u.p[2]->u.t.term;
+            /* exlusion distance ordered relation which-code unit-code */
+            if (*cp == '!')
+            {   
+                /* word order specified */
+                if (isdigit(cp[1]))
+                    fprintf(fd_out, "@prox 0 %s 1 2 known 2", cp+1);
+                else
+                    fprintf(fd_out, "@prox 0 1 1 2 known 2");
+            } 
+            else if (*cp == '%')
+            {
+                /* word order not specified */
+                if (isdigit(cp[1]))
+                    fprintf(fd_out, "@prox 0 %s 0 2 known 2", cp+1);
+                else
+                    fprintf(fd_out, "@prox 0 1 0 2 known 2");
+            }
+        }
+        ccl_pr_tree_as_qrpn (rpn->u.p[0], fd_out,indent+2);
+        ccl_pr_tree_as_qrpn (rpn->u.p[1], fd_out,indent+2);
+        break;
+    default:
+               fprintf(stderr,"Internal Error Unknown ccl_rpn node type %d\n",rpn->kind);
+    }
+}
+
+
+void ccl_pr_tree (struct ccl_rpn_node *rpn, FILE *fd_out)
+{
+       ccl_pr_tree_as_qrpn(rpn,fd_out,0);
+}
+
+
+static void ccl_pquery_complex (WRBUF w, struct ccl_rpn_node *p)
+{
+    switch (p->kind)
+    {
+    case CCL_RPN_AND:
+       wrbuf_puts(w, "@and ");
+               break;
+    case CCL_RPN_OR:
+       wrbuf_puts(w, "@or ");
+               break;
+    case CCL_RPN_NOT:
+       wrbuf_puts(w, "@not ");
+               break;
+    case CCL_RPN_PROX:
+        if (p->u.p[2] && p->u.p[2]->kind == CCL_RPN_TERM)
+        {
+            const char *cp = p->u.p[2]->u.t.term;
+            /* exlusion distance ordered relation which-code unit-code */
+            if (*cp == '!')
+            {   
+                /* word order specified */
+                if (isdigit(cp[1]))
+                    wrbuf_printf(w, "@prox 0 %s 1 2 k 2 ", cp+1);
+                else
+                    wrbuf_printf(w, "@prox 0 1 1 2 k 2 ");
+            } 
+            else if (*cp == '%')
+            {
+                /* word order not specified */
+                if (isdigit(cp[1]))
+                    wrbuf_printf(w, "@prox 0 %s 0 2 k 2 ", cp+1);
+                else
+                    wrbuf_printf(w, "@prox 0 1 0 2 k 2 ");
+            }
+        }
+        else
+            wrbuf_puts(w, "@prox 0 2 0 1 k 2 ");
+               break;
+    default:
+               wrbuf_puts(w, "@ bad op (unknown) ");
+    }
+    ccl_pquery(w, p->u.p[0]);
+    ccl_pquery(w, p->u.p[1]);
+}
+
+void ccl_pquery (WRBUF w, struct ccl_rpn_node *p)
+{
+    struct ccl_rpn_attr *att;
+    const char *cp;
+       
+    switch (p->kind)
+    {
+    case CCL_RPN_AND:
+    case CCL_RPN_OR:
+    case CCL_RPN_NOT:
+    case CCL_RPN_PROX:
+       ccl_pquery_complex (w, p);
+               break;
+    case CCL_RPN_SET:
+               wrbuf_puts (w, "@set ");
+               wrbuf_puts (w, p->u.setname);
+               wrbuf_puts (w, " ");
+               break;
+    case CCL_RPN_TERM:
+       for (att = p->u.t.attr_list; att; att = att->next)
+               {
+                       char tmpattr[128];
+                       wrbuf_puts (w, "@attr ");
+                       if (att->set)
+                       {
+                               wrbuf_puts (w, att->set);
+                               wrbuf_puts (w, " ");
+                       }
+                       switch(att->kind)
+                       {
+                       case CCL_RPN_ATTR_NUMERIC:
+                               sprintf(tmpattr, "%d=%d ", att->type, att->value.numeric);
+                               wrbuf_puts (w, tmpattr);
+                               break;
+                       case CCL_RPN_ATTR_STRING:
+                               sprintf(tmpattr, "%d=", att->type);
+                               wrbuf_puts (w, tmpattr);
+                               wrbuf_puts(w, att->value.str);
+                               wrbuf_puts (w, " ");
+                               break;
+                       }
+               }
+               for (cp = p->u.t.term; *cp; cp++)
+               {
+                       if (*cp == ' ' || *cp == '\\')
+                               wrbuf_putc (w, '\\');
+                       wrbuf_putc (w, *cp);
+               }
+               wrbuf_puts (w, " ");
+               break;
+    }
+}
+
+/*
+ * Local variables:
+ * tab-width: 4
+ * c-basic-offset: 4
+ * End:
+ */
diff --git a/src/cclqfile.c b/src/cclqfile.c
new file mode 100644 (file)
index 0000000..b562bac
--- /dev/null
@@ -0,0 +1,262 @@
+/*
+ * Copyright (c) 1995, the EUROPAGATE consortium (see below).
+ *
+ * The EUROPAGATE consortium members are:
+ *
+ *    University College Dublin
+ *    Danmarks Teknologiske Videnscenter
+ *    An Chomhairle Leabharlanna
+ *    Consejo Superior de Investigaciones Cientificas
+ *
+ * Permission to use, copy, modify, distribute, and sell this software and
+ * its documentation, in whole or in part, for any purpose, is hereby granted,
+ * provided that:
+ *
+ * 1. This copyright and permission notice appear in all copies of the
+ * software and its documentation. Notices of copyright or attribution
+ * which appear at the beginning of any file must remain unchanged.
+ *
+ * 2. The names of EUROPAGATE or the project partners may not be used to
+ * endorse or promote products derived from this software without specific
+ * prior written permission.
+ *
+ * 3. Users of this software (implementors and gateway operators) agree to
+ * inform the EUROPAGATE consortium of their use of the software. This
+ * information will be used to evaluate the EUROPAGATE project and the
+ * software, and to plan further developments. The consortium may use
+ * the information in later publications.
+ * 
+ * 4. Users of this software agree to make their best efforts, when
+ * documenting their use of the software, to acknowledge the EUROPAGATE
+ * consortium, and the role played by the software in their work.
+ *
+ * THIS SOFTWARE IS PROVIDED "AS IS" AND WITHOUT WARRANTY OF ANY KIND,
+ * EXPRESS, IMPLIED, OR OTHERWISE, INCLUDING WITHOUT LIMITATION, ANY
+ * WARRANTY OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.
+ * IN NO EVENT SHALL THE EUROPAGATE CONSORTIUM OR ITS MEMBERS BE LIABLE
+ * FOR ANY SPECIAL, INCIDENTAL, INDIRECT OR CONSEQUENTIAL DAMAGES OF
+ * ANY KIND, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA
+ * OR PROFITS, WHETHER OR NOT ADVISED OF THE POSSIBILITY OF DAMAGE, AND
+ * ON ANY THEORY OF LIABILITY, ARISING OUT OF OR IN CONNECTION WITH THE
+ * USE OR PERFORMANCE OF THIS SOFTWARE.
+ *
+ */
+/* CCL qualifiers
+ * Europagate, 1995
+ *
+ * $Id: cclqfile.c,v 1.1 2003-10-27 12:21:30 adam Exp $
+ *
+ * Old Europagate Log:
+ *
+ * Revision 1.3  1995/05/16  09:39:26  adam
+ * LICENSE.
+ *
+ * Revision 1.2  1995/05/11  14:03:56  adam
+ * Changes in the reading of qualifier(s). New function: ccl_qual_fitem.
+ * New variable ccl_case_sensitive, which controls whether reserved
+ * words and field names are case sensitive or not.
+ *
+ * Revision 1.1  1995/04/17  09:31:45  adam
+ * Improved handling of qualifiers. Aliases or reserved words.
+ *
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+#include <yaz/ccl.h>
+
+void ccl_qual_field (CCL_bibset bibset, const char *cp, const char *qual_name)
+{
+    char qual_spec[128];
+    int type_ar[128];
+    int value_ar[128];
+    char *svalue_ar[128];
+    char *attsets[128];
+    int pair_no = 0;
+
+    while (pair_no < 128)
+    {
+        char *qual_value, *qual_type;
+        char *split, *setp;
+        int no_scan = 0;
+        
+        if (sscanf (cp, "%100s%n", qual_spec, &no_scan) < 1)
+           break;
+
+        if (!(split = strchr (qual_spec, '=')))
+        {
+           /* alias specification .. */
+            if (pair_no == 0)
+            {
+                ccl_qual_add_combi (bibset, qual_name, cp);
+                return;
+            }
+            break;
+        }
+       /* [set,]type=value ... */
+        cp += no_scan;
+        
+        *split++ = '\0';
+
+       setp = strchr (qual_spec, ',');
+       if (setp)
+       {
+           /* set,type=value ... */
+           *setp++ = '\0';
+            qual_type = setp;
+       }
+       else
+       {
+           /* type=value ... */
+            qual_type = qual_spec;
+       }
+        while (pair_no < 128)
+        {
+            int type, value;
+
+            qual_value = split;
+            if ((split = strchr (qual_value, ',')))
+                *split++ = '\0';
+
+           value = 0;
+            switch (qual_type[0])
+            {
+            case 'u':
+            case 'U':
+                type = CCL_BIB1_USE;
+                break;
+            case 'r':
+            case 'R':
+                type = CCL_BIB1_REL;
+                if (!ccl_stricmp (qual_value, "o"))
+                    value = CCL_BIB1_REL_ORDER;
+                break;                
+            case 'p':
+            case 'P':
+                type = CCL_BIB1_POS;
+                break;
+            case 's':
+            case 'S':
+                type = CCL_BIB1_STR;
+                if (!ccl_stricmp (qual_value, "pw"))
+                    value = CCL_BIB1_STR_WP;
+                if (!ccl_stricmp (qual_value, "al"))
+                    value = CCL_BIB1_STR_AND_LIST;
+                if (!ccl_stricmp (qual_value, "ol"))
+                    value = CCL_BIB1_STR_OR_LIST;
+                break;                
+            case 't':
+            case 'T':
+                type = CCL_BIB1_TRU;
+                if (!ccl_stricmp (qual_value, "l"))
+                    value = CCL_BIB1_TRU_CAN_LEFT;
+                else if (!ccl_stricmp (qual_value, "r"))
+                    value = CCL_BIB1_TRU_CAN_RIGHT;
+                else if (!ccl_stricmp (qual_value, "b"))
+                    value = CCL_BIB1_TRU_CAN_BOTH;
+                else if (!ccl_stricmp (qual_value, "n"))
+                    value = CCL_BIB1_TRU_CAN_NONE;
+                break;                
+            case 'c':
+            case 'C':
+                type = CCL_BIB1_COM;
+                break;
+            default:
+                type = atoi (qual_type);
+            }
+
+            type_ar[pair_no] = type;
+
+           if (value)
+           {
+               value_ar[pair_no] = value;
+               svalue_ar[pair_no] = 0;
+           }
+           else if (*qual_value >= '0' && *qual_value <= '9')
+           {
+               value_ar[pair_no] = atoi (qual_value);
+               svalue_ar[pair_no] = 0;
+           }
+           else
+           {
+               size_t len;
+               if (split)
+                   len = split - qual_value;
+               else
+                   len = strlen(qual_value);
+               svalue_ar[pair_no] = xmalloc(len+1);
+               memcpy(svalue_ar[pair_no], qual_value, len);
+               svalue_ar[pair_no][len] = '\0';
+           }
+           if (setp)
+           {
+               attsets[pair_no] = (char*) xmalloc (strlen(qual_spec)+1);
+               strcpy (attsets[pair_no], qual_spec);
+           }
+           else
+               attsets[pair_no] = 0;
+            pair_no++;
+            if (!split)
+                break;
+        }
+    }
+    ccl_qual_add_set (bibset, qual_name, pair_no, type_ar, value_ar, svalue_ar,
+                     attsets);
+}
+
+void ccl_qual_fitem (CCL_bibset bibset, const char *cp, const char *qual_name)
+{
+    if (*qual_name == '@')
+       ccl_qual_add_special(bibset, qual_name+1, cp);
+    else
+       ccl_qual_field(bibset, cp, qual_name);
+}
+
+/*
+ * ccl_qual_file: Read bibset definition from file.
+ * bibset:  Bibset
+ * inf:     FILE pointer.
+ *
+ * Each line format is:
+ *  <name> <t>=<v> <t>=<v> ....
+ *  Where <name> is name of qualifier;
+ *  <t>=<v> is a attribute definition pair where <t> is one of: 
+ *     u(use), r(relation), p(position), t(truncation), c(completeness) 
+ *     or plain integer.
+ *  <v> is an integer or special pseudo-value.
+ */
+void ccl_qual_file (CCL_bibset bibset, FILE *inf)
+{
+    char line[256];
+    char *cp, *cp1;
+    char qual_name[128];
+
+    while (fgets (line, 255, inf))
+    {
+        int  no_scan = 0;
+
+        cp = line;
+        if (*cp == '#')
+            continue;        /* ignore lines starting with # */
+        if (sscanf (cp, "%100s%n", qual_name, &no_scan) < 1)
+            continue;        /* also ignore empty lines */
+        cp += no_scan;
+       cp1 = strchr(cp, '#');
+       if (cp1)
+           *cp1 = '\0';
+        ccl_qual_fitem (bibset, cp, qual_name);
+    }
+}
+
+int ccl_qual_fname (CCL_bibset bibset, const char *fname)
+{
+    FILE *inf;
+    inf = fopen (fname, "r");
+    if (!inf)
+        return -1;
+    ccl_qual_file (bibset, inf);
+    fclose (inf);
+    return 0;
+}
diff --git a/src/cclqual.c b/src/cclqual.c
new file mode 100644 (file)
index 0000000..b68f70d
--- /dev/null
@@ -0,0 +1,371 @@
+/*
+ * Copyright (c) 1995, the EUROPAGATE consortium (see below).
+ *
+ * The EUROPAGATE consortium members are:
+ *
+ *    University College Dublin
+ *    Danmarks Teknologiske Videnscenter
+ *    An Chomhairle Leabharlanna
+ *    Consejo Superior de Investigaciones Cientificas
+ *
+ * Permission to use, copy, modify, distribute, and sell this software and
+ * its documentation, in whole or in part, for any purpose, is hereby granted,
+ * provided that:
+ *
+ * 1. This copyright and permission notice appear in all copies of the
+ * software and its documentation. Notices of copyright or attribution
+ * which appear at the beginning of any file must remain unchanged.
+ *
+ * 2. The names of EUROPAGATE or the project partners may not be used to
+ * endorse or promote products derived from this software without specific
+ * prior written permission.
+ *
+ * 3. Users of this software (implementors and gateway operators) agree to
+ * inform the EUROPAGATE consortium of their use of the software. This
+ * information will be used to evaluate the EUROPAGATE project and the
+ * software, and to plan further developments. The consortium may use
+ * the information in later publications.
+ * 
+ * 4. Users of this software agree to make their best efforts, when
+ * documenting their use of the software, to acknowledge the EUROPAGATE
+ * consortium, and the role played by the software in their work.
+ *
+ * THIS SOFTWARE IS PROVIDED "AS IS" AND WITHOUT WARRANTY OF ANY KIND,
+ * EXPRESS, IMPLIED, OR OTHERWISE, INCLUDING WITHOUT LIMITATION, ANY
+ * WARRANTY OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.
+ * IN NO EVENT SHALL THE EUROPAGATE CONSORTIUM OR ITS MEMBERS BE LIABLE
+ * FOR ANY SPECIAL, INCIDENTAL, INDIRECT OR CONSEQUENTIAL DAMAGES OF
+ * ANY KIND, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA
+ * OR PROFITS, WHETHER OR NOT ADVISED OF THE POSSIBILITY OF DAMAGE, AND
+ * ON ANY THEORY OF LIABILITY, ARISING OUT OF OR IN CONNECTION WITH THE
+ * USE OR PERFORMANCE OF THIS SOFTWARE.
+ *
+ */
+/* CCL qualifiers
+ * Europagate, 1995
+ *
+ * $Id: cclqual.c,v 1.1 2003-10-27 12:21:30 adam Exp $
+ *
+ * Old Europagate Log:
+ *
+ * Revision 1.9  1995/05/16  09:39:27  adam
+ * LICENSE.
+ *
+ * Revision 1.8  1995/05/11  14:03:57  adam
+ * Changes in the reading of qualifier(s). New function: ccl_qual_fitem.
+ * New variable ccl_case_sensitive, which controls whether reserved
+ * words and field names are case sensitive or not.
+ *
+ * Revision 1.7  1995/04/17  09:31:46  adam
+ * Improved handling of qualifiers. Aliases or reserved words.
+ *
+ * Revision 1.6  1995/02/23  08:32:00  adam
+ * Changed header.
+ *
+ * Revision 1.4  1995/02/14  19:55:12  adam
+ * Header files ccl.h/cclp.h are gone! They have been merged an
+ * moved to ../include/ccl.h.
+ * Node kind(s) in ccl_rpn_node have changed names.
+ *
+ * Revision 1.3  1995/02/14  16:20:56  adam
+ * Qualifiers are read from a file now.
+ *
+ * Revision 1.2  1995/02/14  10:25:56  adam
+ * The constructions 'qualifier rel term ...' implemented.
+ *
+ * Revision 1.1  1995/02/13  15:15:07  adam
+ * Added handling of qualifiers. Not finished yet.
+ *
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+#include <yaz/ccl.h>
+
+/* Definition of CCL_bibset pointer */
+struct ccl_qualifiers {
+    struct ccl_qualifier *list;
+    struct ccl_qualifier_special *special;
+};
+
+
+/* CCL Qualifier special */
+struct ccl_qualifier_special {
+    char *name;
+    char *value;
+    struct ccl_qualifier_special *next;
+};
+
+
+static struct ccl_qualifier *ccl_qual_lookup (CCL_bibset b,
+                                              const char *n, size_t len)
+{
+    struct ccl_qualifier *q;
+    for (q = b->list; q; q = q->next)
+        if (len == strlen(q->name) && !memcmp (q->name, n, len))
+            break;
+    return q;
+}
+
+
+void ccl_qual_add_special (CCL_bibset bibset, const char *n, const char *v)
+{
+    struct ccl_qualifier_special *p;
+    const char *pe;
+
+    for (p = bibset->special; p && strcmp(p->name, n); p = p->next)
+       ;
+    if (p)
+       xfree (p->value);
+    else
+    {
+       p = (struct ccl_qualifier_special *) xmalloc (sizeof(*p));
+       p->name = ccl_strdup (n);
+       p->value = 0;
+       p->next = bibset->special;
+       bibset->special = p;
+    }
+    while (strchr(" \t", *v))
+       ++v;
+    for (pe = v + strlen(v); pe != v; --pe)
+       if (!strchr(" \n\r\t", pe[-1]))
+           break;
+    p->value = (char*) xmalloc (pe - v + 1);
+    if (pe - v)
+       memcpy (p->value, v, pe - v);
+    p->value[pe - v] = '\0';
+}
+
+static int next_token(const char **cpp, const char **dst)
+{
+    int len = 0;
+    const char *cp = *cpp;
+    while (*cp && strchr(" \r\n\t\f", *cp))
+        cp++;
+    if (dst)
+        *dst = cp;
+    len = 0;
+    while (*cp && !strchr(" \r\n\t\f", *cp))
+    {
+        cp++;
+        len++;
+    }
+    *cpp = cp;
+    return len;
+}
+
+void ccl_qual_add_combi (CCL_bibset b, const char *n, const char *names)
+{
+    const char *cp, *cp1;
+    int i, len;
+    struct ccl_qualifier *q;
+    for (q = b->list; q && strcmp(q->name, n); q = q->next)
+       ;
+    if (q)
+        return ;
+    q = (struct ccl_qualifier *) xmalloc (sizeof(*q));
+    q->name = ccl_strdup (n);
+    q->attr_list = 0;
+    q->next = b->list;
+    b->list = q;
+    
+    cp = names;
+    for (i = 0; next_token(&cp, 0); i++)
+        ;
+    q->no_sub = i;
+    q->sub = (struct ccl_qualifier **) xmalloc (sizeof(*q->sub) *
+                                               (1+q->no_sub));
+    cp = names;
+    for (i = 0; (len = next_token(&cp, &cp1)); i++)
+    {
+        q->sub[i] = ccl_qual_lookup (b, cp1, len);
+    }
+}
+
+/*
+ * ccl_qual_add: Add qualifier to Bibset. If qualifier already
+ *               exists, then attributes are appendend to old
+ *               definition.
+ * name:    name of qualifier
+ * no:      No of attribute type/value pairs.
+ * pairs:   Attributes. pairs[0] first type, pair[1] first value,
+ *          ... pair[2*no-2] last type, pair[2*no-1] last value.
+ */
+
+void ccl_qual_add_set (CCL_bibset b, const char *name, int no,
+                      int *type_ar, int *value_ar, char **svalue_ar,
+                      char **attsets)
+{
+    struct ccl_qualifier *q;
+    struct ccl_rpn_attr **attrp;
+
+    ccl_assert (b);
+    for (q = b->list; q; q = q->next)
+        if (!strcmp (name, q->name))
+            break;
+    if (!q)
+    {
+        struct ccl_qualifier *new_qual =
+           (struct ccl_qualifier *)xmalloc (sizeof(*new_qual));
+        ccl_assert (new_qual);
+        
+        new_qual->next = b->list;
+        b->list = new_qual;
+        
+        new_qual->name = ccl_strdup (name);
+        attrp = &new_qual->attr_list;
+
+        new_qual->no_sub = 0;
+        new_qual->sub = 0;
+    }
+    else
+    {
+        if (q->sub)  /* suspect.. */
+            xfree (q->sub);
+        attrp = &q->attr_list;
+        while (*attrp)
+            attrp = &(*attrp)->next;
+    }
+    while (--no >= 0)
+    {
+        struct ccl_rpn_attr *attr;
+
+        attr = (struct ccl_rpn_attr *)xmalloc (sizeof(*attr));
+        ccl_assert (attr);
+       attr->set = *attsets++;
+        attr->type = *type_ar++;
+       if (*svalue_ar)
+       {
+           attr->kind = CCL_RPN_ATTR_STRING;
+           attr->value.str = *svalue_ar;
+       }
+       else
+       {
+           attr->kind = CCL_RPN_ATTR_NUMERIC;
+           attr->value.numeric = *value_ar;
+       }
+       svalue_ar++;
+       value_ar++;
+        *attrp = attr;
+        attrp = &attr->next;
+    }
+    *attrp = NULL;
+}
+
+/*
+ * ccl_qual_mk: Make new (empty) bibset.
+ * return:   empty bibset.
+ */
+CCL_bibset ccl_qual_mk (void)
+{
+    CCL_bibset b = (CCL_bibset)xmalloc (sizeof(*b));
+    ccl_assert (b);
+    b->list = NULL;     
+    b->special = NULL;
+    return b;
+}
+
+/*
+ * ccl_qual_rm: Delete bibset.
+ * b:        pointer to bibset
+ */
+void ccl_qual_rm (CCL_bibset *b)
+{
+    struct ccl_qualifier *q, *q1;
+    struct ccl_qualifier_special *sp, *sp1;
+
+    if (!*b)
+        return;
+    for (q = (*b)->list; q; q = q1)
+    {
+        struct ccl_rpn_attr *attr, *attr1;
+
+        for (attr = q->attr_list; attr; attr = attr1)
+       {
+           attr1 = attr->next;
+           if (attr->set)
+               xfree(attr->set);
+           if (attr->kind == CCL_RPN_ATTR_STRING)
+               xfree(attr->value.str);
+           xfree (attr);
+       }
+        q1 = q->next;
+       xfree (q->name);
+        if (q->sub)
+            xfree (q->sub);
+       xfree (q);
+    }
+    for (sp = (*b)->special; sp; sp = sp1)
+    {
+       sp1 = sp->next;
+       xfree (sp->name);
+       xfree (sp->value);
+       xfree (sp);
+    }
+    xfree (*b);
+    *b = NULL;
+}
+
+/*
+ * ccl_qual_search: Search for qualifier in bibset.
+ * b:      Bibset
+ * name:   Name of qualifier to search for (need no null-termination)
+ * len:    Length of name.
+ * return: Attribute info. NULL if not found.
+ */
+struct ccl_rpn_attr *ccl_qual_search (CCL_parser cclp,
+                                     const char *name, size_t len,
+                                      int seq)
+{
+    struct ccl_qualifier *q;
+    const char *aliases;
+    int case_sensitive = cclp->ccl_case_sensitive;
+
+    ccl_assert (cclp);
+    if (!cclp->bibset)
+       return NULL;
+
+    aliases = ccl_qual_search_special(cclp->bibset, "case");
+    if (aliases)
+       case_sensitive = atoi(aliases);
+
+    for (q = cclp->bibset->list; q; q = q->next)
+        if (strlen(q->name) == len)
+        {
+            if (case_sensitive)
+            {
+                if (!memcmp (name, q->name, len))
+                    break;
+            }
+            else
+            {
+                if (!ccl_memicmp (name, q->name, len))
+                    break;
+            }
+        }
+    if (q)
+    {
+        if (q->attr_list && seq == 0)
+            return q->attr_list;
+        if (seq < q->no_sub && q->sub[seq])
+        {
+            return q->sub[seq]->attr_list;
+        }
+    }
+    return 0;
+}
+
+const char *ccl_qual_search_special (CCL_bibset b,
+                                    const char *name)
+{
+    struct ccl_qualifier_special *q;
+    if (!b)
+       return 0;
+    for (q = b->special; q && strcmp(q->name, name); q = q->next)
+       ;
+    if (q)
+       return q->value;
+    return 0;
+}
diff --git a/src/cclstr.c b/src/cclstr.c
new file mode 100644 (file)
index 0000000..d7d76f9
--- /dev/null
@@ -0,0 +1,110 @@
+/*
+ * Copyright (c) 1995, the EUROPAGATE consortium (see below).
+ *
+ * The EUROPAGATE consortium members are:
+ *
+ *    University College Dublin
+ *    Danmarks Teknologiske Videnscenter
+ *    An Chomhairle Leabharlanna
+ *    Consejo Superior de Investigaciones Cientificas
+ *
+ * Permission to use, copy, modify, distribute, and sell this software and
+ * its documentation, in whole or in part, for any purpose, is hereby granted,
+ * provided that:
+ *
+ * 1. This copyright and permission notice appear in all copies of the
+ * software and its documentation. Notices of copyright or attribution
+ * which appear at the beginning of any file must remain unchanged.
+ *
+ * 2. The names of EUROPAGATE or the project partners may not be used to
+ * endorse or promote products derived from this software without specific
+ * prior written permission.
+ *
+ * 3. Users of this software (implementors and gateway operators) agree to
+ * inform the EUROPAGATE consortium of their use of the software. This
+ * information will be used to evaluate the EUROPAGATE project and the
+ * software, and to plan further developments. The consortium may use
+ * the information in later publications.
+ * 
+ * 4. Users of this software agree to make their best efforts, when
+ * documenting their use of the software, to acknowledge the EUROPAGATE
+ * consortium, and the role played by the software in their work.
+ *
+ * THIS SOFTWARE IS PROVIDED "AS IS" AND WITHOUT WARRANTY OF ANY KIND,
+ * EXPRESS, IMPLIED, OR OTHERWISE, INCLUDING WITHOUT LIMITATION, ANY
+ * WARRANTY OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.
+ * IN NO EVENT SHALL THE EUROPAGATE CONSORTIUM OR ITS MEMBERS BE LIABLE
+ * FOR ANY SPECIAL, INCIDENTAL, INDIRECT OR CONSEQUENTIAL DAMAGES OF
+ * ANY KIND, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA
+ * OR PROFITS, WHETHER OR NOT ADVISED OF THE POSSIBILITY OF DAMAGE, AND
+ * ON ANY THEORY OF LIABILITY, ARISING OUT OF OR IN CONNECTION WITH THE
+ * USE OR PERFORMANCE OF THIS SOFTWARE.
+ *
+ */
+/* CCL string compare utilities
+ * Europagate, 1995
+ *
+ * $Id: cclstr.c,v 1.1 2003-10-27 12:21:30 adam Exp $
+ *
+ * Old Europagate Log:
+ *
+ * Revision 1.3  1996/01/24  10:11:19  adam
+ * Added include of stdlib.h.
+ *
+ * Revision 1.2  1995/05/16  09:39:27  adam
+ * LICENSE.
+ *
+ * Revision 1.1  1995/05/11  14:03:57  adam
+ * Changes in the reading of qualifier(s). New function: ccl_qual_fitem.
+ * New variable ccl_case_sensitive, which controls whether reserved
+ * words and field names are case sensitive or not.
+ *
+ */
+#include <ctype.h>
+#include <stdio.h>
+#include <stdlib.h>
+
+#include <yaz/ccl.h>
+
+static int ccli_toupper (int c)
+{
+    return toupper (c);
+}
+
+int (*ccl_toupper)(int c) = NULL;
+
+int ccl_stricmp (const char *s1, const char *s2)
+{
+    if (!ccl_toupper)
+        ccl_toupper = ccli_toupper;
+    while (*s1 && *s2)
+    {
+        int c1, c2;
+        c1 = (*ccl_toupper)(*s1);
+        c2 = (*ccl_toupper)(*s2);
+        if (c1 != c2)
+            return c1 - c2;
+        s1++;
+        s2++;
+    }
+    return (*ccl_toupper)(*s1) - (*ccl_toupper)(*s2);
+}
+
+int ccl_memicmp (const char *s1, const char *s2, size_t n)
+{
+    if (!ccl_toupper)
+        ccl_toupper = ccli_toupper;
+    while (1)
+    {
+        int c1, c2;
+
+        c1 = (*ccl_toupper)(*s1);
+        c2 = (*ccl_toupper)(*s2);
+        if (n <= 1 || c1 != c2)
+            return c1 - c2;
+        s1++;
+        s2++;
+        --n;
+    }
+}
+
diff --git a/src/ccltoken.c b/src/ccltoken.c
new file mode 100644 (file)
index 0000000..70bc47d
--- /dev/null
@@ -0,0 +1,426 @@
+/*
+ * Copyright (c) 1995, the EUROPAGATE consortium (see below).
+ *
+ * The EUROPAGATE consortium members are:
+ *
+ *    University College Dublin
+ *    Danmarks Teknologiske Videnscenter
+ *    An Chomhairle Leabharlanna
+ *    Consejo Superior de Investigaciones Cientificas
+ *
+ * Permission to use, copy, modify, distribute, and sell this software and
+ * its documentation, in whole or in part, for any purpose, is hereby granted,
+ * provided that:
+ *
+ * 1. This copyright and permission notice appear in all copies of the
+ * software and its documentation. Notices of copyright or attribution
+ * which appear at the beginning of any file must remain unchanged.
+ *
+ * 2. The names of EUROPAGATE or the project partners may not be used to
+ * endorse or promote products derived from this software without specific
+ * prior written permission.
+ *
+ * 3. Users of this software (implementors and gateway operators) agree to
+ * inform the EUROPAGATE consortium of their use of the software. This
+ * information will be used to evaluate the EUROPAGATE project and the
+ * software, and to plan further developments. The consortium may use
+ * the information in later publications.
+ * 
+ * 4. Users of this software agree to make their best efforts, when
+ * documenting their use of the software, to acknowledge the EUROPAGATE
+ * consortium, and the role played by the software in their work.
+ *
+ * THIS SOFTWARE IS PROVIDED "AS IS" AND WITHOUT WARRANTY OF ANY KIND,
+ * EXPRESS, IMPLIED, OR OTHERWISE, INCLUDING WITHOUT LIMITATION, ANY
+ * WARRANTY OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.
+ * IN NO EVENT SHALL THE EUROPAGATE CONSORTIUM OR ITS MEMBERS BE LIABLE
+ * FOR ANY SPECIAL, INCIDENTAL, INDIRECT OR CONSEQUENTIAL DAMAGES OF
+ * ANY KIND, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA
+ * OR PROFITS, WHETHER OR NOT ADVISED OF THE POSSIBILITY OF DAMAGE, AND
+ * ON ANY THEORY OF LIABILITY, ARISING OUT OF OR IN CONNECTION WITH THE
+ * USE OR PERFORMANCE OF THIS SOFTWARE.
+ *
+ */
+/* CCL - lexical analysis
+ * Europagate, 1995
+ *
+ * $Id: ccltoken.c,v 1.1 2003-10-27 12:21:30 adam Exp $
+ *
+ * Old Europagate Log:
+ *
+ * Revision 1.10  1995/07/11  12:28:31  adam
+ * New function: ccl_token_simple (split into simple tokens) and
+ *  ccl_token_del (delete tokens).
+ *
+ * Revision 1.9  1995/05/16  09:39:28  adam
+ * LICENSE.
+ *
+ * Revision 1.8  1995/05/11  14:03:57  adam
+ * Changes in the reading of qualifier(s). New function: ccl_qual_fitem.
+ * New variable ccl_case_sensitive, which controls whether reserved
+ * words and field names are case sensitive or not.
+ *
+ * Revision 1.7  1995/04/19  12:11:24  adam
+ * Minor change.
+ *
+ * Revision 1.6  1995/04/17  09:31:48  adam
+ * Improved handling of qualifiers. Aliases or reserved words.
+ *
+ * Revision 1.5  1995/02/23  08:32:00  adam
+ * Changed header.
+ *
+ * Revision 1.3  1995/02/15  17:42:16  adam
+ * Minor changes of the api of this module. FILE* argument added
+ * to ccl_pr_tree.
+ *
+ * Revision 1.2  1995/02/14  19:55:13  adam
+ * Header files ccl.h/cclp.h are gone! They have been merged an
+ * moved to ../include/ccl.h.
+ * Node kind(s) in ccl_rpn_node have changed names.
+ *
+ * Revision 1.1  1995/02/13  12:35:21  adam
+ * First version of CCL. Qualifiers aren't handled yet.
+ *
+ */
+
+#include <string.h>
+#include <stdlib.h>
+#include <ctype.h>
+
+#include <yaz/ccl.h>
+
+/*
+ * token_cmp: Compare token with keyword(s)
+ * kw:     Keyword list. Each keyword is separated by space.
+ * token:  CCL token.
+ * return: 1 if token string matches one of the keywords in list;
+ *         0 otherwise.
+ */
+static int token_cmp (CCL_parser cclp, const char *kw, struct ccl_token *token)
+{
+    const char *cp1 = kw;
+    const char *cp2;
+    const char *aliases;
+    int case_sensitive = cclp->ccl_case_sensitive;
+
+    aliases = ccl_qual_search_special(cclp->bibset, "case");
+    if (aliases)
+       case_sensitive = atoi(aliases);
+    if (!kw)
+        return 0;
+    while ((cp2 = strchr (cp1, ' ')))
+    {
+        if (token->len == (size_t) (cp2-cp1))
+        {
+            if (case_sensitive)
+            {
+                if (!memcmp (cp1, token->name, token->len))
+                    return 1;
+            }
+            else
+            {
+                if (!ccl_memicmp (cp1, token->name, token->len))
+                    return 1;
+            }
+        }
+       cp1 = cp2+1;
+    }
+    if (case_sensitive)
+        return token->len == strlen(cp1) 
+            && !memcmp (cp1, token->name, token->len);
+    return token->len == strlen(cp1) &&
+        !ccl_memicmp (cp1, token->name, token->len);
+}
+
+/*
+ * ccl_token_simple: tokenize CCL raw tokens
+ */
+struct ccl_token *ccl_token_simple (const char *command)
+{
+    const char *cp = command;
+    struct ccl_token *first = NULL;
+    struct ccl_token *last = NULL;
+
+    while (1)
+    {
+       while (*cp && strchr (" \t\r\n", *cp))
+       {
+           cp++;
+           continue;
+       }
+       if (!first)
+       {
+           first = last = (struct ccl_token *)xmalloc (sizeof (*first));
+           ccl_assert (first);
+           last->prev = NULL;
+       }
+       else
+       {
+           last->next = (struct ccl_token *)xmalloc (sizeof(*first));
+           ccl_assert (last->next);
+           last->next->prev = last;
+           last = last->next;
+       }
+       last->next = NULL;
+       last->name = cp;
+       last->len = 1;
+       switch (*cp++)
+       {
+        case '\0':
+            last->kind = CCL_TOK_EOL;
+            return first;
+       case '\"':
+           last->kind = CCL_TOK_TERM;
+           last->name = cp;
+           last->len = 0;
+           while (*cp && *cp != '\"')
+           {
+               cp++;
+               ++ last->len;
+           }
+           if (*cp == '\"')
+               cp++;
+           break;
+       default:
+           while (*cp && !strchr (" \t\n\r", *cp))
+           {
+               cp++;
+               ++ last->len;
+           }
+            last->kind = CCL_TOK_TERM;
+       }
+    }
+    return first;
+}
+
+
+/*
+ * ccl_tokenize: tokenize CCL command string.
+ * return: CCL token list.
+ */
+struct ccl_token *ccl_parser_tokenize (CCL_parser cclp, const char *command)
+{
+    const char *aliases;
+    const char *cp = command;
+    struct ccl_token *first = NULL;
+    struct ccl_token *last = NULL;
+
+    while (1)
+    {
+       while (*cp && strchr (" \t\r\n", *cp))
+       {
+           cp++;
+           continue;
+       }
+       if (!first)
+       {
+           first = last = (struct ccl_token *)xmalloc (sizeof (*first));
+           ccl_assert (first);
+           last->prev = NULL;
+       }
+       else
+       {
+           last->next = (struct ccl_token *)xmalloc (sizeof(*first));
+           ccl_assert (last->next);
+           last->next->prev = last;
+           last = last->next;
+       }
+       last->next = NULL;
+       last->name = cp;
+       last->len = 1;
+       switch (*cp++)
+       {
+        case '\0':
+            last->kind = CCL_TOK_EOL;
+            return first;
+       case '(':
+           last->kind = CCL_TOK_LP;
+           break;
+       case ')':
+           last->kind = CCL_TOK_RP;
+           break;
+       case ',':
+           last->kind = CCL_TOK_COMMA;
+           break;
+       case '%':
+       case '!':
+           last->kind = CCL_TOK_PROX;
+            while (isdigit(*cp))
+           {
+               ++ last->len;
+               cp++;
+           }
+           break;
+       case '>':
+       case '<':
+       case '=':
+           if (*cp == '=' || *cp == '<' || *cp == '>')
+           {
+               cp++;
+               last->kind = CCL_TOK_REL;
+               ++ last->len;
+           }
+           else if (cp[-1] == '=')
+               last->kind = CCL_TOK_EQ;
+           else
+               last->kind = CCL_TOK_REL;
+           break;
+       case '\"':
+           last->kind = CCL_TOK_TERM;
+           last->name = cp;
+           last->len = 0;
+           while (*cp && *cp != '\"')
+           {
+               cp++;
+               ++ last->len;
+           }
+           if (*cp == '\"')
+               cp++;
+           break;
+       default:
+           if (!strchr ("(),%!><= \t\n\r", cp[-1]))
+           {
+               while (*cp && !strchr ("(),%!><= \t\n\r", *cp))
+               {
+                   cp++;
+                   ++ last->len;
+               }
+           }
+           last->kind = CCL_TOK_TERM;
+
+           aliases = ccl_qual_search_special(cclp->bibset, "and");
+           if (!aliases)
+               aliases = cclp->ccl_token_and;
+           if (token_cmp (cclp, aliases, last))
+               last->kind = CCL_TOK_AND;
+
+           aliases = ccl_qual_search_special(cclp->bibset, "or");
+           if (!aliases)
+               aliases = cclp->ccl_token_or;
+           if (token_cmp (cclp, aliases, last))
+               last->kind = CCL_TOK_OR;
+
+           aliases = ccl_qual_search_special(cclp->bibset, "not");
+           if (!aliases)
+               aliases = cclp->ccl_token_not;
+            if (token_cmp (cclp, aliases, last))
+               last->kind = CCL_TOK_NOT;
+
+           aliases = ccl_qual_search_special(cclp->bibset, "set");
+           if (!aliases)
+               aliases = cclp->ccl_token_set;
+
+           if (token_cmp (cclp, aliases, last))
+               last->kind = CCL_TOK_SET;
+       }
+    }
+    return first;
+}
+
+struct ccl_token *ccl_tokenize (const char *command)
+{
+    CCL_parser cclp = ccl_parser_create ();
+    struct ccl_token *list;
+
+    list = ccl_parser_tokenize (cclp, command);
+
+    ccl_parser_destroy (cclp);
+    return list;
+}
+
+/*
+ * ccl_token_del: delete CCL tokens
+ */
+void ccl_token_del (struct ccl_token *list)
+{
+    struct ccl_token *list1;
+
+    while (list) 
+    {
+        list1 = list->next;
+        xfree (list);
+        list = list1;
+    }
+}
+
+char *ccl_strdup (const char *str)
+{
+    int len = strlen(str);
+    char *p = (char*) xmalloc (len+1);
+    strcpy (p, str);
+    return p;
+}
+
+CCL_parser ccl_parser_create (void)
+{
+    CCL_parser p = (CCL_parser)xmalloc (sizeof(*p));
+    if (!p)
+       return p;
+    p->look_token = NULL;
+    p->error_code = 0;
+    p->error_pos = NULL;
+    p->bibset = NULL;
+
+    p->ccl_token_and = ccl_strdup("and");
+    p->ccl_token_or = ccl_strdup("or");
+    p->ccl_token_not = ccl_strdup("not andnot");
+    p->ccl_token_set = ccl_strdup("set");
+    p->ccl_case_sensitive = 1;
+
+    return p;
+}
+
+void ccl_parser_destroy (CCL_parser p)
+{
+    if (!p)
+       return;
+    xfree (p->ccl_token_and);
+    xfree (p->ccl_token_or);
+    xfree (p->ccl_token_not);
+    xfree (p->ccl_token_set);
+    xfree (p);
+}
+
+void ccl_parser_set_op_and (CCL_parser p, const char *op)
+{
+    if (p && op)
+    {
+       if (p->ccl_token_and)
+           xfree (p->ccl_token_and);
+       p->ccl_token_and = ccl_strdup (op);
+    }
+}
+
+void ccl_parser_set_op_or (CCL_parser p, const char *op)
+{
+    if (p && op)
+    {
+       if (p->ccl_token_or)
+           xfree (p->ccl_token_or);
+       p->ccl_token_or = ccl_strdup (op);
+    }
+}
+void ccl_parser_set_op_not (CCL_parser p, const char *op)
+{
+    if (p && op)
+    {
+       if (p->ccl_token_not)
+           xfree (p->ccl_token_not);
+       p->ccl_token_not = ccl_strdup (op);
+    }
+}
+void ccl_parser_set_op_set (CCL_parser p, const char *op)
+{
+    if (p && op)
+    {
+       if (p->ccl_token_set)
+           xfree (p->ccl_token_set);
+       p->ccl_token_set = ccl_strdup (op);
+    }
+}
+
+void ccl_parser_set_case (CCL_parser p, int case_sensitivity_flag)
+{
+    if (p)
+       p->ccl_case_sensitive = case_sensitivity_flag;
+}
diff --git a/src/charconv.sgm b/src/charconv.sgm
new file mode 100644 (file)
index 0000000..352643c
--- /dev/null
@@ -0,0 +1,586 @@
+<!-- ============================================================= -->
+<!-- MODULE:    Character to Entity Specification                  -->
+<!-- VERSION:   3.0 (Morgan Cundiff and Randll Barry)                                   -->
+<!-- DATE:      June 18, 2001                                  -->
+<!--                                                               -->
+<!-- MULBERRY INTERNAL VERSION CONTROL:                            -->
+<!-- $Id: charconv.sgm,v 1.1 2003-10-27 12:21:30 adam Exp $         -->
+<!-- ============================================================= -->
+
+<!-- ============================================================= -->
+<!-- SYSTEM:    MARC <-> SGML <-> XML Conversion                           -->
+<!--                                                               -->
+<!-- PURPOSE:   Define relationships between MARC Extended Latin   -->
+<!--            character set, character numbers, SGML entities    -->
+<!--            and XML entities.                                  -->
+<!--                                                               -->
+<!-- CONTAINS:  SGML Document conforming to the Character-Entity   -->
+<!--            Map File DTD                                       -->
+<!--                                                               -->
+<!-- MODULES REQUIRED:                                             -->
+<!--            None                                               -->
+<!--                                                               -->
+<!-- CREATED FOR:                                                  -->
+<!--            MARC Standards Office                              -->
+<!--                                                               -->
+<!-- ORIGINAL CREATION DATE:                                       -->
+<!--            October 1997                                       -->
+<!--                                                               -->
+<!-- CREATED BY:                                                   -->
+<!--            Mulberry Technologies, Inc. (TKG)                  -->
+<!--            17 West Jefferson Street, Suite 207                -->
+<!--            Rockville, MD  20850  USA                          -->
+<!--            Phone:  +1 301/315-9631                            -->
+<!--            Fax:    +1 301/315-8285                            -->
+<!--            e-mail: info@mulberrytech.com                      -->
+<!--            WWW:    http://www.mulberrytech.com                -->
+<!-- ============================================================= -->
+<entitymap>
+<character hex="E2 41" dec="226 065"><isoentity>Aacute</isoentity><desc>latin capital letter a with acute</desc><unientity>00C1</unientity></character>
+<character hex="E2 61" dec="226 097"><isoentity>aacute</isoentity><desc>latin small letter a with acute</desc><unientity>00E1</unientity></character>
+<character hex="E2 E6 41" dec="226 230 065"><isoentity>Abreveac</isoentity><desc>latin capital letter a with breve and acute</desc><unientity>1EAE</unientity></character>
+<character hex="E2 E6 61" dec="226 230 096"><isoentity>abreveac</isoentity><desc>latin small letter a with breve and acute</desc><unientity>1EAF</unientity></character>
+<character hex="E6 F2 41" dec="230 242 065"><isoentity>Abrevedb</isoentity><desc>latin capital letter a with breve and dot below</desc><unientity>1EB6</unientity></character>
+<character hex="E6 F2 61" dec="230 242 097"><isoentity>abrevedb</isoentity><desc>latin small letter a with breve and dot below</desc><unientity>1EB7</unientity></character>
+<character hex="E1 E6 41" dec="225 230 065"><isoentity>Abrevegr</isoentity><desc>latin capital letter a with breve and grave</desc><unientity>1EB0</unientity></character>
+<character hex="E1 E6 61" dec="225 230 097"><isoentity>abrevegr</isoentity><desc>latin small letter a with breve and grave</desc><unientity>1EB1</unientity></character>
+<character hex="E0 E6 41" dec="224 230 065"><isoentity>Abreveha</isoentity><desc>latin capital letter a with breve and hook above</desc><unientity>1EB2</unientity></character>
+<character hex="E0 E6 61" dec="224 230 097"><isoentity>abreveha</isoentity><desc>latin small letter a with breve and hook above</desc><unientity>1EB3</unientity></character>
+<character hex="E4 E6 41" dec="228 230 065"><isoentity>Abreveti</isoentity><desc>latin capital letter a with breve and tilde</desc><unientity>1EB4</unientity></character>
+<character hex="E4 E6 61" dec="228 230 097"><isoentity>abreveti</isoentity><desc>latin small letter a with breve and tilde</desc><unientity>1EB5</unientity></character>
+<character hex="E6 41" dec="230 065"><isoentity>Abreve</isoentity><desc>latin capital letter a with breve</desc><unientity>0102</unientity></character>
+<character hex="E6 61" dec="230 097"><isoentity>abreve</isoentity><desc>latin small letter a with breve</desc><unientity>0103</unientity></character>
+<character hex="E9 41" dec="233 065"><isoentity>Acaron</isoentity><desc>latin capital letter a with caron</desc><unientity>01CD</unientity></character>
+<character hex="E9 61" dec="233 097"><isoentity>acaron</isoentity><desc>latin small letter a with caron</desc><unientity>01CE</unientity></character>
+<character hex="E3 E2 41" dec="227 226 065"><isoentity>Acircac</isoentity><desc>latin capital letter a with circumflex and acute</desc><unientity>1EA4</unientity></character>
+<character hex="E3 E2 61" dec="227 226 097"><isoentity>acircac</isoentity><desc>latin small letter a with circumflex and acute</desc><unientity>1EA5</unientity></character>
+<character hex="E3 F2 41" dec="227 242 065"><isoentity>Acircdb</isoentity><desc>latin capital letter a with circumflex and dot below</desc><unientity>1EAC</unientity></character>
+<character hex="E3 F2 61" dec="227 242 097"><isoentity>acircdb</isoentity><desc>latin small letter a with circumflex and dot below</desc><unientity>1EAD</unientity></character>
+<character hex="E3 E1 41" dec="227 225 065"><isoentity>acircgr</isoentity><desc>latin capital letter a with circumflex and grave</desc><unientity>1EA6</unientity></character>
+<character hex="E3 E1 61" dec="227 225 097"><isoentity>acircgr</isoentity><desc>latin small letter a with circumflex and grave</desc><unientity>1EA7</unientity></character>
+<character hex="E3 E0 41" dec="227 224 064"><isoentity>Acircha</isoentity><desc>latin capital letter a with circumflex and hook above</desc><unientity>1EA8</unientity></character>
+<character hex="E3 E0 61" dec="227 224 097"><isoentity>acircha</isoentity><desc>latin small letter a with circumflex and hook above</desc><unientity>1EA9</unientity></character>
+<character hex="E4 E3 41" dec="228 227 065"><isoentity>Acircti</isoentity><desc>latin capital letter a with circumflex and tilde</desc><unientity>1EAA</unientity></character>
+<character hex="E4 E3 61" dec="228 227 097"><isoentity>acircti</isoentity><desc>latin small letter a with circumflex and tilde</desc><unientity>1EAB</unientity></character>
+<character hex="E3 41" dec="227 065"><isoentity>Acirc</isoentity><desc>latin capital letter a with circumflex</desc><unientity>00C2</unientity></character>
+<character hex="E3 61" dec="227 097"><isoentity>acirc</isoentity><desc>latin small letter a with circumflex</desc><unientity>00E2</unientity></character>
+<character hex="E2" dec="226"><isoentity>acute</isoentity><desc>combining acute accent</desc><unientity>0301</unientity></character>
+<character hex="E5 E7 41" dec="229 231 065"><isoentity>Adotama</isoentity><desc>latin capital letter a with dot above and macron</desc><unientity>01E0</unientity></character>
+<character hex="E5 E7 61" dec="229 231 097"><isoentity>adotama</isoentity><desc>latin small letter a with dot above and macron</desc><unientity>01E1</unientity></character>
+<character hex="F2 41" dec="242 065"><isoentity>Adotb</isoentity><desc>latin capital letter a with dot below</desc><unientity>1EA0</unientity></character>
+<character hex="F2 61" dec="242 097"><isoentity>adotb</isoentity><desc>latin small letter a with dot below</desc><unientity>1EA1</unientity></character>
+<character hex="E7 41" dec="231 065"><isoentity>Adot</isoentity><desc>latin capital letter a with dot above</desc><unientity>0226</unientity></character>
+<character hex="E7 61" dec="231 097"><isoentity>adot</isoentity><desc>latin small letter a with dot above</desc><unientity>0227</unientity></character>
+<character hex="E2 A5" dec="226 165"><isoentity>Aeacute</isoentity><desc>latin capital letter ae with acute</desc><unientity>01FC</unientity></character>
+<character hex="E2 B5" dec="226 181"><isoentity>aeacute</isoentity><desc>latin small letter ae with acute</desc><unientity>01FD</unientity></character>
+<character hex="A5" dec="165"><isoentity>AElig</isoentity><desc>latin capital letter ae</desc><unientity>00C6</unientity></character>
+<character hex="B5" dec="181"><isoentity>aelig</isoentity><desc>latin small letter ae</desc><unientity>00E6</unientity></character>
+<character hex="E5 A5" dec="229 065"><isoentity>Aemacr</isoentity><desc>latin capital letter ae with macron</desc><unientity>01E2</unientity></character>
+<character hex="E5 B5" dec="229 097"><isoentity>aemacr</isoentity><desc>latin small letter ae with macron</desc><unientity>01E3</unientity></character>
+<character hex="E1 41" dec="225 065"><isoentity>Agrave</isoentity><desc>latin capital letter a with grave</desc><unientity>00C0</unientity></character>
+<character hex="E1 61" dec="225 097"><isoentity>agrave</isoentity><desc>latin small letter a with grave</desc><unientity>00E0</unientity></character>
+<character hex="E0 41" dec="224 065"><isoentity>Ahooka</isoentity><desc>latin capital letter a with hook above</desc><unientity>1EA2</unientity></character>
+<character hex="E0 61" dec="224 097"><isoentity>ahooka</isoentity><desc>latin small letter a with hook above</desc><unientity>1EA3</unientity></character>
+<character hex="1B 67 61 1B 73" dec="027 103 097 027 115"><isoentity>alpha</isoentity><desc>greek small letter alpha</desc><unientity>03B1</unientity></character>
+<character hex="E5 41" dec="229 065"><isoentity>Amacr</isoentity><desc>latin capital letter a with macron</desc><unientity>0100</unientity></character>
+<character hex="E5 61" dec="229 097"><isoentity>amacr</isoentity><desc>latin small letter a with macron</desc><unientity>0101</unientity></character>
+<character hex="F1 41" dec="241 065"><isoentity>Aogon</isoentity><desc>latin capital letter a with ogonek</desc><unientity>0104</unientity></character>
+<character hex="F1 61" dec="241 097"><isoentity>aogon</isoentity><desc>latin small letter a with ogonek</desc><unientity>0105</unientity></character>
+<character hex="E2 EA 41" dec="226 234 065"><isoentity>Aringac</isoentity><desc>latin capital letter a with ring above and acute</desc><unientity>01FA</unientity></character>
+<character hex="E2 EA 61" dec="226 234 096"><isoentity>aringac</isoentity><desc>latin small letter a with ring above and acute</desc><unientity>01FB</unientity></character>
+<character hex="EA 41" dec="234 065"><isoentity>Aring</isoentity><desc>latin capital letter a with ring</desc><unientity>00C5</unientity></character>
+<character hex="EA 61" dec="234 097"><isoentity>aring</isoentity><desc>latin small letter a with ring</desc><unientity>00E5</unientity></character>
+<character hex="E4 41" dec="228 065"><isoentity>Atilde</isoentity><desc>latin capital letter a with tilde</desc><unientity>00C3</unientity></character>
+<character hex="E4 61" dec="228 097"><isoentity>atilde</isoentity><desc>latin small letter a with tilde</desc><unientity>00E3</unientity></character>
+<character hex="E5 E8 41" dec="229 232 065"><isoentity>Aumlma</isoentity><desc>latin capital letter a with diaeresis and macron</desc><unientity>01DE</unientity></character>
+<character hex="E5 E8 61" dec="229 232 097"><isoentity>aumlma</isoentity><desc>latin small letter a with diaeresis and macron</desc><unientity>01DF</unientity></character>
+<character hex="E8 41" dec="232 065"><isoentity>Auml</isoentity><desc>latin capital letter a with umlaut</desc><unientity>00C4</unientity></character>
+<character hex="E8 61" dec="232 097"><isoentity>auml</isoentity><desc>latin small letter a with umlaut</desc><unientity>00E4</unientity></character>
+<character hex="E7 42" dec="231 066"><isoentity>Bdota</isoentity><desc>latin capital letter b with dot above</desc><unientity>1E02</unientity></character>
+<character hex="E7 62" dec="231 098"><isoentity>bdota</isoentity><desc>latin small letter b with dot above</desc><unientity>1E03</unientity></character>
+<character hex="F2 42" dec="242 066"><isoentity>Bdotb</isoentity><desc>latin capital letter b with dot below</desc><unientity>1E04</unientity></character>
+<character hex="F2 62" dec="242 098"><isoentity>bdotb</isoentity><desc>latin small letter b with dot below</desc><unientity>1E05</unientity></character>
+<character hex="1B 67 62 1B 73" dec="027 103 098 027 115"><isoentity>beta</isoentity><desc>greek small letter beta</desc><unientity>03B2</unientity></character>
+<character hex="F6 42" dec="246 066"><isoentity>Bmacrb</isoentity><desc>latin capital letter b with line below</desc><unientity>1E06</unientity></character>
+<character hex="F6 62" dec="246 098"><isoentity>bmacrb</isoentity><desc>latin small letter b with line below</desc><unientity>1E07</unientity></character>
+<character hex="F9" dec="249"><isoentity>breveb</isoentity><desc>combining breve below</desc><unientity>032E</unientity></character>
+<character hex="E6" dec="230"><isoentity>breve</isoentity><desc>combining breve</desc><unientity>0306</unientity></character>
+<character hex="E2 43" dec="226 067"><isoentity>Cacute</isoentity><desc>latin capital letter c with acute</desc><unientity>0106</unientity></character>
+<character hex="E2 63" dec="226 099"><isoentity>cacute</isoentity><desc>latin small letter c with acute</desc><unientity>0107</unientity></character>
+<character hex="EF" dec="239"><isoentity>candra</isoentity><desc>combining candrabindu</desc><unientity>0310</unientity></character>
+<character hex="E9" dec="233"><isoentity>caron</isoentity><desc>combining caron</desc><unientity>030C</unientity></character>
+<character hex="E9 43" dec="233 067"><isoentity>Ccaron</isoentity><desc>latin capital letter c with caron</desc><unientity>010C</unientity></character>
+<character hex="E9 63" dec="233 099"><isoentity>ccaron</isoentity><desc>latin small letter c with caron</desc><unientity>010D</unientity></character>
+<character hex="E2 F0 43" dec="226 240 067"><isoentity>Ccedilac</isoentity><desc>latin capital letter c with cedilla and acute</desc><unientity>1E08</unientity></character>
+<character hex="E2 F0 63" dec="226 240 099"><isoentity>ccedilac</isoentity><desc>latin small letter c with cedilla and acute</desc><unientity>1E09</unientity></character>
+<character hex="F0 43" dec="240 067"><isoentity>Ccedil</isoentity><desc>latin capital letter c with cedilla</desc><unientity>00C7</unientity></character>
+<character hex="F0 63" dec="240 099"><isoentity>ccedil</isoentity><desc>latin small letter c with cedilla</desc><unientity>00E7</unientity></character>
+<character hex="E3 43" dec="227 067"><isoentity>Ccirc</isoentity><desc>latin capital letter c with circumflex</desc><unientity>0108</unientity></character>
+<character hex="E3 63" dec="227 099"><isoentity>ccirc</isoentity><desc>latin small letter c with circumflex</desc><unientity>0109</unientity></character>
+<character hex="E7 43" dec="231 067"><isoentity>Cdot</isoentity><desc>latin capital letter c with dot above</desc><unientity>010A</unientity></character>
+<character hex="E7 63" dec="231 099"><isoentity>cdot</isoentity><desc>latin small letter c with dot above</desc><unientity>010B</unientity></character>
+<character hex="F0" dec="240"><isoentity>cedil</isoentity><desc>combining cedilla</desc><unientity>0327</unientity></character>
+<character hex="E3" dec="227"><isoentity>circ</isoentity><desc>combining circumflex</desc><unientity>0302</unientity></character>
+<character hex="FE" dec="254"><isoentity>commaa</isoentity><desc>combining comma above</desc><unientity>0313</unientity></character>
+<character hex="F7" dec="247"><isoentity>commab</isoentity><desc>combining comma below</desc><unientity>0326</unientity></character>
+<character hex="C2" dec="194"><isoentity>copysr</isoentity><desc>sound recording copyright</desc><unientity>2117</unientity></character>
+<character hex="C3" dec="195"><isoentity>copy</isoentity><desc>copyright sign</desc><unientity>00A9</unientity></character>
+<character hex="EE" dec="238"><isoentity>dblac</isoentity><desc>combining double acute accent</desc><unientity>030B</unientity></character>
+<character hex="F3" dec="243"><isoentity>dbldotb</isoentity><desc>combining double dot below</desc><unientity>0324</unientity></character>
+<character hex="F5" dec="245"><isoentity>dblunder</isoentity><desc>combining double low line</desc><unientity>0333</unientity></character>
+<character hex="E9 44" dec="233 068"><isoentity>Dcaron</isoentity><desc>latin capital letter d with caron</desc><unientity>010E</unientity></character>
+<character hex="E9 64" dec="233 100"><isoentity>dcaron</isoentity><desc>latin small letter d with caron</desc><unientity>010F</unientity></character>
+<character hex="F7 44" dec="247 068"><isoentity>Dcommab</isoentity><desc>latin capital letter d with comma below</desc><unientity>1E10</unientity></character>
+<character hex="F7 64" dec="247 100"><isoentity>dcommab</isoentity><desc>latin small letter d with comma below</desc><unientity>1E11</unientity></character>
+<character hex="E7 44" dec="231 068"><isoentity>Ddota</isoentity><desc>latin capital letter d with dot above</desc><unientity>1E0A</unientity></character>
+<character hex="E7 64" dec="231 100"><isoentity>ddota</isoentity><desc>latin small letter d with dot above</desc><unientity>1E0B</unientity></character>
+<character hex="F2 44" dec="242 068"><isoentity>Ddotb</isoentity><desc>latin capital letter d with dot below</desc><unientity>1E0C</unientity></character>
+<character hex="F2 64" dec="242 100"><isoentity>ddotb</isoentity><desc>latin small letter d with dot below</desc><unientity>1E0D</unientity></character>
+<character hex="C0" dec="192"><isoentity>deg</isoentity><desc>degree sign</desc><unientity>00B0</unientity></character>
+<character hex="F6 44" dec="246 068"><isoentity>Dmacrb</isoentity><desc>latin capital letter d with line below</desc><unientity>1E0E</unientity></character>
+<character hex="F6 64" dec="246 100"><isoentity>dmacrb</isoentity><desc>latin small letter d with line below</desc><unientity>1E0F</unientity></character>
+<character hex="F2" dec="242"><isoentity>dotb</isoentity><desc>combining dot below</desc><unientity>0323</unientity></character>
+<character hex="E7" dec="231"><isoentity>dot</isoentity><desc>combining dot above</desc><unientity>0307</unientity></character>
+<character hex="A3" dec="163"><isoentity>Dstrok</isoentity><desc>latin capital letter d with stroke</desc><unientity>0110</unientity></character>
+<character hex="B3" dec="179"><isoentity>dstrok</isoentity><desc>latin small letter d with stroke</desc><unientity>0111</unientity></character>
+<character hex="E2 45" dec="226 069"><isoentity>Eacute</isoentity><desc>latin capital letter e with acute</desc><unientity>00C9</unientity></character>
+<character hex="E2 65" dec="226 101"><isoentity>eacute</isoentity><desc>latin small letter e with acute</desc><unientity>00E9</unientity></character>
+<character hex="E6 45" dec="230 069"><isoentity>Ebreve</isoentity><desc>latin capital letter e with breve</desc><unientity>0114</unientity></character>
+<character hex="E6 65" dec="230 101"><isoentity>ebreve</isoentity><desc>latin small letter e with breve</desc><unientity>0115</unientity></character>
+<character hex="E9 45" dec="233 069"><isoentity>Ecaron</isoentity><desc>latin capital letter e with caron</desc><unientity>011A</unientity></character>
+<character hex="E9 65" dec="233 101"><isoentity>ecaron</isoentity><desc>latin small letter e with caron</desc><unientity>011B</unientity></character>
+<character hex="E6 F0 45" dec="230 240 069"><isoentity>Ecedilbr</isoentity><desc>latin capital letter e with cedilla and breve</desc><unientity>1E1C</unientity></character>
+<character hex="E6 F0 65" dec="230 240 101"><isoentity>ecedilbr</isoentity><desc>latin small letter e with cedilla and breve</desc><unientity>1E1D</unientity></character>
+<character hex="F0 45" dec="240 069"><isoentity>Ecedil</isoentity><desc>latin capital letter e with cedilla</desc><unientity>0228</unientity></character>
+<character hex="F0 65" dec="240 101"><isoentity>ecedil</isoentity><desc>latin small letter e with cedilla</desc><unientity>0229</unientity></character>
+<character hex="E3 E2 45" dec="227 226 069"><isoentity>Ecircac</isoentity><desc>latin capital letter e with circumflex and acute</desc><unientity>1EBE</unientity></character>
+<character hex="E3 E2 65" dec="227 226 101"><isoentity>ecircac</isoentity><desc>latin small letter e with circumflex and acute</desc><unientity>1EBF</unientity></character>
+<character hex="E3 F2 45" dec="227 242 069"><isoentity>Ecircdb</isoentity><desc>latin capital letter e with circumflex and dot below</desc><unientity>1EC6</unientity></character>
+<character hex="E3 F2 65" dec="227 242 101"><isoentity>ecircdb</isoentity><desc>latin small letter e with circumflex and dot below</desc><unientity>1EC7</unientity></character>
+<character hex="E1 E3 45" dec="225 227 069"><isoentity>Ecircgr</isoentity><desc>latin capital letter e with circumflex and grave</desc><unientity>1EC0</unientity></character>
+<character hex="E1 E3 65" dec="225 227 101"><isoentity>ecircgr</isoentity><desc>latin small letter e with circumflex and grave</desc><unientity>1EC1</unientity></character>
+<character hex="E3 E0 45" dec="227 224 069"><isoentity>Ecircha</isoentity><desc>latin capital letter e with circumflex and hook above</desc><unientity>1EC2</unientity></character>
+<character hex="E3 E0 65" dec="227 224 101"><isoentity>ecircha</isoentity><desc>latin small letter e with circumflex and hook above</desc><unientity>1EC3</unientity></character>
+<character hex="E4 E3 45" dec="228 227 069"><isoentity>Ecircti</isoentity><desc>latin capital letter e with circumflex and tilde</desc><unientity>1EC4</unientity></character>
+<character hex="E3 45" dec="227 069"><isoentity>Ecirc</isoentity><desc>latin capital letter e with circumflex</desc><unientity>00CA</unientity></character>
+<character hex="E3 65" dec="227 101"><isoentity>ecirc</isoentity><desc>latin small letter e with circumflex</desc><unientity>00EA</unientity></character>
+<character hex="F2 45" dec="242 069"><isoentity>Edotb</isoentity><desc>latin capital letter e with dot below</desc><unientity>1EB8</unientity></character>
+<character hex="F2 65" dec="242 101"><isoentity>edotb</isoentity><desc>latin small letter e with dot below</desc><unientity>1EB9</unientity></character>
+<character hex="E7 45" dec="231 069"><isoentity>Edot</isoentity><desc>latin capital letter e with dot above</desc><unientity>0116</unientity></character>
+<character hex="E7 65" dec="231 101"><isoentity>edot</isoentity><desc>latin small letter e with dot above</desc><unientity>0117</unientity></character>
+<character hex="E1 45" dec="225 069"><isoentity>Egrave</isoentity><desc>latin capital letter e with grave</desc><unientity>00C8</unientity></character>
+<character hex="E1 65" dec="225 101"><isoentity>egrave</isoentity><desc>latin small letter e with grave</desc><unientity>00E8</unientity></character>
+<character hex="E0 45" dec="224 069"><isoentity>Ehooka</isoentity><desc>latin capital letter e with hook above</desc><unientity>1EBA</unientity></character>
+<character hex="E0 65" dec="224 101"><isoentity>ehooka</isoentity><desc>latin small letter e with hook above</desc><unientity>1EBB</unientity></character>
+<character hex="E2 E5 45" dec="226 229 069"><isoentity>Emacrac</isoentity><desc>latin capital letter e with macron and acute</desc><unientity>1E16</unientity></character>
+<character hex="E2 E5 65" dec="226 229 101"><isoentity>emacrac</isoentity><desc>latin small letter e with macron and acute</desc><unientity>1E17</unientity></character>
+<character hex="E1 E5 45" dec="225 229 069"><isoentity>Emacrgr</isoentity><desc>latin capital letter e with macron and grave</desc><unientity>1E14</unientity></character>
+<character hex="E1 E5 65" dec="225 229 101"><isoentity>emacrgr</isoentity><desc>latin small letter e with macron and grave</desc><unientity>1E15</unientity></character>
+<character hex="E5 45" dec="229 069"><isoentity>Emacr</isoentity><desc>latin capital letter e with macron</desc><unientity>0112</unientity></character>
+<character hex="E5 65" dec="229 101"><isoentity>emacr</isoentity><desc>latin small letter e with macron</desc><unientity>0113</unientity></character>
+<character hex="F1 45" dec="241 069"><isoentity>Eogon</isoentity><desc>latin capital letter e with ogon</desc><unientity>0118</unientity></character>
+<character hex="F1 65" dec="241 101"><isoentity>eogon</isoentity><desc>latin small letter e with ogon</desc><unientity>0119</unientity></character>
+<character hex="BA" dec="186"><isoentity>eth</isoentity><desc>latin small letter eth</desc><unientity>00F0</unientity></character>
+<character hex="E4 45" dec="228 069"><isoentity>Etilde</isoentity><desc>latin capital letter e with tilde</desc><unientity>1EBC</unientity></character>
+<character hex="E4 65" dec="228 101"><isoentity>etilde</isoentity><desc>latin small letter e with tilde</desc><unientity>1EBD</unientity></character>
+<character hex="E8 45" dec="232 069"><isoentity>Euml</isoentity><desc>latin capital letter e with umlaut</desc><unientity>00CB</unientity></character>
+<character hex="E8 65" dec="232 101"><isoentity>euml</isoentity><desc>latin small letter e with umlaut</desc><unientity>00EB</unientity></character>
+<character hex="E7 46" dec="231 070"><isoentity>Fdot</isoentity><desc>latin capital letter f with dot above</desc><unientity>1E1E</unientity></character>
+<character hex="E7 66" dec="231 102"><isoentity>fdot</isoentity><desc>latin small letter f with dot above</desc><unientity>1E1F</unientity></character>
+<character hex="A9" dec="169"><isoentity>flat</isoentity><desc>musical flat sign</desc><unientity>266D</unientity></character>
+<character hex="E2 47" dec="226 071"><isoentity>Gacute</isoentity><desc>latin capital letter g with acute</desc><unientity>01F4</unientity></character>
+<character hex="E2 67" dec="226 103"><isoentity>gacute</isoentity><desc>latin small letter g with acute</desc><unientity>01F5</unientity></character>
+<character hex="1B 67 63 1B 73" dec="027 103 099 027 115"><isoentity>gamma</isoentity><desc>greek small letter gamma</desc><unientity>03B3</unientity></character>
+<character hex="E6 47" dec="230 071"><isoentity>Gbreve</isoentity><desc>latin capital letter g with breve</desc><unientity>011E</unientity></character>
+<character hex="E6 67" dec="230 103"><isoentity>gbreve</isoentity><desc>latin small letter g with breve</desc><unientity>011F</unientity></character>
+<character hex="E9 47" dec="233 071"><isoentity>Gcaron</isoentity><desc>latin capital letter g with caron</desc><unientity>01E6</unientity></character>
+<character hex="E9 67" dec="233 103"><isoentity>gcaron</isoentity><desc>latin small letter g with caron</desc><unientity>01E7</unientity></character>
+<character hex="F0 47" dec="240 071"><isoentity>Gcedil</isoentity><desc>latin capital letter g with cedilla</desc><unientity>0122</unientity></character>
+<character hex="F0 67" dec="240 103"><isoentity>gcedil</isoentity><desc>latin small letter g with cedilla</desc><unientity>0123</unientity></character>
+<character hex="E3 47" dec="227 071"><isoentity>Gcirc</isoentity><desc>latin capital letter g with circumflex</desc><unientity>011C</unientity></character>
+<character hex="E3 67" dec="227 103"><isoentity>gcirc</isoentity><desc>latin small letter g with circumflex</desc><unientity>011D</unientity></character>
+<character hex="E7 47" dec="231 071"><isoentity>Gdot</isoentity><desc>latin capital letter g with dot above</desc><unientity>0120</unientity></character>
+<character hex="E7 67" dec="231 103"><isoentity>gdot</isoentity><desc>latin small letter g with dot above</desc><unientity>0121</unientity></character>
+<character hex="E5 47" dec="229 071"><isoentity>Gmacr</isoentity><desc>latin capital letter g with macron</desc><unientity>1E20</unientity></character>
+<character hex="E5 67" dec="229 103"><isoentity>gmacr</isoentity><desc>latin small letter g with macron</desc><unientity>1E21</unientity></character>
+<character hex="E1" dec="225"><isoentity>grave</isoentity><desc>combining grave accent</desc><unientity>0300</unientity></character>
+<character hex="F5 47" dec="245 071"><isoentity>Gstrok</isoentity><desc>latin capital letter g with stroke</desc><unientity>01E4</unientity></character>
+<character hex="F5 67" dec="245 103"><isoentity>gstrok</isoentity><desc>latin small letter g with stroke</desc><unientity>01E5</unientity></character>
+<character hex="B7" dec="183"><isoentity>hardsign</isoentity><desc>modifier letter double prime</desc><unientity>02BA</unientity></character>
+<character hex="F9 48" dec="249 072"><isoentity>Hbreveb</isoentity><desc>latin capital letter h with breve below</desc><unientity>1E2A</unientity></character>
+<character hex="F9 68" dec="249 104"><isoentity>hbreveb</isoentity><desc>latin small letter h with breve below</desc><unientity>1E2B</unientity></character>
+<character hex="E9 48" dec="233 072"><isoentity>Hcaron</isoentity><desc>latin capital letter h with caron</desc><unientity>021E</unientity></character>
+<character hex="E9 68" dec="233 104"><isoentity>hcaron</isoentity><desc>latin small letter h with caron</desc><unientity>021F</unientity></character>
+<character hex="F0 48" dec="240 072"><isoentity>Hcedil</isoentity><desc>latin capital letter h with cedilla</desc><unientity>1E28</unientity></character>
+<character hex="F0 68" dec="240 104"><isoentity>hcedil</isoentity><desc>latin small letter h with cedilla</desc><unientity>1E29</unientity></character>
+<character hex="E3 48" dec="227 072"><isoentity>Hcirc</isoentity><desc>latin capital letter h with circumflex</desc><unientity>0124</unientity></character>
+<character hex="E3 68" dec="227 104"><isoentity>hcirc</isoentity><desc>latin small letter h with circumflex</desc><unientity>0125</unientity></character>
+<character hex="F2 48" dec="242 072"><isoentity>Hdotb</isoentity><desc>latin capital letter h with dot below</desc><unientity>1E24</unientity></character>
+<character hex="F2 68" dec="242 104"><isoentity>hdotb</isoentity><desc>latin small letter h with dot below</desc><unientity>1E25</unientity></character>
+<character hex="E7 48" dec="231 072"><isoentity>Hdot</isoentity><desc>latin capital letter h with dot above</desc><unientity>1E22</unientity></character>
+<character hex="E7 68" dec="231 104"><isoentity>hdot</isoentity><desc>latin small letter h with dot above</desc><unientity>1E23</unientity></character>
+<character hex="F6 68" dec="246 104"><isoentity>hlowline</isoentity><desc>latin small letter h with low line</desc><unientity>1E96</unientity></character>
+<character hex="E0" dec="224"><isoentity>hooka</isoentity><desc>combining hook above</desc><unientity>0309</unientity></character>
+<character hex="F5 48" dec="245 072"><isoentity>Hstroke</isoentity><desc>latin capital letter h with stroke</desc><unientity>0126</unientity></character>
+<character hex="F5 68" dec="245 104"><isoentity>hstroke</isoentity><desc>latin small letter h with stroke</desc><unientity>0127</unientity></character>
+<character hex="E8 48" dec="232 072"><isoentity>Huml</isoentity><desc>latin capital letter h with diaeresis</desc><unientity>1E26</unientity></character>
+<character hex="E8 68" dec="232 104"><isoentity>huml</isoentity><desc>latin small letter h with diaeresis</desc><unientity>1E27</unientity></character>
+<character hex="E2 49" dec="226 073"><isoentity>Iacute</isoentity><desc>latin capital letter i with acute</desc><unientity>00CD</unientity></character>
+<character hex="E2 69" dec="226 105"><isoentity>iacute</isoentity><desc>latin small letter i with acute</desc><unientity>00ED</unientity></character>
+<character hex="E6 49" dec="230 073"><isoentity>Ibreve</isoentity><desc>latin capital letter i with breve</desc><unientity>012C</unientity></character>
+<character hex="E6 69" dec="230 105"><isoentity>ibreve</isoentity><desc>latin small letter i with breve</desc><unientity>012D</unientity></character>
+<character hex="E9 49" dec="233 073"><isoentity>Icaron</isoentity><desc>latin capital letter i with caron</desc><unientity>01CF</unientity></character>
+<character hex="E9 69" dec="233 105"><isoentity>icaron</isoentity><desc>latin small letter i with caron</desc><unientity>01D0</unientity></character>
+<character hex="E3 49" dec="227 073"><isoentity>Icirc</isoentity><desc>latin capital letter i with circumflex</desc><unientity>00CE</unientity></character>
+<character hex="E3 69" dec="227 105"><isoentity>icirc</isoentity><desc>latin small letter i with circumflex</desc><unientity>00EE</unientity></character>
+<character hex="F2 49" dec="242 073"><isoentity>Idotb</isoentity><desc>latin capital letter i with dot below</desc><unientity>1ECA</unientity></character>
+<character hex="F2 69" dec="242 105"><isoentity>idotb</isoentity><desc>latin small letter i with dot below</desc><unientity>1ECB</unientity></character>
+<character hex="E7 49" dec="231 073"><isoentity>Idot</isoentity><desc>latin capital letter i with dot above</desc><unientity>0130</unientity></character>
+<character hex="C6" dec="198"><isoentity>iexcl</isoentity><desc>inverted exclamation mark</desc><unientity>00A1</unientity></character>
+<character hex="E1 49" dec="225 073"><isoentity>Igrave</isoentity><desc>latin capital letter i with grave</desc><unientity>00CC</unientity></character>
+<character hex="E1 69" dec="225 105"><isoentity>igrave</isoentity><desc>latin small letter i with grave</desc><unientity>00EC</unientity></character>
+<character hex="E0 49" dec="224 073"><isoentity>Ihooka</isoentity><desc>latin capital letter i with hook above</desc><unientity>1EC8</unientity></character>
+<character hex="E0 69" dec="224 105"><isoentity>ihooka</isoentity><desc>latin small letter i with hook above</desc><unientity>1EC9</unientity></character>
+<character hex="E5 49" dec="229 073"><isoentity>Imacr</isoentity><desc>latin capital letter i with macron</desc><unientity>012A</unientity></character>
+<character hex="E5 69" dec="229 105"><isoentity>imacr</isoentity><desc>latin small letter i with macron</desc><unientity>012B</unientity></character>
+<character hex="B8" dec="184"><isoentity>inodot</isoentity><desc>latin small letter dotless i</desc><unientity>0131</unientity></character>
+<character hex="F1 49" dec="241 073"><isoentity>Iogon</isoentity><desc>latin capital letter i with ogon</desc><unientity>012E</unientity></character>
+<character hex="F1 69" dec="241 105"><isoentity>iogon</isoentity><desc>latin small letter i with ogon</desc><unientity>012F</unientity></character>
+<character hex="C5" dec="197"><isoentity>iquest</isoentity><desc>inverted question mark</desc><unientity>00BF</unientity></character>
+<character hex="E4 49" dec="228 073"><isoentity>Itilde</isoentity><desc>latin capital letter i with tilde</desc><unientity>0128</unientity></character>
+<character hex="E4 69" dec="228 105"><isoentity>itilde</isoentity><desc>latin small letter i with tilde</desc><unientity>0129</unientity></character>
+<character hex="E2 E8 49" dec="226 232 073"><isoentity>Iumlac</isoentity><desc>latin capital letter i with diaeresis and acute</desc><unientity>1E2E</unientity></character>
+<character hex="E2 E8 69" dec="226 232 105"><isoentity>iumlac</isoentity><desc>latin small letter i with diaeresis and acute</desc><unientity>1E2F</unientity></character>
+<character hex="E8 49" dec="232 073"><isoentity>Iuml</isoentity><desc>latin capital letter i with umlaut</desc><unientity>00CF</unientity></character>
+<character hex="E8 69" dec="232 105"><isoentity>iuml</isoentity><desc>latin small letter i with umlaut</desc><unientity>00EF</unientity></character>
+<character hex="E9 6A" dec="233 106"><isoentity>jcaron</isoentity><desc>latin small letter j with caron</desc><unientity>01F0</unientity></character>
+<character hex="E3 4A" dec="227 074"><isoentity>Jcirc</isoentity><desc>latin capital letter j with circumflex</desc><unientity>0134</unientity></character>
+<character hex="E3 6A" dec="227 106"><isoentity>jcirc</isoentity><desc>latin small letter j with circumflex</desc><unientity>0135</unientity></character>
+<character hex="E2 4B" dec="226 075"><isoentity>Kacute</isoentity><desc>latin capital letter k with acute</desc><unientity>1E30</unientity></character>
+<character hex="E2 6B" dec="226 107"><isoentity>kacute</isoentity><desc>latin small letter k with acute</desc><unientity>1E31</unientity></character>
+<character hex="F0 4B" dec="240 075"><isoentity>Kcedil</isoentity><desc>latin capital letter k with cedilla</desc><unientity>0136</unientity></character>
+<character hex="F0 6B" dec="240 107"><isoentity>kcedil</isoentity><desc>latin small letter k with cedilla</desc><unientity>0137</unientity></character>
+<character hex="E3 4B" dec="227 075"><isoentity>Kcirc</isoentity><desc>latin capital letter k with circumflex</desc><unientity>01E8</unientity></character>
+<character hex="E3 6B" dec="227 107"><isoentity>kcirc</isoentity><desc>latin small letter k with circumflex</desc><unientity>01E9</unientity></character>
+<character hex="F2 4B" dec="242 075"><isoentity>Kdotb</isoentity><desc>latin capital letter k with dot below</desc><unientity>1E32</unientity></character>
+<character hex="F2 6B" dec="242 107"><isoentity>kdotb</isoentity><desc>latin small letter k with dot below</desc><unientity>1E33</unientity></character>
+<character hex="F6 4B" dec="246 075"><isoentity>Kmacrb</isoentity><desc>latin capital letter k with line below</desc><unientity>1E34</unientity></character>
+<character hex="F6 6B" dec="246 107"><isoentity>kmacrb</isoentity><desc>latin small letter k with line below</desc><unientity>1E35</unientity></character>
+<character hex="E2 4C" dec="226 076"><isoentity>Lacute</isoentity><desc>latin capital letter l with acute</desc><unientity>0139</unientity></character>
+<character hex="E2 6C" dec="226 108"><isoentity>lacute</isoentity><desc>latin small letter l with acute</desc><unientity>013A</unientity></character>
+<character hex="E9 4C" dec="233 076"><isoentity>Lcaron</isoentity><desc>latin capital letter l with caron</desc><unientity>013D</unientity></character>
+<character hex="E9 6C" dec="233 108"><isoentity>lcaron</isoentity><desc>latin small letter l with caron</desc><unientity>013E</unientity></character>
+<character hex="F0 4C" dec="240 076"><isoentity>Lcedil</isoentity><desc>latin capital letter l with cedilla</desc><unientity>013B</unientity></character>
+<character hex="F0 6C" dec="240 108"><isoentity>lcedil</isoentity><desc>latin small letter l with cedilla</desc><unientity>013C</unientity></character>
+<character hex="E3 4C" dec="227 076"><isoentity>Lcirc</isoentity><desc>latin capital letter l with circumflex</desc><unientity>1E3C</unientity></character>
+<character hex="E3 6C" dec="227 108"><isoentity>lcirc</isoentity><desc>latin small letter l with circumflex</desc><unientity>1E3D</unientity></character>
+<character hex="FA" dec="250"><isoentity>ldbltil</isoentity><desc>combining double tilde left half</desc><unientity>FE22</unientity></character>
+<character hex="E5 F2 4C" dec="229 242 079"><isoentity>Ldotbma</isoentity><desc>latin capital letter l with dot below and macron</desc><unientity>1E38</unientity></character>
+<character hex="E5 F2 6C" dec="229 242 111"><isoentity>ldotbma</isoentity><desc>latin small letter l with dot below and macron</desc><unientity>1E39</unientity></character>
+<character hex="F2 4C" dec="242 076"><isoentity>Ldotb</isoentity><desc>latin capital letter l with dot below</desc><unientity>1E36</unientity></character>
+<character hex="F2 6C" dec="242 108"><isoentity>ldotb</isoentity><desc>latin small letter l with dot below</desc><unientity>1E37</unientity></character>
+<character hex="EB" dec="235"><isoentity>llig</isoentity><desc>combining ligature left half</desc><unientity>FE20</unientity></character>
+<character hex="F6 4C" dec="246 076"><isoentity>Lmacrb</isoentity><desc>latin capital letter l with line below</desc><unientity>1E3A</unientity></character>
+<character hex="F6 6C" dec="246 108"><isoentity>lmacrb</isoentity><desc>latin small letter l with line below</desc><unientity>1E3B</unientity></character>
+<character hex="4C A8" dec="076 168"><isoentity>Lmidot</isoentity><desc>latin capital letter l with middle dot</desc><unientity>013F</unientity></character>
+<character hex="6C A8" dec="108 168"><isoentity>lmidot</isoentity><desc>latin small letter l with middle dot</desc><unientity>0140</unientity></character>
+<character hex="A1" dec="161"><isoentity>Lstrok</isoentity><desc>latin capital letter l with stroke</desc><unientity>0141</unientity></character>
+<character hex="B1" dec="177"><isoentity>lstrok</isoentity><desc>latin small letter l with stroke</desc><unientity>0142</unientity></character>
+<character hex="E5" dec="229"><isoentity>macr</isoentity><desc>combining macron</desc><unientity>0304</unientity></character>
+<character hex="E2 4D" dec="226 077"><isoentity>Macute</isoentity><desc>latin capital letter m with acute</desc><unientity>1E3E</unientity></character>
+<character hex="E2 6D" dec="226 109"><isoentity>macute</isoentity><desc>latin small letter m with acute</desc><unientity>1E3F</unientity></character>
+<character hex="F2 4D" dec="242 077"><isoentity>Mdotb</isoentity><desc>latin capital letter m with dot below</desc><unientity>1E42</unientity></character>
+<character hex="F2 6D" dec="242 109"><isoentity>mdotb</isoentity><desc>latin small letter m with dot below</desc><unientity>1E43</unientity></character>
+<character hex="E7 4D" dec="231 077"><isoentity>Mdot</isoentity><desc>latin capital letter m with dot above</desc><unientity>1E40</unientity></character>
+<character hex="E7 6D" dec="231 109"><isoentity>mdot</isoentity><desc>latin small letter m with dot above</desc><unientity>1E41</unientity></character>
+<character hex="A8" dec="168"><isoentity>middot</isoentity><desc>middle dot</desc><unientity>00B7</unientity></character>
+<character hex="B0" dec="176"><isoentity>mllhring</isoentity><desc>modifier letter left half ring</desc><unientity>02BF</unientity></character>
+<character hex="AE" dec="174"><isoentity>mlrhring</isoentity><desc>modifier letter right half ring</desc><unientity>02BE</unientity></character>
+<character hex="E2 4E" dec="226 078"><isoentity>Nacute</isoentity><desc>latin capital letter n with acute</desc><unientity>0143</unientity></character>
+<character hex="E2 6E" dec="226 110"><isoentity>nacute</isoentity><desc>latin small letter n with acute</desc><unientity>0144</unientity></character>
+<character hex="ED 6E" dec="237 110"><isoentity>napos</isoentity><desc>latin small letter n with apostrophe</desc><unientity>0149</unientity></character>
+<character hex="E9 4E" dec="233 078"><isoentity>Ncaron</isoentity><desc>latin capital letter n with caron</desc><unientity>0147</unientity></character>
+<character hex="E9 6E" dec="233 110"><isoentity>ncaron</isoentity><desc>latin small letter n with caron</desc><unientity>0148</unientity></character>
+<character hex="F0 4E" dec="240 078"><isoentity>Ncedil</isoentity><desc>latin capital letter n with cedilla</desc><unientity>0145</unientity></character>
+<character hex="F0 6E" dec="240 110"><isoentity>ncedil</isoentity><desc>latin small letter n with cedilla</desc><unientity>0146</unientity></character>
+<character hex="F2 4E" dec="242 078"><isoentity>Ndotb</isoentity><desc>latin capital letter n with dot below</desc><unientity>1E46</unientity></character>
+<character hex="F2 6E" dec="242 110"><isoentity>ndotb</isoentity><desc>latin small letter n with dot below</desc><unientity>1E47</unientity></character>
+<character hex="E7 4E" dec="231 078"><isoentity>Ndot</isoentity><desc>latin capital letter n with dot above</desc><unientity>1E44</unientity></character>
+<character hex="E7 6E" dec="231 110"><isoentity>ndot</isoentity><desc>latin small letter n with dot above</desc><unientity>1E45</unientity></character>
+<character hex="E1 4E" dec="225 078"><isoentity>Ngrave</isoentity><desc>latin capital letter n with grave</desc><unientity>01F8</unientity></character>
+<character hex="E1 6E" dec="225 110"><isoentity>ngrave</isoentity><desc>latin small letter n with grave</desc><unientity>01F9</unientity></character>
+<character hex="F6 4E" dec="246 078"><isoentity>Nmacrb</isoentity><desc>latin capital letter n with line below</desc><unientity>1E48</unientity></character>
+<character hex="F6 6E" dec="246 110"><isoentity>nmacrb</isoentity><desc>latin small letter n with line below</desc><unientity>1E49</unientity></character>
+<character hex="E4 4E" dec="228 078"><isoentity>Ntilde</isoentity><desc>latin capital letter n with tilde</desc><unientity>00D1</unientity></character>
+<character hex="E4 6E" dec="228 110"><isoentity>ntilde</isoentity><desc>latin small letter n with tilde</desc><unientity>00F1</unientity></character>
+<character hex="E2 4F" dec="226 079"><isoentity>Oacute</isoentity><desc>latin capital letter o with acute</desc><unientity>00D3</unientity></character>
+<character hex="E2 6F" dec="226 111"><isoentity>oacute</isoentity><desc>latin small letter o with acute</desc><unientity>00F3</unientity></character>
+<character hex="E6 4F" dec="230 079"><isoentity>Obreve</isoentity><desc>latin capital letter o with breve</desc><unientity>014E</unientity></character>
+<character hex="E6 6F" dec="230 111"><isoentity>obreve</isoentity><desc>latin small letter o with breve</desc><unientity>014F</unientity></character>
+<character hex="E9 4F" dec="233 079"><isoentity>Ocaron</isoentity><desc>latin capital letter o with caron</desc><unientity>01D1</unientity></character>
+<character hex="E9 6F" dec="233 111"><isoentity>ocaron</isoentity><desc>latin small letter o with caron</desc><unientity>01D2</unientity></character>
+<character hex="E3 E2 4F" dec="227 226 079"><isoentity>Ocircac</isoentity><desc>latin capital letter o with circumflex and acute</desc><unientity>1ED0</unientity></character>
+<character hex="E3 E2 6F" dec="227 226 111"><isoentity>ocircac</isoentity><desc>latin small letter o with circumflex and acute</desc><unientity>1ED1</unientity></character>
+<character hex="E3 F2 4F" dec="227 242 079"><isoentity>Ocircdb</isoentity><desc>latin capital letter o with circumflex and dot below</desc><unientity>1ED8</unientity></character>
+<character hex="E3 F2 6F" dec="227 242 111"><isoentity>ocircdb</isoentity><desc>latin small letter o with circumflex and dot below</desc><unientity>1ED9</unientity></character>
+<character hex="E1 E3 4F" dec="225 227 079"><isoentity>Ocircgr</isoentity><desc>latin capital letter o with circumflex and grave</desc><unientity>1ED2</unientity></character>
+<character hex="E1 E3 6F" dec="225 227 111"><isoentity>ocircgr</isoentity><desc>latin small letter o with circumflex and grave</desc><unientity>1ED3</unientity></character>
+<character hex="E3 E0 4F" dec="227 224 079"><isoentity>Ocircha</isoentity><desc>latin capital letter o with circumflex and hook above</desc><unientity>1ED4</unientity></character>
+<character hex="E3 E0 6F" dec="227 224 111"><isoentity>ocircha</isoentity><desc>latin small letter o with circumflex and hook above</desc><unientity>1ED5</unientity></character>
+<character hex="E4 E3 4F" dec="228 227 079"><isoentity>Ocircti</isoentity><desc>latin capital letter o with circumflex and tilde</desc><unientity>1ED6</unientity></character>
+<character hex="E4 E3 6F" dec="228 227 111"><isoentity>ocircti</isoentity><desc>latin small letter o with circumflex and tilde</desc><unientity>1ED7</unientity></character>
+<character hex="E3 4F" dec="227 079"><isoentity>Ocirc</isoentity><desc>latin capital letter o with circumflex</desc><unientity>00D4</unientity></character>
+<character hex="E3 6F" dec="227 111"><isoentity>ocirc</isoentity><desc>latin small letter o with circumflex</desc><unientity>00F4</unientity></character>
+<character hex="EE 4F" dec="238 079"><isoentity>Odblac</isoentity><desc>latin capital letter o with double acute</desc><unientity>0150</unientity></character>
+<character hex="EE 6F" dec="238 111"><isoentity>odblac</isoentity><desc>latin small letter o with double acute</desc><unientity>0151</unientity></character>
+<character hex="E5 E7 4F" dec="229 231 079"><isoentity>Odotama</isoentity><desc>latin capital letter o with dot above and macron</desc><unientity>0230</unientity></character>
+<character hex="E5 E7 6F" dec="229 231 111"><isoentity>odotama</isoentity><desc>latin small letter o with dot above and macron</desc><unientity>0231</unientity></character>
+<character hex="E7 4F" dec="231 079"><isoentity>Odota</isoentity><desc>latin capital letter o with dot above</desc><unientity>022E</unientity></character>
+<character hex="E7 6F" dec="231 111"><isoentity>odota</isoentity><desc>latin small letter o with dot above</desc><unientity>022F</unientity></character>
+<character hex="F2 4F" dec="242 079"><isoentity>Odotb</isoentity><desc>latin capital letter o with dot below</desc><unientity>1ECC</unientity></character>
+<character hex="F2 6F" dec="242 111"><isoentity>odotb</isoentity><desc>latin small letter o with dot below</desc><unientity>1ECD</unientity></character>
+<character hex="A6" dec="166"><isoentity>OElig</isoentity><desc>latin capital letter oe</desc><unientity>0152</unientity></character>
+<character hex="B6" dec="182"><isoentity>oelig</isoentity><desc>latin small letter oe</desc><unientity>0153</unientity></character>
+<character hex="F1" dec="241"><isoentity>ogon</isoentity><desc>combining ogonek</desc><unientity>0328</unientity></character>
+<character hex="E1 4F" dec="225 079"><isoentity>Ograve</isoentity><desc>latin capital letter o with grave</desc><unientity>00D2</unientity></character>
+<character hex="E1 6F" dec="225 111"><isoentity>ograve</isoentity><desc>latin small letter o with grave</desc><unientity>00F2</unientity></character>
+<character hex="E0 4F" dec="224 079"><isoentity>Ohooka</isoentity><desc>latin capital letter o with hook above</desc><unientity>1ECE</unientity></character>
+<character hex="E0 6F" dec="224 111"><isoentity>ohooka</isoentity><desc>latin small letter o with hook above</desc><unientity>1ECF</unientity></character>
+<character hex="E2 AC" dec="226 172"><isoentity>Ohornac</isoentity><desc>latin capital letter o with horn and acute</desc><unientity>1EDA</unientity></character>
+<character hex="E2 AD" dec="226 173"><isoentity>Ohornac</isoentity><desc>latin capital letter u with horn and acute</desc><unientity>1EE8</unientity></character>
+<character hex="E2 BC" dec="226 188"><isoentity>ohornac</isoentity><desc>latin small letter o with horn and acute</desc><unientity>1EDB</unientity></character>
+<character hex="F2 AC" dec="242 172"><isoentity>Ohorndb</isoentity><desc>latin capital letter o with horn and dot below</desc><unientity>1EE2</unientity></character>
+<character hex="F2 BC" dec="242 188"><isoentity>ohorndb</isoentity><desc>latin small letter o with horn and dot below</desc><unientity>1EE3</unientity></character>
+<character hex="E1 AC" dec="225 172"><isoentity>Ohorngr</isoentity><desc>latin capital letter o with horn and grave</desc><unientity>1EDC</unientity></character>
+<character hex="E1 BC" dec="225 188"><isoentity>ohorngr</isoentity><desc>latin small letter o with horn and grave</desc><unientity>1EDD</unientity></character>
+<character hex="E0 AC" dec="224 172"><isoentity>Ohornha</isoentity><desc>latin capital letter o with horn and hook above</desc><unientity>1EDE</unientity></character>
+<character hex="E0 BC" dec="224 188"><isoentity>ohornha</isoentity><desc>latin small letter o with horn and hook above</desc><unientity>1EDF</unientity></character>
+<character hex="E4 AC" dec="228 172"><isoentity>Ohornti</isoentity><desc>latin capital letter o with horn and tilde</desc><unientity>1EE0</unientity></character>
+<character hex="E4 BC" dec="228 188"><isoentity>ohornti</isoentity><desc>latin small letter o with horn and tilde</desc><unientity>1EE1</unientity></character>
+<character hex="AC" dec="172"><isoentity>Ohorn</isoentity><desc>latin capital letter o with horn</desc><unientity>01A0</unientity></character>
+<character hex="BC" dec="188"><isoentity>ohorn</isoentity><desc>latin small letter o with horn</desc><unientity>01A1</unientity></character>
+<character hex="E2 E5 4F" dec="226 229 079"><isoentity>Omacrac</isoentity><desc>latin capital letter o with macron and acute</desc><unientity>1E52</unientity></character>
+<character hex="E2 E5 6F" dec="226 229 111"><isoentity>omacrac</isoentity><desc>latin small letter o with macron and acute</desc><unientity>1E53</unientity></character>
+<character hex="E1 E5 4F" dec="225 229 079"><isoentity>Omacrgr</isoentity><desc>latin capital letter o with macron and grave</desc><unientity>1E50</unientity></character>
+<character hex="E1 E5 6F" dec="225 229 111"><isoentity>omacrgr</isoentity><desc>latin small letter o with macron and grave</desc><unientity>1E51</unientity></character>
+<character hex="E5 4F" dec="229 079"><isoentity>Omacr</isoentity><desc>latin capital letter o with macron</desc><unientity>014C</unientity></character>
+<character hex="E5 6F" dec="229 111"><isoentity>omacr</isoentity><desc>latin small letter o with macron</desc><unientity>014D</unientity></character>
+<character hex="E5 F1 4F" dec="229 241 079"><isoentity>Oogonma</isoentity><desc>latin capital letter o with ogonek and macron</desc><unientity>01EC</unientity></character>
+<character hex="E5 F1 6F" dec="229 241 111"><isoentity>oogonma</isoentity><desc>latin small letter o with ogonek and macron</desc><unientity>01ED</unientity></character>
+<character hex="F1 4F" dec="241 111"><isoentity>Oogon</isoentity><desc>latin capital letter o with ogonek</desc><unientity>01EA</unientity></character>
+<character hex="F1 6F" dec="241 111"><isoentity>oogon</isoentity><desc>latin small letter o with ogonek</desc><unientity>01EB</unientity></character>
+<character hex="E2 A2" dec="226 162"><isoentity>Oslasha</isoentity><desc>latin capital letter o with stroke and acute</desc><unientity>01FE</unientity></character>
+<character hex="E2 B2" dec="226 178"><isoentity>oslasha</isoentity><desc>latin small letter o with stroke and acute</desc><unientity>01FF</unientity></character>
+<character hex="A2" dec="162"><isoentity>Oslash</isoentity><desc>latin capital letter o with stroke</desc><unientity>00D8</unientity></character>
+<character hex="B2" dec="178"><isoentity>oslash</isoentity><desc>latin small letter o with stroke</desc><unientity>00F8</unientity></character>
+<character hex="E2 E4 4F" dec="226 228 079"><isoentity>Otildeac</isoentity><desc>latin capital letter o with tilde and acute</desc><unientity>1E4C</unientity></character>
+<character hex="E2 E4 6F" dec="226 228 111"><isoentity>otildeac</isoentity><desc>latin small letter o with tilde and acute</desc><unientity>1E4D</unientity></character>
+<character hex="E5 E4 4F" dec="229 228 079"><isoentity>Otildema</isoentity><desc>latin capital letter o with tilde and macron</desc><unientity>022C</unientity></character>
+<character hex="E5 E4 6F" dec="229 228 111"><isoentity>otildema</isoentity><desc>latin small letter o with tilde and macron</desc><unientity>022D</unientity></character>
+<character hex="E8 E4 4F" dec="232 228 079"><isoentity>Otildeum</isoentity><desc>latin capital letter o with tilde and diaeresis</desc><unientity>1E4E</unientity></character>
+<character hex="E8 E4 6F" dec="232 228 111"><isoentity>otildeum</isoentity><desc>latin small letter o with tilde and diaeresis</desc><unientity>1E4F</unientity></character>
+<character hex="E4 4F" dec="228 079"><isoentity>Otilde</isoentity><desc>latin capital letter o with tilde</desc><unientity>00D5</unientity></character>
+<character hex="E4 6F" dec="228 111"><isoentity>otilde</isoentity><desc>latin small letter o with tilde</desc><unientity>00F5</unientity></character>
+<character hex="E5 E8 4F" dec="229 232 079"><isoentity>Oumlma</isoentity><desc>latin capital letter o with diaeresis and macron</desc><unientity>022A</unientity></character>
+<character hex="E5 E8 6F" dec="229 232 111"><isoentity>oumlma</isoentity><desc>latin small letter o with diaeresis and macron</desc><unientity>022B</unientity></character>
+<character hex="E8 4F" dec="232 079"><isoentity>Ouml</isoentity><desc>latin capital letter o with umlaut</desc><unientity>00D6</unientity></character>
+<character hex="E8 6F" dec="232 111"><isoentity>ouml</isoentity><desc>latin small letter o with umlaut</desc><unientity>00F6</unientity></character>
+<character hex="E2 50" dec="226 080"><isoentity>Pacute</isoentity><desc>latin capital letter p with acute</desc><unientity>1E54</unientity></character>
+<character hex="E2 70" dec="226 112"><isoentity>pacute</isoentity><desc>latin small letter p with acute</desc><unientity>1E55</unientity></character>
+<character hex="E7 50" dec="231 080"><isoentity>Pdota</isoentity><desc>latin capital letter p with dot above</desc><unientity>1E56</unientity></character>
+<character hex="E7 70" dec="231 112"><isoentity>pdota</isoentity><desc>latin small letter p with dot above</desc><unientity>1E57</unientity></character>
+<character hex="AB" dec="171"><isoentity>plusmn</isoentity><desc>plus-minus sign</desc><unientity>00B1</unientity></character>
+<character hex="B9" dec="185"><isoentity>pound</isoentity><desc>pound sign</desc><unientity>00A3</unientity></character>
+<character hex="E2 52" dec="226 082"><isoentity>Racute</isoentity><desc>latin capital letter r with acute</desc><unientity>0154</unientity></character>
+<character hex="E2 72" dec="226 114"><isoentity>racute</isoentity><desc>latin small letter r with acute</desc><unientity>0155</unientity></character>
+<character hex="E9 52" dec="233 082"><isoentity>Rcaron</isoentity><desc>latin capital letter r with caron</desc><unientity>0158</unientity></character>
+<character hex="E9 72" dec="233 114"><isoentity>rcaron</isoentity><desc>latin small letter r with caron</desc><unientity>0159</unientity></character>
+<character hex="F8" dec="248"><isoentity>rcedil</isoentity><desc>combining left half ring below</desc><unientity>031C</unientity></character>
+<character hex="F8 52" dec="240 082"><isoentity>Rcedil</isoentity><desc>latin capital letter r with cedilla</desc><unientity>0156</unientity></character>
+<character hex="F0 72" dec="240 114"><isoentity>rcedil</isoentity><desc>latin small letter r with cedilla</desc><unientity>0157</unientity></character>
+<character hex="ED" dec="237"><isoentity>rcommaa</isoentity><desc>combining comma above right</desc><unientity>0315</unientity></character>
+<character hex="FB" dec="251"><isoentity>rdbltil</isoentity><desc>combining double tilde right half</desc><unientity>FE23</unientity></character>
+<character hex="E7 52" dec="231 082"><isoentity>Rdota</isoentity><desc>latin capital letter r with dot above</desc><unientity>1E58</unientity></character>
+<character hex="E7 72" dec="231 114"><isoentity>rdota</isoentity><desc>latin small letter r with dot above</desc><unientity>1E59</unientity></character>
+<character hex="F2 52" dec="242 082"><isoentity>Rdotb</isoentity><desc>latin capital letter r with dot below</desc><unientity>1E5A</unientity></character>
+<character hex="F2 72" dec="242 114"><isoentity>rdotb</isoentity><desc>latin small letter r with dot below</desc><unientity>1E5B</unientity></character>
+<character hex="AA" dec="170"><isoentity>reg</isoentity><desc>registered sign</desc><unientity>00AE</unientity></character>
+<character hex="F4" dec="244"><isoentity>ringb</isoentity><desc>combining ring below</desc><unientity>0325</unientity></character>
+<character hex="EA" dec="234"><isoentity>ring</isoentity><desc>combining ring above</desc><unientity>030A</unientity></character>
+<character hex="EC" dec="236"><isoentity>rlig</isoentity><desc>combining ligature right half</desc><unientity>FE21</unientity></character>
+<character hex="F6 52" dec="246 082"><isoentity>Rmacrb</isoentity><desc>latin capital letter r with line below</desc><unientity>1E5E</unientity></character>
+<character hex="F6 72" dec="246 114"><isoentity>rmacrb</isoentity><desc>latin small letter r with line below</desc><unientity>1E5F</unientity></character>
+<character hex="E7 E2 53" dec="231 226 083"><isoentity>Sacuteda</isoentity><desc>latin capital letter s with acute and dot above</desc><unientity>1E64</unientity></character>
+<character hex="E7 E2 73" dec="231 226 115"><isoentity>sacuteda</isoentity><desc>latin small letter s with acute and dot above</desc><unientity>1E65</unientity></character>
+<character hex="E2 53" dec="226 083"><isoentity>Sacute</isoentity><desc>latin capital letter s with acute</desc><unientity>015A</unientity></character>
+<character hex="E2 73" dec="226 115"><isoentity>sacute</isoentity><desc>latin small letter s with acute</desc><unientity>015B</unientity></character>
+<character hex="E7 E9 53" dec="231 233 083"><isoentity>Scaronda</isoentity><desc>latin capital letter s with caron and dot above</desc><unientity>1E66</unientity></character>
+<character hex="E7 E9 73" dec="231 233 115"><isoentity>scaronda</isoentity><desc>latin small letter s with caron and dot above</desc><unientity>1E67</unientity></character>
+<character hex="E9 53" dec="233 083"><isoentity>Scaron</isoentity><desc>latin capital letter s with caron</desc><unientity>0160</unientity></character>
+<character hex="E9 73" dec="233 115"><isoentity>scaron</isoentity><desc>latin small letter s with caron</desc><unientity>0161</unientity></character>
+<character hex="F0 53" dec="240 083"><isoentity>Scedil</isoentity><desc>latin capital letter s with cedil</desc><unientity>015E</unientity></character>
+<character hex="F0 73" dec="240 115"><isoentity>scedil</isoentity><desc>latin small letter s with cedil</desc><unientity>015F</unientity></character>
+<character hex="E3 53" dec="227 083"><isoentity>Scirc</isoentity><desc>latin capital letter s with circumflex</desc><unientity>015C</unientity></character>
+<character hex="E3 73" dec="227 115"><isoentity>scirc</isoentity><desc>latin small letter s with circumflex</desc><unientity>015D</unientity></character>
+<character hex="F7 53" dec="247 083"><isoentity>scommab</isoentity><desc>latin capital letter s with comma below</desc><unientity>0218</unientity></character>
+<character hex="F7 73" dec="247 115"><isoentity>scommab</isoentity><desc>latin small letter s with comma below</desc><unientity>0219</unientity></character>
+<character hex="C1" dec="193"><isoentity>scriptl</isoentity><desc>script small l</desc><unientity>2113</unientity></character>
+<character hex="E7 53" dec="231 083"><isoentity>Sdota</isoentity><desc>latin capital letter s with dot above</desc><unientity>1E60</unientity></character>
+<character hex="E7 73" dec="231 115"><isoentity>sdota</isoentity><desc>latin small letter s with dot above</desc><unientity>1E61</unientity></character>
+<character hex="E7 F2 53" dec="231 242 083"><isoentity>Sdotbda</isoentity><desc>latin capital letter s with dot below and dot above</desc><unientity>1E68</unientity></character>
+<character hex="E7 F2 73" dec="231 242 115"><isoentity>sdotbda</isoentity><desc>latin small letter s with dot below and dot above</desc><unientity>1E69</unientity></character>
+<character hex="F2 53" dec="242 083"><isoentity>Sdotb</isoentity><desc>latin capital letter s with dot below</desc><unientity>1E62</unientity></character>
+<character hex="F2 73" dec="242 115"><isoentity>sdotb</isoentity><desc>latin small letter s with dot below</desc><unientity>1E63</unientity></character>
+<character hex="C4" dec="196"><isoentity>sharp</isoentity><desc>sharp</desc><unientity>266F</unientity></character>
+<character hex="A7" dec="167"><isoentity>softsign</isoentity><desc>modifier letter prime</desc><unientity>02B9</unientity></character>
+<character hex="1B 62 30 1B 73" dec="027 098 048 027 115"><isoentity>sub0</isoentity><desc>subscript zero</desc><unientity>2080</unientity></character>
+<character hex="1B 62 31 1B 73" dec="027 098 049 027 115"><isoentity>sub1</isoentity><desc>subscript one</desc><unientity>2081</unientity></character>
+<character hex="1B 62 32 1B 73" dec="027 098 050 027 115"><isoentity>sub2</isoentity><desc>subscript two</desc><unientity>2082</unientity></character>
+<character hex="1B 62 33 1B 73" dec="027 098 051 027 115"><isoentity>sub3</isoentity><desc>subscript three</desc><unientity>2083</unientity></character>
+<character hex="1B 62 34 1B 73" dec="027 098 052 027 115"><isoentity>sub4</isoentity><desc>subscript four</desc><unientity>2084</unientity></character>
+<character hex="1B 62 35 1B 73" dec="027 098 053 027 115"><isoentity>sub5</isoentity><desc>subscript five</desc><unientity>2085</unientity></character>
+<character hex="1B 62 36 1B 73" dec="027 098 054 027 115"><isoentity>sub6</isoentity><desc>subscript six</desc><unientity>2086</unientity></character>
+<character hex="1B 62 37 1B 73" dec="027 098 055 027 115"><isoentity>sub7</isoentity><desc>subscript seven</desc><unientity>2087</unientity></character>
+<character hex="1B 62 38 1B 73" dec="027 098 056 027 115"><isoentity>sub8</isoentity><desc>subscript eight</desc><unientity>2088</unientity></character>
+<character hex="1B 62 39 1B 73" dec="027 098 057 027 115"><isoentity>sub9</isoentity><desc>subscript nine</desc><unientity>2089</unientity></character>
+<character hex="1B 62 28 1B 73" dec="027 098 040 027 115"><isoentity>sublpar</isoentity><desc>subscript left parenthesis</desc><unientity>208D</unientity></character>
+<character hex="1B 62 2D 1B 73" dec="027 098 045 027 115"><isoentity>subminus</isoentity><desc>subscript minus</desc><unientity>208B</unientity></character>
+<character hex="1B 62 2B 1B 73" dec="027 098 043 027 115"><isoentity>subplus</isoentity><desc>subscript plus sign</desc><unientity>208A</unientity></character>
+<character hex="1B 62 29 1B 73" dec="027 098 041 027 115"><isoentity>subrpar</isoentity><desc>subscript right parenthesis</desc><unientity>208E</unientity></character>
+<character hex="1B 70 30 1B 73" dec="027 112 048 027 115"><isoentity>sup0</isoentity><desc>superscript zero</desc><unientity>2070</unientity></character>
+<character hex="1B 70 31 1B 73" dec="027 112 049 027 115"><isoentity>sup1</isoentity><desc>superscript one</desc><unientity>00B9</unientity></character>
+<character hex="1B 70 32 1B 73" dec="027 112 050 027 115"><isoentity>sup2</isoentity><desc>superscript two</desc><unientity>00B2</unientity></character>
+<character hex="1B 70 33 1B 73" dec="027 112 051 027 115"><isoentity>sup3</isoentity><desc>superscript three</desc><unientity>00B3</unientity></character>
+<character hex="1B 70 34 1B 73" dec="027 112 052 027 115"><isoentity>sup4</isoentity><desc>superscript four</desc><unientity>2074</unientity></character>
+<character hex="1B 70 35 1B 73" dec="027 112 053 027 115"><isoentity>sup5</isoentity><desc>superscript five</desc><unientity>2075</unientity></character>
+<character hex="1B 70 36 1B 73" dec="027 112 054 027 115"><isoentity>sup6</isoentity><desc>superscript six</desc><unientity>2076</unientity></character>
+<character hex="1B 70 37 1B 73" dec="027 112 055 027 115"><isoentity>sup7</isoentity><desc>superscript seven</desc><unientity>2077</unientity></character>
+<character hex="1B 70 38 1B 73" dec="027 112 056 027 115"><isoentity>sup8</isoentity><desc>superscript eight</desc><unientity>2078</unientity></character>
+<character hex="1B 70 39 1B 73" dec="027 112 056 027 115"><isoentity>sup9</isoentity><desc>superscript nine</desc><unientity>2079</unientity></character>
+<character hex="1B 70 28 1B 73" dec="027 112 040 027 115"><isoentity>suplpar</isoentity><desc>superscript left parenthesis</desc><unientity>207D</unientity></character>
+<character hex="1B 70 2D 1B 73" dec="027 112 045 027 115"><isoentity>supminus</isoentity><desc>superscript minus</desc><unientity>207B</unientity></character>
+<character hex="1B 70 2B 1B 73" dec="027 112 043 027 115"><isoentity>supplus</isoentity><desc>superscript plus sign</desc><unientity>207A</unientity></character>
+<character hex="1B 70 29 1B 73" dec="027 112 041 027 115"><isoentity>suprpar</isoentity><desc>superscript right parenthesis</desc><unientity>207E</unientity></character>
+<character hex="E9 54" dec="233 084"><isoentity>Tcaron</isoentity><desc>latin capital letter t with caron</desc><unientity>0164</unientity></character>
+<character hex="E9 74" dec="233 116"><isoentity>tcaron</isoentity><desc>latin small letter t with caron</desc><unientity>0165</unientity></character>
+<character hex="F0 54" dec="240 084"><isoentity>Tcedil</isoentity><desc>latin capital letter t with cedilla</desc><unientity>0162</unientity></character>
+<character hex="F0 74" dec="240 116"><isoentity>tcedil</isoentity><desc>latin small letter t with cedilla</desc><unientity>0163</unientity></character>
+<character hex="E4 E3 65" dec="228 227 101"><isoentity>tcircti</isoentity><desc>latin small letter e with circumflex and tilde</desc><unientity>1EC5</unientity></character>
+<character hex="F7 54" dec="247 084"><isoentity>Tcommab</isoentity><desc>latin capital letter t with comma below</desc><unientity>021A</unientity></character>
+<character hex="F7 74" dec="247 116"><isoentity>tcommab</isoentity><desc>latin small letter t with comma below</desc><unientity>021B</unientity></character>
+<character hex="F2 54" dec="242 084"><isoentity>Tdotb</isoentity><desc>latin capital letter t with dot below</desc><unientity>1E6C</unientity></character>
+<character hex="F2 74" dec="242 116"><isoentity>tdotb</isoentity><desc>latin small letter t with dot below</desc><unientity>1E6D</unientity></character>
+<character hex="E7 54" dec="231 084"><isoentity>Tdot</isoentity><desc>latin capital letter t with dot above</desc><unientity>1E6A</unientity></character>
+<character hex="E7 74" dec="231 116"><isoentity>tdot</isoentity><desc>latin small letter t with dot above</desc><unientity>1E6B</unientity></character>
+<character hex="A4" dec="164"><isoentity>THORN</isoentity><desc>latin capital letter thorn</desc><unientity>00DE</unientity></character>
+<character hex="B4" dec="180"><isoentity>thorn</isoentity><desc>latin small letter thorn</desc><unientity>00FE</unientity></character>
+<character hex="E4" dec="228"><isoentity>tilde</isoentity><desc>combining tilde</desc><unientity>0303</unientity></character>
+<character hex="F6 54" dec="246 084"><isoentity>Tmacrb</isoentity><desc>latin capital letter t with line below</desc><unientity>1E6E</unientity></character>
+<character hex="F6 74" dec="246 116"><isoentity>tmacrb</isoentity><desc>latin small letter t with line below</desc><unientity>1E6F</unientity></character>
+<character hex="E8 74" dec="232 116"><isoentity>tuml</isoentity><desc>latin small letter t with diaeresis</desc><unientity>1E97</unientity></character>
+<character hex="E2 55" dec="226 085"><isoentity>Uacute</isoentity><desc>latin capital letter u with acute</desc><unientity>00DA</unientity></character>
+<character hex="E2 75" dec="226 117"><isoentity>uacute</isoentity><desc>latin small letter u with acute</desc><unientity>00FA</unientity></character>
+<character hex="E6 55" dec="230 085"><isoentity>Ubreve</isoentity><desc>latin capital letter u with breve</desc><unientity>016C</unientity></character>
+<character hex="E6 75" dec="230 117"><isoentity>ubreve</isoentity><desc>latin small letter u with breve</desc><unientity>016D</unientity></character>
+<character hex="E9 55" dec="233 085"><isoentity>ucaron</isoentity><desc>latin capital letter u with caron</desc><unientity>01D3</unientity></character>
+<character hex="E9 75" dec="233 117"><isoentity>ucaron</isoentity><desc>latin small letter u with caron</desc><unientity>01D4</unientity></character>
+<character hex="E3 55" dec="227 085"><isoentity>Ucirc</isoentity><desc>latin capital letter u with circumflex</desc><unientity>00DB</unientity></character>
+<character hex="E3 75" dec="227 117"><isoentity>ucirc</isoentity><desc>latin small letter u with circumflex</desc><unientity>00FB</unientity></character>
+<character hex="EE 55" dec="238 085"><isoentity>Udblac</isoentity><desc>latin capital letter u with double acute</desc><unientity>0170</unientity></character>
+<character hex="EE 75" dec="238 117"><isoentity>udblac</isoentity><desc>latin small letter u with double acute</desc><unientity>0171</unientity></character>
+<character hex="F3 75" dec="243 117"><isoentity>udbldb</isoentity><desc>latin small letter u with double dot below</desc><unientity>1E73</unientity></character>
+<character hex="F3 55" dec="243 084"><isoentity>Udlbdb</isoentity><desc>latin capital letter u with double dot below</desc><unientity>1E72</unientity></character>
+<character hex="F2 55" dec="242 085"><isoentity>Udotb</isoentity><desc>latin capital letter u with dot below</desc><unientity>1EE4</unientity></character>
+<character hex="F2 75" dec="242 117"><isoentity>udotb</isoentity><desc>latin small letter u with dot below</desc><unientity>1EE5</unientity></character>
+<character hex="E1 55" dec="225 085"><isoentity>Ugrave</isoentity><desc>latin capital letter u with grave</desc><unientity>00D9</unientity></character>
+<character hex="E1 75" dec="225 117"><isoentity>ugrave</isoentity><desc>latin small letter u with grave</desc><unientity>00F9</unientity></character>
+<character hex="E0 55" dec="224 085"><isoentity>uhooka</isoentity><desc>latin capital letter u with hook above</desc><unientity>1EE6</unientity></character>
+<character hex="E0 75" dec="224 117"><isoentity>uhooka</isoentity><desc>latin small letter u with hook above</desc><unientity>1EE7</unientity></character>
+<character hex="E2 BD" dec="226 189"><isoentity>uhornac</isoentity><desc>latin small letter u with horn and acute</desc><unientity>1EE9</unientity></character>
+<character hex="F2 AD" dec="242 173"><isoentity>Uhorndb</isoentity><desc>latin capital letter u with horn and dot below</desc><unientity>1EF0</unientity></character>
+<character hex="F2 BD" dec="242 189"><isoentity>uhorndb</isoentity><desc>latin small letter u with horn and dot below</desc><unientity>1EF1</unientity></character>
+<character hex="E1 AD" dec="225 173"><isoentity>Uhorngr</isoentity><desc>latin capital letter u with horn and grave</desc><unientity>1EEA</unientity></character>
+<character hex="E1 BD" dec="225 189"><isoentity>uhorngr</isoentity><desc>latin small letter u with horn and grave</desc><unientity>1EEB</unientity></character>
+<character hex="E0 AD" dec="224 173"><isoentity>Uhornha</isoentity><desc>latin capital letter u with horn and hook above</desc><unientity>1EEC</unientity></character>
+<character hex="E0 BD" dec="224 189"><isoentity>uhornha</isoentity><desc>latin small letter u with horn and hook above</desc><unientity>1EED</unientity></character>
+<character hex="E4 AD" dec="228 173"><isoentity>Uhornti</isoentity><desc>latin capital letter u with horn and tilde</desc><unientity>1EEE</unientity></character>
+<character hex="E4 BD" dec="228 189"><isoentity>uhornti</isoentity><desc>latin small letter u with horn and tilde</desc><unientity>1EEF</unientity></character>
+<character hex="AD" dec="173"><isoentity>Uhorn</isoentity><desc>latin capital letter u with horn</desc><unientity>01AF</unientity></character>
+<character hex="BD" dec="189"><isoentity>uhorn</isoentity><desc>latin small letter u with horn</desc><unientity>01B0</unientity></character>
+<character hex="E8 E5 55" dec="232 229 085"><isoentity>Umacrum</isoentity><desc>latin capital letter u with macron and diaeresis</desc><unientity>1E7A</unientity></character>
+<character hex="E8 E5 75" dec="232 229 117"><isoentity>umacrum</isoentity><desc>latin small letter u with macron and diaeresis</desc><unientity>1E7B</unientity></character>
+<character hex="E5 55" dec="229 085"><isoentity>Umacr</isoentity><desc>latin capital letter u with macron</desc><unientity>016A</unientity></character>
+<character hex="E5 75" dec="229 117"><isoentity>umacr</isoentity><desc>latin small letter u with macron</desc><unientity>016B</unientity></character>
+<character hex="E8" dec="232"><isoentity>uml</isoentity><desc>combining diaeresis</desc><unientity>0308</unientity></character>
+<character hex="F6" dec="246"><isoentity>under</isoentity><desc>combining low line</desc><unientity>0332</unientity></character>
+<character hex="F1 55" dec="241 085"><isoentity>Uogon</isoentity><desc>latin capital letter u with ogon</desc><unientity>0172</unientity></character>
+<character hex="F1 75" dec="241 117"><isoentity>uogon</isoentity><desc>latin small letter u with ogon</desc><unientity>0173</unientity></character>
+<character hex="EA 55" dec="234 085"><isoentity>Uring</isoentity><desc>latin capital letter u with ring</desc><unientity>016E</unientity></character>
+<character hex="EA 75" dec="234 117"><isoentity>uring</isoentity><desc>latin small letter u with ring</desc><unientity>016F</unientity></character>
+<character hex="E2 E4 55" dec="226 228 085"><isoentity>utildeac</isoentity><desc>latin capital letter u with tilde and acute</desc><unientity>1E78</unientity></character>
+<character hex="E2 E4 75" dec="226 228 117"><isoentity>utildeac</isoentity><desc>latin small letter u with tilde and acute</desc><unientity>1E79</unientity></character>
+<character hex="E4 55" dec="228 085"><isoentity>Utilde</isoentity><desc>latin capital letter u with tilde</desc><unientity>0168</unientity></character>
+<character hex="E4 75" dec="228 117"><isoentity>utilde</isoentity><desc>latin small letter u with tilde</desc><unientity>0169</unientity></character>
+<character hex="E2 E8 55" dec="226 232 085"><isoentity>Uumlac</isoentity><desc>latin capital letter u with diaeresis and acute</desc><unientity>01D7</unientity></character>
+<character hex="E2 E8 75" dec="226 232 117"><isoentity>uumlac</isoentity><desc>latin small letter u with diaeresis and acute</desc><unientity>01D8</unientity></character>
+<character hex="E9 E8 55" dec="233 232 085"><isoentity>Uumlca</isoentity><desc>latin capital letter u with diaeresis and caron</desc><unientity>01D9</unientity></character>
+<character hex="E9 E8 75" dec="233 232 117"><isoentity>uumlca</isoentity><desc>latin small letter u with diaresis and caron</desc><unientity>01DA</unientity></character>
+<character hex="E1 E8 55" dec="225 230 085"><isoentity>Uumlgr</isoentity><desc>latin capital letter u with diaeresis and grave</desc><unientity>01DB</unientity></character>
+<character hex="E1 E8 75" dec="225 230 117"><isoentity>uumlgr</isoentity><desc>latin small letter u with diaeresis and grave</desc><unientity>01DC</unientity></character>
+<character hex="E5 E8 55" dec="229 232 085"><isoentity>Uumlma</isoentity><desc>latin capital letter u with diaeresis and macron</desc><unientity>01D5</unientity></character>
+<character hex="E5 E8 75" dec="229 232 117"><isoentity>uumlma</isoentity><desc>latin small letter u with diaeresis and macron</desc><unientity>01D6</unientity></character>
+<character hex="E8 55" dec="232 085"><isoentity>Uuml</isoentity><desc>latin capital letter u with umlaut</desc><unientity>00DC</unientity></character>
+<character hex="E8 75" dec="232 117"><isoentity>uuml</isoentity><desc>latin small letter u with umlaut</desc><unientity>00FC</unientity></character>
+<character hex="F2 56" dec="242 086"><isoentity>Vdotb</isoentity><desc>latin capital letter v with dot below</desc><unientity>1E7E</unientity></character>
+<character hex="F2 76" dec="242 118"><isoentity>vdotb</isoentity><desc>latin small letter v with dot below</desc><unientity>1E7F</unientity></character>
+<character hex="E4 56" dec="228 086"><isoentity>Vtilde</isoentity><desc>latin capital letter v with tilde</desc><unientity>1E7C</unientity></character>
+<character hex="E4 76" dec="228 118"><isoentity>vtilde</isoentity><desc>latin small letter v with tilde</desc><unientity>1E7D</unientity></character>
+<character hex="E2 57" dec="226 087"><isoentity>Wacute</isoentity><desc>latin capital letter w with acute</desc><unientity>1E82</unientity></character>
+<character hex="E2 77" dec="226 119"><isoentity>wacute</isoentity><desc>latin small letter w with acute</desc><unientity>1E83</unientity></character>
+<character hex="E3 57" dec="227 087"><isoentity>Wcirc</isoentity><desc>latin capital letter w with circumflex</desc><unientity>0174</unientity></character>
+<character hex="E3 77" dec="227 119"><isoentity>wcirc</isoentity><desc>latin small letter w with circumflex</desc><unientity>0175</unientity></character>
+<character hex="F2 57" dec="242 087"><isoentity>wdotb</isoentity><desc>latin capital letter w with dot below</desc><unientity>1E88</unientity></character>
+<character hex="F2 77" dec="242 119"><isoentity>wdotb</isoentity><desc>latin small letter w with dot below</desc><unientity>1E89</unientity></character>
+<character hex="E7 57" dec="231 087"><isoentity>Wdot</isoentity><desc>latin capital letter w with dot above</desc><unientity>1E86</unientity></character>
+<character hex="E7 77" dec="231 119"><isoentity>wdot</isoentity><desc>latin small letter w with dot above</desc><unientity>1E87</unientity></character>
+<character hex="E1 57" dec="225 087"><isoentity>Wgrave</isoentity><desc>latin capital letter w with grave</desc><unientity>1E80</unientity></character>
+<character hex="E1 77" dec="225 119"><isoentity>wgrave</isoentity><desc>latin small letter w with grave</desc><unientity>1E81</unientity></character>
+<character hex="EA 77" dec="234 119"><isoentity>wring</isoentity><desc>latin small letter w with ring</desc><unientity>1E98</unientity></character>
+<character hex="E8 57" dec="232 087"><isoentity>Wuml</isoentity><desc>latin capital letter w with diaeresis</desc><unientity>1E84</unientity></character>
+<character hex="E8 77" dec="232 119"><isoentity>wuml</isoentity><desc>latin small letter w with diaeresis</desc><unientity>1E85</unientity></character>
+<character hex="E7 58" dec="231 088"><isoentity>Xdot</isoentity><desc>latin capital letter x with dot</desc><unientity>1E8A</unientity></character>
+<character hex="E7 78" dec="231 120"><isoentity>xdot</isoentity><desc>latin small letter x with dot</desc><unientity>1E8B</unientity></character>
+<character hex="E8 58" dec="232 088"><isoentity>Xuml</isoentity><desc>latin capital letter x with diaeresis</desc><unientity>1E8C</unientity></character>
+<character hex="E8 78" dec="232 120"><isoentity>xuml</isoentity><desc>latin small letter x with diaeresis</desc><unientity>1E8D</unientity></character>
+<character hex="E2 59" dec="226 089"><isoentity>Yacute</isoentity><desc>latin capital letter y with acute</desc><unientity>00DD</unientity></character>
+<character hex="E2 79" dec="226 121"><isoentity>yacute</isoentity><desc>latin small letter y with acute</desc><unientity>00FD</unientity></character>
+<character hex="E3 59" dec="227 089"><isoentity>Ycirc</isoentity><desc>latin capital letter y with circumflex</desc><unientity>0176</unientity></character>
+<character hex="E3 79" dec="227 121"><isoentity>ycirc</isoentity><desc>latin small letter y with circumflex</desc><unientity>0177</unientity></character>
+<character hex="F2 59" dec="242 089"><isoentity>Ydotb</isoentity><desc>latin capital letter y with dot below</desc><unientity>1EF4</unientity></character>
+<character hex="F2 79" dec="242 121"><isoentity>ydotb</isoentity><desc>latin small letter y with dot below</desc><unientity>1EF5</unientity></character>
+<character hex="E7 59" dec="231 089"><isoentity>Ydot</isoentity><desc>latin capital letter y with dot</desc><unientity>1E8E</unientity></character>
+<character hex="E7 79" dec="231 121"><isoentity>ydot</isoentity><desc>latin small letter y with dot</desc><unientity>1E8F</unientity></character>
+<character hex="E1 59" dec="225 089"><isoentity>Ygrave</isoentity><desc>latin capital letter y with grave</desc><unientity>1EF2</unientity></character>
+<character hex="E1 79" dec="225 121"><isoentity>ygrave</isoentity><desc>latin small letter y with grave</desc><unientity>1EF3</unientity></character>
+<character hex="E0 59" dec="224 089"><isoentity>Yhooka</isoentity><desc>latin capital letter y with hook above</desc><unientity>1EF6</unientity></character>
+<character hex="E0 79" dec="224 121"><isoentity>yhooka</isoentity><desc>latin small letter y with hook above</desc><unientity>1EF7</unientity></character>
+<character hex="E5 59" dec="229 089"><isoentity>Ymacr</isoentity><desc>latin capital letter y with macron</desc><unientity>0232</unientity></character>
+<character hex="E5 79" dec="229 121"><isoentity>ymacr</isoentity><desc>latin small letter y with macron</desc><unientity>0233</unientity></character>
+<character hex="EA 79" dec="234 121"><isoentity>yring</isoentity><desc>latin small letter y with ring</desc><unientity>1E99</unientity></character>
+<character hex="E4 59" dec="228 089"><isoentity>Ytilde</isoentity><desc>latin capital letter y with tilde</desc><unientity>1EF8</unientity></character>
+<character hex="E4 79" dec="228 121"><isoentity>ytilde</isoentity><desc>latin small letter y with tilde</desc><unientity>1EF9</unientity></character>
+<character hex="E8 59" dec="232 089"><isoentity>Yuml</isoentity><desc>latin capital letter y with umlaut</desc><unientity>0178</unientity></character>
+<character hex="E8 79" dec="232 121"><isoentity>yuml</isoentity><desc>latin small letter y with umlaut</desc><unientity>00FF</unientity></character>
+<character hex="E2 5A" dec="226 090"><isoentity>Zacute</isoentity><desc>latin capital letter z with acute</desc><unientity>0179</unientity></character>
+<character hex="E2 7A" dec="226 122"><isoentity>zacute</isoentity><desc>latin small letter z with acute</desc><unientity>017A</unientity></character>
+<character hex="E9 5A" dec="233 090"><isoentity>Zcaron</isoentity><desc>latin capital letter z with caron</desc><unientity>017D</unientity></character>
+<character hex="E9 7A" dec="233 122"><isoentity>zcaron</isoentity><desc>latin small letter z with caron</desc><unientity>017E</unientity></character>
+<character hex="E3 5A" dec="227 090"><isoentity>Zcirc</isoentity><desc>latin capital letter z with circumflex</desc><unientity>1E90</unientity></character>
+<character hex="E3 7A" dec="227 122"><isoentity>zcirc</isoentity><desc>latin small letter z with circumflex</desc><unientity>1E91</unientity></character>
+<character hex="F2 5A" dec="242 090"><isoentity>Zdotb</isoentity><desc>latin capital letter z with dot below</desc><unientity>1E92</unientity></character>
+<character hex="F2 7A" dec="242 122"><isoentity>zdotb</isoentity><desc>latin small letter z with dot below</desc><unientity>1E93</unientity></character>
+<character hex="E7 5A" dec="231 090"><isoentity>Zdot</isoentity><desc>latin capital letter z with dot above</desc><unientity>017B</unientity></character>
+<character hex="E7 7A" dec="231 122"><isoentity>zdot</isoentity><desc>latin small letter z with dot above</desc><unientity>017C</unientity></character>
+<character hex="F6 5A" dec="246 090"><isoentity>Zlowline</isoentity><desc>latin capital letter z with low line</desc><unientity>1E94</unientity></character>
+<character hex="F6 7A" dec="246 122"><isoentity>zlowline</isoentity><desc>latin small letter z with low line</desc><unientity>1E95</unientity></character>
+  </entitymap>
diff --git a/src/charconv.tcl b/src/charconv.tcl
new file mode 100755 (executable)
index 0000000..7a8fc1a
--- /dev/null
@@ -0,0 +1,275 @@
+#!/bin/sh
+# the next line restats using tclsh \
+exec tclsh "$0" "$@"
+#
+# $Id: charconv.tcl,v 1.1 2003-10-27 12:21:30 adam Exp $
+
+proc usage {} {
+    puts {charconv.tcl: [-p prefix] [-s split] [-o ofile] file ... }
+    exit 1
+}
+
+proc ins_trie {from to} {
+    global trie
+    if {![info exists trie(no)]} {
+        set trie(no) 1
+        set trie(size) 0
+    }
+    incr trie(size)
+    ins_trie_r [split $from] $to 0
+}
+
+proc split_trie {this} {
+    global trie
+    set trie($this,type) d
+    foreach e $trie($this,content) {
+        set from [lindex $e 0]
+        set to [lindex $e 1]
+        
+        set ch [lindex $from 0]
+        set rest [lrange $from 1 end]
+        
+        if {[llength $rest]} {
+            if {![info exist trie($this,ptr,$ch)]} {
+                set trie($this,ptr,$ch) $trie(no)
+                incr trie(no)
+            }
+            ins_trie_r $rest $to $trie($this,ptr,$ch)
+        } else {
+            set trie($this,to,$ch) $to
+        }
+    }
+    set trie($this,content) missing
+}
+
+proc ins_trie_r {from to this} {
+    global trie
+
+    if {![info exist trie($this,type)]} {
+        set trie($this,type) f
+    }
+    if {$trie($this,type) == "f"} {
+        lappend trie($this,content) [list $from $to]
+        
+        # split ?
+        if {[llength $trie($this,content)] > $trie(split)} {
+            split_trie $this
+            return [ins_trie_r $from $to $this]
+        }
+    } else {
+        set ch [lindex $from 0]
+        set rest [lrange $from 1 end]
+
+        if {[llength $rest]} {
+            if {![info exist trie($this,ptr,$ch)]} {
+                set trie($this,ptr,$ch) $trie(no)
+                incr trie(no)
+            }
+            ins_trie_r $rest $to $trie($this,ptr,$ch)
+        } else {
+            set trie($this,to,$ch) $to
+        }
+    }
+}
+
+proc dump_trie {ofile} {
+    global trie
+
+    set f [open $ofile w]
+
+    puts $f "/* TRIE: size $trie(size) */"
+    puts $f "\#include <string.h>"
+    puts $f {
+        struct yaz_iconv_trie_flat {
+            char *from;
+            int to;
+        };
+        struct yaz_iconv_trie_dir {
+            struct yaz_iconv_trie *ptr;
+            int to;
+        };
+        
+        struct yaz_iconv_trie {
+            struct yaz_iconv_trie_flat *flat;
+            struct yaz_iconv_trie_dir *dir;
+        };
+    }
+
+    set this $trie(no)
+    while { [incr this -1] >= 0 } {
+        puts $f "/* PAGE $this */"
+        if {$trie($this,type) == "f"} {
+            puts $f "struct yaz_iconv_trie_flat $trie(prefix)page${this}_flat\[\] = \{"
+            foreach m $trie($this,content) {
+                puts -nonewline $f "  \{\""
+                foreach d [lindex $m 0] {
+                    puts -nonewline $f "\\x$d"
+                }
+                puts -nonewline $f "\", 0x[lindex $m 1]"
+                puts $f "\},"
+            }
+            puts $f "  \{0, 0\}"
+            puts $f "\};"
+            puts $f "struct yaz_iconv_trie $trie(prefix)page${this} = \{"
+            puts $f "  $trie(prefix)page${this}_flat, 0"
+            puts $f "\};"
+        } else {
+            puts $f "struct yaz_iconv_trie_dir $trie(prefix)page${this}_dir\[256\] = \{"
+            for {set i 0} {$i < 256} {incr i} {
+                puts -nonewline $f "  \{"
+                set ch [format %02X $i]
+                set null 1
+                if {[info exist trie($this,ptr,$ch)]} {
+                    puts -nonewline $f "&$trie(prefix)page$trie($this,ptr,$ch), "
+                    set null 0
+                } else {
+                    puts -nonewline $f "0, "
+                }
+                if {[info exist trie($this,to,$ch)]} {
+                    puts -nonewline $f "0x$trie($this,to,$ch)\}"
+                    set null 0
+                } else {
+                    puts -nonewline $f "0\}"
+                }
+                if {!$null} {
+                    puts -nonewline $f " /* $ch */"
+                }
+                if {$i < 255} {
+                    puts $f ","
+                } else {
+                    puts $f ""
+                }
+            }
+            puts $f "\};"
+            puts $f "struct yaz_iconv_trie $trie(prefix)page${this} = \{"
+            puts $f "  0, $trie(prefix)page${this}_dir"
+            puts $f "\};"
+        }
+    }
+    puts $f {
+        static unsigned long lookup(struct yaz_iconv_trie *t, unsigned char *inp,
+                                    size_t inbytesleft, size_t *no_read)
+        {
+            if (!t || inbytesleft < 1)
+            return 0;
+            if (t->dir)
+            {
+                size_t ch = inp[0] & 0xff;
+                unsigned long code =
+                lookup(t->dir[ch].ptr, inp+1, inbytesleft-1, no_read);
+                if (code)
+                {
+                    (*no_read)++;
+                    return code;
+                }
+                if (t->dir[ch].to)
+                {
+                    code = t->dir[ch].to;
+                    *no_read = 1;
+                    return code;
+                }
+            }
+            else
+            {
+                struct yaz_iconv_trie_flat *flat = t->flat;
+                while (flat->from)
+                {
+                    size_t len = strlen(flat->from);
+                    if (len <= inbytesleft)
+                    {
+                        if (memcmp(flat->from, inp, len) == 0)
+                        {
+                            *no_read = len;
+                            return flat->to;
+                        }
+                    }
+                    flat++;
+                }
+            }
+            return 0;
+        }
+        
+    }
+    puts $f "unsigned long yaz_$trie(prefix)_conv
+            (unsigned char *inp, size_t inbytesleft, size_t *no_read)
+        {
+            unsigned long code;
+            
+            code = lookup(&$trie(prefix)page0, inp, inbytesleft, no_read);
+            if (!code)
+            {
+                *no_read = 1;
+                code = *inp;
+            }
+            return code;
+        }
+    "
+    close $f
+}
+
+proc readfile {fname} {
+    set lineno 0
+    set f [open $fname r]
+    while {1} {
+        incr lineno
+        set cnt [gets $f line]
+        if {$cnt < 0} {
+            break
+        }
+        set hex {}
+        set uni {}
+        regexp {<character hex="([^\"]*)".*<unientity>([0-9A-Z]*)</unientity>} $line s hex uni
+        # puts "$lineno hex=$hex uni=$uni $line"
+        if {[string length $uni]} {
+            ins_trie $hex $uni
+        }
+    }
+    close $f
+}
+
+set verbose 0
+set ifile {}
+set ofile out.c
+set trie(split) 40
+set trie(prefix) {}
+# Parse command line
+set l [llength $argv]
+set i 0
+while {$i < $l} {
+    set arg [lindex $argv $i]
+    switch -glob -- $arg {
+        -v {
+            incr verbose
+        }
+        -s {
+            if {[string length $arg]} {
+                set arg [lindex $argv [incr i]]
+            }
+            set trie(split) $arg
+        }
+        -p {
+            if {[string length $arg]} {
+                set arg [lindex $argv [incr i]]
+            }
+            set trie(prefix) $arg
+        }
+       -o {
+            if {[string length $arg]} {
+                set arg [lindex $argv [incr i]]
+            }
+            set ofile $arg
+       }       
+        default {
+           lappend ifiles $arg
+        }
+    }
+    incr i
+}
+if {![info exists ifiles]} {
+    puts "charconv.tcl: missing input file(s)"
+    usage
+}
+foreach ifile $ifiles {
+    readfile $ifile
+}
+dump_trie $ofile
diff --git a/src/charconv_cjk.xml b/src/charconv_cjk.xml
new file mode 100644 (file)
index 0000000..494e523
--- /dev/null
@@ -0,0 +1,15730 @@
+<entitymap>
+<character hex="21 23 20"><unientity>3000</unientity><desc>CJK space in some implementations</desc></character>
+<character hex="21 23 21"><unientity>3000</unientity><desc>CJK space per ANSI Z39.64</desc></character>
+<character hex="21 23 28"><unientity>FF08</unientity><desc>Ideographic left parenthesis</desc></character>
+<character hex="21 23 29"><unientity>FF09</unientity><desc>Ideographic right parenthesis</desc></character>
+<character hex="21 23 2D"><unientity>FF0D</unientity><desc>Ideographic hyphen minus</desc></character>
+<character hex="21 2A 21"><unientity>E8D0</unientity><desc>EACC component character</desc></character>
+<character hex="21 2A 22"><unientity>E8D1</unientity><desc>EACC component character</desc></character>
+<character hex="21 2A 23"><unientity>E8D2</unientity><desc>EACC component character</desc></character>
+<character hex="21 2A 24"><unientity>E8D3</unientity><desc>EACC component character</desc></character>
+<character hex="21 2A 25"><unientity>E8D4</unientity><desc>EACC component character</desc></character>
+<character hex="21 2A 26"><unientity>E8D5</unientity><desc>EACC component character</desc></character>
+<character hex="21 2A 28"><unientity>E8D6</unientity><desc>EACC component character</desc></character>
+<character hex="21 2A 29"><unientity>E8D7</unientity><desc>EACC component character</desc></character>
+<character hex="21 2A 2A"><unientity>E8D8</unientity><desc>EACC component character</desc></character>
+<character hex="21 2A 2B"><unientity>E8D9</unientity><desc>EACC component character</desc></character>
+<character hex="21 2A 2C"><unientity>E8DA</unientity><desc>EACC component character</desc></character>
+<character hex="21 2A 2D"><unientity>E8DB</unientity><desc>EACC component character</desc></character>
+<character hex="21 2A 2E"><unientity>E8DC</unientity><desc>EACC component character</desc></character>
+<character hex="21 2A 2F"><unientity>E8DD</unientity><desc>EACC component character</desc></character>
+<character hex="21 2A 30"><unientity>E8DE</unientity><desc>EACC component character</desc></character>
+<character hex="21 2A 32"><unientity>E8DF</unientity><desc>EACC component character</desc></character>
+<character hex="21 2A 33"><unientity>E8E0</unientity><desc>EACC component character</desc></character>
+<character hex="21 2A 34"><unientity>E8E1</unientity><desc>EACC component character</desc></character>
+<character hex="21 2A 35"><unientity>E8E2</unientity><desc>EACC component character</desc></character>
+<character hex="21 2A 36"><unientity>E8E3</unientity><desc>EACC component character</desc></character>
+<character hex="21 2A 37"><unientity>E8E4</unientity><desc>EACC component character</desc></character>
+<character hex="21 2A 38"><unientity>E8E5</unientity><desc>EACC component character</desc></character>
+<character hex="21 2A 39"><unientity>E8E6</unientity><desc>EACC component character</desc></character>
+<character hex="21 2A 3A"><unientity>E8E7</unientity><desc>EACC component character</desc></character>
+<character hex="21 2A 3B"><unientity>E8E8</unientity><desc>EACC component character</desc></character>
+<character hex="21 2A 3C"><unientity>E8E9</unientity><desc>EACC component character</desc></character>
+<character hex="21 2A 3D"><unientity>E8EA</unientity><desc>EACC component character</desc></character>
+<character hex="21 2A 3E"><unientity>E8EB</unientity><desc>EACC component character</desc></character>
+<character hex="21 2A 3F"><unientity>E8EC</unientity><desc>EACC component character</desc></character>
+<character hex="21 2A 40"><unientity>E8ED</unientity><desc>EACC component character</desc></character>
+<character hex="21 2A 41"><unientity>E8EE</unientity><desc>EACC component character</desc></character>
+<character hex="21 2A 42"><unientity>E8EF</unientity><desc>EACC component character</desc></character>
+<character hex="21 2A 43"><unientity>E8F0</unientity><desc>EACC component character</desc></character>
+<character hex="21 2A 44"><unientity>E8F1</unientity><desc>EACC component character</desc></character>
+<character hex="21 2A 45"><unientity>E8F2</unientity><desc>EACC component character</desc></character>
+<character hex="21 2A 46"><unientity>3013</unientity><desc>Ideographic geta symbol</desc></character>
+<character hex="21 2B 25"><unientity>300C</unientity><desc>Ideographic left corner bracket</desc></character>
+<character hex="21 2B 26"><unientity>300D</unientity><desc>Ideographic right corner bracket</desc></character>
+<character hex="21 2B 31"><unientity>FF3B</unientity><desc>Ideographic left square bracket</desc></character>
+<character hex="21 2B 32"><unientity>FF3D</unientity><desc>Ideographic right square bracket</desc></character>
+<character hex="21 2B 33"><unientity>3002</unientity><desc>Ideographic full stop</desc></character>
+<character hex="21 2B 34"><unientity>FF0E</unientity><desc>Ideographic variant full stop</desc></character>
+<character hex="21 2B 35"><unientity>3001</unientity><desc>Ideographic comma</desc></character>
+<character hex="21 2B 38"><unientity>FF0C</unientity><desc>Ideographic variant comma</desc></character>
+<character hex="21 2B 39"><unientity>FF1B</unientity><desc>Ideographic semicolon</desc></character>
+<character hex="21 2B 3A"><unientity>FF1A</unientity><desc>Ideographic colon</desc></character>
+<character hex="21 2B 3B"><unientity>FF1F</unientity><desc>Ideographic question mark</desc></character>
+<character hex="21 2B 3D"><unientity>FF01</unientity><desc>Ideographic exclamation point</desc></character>
+<character hex="21 2B 59"><unientity>FF0F</unientity><desc>Ideographic solidus</desc></character>
+<character hex="21 2F 30"><unientity>3007</unientity><desc>Ideographic number zero</desc></character>
+<character hex="21 30 21"><unientity>4E00</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 30 22"><unientity>4E01</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 30 23"><unientity>4E03</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 30 24"><unientity>4E09</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 30 25"><unientity>4E0B</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 30 26"><unientity>4E0A</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 30 27"><unientity>4E08</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 30 29"><unientity>4E10</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 30 2A"><unientity>4E0D</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 30 2B"><unientity>4E14</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 30 2C"><unientity>4E19</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 30 2D"><unientity>4E16</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 30 2E"><unientity>4E15</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 30 2F"><unientity>4E18</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 30 30"><unientity>4E22</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 30 31"><unientity>4E1E</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 30 32"><unientity>4E26</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 30 34"><unientity>4E2D</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 30 35"><unientity>4E32</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 30 36"><unientity>51E1</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 30 37"><unientity>4E38</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 30 38"><unientity>4E39</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 30 39"><unientity>4E3B</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 30 3A"><unientity>4E43</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 30 3B"><unientity>4E45</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 30 3D"><unientity>4E4B</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 30 3E"><unientity>5C39</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 30 3F"><unientity>4E4F</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 30 40"><unientity>4E4E</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 30 41"><unientity>4E4D</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 30 42"><unientity>4E52</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 30 43"><unientity>4E53</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 30 44"><unientity>4E56</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 30 45"><unientity>4E58</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 30 46"><unientity>4E59</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 30 47"><unientity>4E5D</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 30 48"><unientity>4E5F</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 30 49"><unientity>4E5E</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 30 4B"><unientity>4E73</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 30 4C"><unientity>4E7E</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 30 4D"><unientity>4E82</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 30 50"><unientity>4E8B</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 30 51"><unientity>4E8C</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 30 52"><unientity>4E8E</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 30 53"><unientity>4E95</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 30 54"><unientity>4E94</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 30 55"><unientity>4E92</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 30 57"><unientity>E930</unientity><unientityalt>4E99</unientityalt><desc>Variant of 4B3057 which maps to 4E99</desc></character>
+<character hex="21 30 58"><unientity>4E9E</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 30 59"><unientity>4E9B</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 30 5A"><unientity>4E9F</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 30 5B"><unientity>4EA1</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 30 5C"><unientity>4EA6</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 30 5D"><unientity>4EA5</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 30 5E"><unientity>4EA4</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 30 5F"><unientity>4EA8</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 30 60"><unientity>4EAB</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 30 61"><unientity>4EAC</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 30 62"><unientity>4EAD</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 30 63"><unientity>4EAE</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 30 64"><unientity>4EBA</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 30 65"><unientity>4ECA</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 30 66"><unientity>4EC1</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 30 68"><unientity>4EC3</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 30 69"><unientity>4EC4</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 30 6B"><unientity>4ECD</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 30 6C"><unientity>4EC7</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 30 6D"><unientity>4ECB</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 30 6E"><unientity>4EE4</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 30 6F"><unientity>4ED8</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 30 70"><unientity>4ED5</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 30 71"><unientity>4ED6</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 30 72"><unientity>4EDE</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 30 73"><unientity>4EE3</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 30 74"><unientity>4ED4</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 30 75"><unientity>4ED7</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 30 76"><unientity>4ED9</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 30 77"><unientity>4EE5</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 30 78"><unientity>4EFF</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 30 79"><unientity>4F09</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 30 7C"><unientity>4EFB</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 30 7D"><unientity>4F0A</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 30 7E"><unientity>4F15</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 31 21"><unientity>4F11</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 31 22"><unientity>4F10</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 31 23"><unientity>4F0F</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 31 24"><unientity>4EF2</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 31 25"><unientity>4F01</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 31 26"><unientity>4EF3</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 31 27"><unientity>4EF6</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 31 28"><unientity>4EF0</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 31 2A"><unientity>4F4F</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 31 2B"><unientity>4F4D</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 31 2C"><unientity>4F34</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 31 2D"><unientity>4F47</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 31 2E"><unientity>4F57</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 31 2F"><unientity>4F3A</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 31 30"><unientity>4F5E</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 31 32"><unientity>4F5B</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 31 33"><unientity>4F55</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 31 34"><unientity>4F30</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 31 35"><unientity>4F50</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 31 36"><unientity>4F51</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 31 37"><unientity>4F3D</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 31 38"><unientity>4F48</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 31 39"><unientity>4F46</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 31 3A"><unientity>4F38</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 31 3B"><unientity>4F43</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 31 3C"><unientity>4F54</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 31 3D"><unientity>4F3C</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 31 3E"><unientity>4F63</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 31 3F"><unientity>4F5C</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 31 40"><unientity>4F60</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 31 41"><unientity>4F2F</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 31 42"><unientity>4F4E</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 31 43"><unientity>4F5D</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 31 44"><unientity>4F36</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 31 45"><unientity>4F9D</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 31 46"><unientity>4F6F</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 31 47"><unientity>4F75</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 31 48"><unientity>4F8D</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 31 49"><unientity>4F73</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 31 4A"><unientity>4F7F</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 31 4B"><unientity>4F9B</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 31 4C"><unientity>4F86</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 31 4D"><unientity>4F6C</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 31 4E"><unientity>4F8B</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 31 4F"><unientity>4F96</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 31 51"><unientity>4F83</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 31 52"><unientity>4F7B</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 31 53"><unientity>4F88</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 31 54"><unientity>4F69</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 31 55"><unientity>4F8F</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 31 56"><unientity>4F7E</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 31 57"><unientity>4FE1</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 31 58"><unientity>4FD1</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 31 59"><unientity>4FB5</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 31 5A"><unientity>4FAF</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 31 5B"><unientity>4FBF</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 31 5C"><unientity>4FDE</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 31 5D"><unientity>4FE0</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 31 5E"><unientity>4FCF</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 31 5F"><unientity>4FB6</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 31 60"><unientity>4FDA</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 31 61"><unientity>4FDD</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 31 62"><unientity>4FC3</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 31 63"><unientity>4FD8</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 31 64"><unientity>4FDF</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 31 65"><unientity>4FCA</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 31 66"><unientity>4FAE</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 31 67"><unientity>4FD0</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 31 68"><unientity>4FC4</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 31 69"><unientity>4FC2</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 31 6A"><unientity>4FCE</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 31 6B"><unientity>4FD7</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 31 6C"><unientity>5009</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 31 6E"><unientity>500D</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 31 6F"><unientity>4FEF</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 31 70"><unientity>5026</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 31 71"><unientity>500C</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 31 72"><unientity>5025</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 31 73"><unientity>5011</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 31 74"><unientity>4FF8</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 31 75"><unientity>5028</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 31 76"><unientity>5014</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 31 77"><unientity>5016</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 31 78"><unientity>5029</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 31 79"><unientity>5006</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 31 7B"><unientity>5012</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 31 7C"><unientity>503C</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 31 7D"><unientity>501A</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 31 7E"><unientity>4FFA</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 32 21"><unientity>5018</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 32 22"><unientity>4FF1</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 32 23"><unientity>5021</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 32 24"><unientity>500B</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 32 25"><unientity>5019</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 32 26"><unientity>5000</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 32 27"><unientity>4FEE</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 32 28"><unientity>4FF3</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 32 29"><unientity>502D</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 32 2A"><unientity>5003</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 32 2B"><unientity>4FFE</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 32 2C"><unientity>502A</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 32 2D"><unientity>502B</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 32 2E"><unientity>505C</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 32 2F"><unientity>504F</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 32 30"><unientity>5065</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 32 31"><unientity>5047</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 32 32"><unientity>505A</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 32 33"><unientity>5049</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 32 34"><unientity>5043</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 32 35"><unientity>5074</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 32 36"><unientity>5076</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 32 37"><unientity>504E</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 32 38"><unientity>5075</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 32 39"><unientity>504C</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 32 3A"><unientity>5055</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 32 3B"><unientity>500F</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 32 3C"><unientity>5077</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 32 3D"><unientity>508D</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 32 3E"><unientity>50A2</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 32 3F"><unientity>5085</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 32 40"><unientity>5099</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 32 41"><unientity>5091</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 32 42"><unientity>5080</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 32 43"><unientity>5096</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 32 44"><unientity>5098</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 32 45"><unientity>50AD</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 32 46"><unientity>50B3</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 32 47"><unientity>50B5</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 32 48"><unientity>50B2</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 32 49"><unientity>50C5</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 32 4A"><unientity>50BE</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 32 4B"><unientity>50AC</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 32 4C"><unientity>50B7</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 32 4D"><unientity>50AF</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 32 4E"><unientity>50E7</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 32 4F"><unientity>50EE</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 32 50"><unientity>50F1</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 32 51"><unientity>50E5</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 32 52"><unientity>50D6</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 32 53"><unientity>50ED</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 32 54"><unientity>50DA</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 32 55"><unientity>50D5</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 32 56"><unientity>507D</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 32 57"><unientity>50CF</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 32 58"><unientity>50D1</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 32 59"><unientity>5100</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 32 5A"><unientity>5104</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 32 5B"><unientity>50FB</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 32 5C"><unientity>50F5</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 32 5D"><unientity>50F9</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 32 5E"><unientity>5102</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 32 5F"><unientity>510D</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 32 60"><unientity>5108</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 32 61"><unientity>5109</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 32 62"><unientity>5110</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 32 63"><unientity>5118</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 32 64"><unientity>5112</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 32 65"><unientity>5114</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 32 66"><unientity>512A</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 32 67"><unientity>511F</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 32 68"><unientity>5121</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 32 69"><unientity>5132</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 32 6A"><unientity>5137</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 32 6B"><unientity>513C</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 32 6C"><unientity>5140</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 32 6D"><unientity>5143</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 32 6E"><unientity>5141</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 32 6F"><unientity>5145</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 32 70"><unientity>5144</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 32 71"><unientity>5146</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 32 72"><unientity>5149</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 32 73"><unientity>5147</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 32 74"><unientity>5148</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 32 75"><unientity>514C</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 32 77"><unientity>514D</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 32 78"><unientity>5155</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 32 79"><unientity>5154</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 32 7A"><unientity>5152</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 32 7B"><unientity>5157</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 32 7C"><unientity>515C</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 32 7D"><unientity>5162</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 32 7E"><unientity>5165</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 33 21"><unientity>5167</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 33 22"><unientity>5168</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 33 23"><unientity>5169</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 33 24"><unientity>516B</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 33 25"><unientity>516D</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 33 26"><unientity>516E</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 33 27"><unientity>516C</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 33 28"><unientity>5171</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 33 29"><unientity>5175</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 33 2A"><unientity>5176</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 33 2B"><unientity>5177</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 33 2C"><unientity>5178</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 33 2D"><unientity>517C</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 33 2E"><unientity>5180</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 33 2F"><unientity>5189</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 33 30"><unientity>518C</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 33 31"><unientity>518D</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 33 32"><unientity>5192</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 33 33"><unientity>5191</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 33 34"><unientity>5195</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 33 35"><unientity>6700</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 33 36"><unientity>5197</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 33 37"><unientity>51A0</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 33 39"><unientity>51A5</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 33 3C"><unientity>51B0</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 33 3D"><unientity>51B6</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 33 3E"><unientity>51B7</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 33 40"><unientity>51CD</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 33 41"><unientity>51CC</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 33 44"><unientity>51DC</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 33 45"><unientity>51DD</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 33 47"><unientity>51F0</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 33 48"><unientity>51F1</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 33 49"><unientity>51F3</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 33 4B"><unientity>51FA</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 33 4C"><unientity>51F9</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 33 4D"><unientity>51F8</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 33 4E"><unientity>51FD</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 33 4F"><unientity>5200</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 33 50"><unientity>5201</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 33 51"><unientity>5203</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 33 52"><unientity>5207</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 33 53"><unientity>5206</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 33 54"><unientity>5208</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 33 55"><unientity>520A</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 33 56"><unientity>5211</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 33 57"><unientity>5217</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 33 59"><unientity>520E</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 33 5A"><unientity>5224</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 33 5B"><unientity>5225</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 33 5C"><unientity>5220</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 33 5D"><unientity>5228</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 33 5E"><unientity>5229</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 33 5F"><unientity>5238</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 33 60"><unientity>523B</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 33 61"><unientity>5237</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 33 62"><unientity>5230</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 33 63"><unientity>523A</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 33 66"><unientity>5241</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 33 67"><unientity>5239</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 33 68"><unientity>5243</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 33 69"><unientity>524D</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 33 6A"><unientity>524C</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 33 6B"><unientity>524B</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 33 6C"><unientity>524A</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 33 6D"><unientity>5247</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 33 6E"><unientity>525C</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 33 6F"><unientity>5256</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 33 70"><unientity>525B</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 33 71"><unientity>5254</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 33 72"><unientity>525D</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 33 73"><unientity>526A</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 33 74"><unientity>526F</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 33 75"><unientity>5272</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 33 76"><unientity>5274</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 33 77"><unientity>5269</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 33 78"><unientity>5275</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 33 7A"><unientity>527D</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 33 7B"><unientity>527F</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 33 7C"><unientity>5283</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 33 7D"><unientity>5288</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 33 7E"><unientity>5287</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 34 21"><unientity>528D</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 34 22"><unientity>5289</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 34 23"><unientity>5291</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 34 24"><unientity>529B</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 34 25"><unientity>529F</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 34 26"><unientity>52A0</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 34 27"><unientity>52A3</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 34 28"><unientity>52AB</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 34 29"><unientity>52A9</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 34 2A"><unientity>52AC</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 34 2B"><unientity>52AA</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 34 2C"><unientity>52BE</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 34 2D"><unientity>52C7</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 34 2E"><unientity>52C3</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 34 2F"><unientity>52C1</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 34 30"><unientity>52C9</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 34 31"><unientity>52D8</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 34 32"><unientity>52D2</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 34 33"><unientity>52D9</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 34 34"><unientity>52D5</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 34 35"><unientity>52DE</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 34 36"><unientity>52DB</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 34 37"><unientity>52DD</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 34 38"><unientity>52E2</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 34 39"><unientity>52E4</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 34 3A"><unientity>52DF</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 34 3C"><unientity>52F5</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 34 3D"><unientity>52F8</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 34 3E"><unientity>52FB</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 34 40"><unientity>52FF</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 34 41"><unientity>5305</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 34 42"><unientity>5306</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 34 43"><unientity>5308</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 34 44"><unientity>530D</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 34 45"><unientity>5310</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 34 46"><unientity>530F</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 34 47"><unientity>5315</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 34 48"><unientity>5316</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 34 49"><unientity>5317</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 34 4A"><unientity>5319</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 34 4B"><unientity>53F5</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 34 4C"><unientity>531D</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 34 4D"><unientity>5321</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 34 4E"><unientity>5320</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 34 4F"><unientity>5323</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 34 50"><unientity>532A</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 34 51"><unientity>532F</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 34 52"><unientity>5331</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 34 53"><unientity>5339</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 34 54"><unientity>533E</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 34 55"><unientity>5340</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 34 56"><unientity>533F</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 34 57"><unientity>5341</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 34 58"><unientity>5343</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 34 59"><unientity>5345</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 34 5A"><unientity>5348</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 34 5B"><unientity>5347</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 34 5C"><unientity>534A</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 34 5D"><unientity>E931</unientity><unientityalt>5349</unientityalt><desc>Variant of 2D345D which maps to 5349</desc></character>
+<character hex="21 34 5F"><unientity>5352</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 34 60"><unientity>5354</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 34 61"><unientity>5353</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 34 62"><unientity>5351</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 34 63"><unientity>5357</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 34 64"><unientity>535A</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 34 66"><unientity>535E</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 34 67"><unientity>5361</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 34 69"><unientity>5366</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 34 6A"><unientity>536F</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 34 6B"><unientity>536E</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 34 6C"><unientity>5370</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 34 6D"><unientity>5371</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 34 6E"><unientity>537D</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 34 6F"><unientity>5375</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 34 71"><unientity>5378</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 34 73"><unientity>537B</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 34 74"><unientity>537F</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 34 75"><unientity>5384</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 34 76"><unientity>539A</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 34 77"><unientity>539D</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 34 78"><unientity>539F</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 34 79"><unientity>53A5</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 34 7A"><unientity>53AD</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 34 7B"><unientity>53B2</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 34 7C"><unientity>53BB</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 34 7D"><unientity>53C3</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 34 7E"><unientity>53C8</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 35 21"><unientity>53C9</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 35 22"><unientity>53CB</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 35 23"><unientity>53CA</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 35 24"><unientity>53CD</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 35 25"><unientity>53D6</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 35 26"><unientity>53D4</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 35 27"><unientity>53D7</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 35 28"><unientity>53DB</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 35 29"><unientity>53DF</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 35 2A"><unientity>66FC</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 35 2B"><unientity>53E2</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 35 2C"><unientity>53E3</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 35 2D"><unientity>53F8</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 35 2E"><unientity>53E4</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 35 2F"><unientity>53EE</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 35 30"><unientity>53EF</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 35 31"><unientity>53E9</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 35 32"><unientity>53F3</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 35 33"><unientity>53FC</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 35 34"><unientity>53E8</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 35 35"><unientity>53E6</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 35 36"><unientity>53EC</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 35 37"><unientity>53EB</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 35 38"><unientity>E900</unientity><desc>Duplicate simplified ideograph</desc></character>
+<character hex="21 35 39"><unientity>53E5</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 35 3A"><unientity>53F1</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 35 3B"><unientity>53ED</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 35 3C"><unientity>53EA</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 35 3D"><unientity>53F2</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 35 3F"><unientity>540B</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 35 40"><unientity>5409</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 35 41"><unientity>5410</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 35 42"><unientity>540F</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 35 43"><unientity>540C</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 35 44"><unientity>540A</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 35 45"><unientity>540D</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 35 46"><unientity>5404</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 35 47"><unientity>5403</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 35 48"><unientity>5412</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 35 4A"><unientity>E9E0</unientity><desc>East Asian ideograph not in Unicode</desc></character>
+<character hex="21 35 4D"><unientity>542D</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 35 4E"><unientity>541D</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 35 4F"><unientity>541E</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 35 50"><unientity>541B</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 35 51"><unientity>544E</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 35 52"><unientity>543E</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 35 53"><unientity>5427</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 35 54"><unientity>5440</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 35 55"><unientity>5431</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 35 56"><unientity>5446</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 35 57"><unientity>543C</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 35 58"><unientity>5443</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 35 59"><unientity>5426</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 35 5A"><unientity>5420</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 35 5B"><unientity>5436</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 35 5C"><unientity>5433</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 35 5D"><unientity>5435</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 35 5E"><unientity>542E</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 35 5F"><unientity>544A</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 35 60"><unientity>5448</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 35 61"><unientity>543B</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 35 62"><unientity>5438</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 35 63"><unientity>5439</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 35 64"><unientity>5442</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 35 65"><unientity>542B</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 35 66"><unientity>541F</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 35 67"><unientity>5429</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 35 68"><unientity>5473</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 35 69"><unientity>5462</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 35 6A"><unientity>5475</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 35 6B"><unientity>5495</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 35 6C"><unientity>5478</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 35 6D"><unientity>5496</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 35 6E"><unientity>5477</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 35 6F"><unientity>547B</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 35 71"><unientity>5492</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 35 72"><unientity>5484</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 35 73"><unientity>547C</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 35 74"><unientity>5468</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 35 75"><unientity>5486</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 35 76"><unientity>548B</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 35 77"><unientity>548C</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 35 78"><unientity>5490</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 35 79"><unientity>547D</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 35 7A"><unientity>5476</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 35 7B"><unientity>5471</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 35 7C"><unientity>549A</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 35 7D"><unientity>548E</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 35 7E"><unientity>54A9</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 36 21"><unientity>54AA</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 36 22"><unientity>54A8</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 36 23"><unientity>54AC</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 36 24"><unientity>54C0</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 36 25"><unientity>54B3</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 36 26"><unientity>54A6</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 36 27"><unientity>54AB</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 36 28"><unientity>54C7</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 36 29"><unientity>54C9</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 36 2A"><unientity>54C4</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 36 2B"><unientity>54C2</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 36 2D"><unientity>54C1</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 36 2F"><unientity>54CE</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 36 30"><unientity>54B1</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 36 31"><unientity>54BB</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 36 32"><unientity>54AF</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 36 33"><unientity>54C8</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 36 34"><unientity>5501</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 36 35"><unientity>54FC</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 36 36"><unientity>5510</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 36 37"><unientity>54EA</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 36 38"><unientity>5514</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 36 39"><unientity>54FA</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 36 3A"><unientity>54E5</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 36 3B"><unientity>54EE</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 36 3C"><unientity>54F2</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 36 3D"><unientity>54E8</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 36 3E"><unientity>54E1</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 36 3F"><unientity>54E9</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 36 40"><unientity>54ED</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 36 41"><unientity>5506</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 36 42"><unientity>5509</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 36 43"><unientity>54E6</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 36 44"><unientity>5556</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 36 45"><unientity>5533</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 36 46"><unientity>5546</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 36 48"><unientity>554F</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 36 49"><unientity>555E</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 36 4A"><unientity>5566</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 36 4B"><unientity>556A</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 36 4C"><unientity>554A</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 36 4D"><unientity>5544</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 36 4E"><unientity>555C</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 36 4F"><unientity>5531</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 36 50"><unientity>5543</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 36 51"><unientity>552C</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 36 52"><unientity>5561</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 36 53"><unientity>553E</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 36 54"><unientity>5563</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 36 55"><unientity>5555</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 36 56"><unientity>552F</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 36 57"><unientity>552E</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 36 58"><unientity>5564</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 36 59"><unientity>5538</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 36 5A"><unientity>55A7</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 36 5B"><unientity>5580</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 36 5C"><unientity>557B</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 36 5D"><unientity>557C</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 36 5E"><unientity>5527</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 36 5F"><unientity>5594</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 36 60"><unientity>5587</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 36 61"><unientity>559C</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 36 62"><unientity>558B</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 36 63"><unientity>55AA</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 36 64"><unientity>55B3</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 36 65"><unientity>558A</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 36 66"><unientity>5583</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 36 67"><unientity>55B1</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 36 68"><unientity>55AE</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 36 69"><unientity>5582</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 36 6A"><unientity>559F</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 36 6B"><unientity>559D</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 36 6C"><unientity>5598</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 36 6D"><unientity>559A</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 36 6E"><unientity>557E</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 36 6F"><unientity>55AC</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 36 70"><unientity>5589</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 36 71"><unientity>55B2</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 36 72"><unientity>55BB</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 36 73"><unientity>55E8</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 36 74"><unientity>55DF</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 36 75"><unientity>55D1</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 36 76"><unientity>55DC</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 36 77"><unientity>55E6</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 36 78"><unientity>55C7</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 36 79"><unientity>55D3</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 36 7A"><unientity>55CE</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 36 7B"><unientity>55E3</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 36 7C"><unientity>55EF</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 36 7D"><unientity>55E4</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 36 7E"><unientity>55C5</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 37 21"><unientity>55DA</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 37 22"><unientity>55C6</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 37 23"><unientity>55E1</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 37 24"><unientity>5600</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 37 25"><unientity>561B</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 37 26"><unientity>55FE</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 37 27"><unientity>5616</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 37 28"><unientity>55F7</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 37 29"><unientity>5608</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 37 2A"><unientity>561F</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 37 2B"><unientity>55FD</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 37 2C"><unientity>E932</unientity><unientityalt>5606</unientityalt><desc>Variant of 4B372C which maps to 5606</desc></character>
+<character hex="21 37 2D"><unientity>5609</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 37 2E"><unientity>5614</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 37 2F"><unientity>560E</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 37 30"><unientity>5617</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 37 31"><unientity>560D</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 37 32"><unientity>562E</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 37 33"><unientity>562F</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 37 34"><unientity>564E</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 37 35"><unientity>5636</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 37 36"><unientity>5632</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 37 37"><unientity>563B</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 37 38"><unientity>5639</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 37 39"><unientity>5657</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 37 3B"><unientity>5653</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 37 3C"><unientity>563F</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 37 3D"><unientity>5634</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 37 3E"><unientity>5637</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 37 3F"><unientity>5659</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 37 40"><unientity>5630</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 37 41"><unientity>566B</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 37 42"><unientity>5664</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 37 43"><unientity>5669</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 37 44"><unientity>5678</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 37 45"><unientity>5674</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 37 46"><unientity>5679</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 37 47"><unientity>5665</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 37 48"><unientity>566A</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 37 49"><unientity>5668</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 37 4A"><unientity>5671</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 37 4B"><unientity>566F</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 37 4C"><unientity>E933</unientity><unientityalt>5662</unientityalt><desc>Variant of 4B374C which maps to 5662</desc></character>
+<character hex="21 37 4D"><unientity>566C</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 37 4E"><unientity>5680</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 37 4F"><unientity>568E</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 37 50"><unientity>5685</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 37 51"><unientity>5687</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 37 52"><unientity>5690</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 37 53"><unientity>568F</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 37 54"><unientity>5695</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 37 55"><unientity>E934</unientity><unientityalt>56AE</unientityalt><desc>Variant of 453755 which maps to 56AE</desc></character>
+<character hex="21 37 56"><unientity>56A8</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 37 57"><unientity>56B0</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 37 58"><unientity>56A5</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 37 59"><unientity>56B7</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 37 5A"><unientity>56B4</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 37 5B"><unientity>56B6</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 37 5C"><unientity>56C0</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 37 5D"><unientity>56C1</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 37 5E"><unientity>56C2</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 37 5F"><unientity>56BC</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 37 60"><unientity>56CA</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 37 61"><unientity>56C9</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 37 62"><unientity>56C8</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 37 64"><unientity>56D1</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 37 65"><unientity>56DB</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 37 66"><unientity>56DA</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 37 67"><unientity>56E0</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 37 68"><unientity>56DE</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 37 69"><unientity>56E4</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 37 6B"><unientity>56F1</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 37 6C"><unientity>56FA</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 37 6D"><unientity>5703</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 37 6E"><unientity>5708</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 37 6F"><unientity>570B</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 37 70"><unientity>570D</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 37 71"><unientity>5712</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 37 72"><unientity>5713</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 37 73"><unientity>5718</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 37 74"><unientity>5716</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 37 75"><unientity>571F</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 37 77"><unientity>572D</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 37 78"><unientity>572F</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 37 79"><unientity>5730</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 37 7A"><unientity>5728</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 37 7B"><unientity>5733</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 37 7C"><unientity>5751</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 37 7D"><unientity>574A</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 38 21"><unientity>5740</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 38 22"><unientity>5747</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 38 23"><unientity>574D</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 38 24"><unientity>573E</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 38 25"><unientity>574E</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 38 27"><unientity>5783</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 38 28"><unientity>576A</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 38 29"><unientity>5769</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 38 2A"><unientity>5777</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 38 2B"><unientity>5761</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 38 2C"><unientity>5764</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 38 2D"><unientity>5766</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 38 2E"><unientity>5782</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 38 2F"><unientity>577C</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 38 30"><unientity>57A0</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 38 31"><unientity>578B</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 38 32"><unientity>57A3</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 38 33"><unientity>57AE</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 38 34"><unientity>57A2</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 38 35"><unientity>57D4</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 38 36"><unientity>57C2</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 38 37"><unientity>57CE</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 38 38"><unientity>57CB</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 38 39"><unientity>57C3</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 38 3A"><unientity>57F9</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 38 3B"><unientity>57F7</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 38 3C"><unientity>57FA</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 38 3D"><unientity>57DF</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 38 3E"><unientity>580A</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 38 3F"><unientity>5805</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 38 40"><unientity>5802</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 38 41"><unientity>5806</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 38 42"><unientity>57E4</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 38 43"><unientity>57E0</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 38 44"><unientity>5831</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 38 45"><unientity>582F</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 38 46"><unientity>5835</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 38 47"><unientity>582A</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 38 48"><unientity>5830</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 38 49"><unientity>5824</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 38 4A"><unientity>5834</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 38 4B"><unientity>5821</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 38 4C"><unientity>585E</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 38 4D"><unientity>5857</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 38 4E"><unientity>5858</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 38 4F"><unientity>5851</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 38 50"><unientity>586B</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 38 51"><unientity>584C</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 38 52"><unientity>585A</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 38 53"><unientity>586D</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 38 54"><unientity>5854</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 38 55"><unientity>5862</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 38 56"><unientity>584A</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 38 57"><unientity>5883</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 38 58"><unientity>587E</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 38 59"><unientity>5875</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 38 5A"><unientity>588A</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 38 5B"><unientity>5879</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 38 5C"><unientity>5885</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 38 5D"><unientity>5893</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 38 5E"><unientity>589E</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 38 5F"><unientity>5880</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 38 60"><unientity>58B3</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 38 61"><unientity>589C</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 38 62"><unientity>58AE</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 38 63"><unientity>589F</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 38 64"><unientity>E935</unientity><unientityalt>58C7</unientityalt><desc>Variant of 4B3864 which maps to 58C7</desc></character>
+<character hex="21 38 65"><unientity>58C5</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 38 66"><unientity>58C1</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 38 67"><unientity>58BE</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 38 68"><unientity>58D5</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 38 69"><unientity>58D3</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 38 6A"><unientity>58D1</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 38 6B"><unientity>58D9</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 38 6C"><unientity>58D8</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 38 6D"><unientity>58DF</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 38 6E"><unientity>58DE</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 38 6F"><unientity>58E2</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 38 70"><unientity>58E4</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 38 71"><unientity>58E9</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 38 72"><unientity>58EB</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 38 73"><unientity>58EC</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 38 74"><unientity>58EF</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 38 76"><unientity>58FA</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 38 77"><unientity>58FD</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 38 78"><unientity>590F</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 38 79"><unientity>5914</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 38 7A"><unientity>5915</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 38 7B"><unientity>5916</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 38 7C"><unientity>5919</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 38 7D"><unientity>591A</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 38 7E"><unientity>591C</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 39 21"><unientity>5920</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 39 22"><unientity>5924</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 39 23"><unientity>5925</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 39 24"><unientity>5922</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 39 25"><unientity>5927</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 39 26"><unientity>592A</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 39 27"><unientity>592B</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 39 28"><unientity>5929</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 39 29"><unientity>592D</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 39 2A"><unientity>592E</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 39 2B"><unientity>5931</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 39 2C"><unientity>5937</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 39 2E"><unientity>593E</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 39 2F"><unientity>5954</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 39 30"><unientity>5949</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 39 31"><unientity>5948</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 39 32"><unientity>5947</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 39 33"><unientity>5944</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 39 34"><unientity>5955</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 39 35"><unientity>5951</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 39 36"><unientity>594E</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 39 37"><unientity>594F</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 39 38"><unientity>5950</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 39 39"><unientity>5957</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 39 3A"><unientity>5958</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 39 3B"><unientity>595A</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 39 3C"><unientity>5960</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 39 3D"><unientity>5962</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 39 3E"><unientity>5967</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 39 3F"><unientity>5969</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 39 40"><unientity>596A</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 39 41"><unientity>596E</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 39 42"><unientity>5973</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 39 43"><unientity>5974</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 39 44"><unientity>5976</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 39 45"><unientity>5984</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 39 46"><unientity>5983</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 39 47"><unientity>5978</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 39 48"><unientity>597D</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 39 49"><unientity>5979</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 39 4A"><unientity>5982</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 39 4B"><unientity>5981</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 39 4C"><unientity>59A8</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 39 4D"><unientity>5992</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 39 4F"><unientity>59A4</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 39 50"><unientity>59A3</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 39 51"><unientity>5993</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 39 52"><unientity>599E</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 39 53"><unientity>599D</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 39 54"><unientity>5999</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 39 55"><unientity>59A5</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 39 56"><unientity>598A</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 39 57"><unientity>5996</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 39 58"><unientity>59BE</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 39 59"><unientity>59BB</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 39 5A"><unientity>59AE</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 39 5B"><unientity>59D1</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 39 5C"><unientity>59B9</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 39 5D"><unientity>59C6</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 39 5E"><unientity>59D0</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 39 5F"><unientity>59D7</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 39 60"><unientity>59AF</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 39 61"><unientity>59D2</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 39 62"><unientity>59D3</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 39 63"><unientity>59CA</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 39 65"><unientity>59CB</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 39 66"><unientity>59D4</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 39 67"><unientity>59E3</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 39 69"><unientity>59FF</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 39 6A"><unientity>59D8</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 39 6B"><unientity>5A03</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 39 6C"><unientity>59E8</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 39 6D"><unientity>59E5</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 39 6E"><unientity>59EA</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 39 6F"><unientity>5A01</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 39 70"><unientity>59FB</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 39 71"><unientity>59E6</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 39 72"><unientity>59DA</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 39 73"><unientity>5A11</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 39 74"><unientity>5A18</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 39 75"><unientity>5A23</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 39 76"><unientity>5A1C</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 39 77"><unientity>5A13</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 39 78"><unientity>59EC</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 39 79"><unientity>5A20</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 39 7A"><unientity>5A1F</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 39 7B"><unientity>5A1B</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 39 7C"><unientity>5A0C</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 39 7D"><unientity>5A29</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 39 7E"><unientity>5A25</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 3A 21"><unientity>5A46</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 3A 22"><unientity>5A49</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 3A 23"><unientity>5A6A</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 3A 24"><unientity>5A36</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 3A 25"><unientity>5A4A</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 3A 26"><unientity>5A40</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 3A 27"><unientity>5A66</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 3A 28"><unientity>5A41</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 3A 29"><unientity>5A3C</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 3A 2A"><unientity>5A62</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 3A 2B"><unientity>5A5A</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 3A 2C"><unientity>5A77</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 3A 2D"><unientity>5A9A</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 3A 2E"><unientity>5A92</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 3A 2F"><unientity>5A7F</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 3A 30"><unientity>5ABC</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 3A 31"><unientity>5A9B</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 3A 32"><unientity>5ACC</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 3A 33"><unientity>5AC1</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 3A 34"><unientity>5AC9</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 3A 35"><unientity>5ABE</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 3A 36"><unientity>5ABD</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 3A 37"><unientity>5AB2</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 3A 38"><unientity>5AC2</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 3A 39"><unientity>5AB3</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 3A 3A"><unientity>5AE1</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 3A 3B"><unientity>5AD7</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 3A 3C"><unientity>5AD6</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 3A 3D"><unientity>5AE3</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 3A 3E"><unientity>5AE9</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 3A 3F"><unientity>5AD8</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 3A 40"><unientity>5AE6</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 3A 41"><unientity>5AFB</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 3A 42"><unientity>5B09</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 3A 43"><unientity>5B0B</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 3A 44"><unientity>5B0C</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 3A 45"><unientity>5AF5</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 3A 46"><unientity>5B34</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 3A 47"><unientity>5B1D</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 3A 48"><unientity>5B2A</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 3A 49"><unientity>5B24</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 3A 4A"><unientity>5B30</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 3A 4B"><unientity>5B38</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 3A 4C"><unientity>5B40</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 3A 4D"><unientity>5B50</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 3A 4E"><unientity>5B51</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 3A 4F"><unientity>5B53</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 3A 50"><unientity>5B54</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 3A 51"><unientity>5B55</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 3A 52"><unientity>5B57</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 3A 53"><unientity>5B58</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 3A 54"><unientity>5B5D</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 3A 55"><unientity>5B5C</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 3A 57"><unientity>5B5F</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 3A 58"><unientity>5B63</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 3A 59"><unientity>5B64</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 3A 5A"><unientity>5B69</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 3A 5B"><unientity>5B6B</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 3A 5C"><unientity>5B70</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 3A 5D"><unientity>5B73</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 3A 5E"><unientity>5B71</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 3A 5F"><unientity>5B75</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 3A 60"><unientity>5B78</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 3A 61"><unientity>5B7A</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 3A 62"><unientity>5B7D</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 3A 63"><unientity>5B7F</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 3A 65"><unientity>5B87</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 3A 66"><unientity>5B88</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 3A 67"><unientity>5B89</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 3A 68"><unientity>5B85</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 3A 69"><unientity>5B8C</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 3A 6A"><unientity>5B8B</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 3A 6B"><unientity>5B8F</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 3A 6C"><unientity>5B97</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 3A 6D"><unientity>5B9A</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 3A 6E"><unientity>5B9C</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 3A 6F"><unientity>5B98</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 3A 70"><unientity>5B99</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 3A 71"><unientity>5B9B</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 3A 72"><unientity>5BA5</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 3A 73"><unientity>5BA3</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 3A 74"><unientity>5BA6</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 3A 75"><unientity>5BA4</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 3A 76"><unientity>5BA2</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 3A 77"><unientity>5BB0</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 3A 78"><unientity>5BB8</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 3A 7A"><unientity>5BB5</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 3A 7B"><unientity>5BB4</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 3A 7C"><unientity>5BAE</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 3A 7D"><unientity>5BB9</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 3A 7E"><unientity>5BB3</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 3B 21"><unientity>5BC6</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 3B 22"><unientity>5BC7</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 3B 23"><unientity>5BC5</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 3B 24"><unientity>5BC4</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 3B 25"><unientity>5BC2</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 3B 26"><unientity>5BBF</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 3B 27"><unientity>5BCC</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 3B 28"><unientity>5BD2</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 3B 29"><unientity>5BD0</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 3B 2A"><unientity>5BD3</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 3B 2B"><unientity>5BE1</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 3B 2C"><unientity>5BE5</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 3B 2D"><unientity>5BE8</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 3B 2E"><unientity>5BE2</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 3B 2F"><unientity>5BE4</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 3B 30"><unientity>5BDE</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 3B 31"><unientity>5BE6</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 3B 32"><unientity>5BE7</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 3B 33"><unientity>5BDF</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 3B 34"><unientity>5BEE</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 3B 35"><unientity>5BEC</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 3B 36"><unientity>5BE9</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 3B 37"><unientity>5BEB</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 3B 38"><unientity>5BF5</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 3B 39"><unientity>5BF6</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 3B 3A"><unientity>5BF8</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 3B 3B"><unientity>5BFA</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 3B 3C"><unientity>5C01</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 3B 3D"><unientity>5C04</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 3B 3E"><unientity>5C09</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 3B 3F"><unientity>5C08</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 3B 40"><unientity>5C07</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 3B 41"><unientity>5C0A</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 3B 42"><unientity>5C0B</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 3B 43"><unientity>5C0D</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 3B 44"><unientity>5C0E</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 3B 45"><unientity>5C0F</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 3B 46"><unientity>5C11</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 3B 47"><unientity>5C16</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 3B 48"><unientity>5C1A</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 3B 49"><unientity>5C24</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 3B 4A"><unientity>5C2C</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 3B 4B"><unientity>5C31</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 3B 4C"><unientity>5C37</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 3B 4D"><unientity>5C38</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 3B 4E"><unientity>5C3A</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 3B 4F"><unientity>5C3C</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 3B 50"><unientity>5C40</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 3B 51"><unientity>5C41</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 3B 52"><unientity>5C3F</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 3B 53"><unientity>5C3E</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 3B 54"><unientity>5C46</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 3B 55"><unientity>5C45</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 3B 56"><unientity>5C48</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 3B 57"><unientity>5C4E</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 3B 58"><unientity>5C4B</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 3B 59"><unientity>5C4D</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 3B 5A"><unientity>5C55</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 3B 5B"><unientity>5C51</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 3B 5C"><unientity>5C50</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 3B 5D"><unientity>E9E1</unientity><desc>East Asian ideograph not in Unicode</desc></character>
+<character hex="21 3B 5E"><unientity>5C60</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 3B 5F"><unientity>5C5C</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 3B 60"><unientity>5C62</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 3B 61"><unientity>E936</unientity><unientityalt>5C64</unientityalt><desc>Variant of 4B3B61 which maps to 5C64</desc></character>
+<character hex="21 3B 62"><unientity>5C65</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 3B 63"><unientity>5C6C</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 3B 64"><unientity>5C6F</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 3B 65"><unientity>5C71</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 3B 66"><unientity>5C79</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 3B 67"><unientity>5C90</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 3B 68"><unientity>5C8C</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 3B 69"><unientity>5C91</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 3B 6A"><unientity>5C94</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 3B 6B"><unientity>5CB7</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 3B 6C"><unientity>5CB8</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 3B 6E"><unientity>5CA1</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 3B 6F"><unientity>5CAB</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 3B 71"><unientity>5CB1</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 3B 72"><unientity>5CD9</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 3B 73"><unientity>5D01</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 3B 74"><unientity>5CFD</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 3B 75"><unientity>5CED</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 3B 76"><unientity>5CFB</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 3B 77"><unientity>5CE8</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 3B 78"><unientity>5CF0</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 3B 79"><unientity>5CF6</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 3B 7A"><unientity>5CEA</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 3B 7B"><unientity>5D07</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 3B 7C"><unientity>5D06</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 3B 7D"><unientity>5D1B</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 3B 7E"><unientity>5D16</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 3C 21"><unientity>5D0E</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 3C 22"><unientity>5D11</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 3C 23"><unientity>5D22</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 3C 24"><unientity>5D29</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 3C 25"><unientity>5D14</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 3C 26"><unientity>5D19</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 3C 27"><unientity>5D4C</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 3C 28"><unientity>5D50</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 3C 29"><unientity>5D69</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 3C 2A"><unientity>5D84</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 3C 2B"><unientity>5D87</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 3C 2C"><unientity>5D9D</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 3C 2D"><unientity>5DBC</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 3C 2E"><unientity>5DBD</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 3C 2F"><unientity>E937</unientity><unientityalt>5DBA</unientityalt><desc>Variant of 4B3C2F which maps to 5DBA</desc></character>
+<character hex="21 3C 30"><unientity>5DCD</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 3C 31"><unientity>5DD2</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 3C 32"><unientity>5DD4</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 3C 33"><unientity>5DD6</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 3C 34"><unientity>5DDD</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 3C 35"><unientity>5DDE</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 3C 36"><unientity>5DE2</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 3C 37"><unientity>5DE5</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 3C 38"><unientity>5DE8</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 3C 39"><unientity>5DE7</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 3C 3A"><unientity>5DE6</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 3C 3B"><unientity>5DEB</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 3C 3C"><unientity>5DEE</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 3C 3D"><unientity>5DF1</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 3C 3E"><unientity>5DF2</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 3C 3F"><unientity>5DF3</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 3C 40"><unientity>5DF4</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 3C 41"><unientity>5DF7</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 3C 42"><unientity>5DFD</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 3C 43"><unientity>5DFE</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 3C 44"><unientity>5E02</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 3C 46"><unientity>5E06</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 3C 49"><unientity>5E1A</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 3C 4A"><unientity>5E16</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 3C 4B"><unientity>5E15</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 3C 4C"><unientity>5E1B</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 3C 4D"><unientity>5E11</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 3C 4E"><unientity>5E1D</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 3C 4F"><unientity>5E25</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 3C 51"><unientity>5E2B</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 3C 52"><unientity>5E33</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 3C 53"><unientity>5E36</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 3C 54"><unientity>5E38</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 3C 55"><unientity>5E37</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 3C 56"><unientity>5E45</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 3C 57"><unientity>5E3D</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 3C 58"><unientity>5E40</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 3C 59"><unientity>5E4C</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 3C 5A"><unientity>5E5B</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 3C 5B"><unientity>5E54</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 3C 5C"><unientity>5E57</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 3C 5D"><unientity>5E55</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 3C 5E"><unientity>5E63</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 3C 5F"><unientity>5E62</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 3C 60"><unientity>5E5F</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 3C 61"><unientity>5E6B</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 3C 63"><unientity>5E73</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 3C 65"><unientity>5E74</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 3C 68"><unientity>5E7B</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 3C 69"><unientity>5E7C</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 3C 6A"><unientity>5E7D</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 3C 6B"><unientity>5E7E</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 3C 6C"><unientity>5E8F</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 3C 6D"><unientity>5E87</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 3C 6E"><unientity>5E8A</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 3C 6F"><unientity>5E9A</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 3C 70"><unientity>5E97</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 3C 71"><unientity>5E96</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 3C 72"><unientity>5E9C</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 3C 73"><unientity>5E95</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 3C 74"><unientity>5EA0</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 3C 75"><unientity>5EA6</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 3C 76"><unientity>5EAB</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 3C 77"><unientity>5EA7</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 3C 78"><unientity>5EAD</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 3C 79"><unientity>5EB7</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 3C 7A"><unientity>5EB8</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 3C 7B"><unientity>5EB6</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 3C 7C"><unientity>5EB5</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 3C 7D"><unientity>5EC2</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 3C 7E"><unientity>5EC1</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 3D 21"><unientity>5EBE</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 3D 22"><unientity>5ECA</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 3D 23"><unientity>5EC9</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 3D 24"><unientity>5EC8</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 3D 25"><unientity>5ED3</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 3D 26"><unientity>5ED6</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 3D 27"><unientity>5EE2</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 3D 28"><unientity>5EDA</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 3D 29"><unientity>5EDD</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 3D 2A"><unientity>E938</unientity><unientityalt>5EE3</unientityalt><desc>Variant of 4B3D2A which maps to 5EE3</desc></character>
+<character hex="21 3D 2B"><unientity>5EDF</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 3D 2C"><unientity>5EE0</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 3D 2D"><unientity>9F90</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 3D 2E"><unientity>5EEC</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 3D 2F"><unientity>5EF3</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 3D 30"><unientity>5EF7</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 3D 32"><unientity>5EF6</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 3D 33"><unientity>5EFA</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 3D 34"><unientity>5EFF</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 3D 36"><unientity>5F04</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 3D 37"><unientity>5F08</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 3D 38"><unientity>5F0A</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 3D 39"><unientity>5F0F</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 3D 3A"><unientity>5F12</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 3D 3B"><unientity>5F13</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 3D 3C"><unientity>5F15</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 3D 3D"><unientity>5F14</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 3D 3E"><unientity>5F18</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 3D 3F"><unientity>5F17</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 3D 40"><unientity>5F1B</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 3D 41"><unientity>5F1F</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 3D 42"><unientity>5F26</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 3D 43"><unientity>5F27</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 3D 44"><unientity>5F29</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 3D 45"><unientity>5F2D</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 3D 46"><unientity>5F31</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 3D 47"><unientity>5F35</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 3D 48"><unientity>5F37</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 3D 49"><unientity>5F3C</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 3D 4A"><unientity>5F46</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 3D 4B"><unientity>5F48</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 3D 4C"><unientity>5F4C</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 3D 4D"><unientity>5F4E</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 3D 4E"><unientity>5F57</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 3D 4F"><unientity>5F59</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 3D 50"><unientity>5F5D</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 3D 51"><unientity>5F62</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 3D 52"><unientity>5F64</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 3D 53"><unientity>5F65</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 3D 54"><unientity>5F6C</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 3D 55"><unientity>5F69</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 3D 57"><unientity>5F6D</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 3D 58"><unientity>5F70</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 3D 59"><unientity>5F71</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 3D 5B"><unientity>5F79</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 3D 5C"><unientity>5F80</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 3D 5E"><unientity>5F7F</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 3D 5F"><unientity>5F7C</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 3D 60"><unientity>5F85</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 3D 61"><unientity>5F88</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 3D 62"><unientity>5F8B</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 3D 63"><unientity>5F8A</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 3D 64"><unientity>5F87</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 3D 65"><unientity>5F8C</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 3D 66"><unientity>5F92</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 3D 67"><unientity>5F91</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 3D 68"><unientity>5F90</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 3D 69"><unientity>5F98</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 3D 6A"><unientity>5F97</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 3D 6B"><unientity>5F99</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 3D 6C"><unientity>5F9E</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 3D 6F"><unientity>5FA9</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 3D 71"><unientity>5FAA</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 3D 72"><unientity>5FAC</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 3D 73"><unientity>5FAE</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 3D 74"><unientity>5FB9</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 3D 75"><unientity>5FB7</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 3D 76"><unientity>5FB5</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 3D 77"><unientity>5FBD</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 3D 78"><unientity>5FC3</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 3D 79"><unientity>5FC5</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 3D 7A"><unientity>5FD9</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 3D 7B"><unientity>5FD8</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 3D 7C"><unientity>5FCC</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 3D 7D"><unientity>5FD6</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 3E 21"><unientity>5FCD</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 3E 22"><unientity>5FEB</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 3E 23"><unientity>5FE0</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 3E 24"><unientity>5FF1</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 3E 25"><unientity>5FFD</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 3E 26"><unientity>5FDD</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 3E 27"><unientity>5FF5</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 3E 28"><unientity>5FFF</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 3E 29"><unientity>6014</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 3E 2A"><unientity>E939</unientity><unientityalt>6035</unientityalt><desc>Variant of 4B3E2A which maps to 6035</desc></character>
+<character hex="21 3E 2B"><unientity>602A</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 3E 2C"><unientity>602F</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 3E 2D"><unientity>6016</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 3E 2E"><unientity>601D</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 3E 2F"><unientity>600F</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 3E 30"><unientity>6021</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 3E 31"><unientity>6020</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 3E 32"><unientity>6028</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 3E 33"><unientity>6025</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 3E 34"><unientity>6027</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 3E 35"><unientity>600E</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 3E 36"><unientity>6015</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 3E 37"><unientity>6012</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 3E 38"><unientity>6059</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 3E 39"><unientity>6063</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 3E 3A"><unientity>6068</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 3E 3B"><unientity>6043</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 3E 3C"><unientity>6065</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 3E 3D"><unientity>6050</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 3E 3E"><unientity>606D</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 3E 3F"><unientity>6062</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 3E 40"><unientity>E93A</unientity><unientityalt>6046</unientityalt><desc>Variant of 4B3E40 which maps to 6046</desc></character>
+<character hex="21 3E 41"><unientity>604D</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 3E 42"><unientity>606B</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 3E 43"><unientity>6069</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 3E 44"><unientity>606C</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 3E 45"><unientity>606F</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 3E 46"><unientity>606A</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 3E 47"><unientity>6064</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 3E 48"><unientity>6070</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 3E 49"><unientity>6055</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 3E 4A"><unientity>608C</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 3E 4B"><unientity>60A6</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 3E 4C"><unientity>607F</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 3E 4D"><unientity>609F</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 3E 4E"><unientity>609A</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 3E 4F"><unientity>6096</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 3E 50"><unientity>6084</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 3E 51"><unientity>608D</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 3E 52"><unientity>60A3</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 3E 53"><unientity>6089</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 3E 54"><unientity>6094</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 3E 55"><unientity>60A0</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 3E 56"><unientity>60A8</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 3E 57"><unientity>60B4</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 3E 58"><unientity>60E6</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 3E 59"><unientity>60CB</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 3E 5B"><unientity>E93B</unientity><unientityalt>60C5</unientityalt><desc>Variant of 4B3E5B which maps to 60C5</desc></character>
+<character hex="21 3E 5C"><unientity>60B6</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 3E 5D"><unientity>60D1</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 3E 5E"><unientity>60B5</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 3E 5F"><unientity>60BB</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 3E 60"><unientity>60E0</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 3E 61"><unientity>60E1</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 3E 62"><unientity>60DC</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 3E 63"><unientity>60D8</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 3E 64"><unientity>60D5</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 3E 65"><unientity>60BC</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 3E 66"><unientity>60B2</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 3E 67"><unientity>60C6</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 3E 68"><unientity>60B8</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 3E 69"><unientity>60DA</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 3E 6A"><unientity>60DF</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 3E 6B"><unientity>610F</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 3E 6C"><unientity>611C</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 3E 6D"><unientity>60F3</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 3E 6E"><unientity>611F</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 3E 6F"><unientity>60F0</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 3E 70"><unientity>60FB</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 3E 71"><unientity>60FA</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 3E 72"><unientity>611A</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 3E 73"><unientity>6115</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 3E 74"><unientity>60F9</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 3E 75"><unientity>6123</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 3E 76"><unientity>60F4</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 3E 77"><unientity>611B</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 3E 78"><unientity>610E</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 3E 79"><unientity>6100</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 3E 7A"><unientity>6101</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 3E 7B"><unientity>60F6</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 3E 7C"><unientity>6109</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 3E 7D"><unientity>6108</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 3E 7E"><unientity>60F1</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 3F 21"><unientity>6148</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 3F 22"><unientity>6168</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 3F 24"><unientity>613C</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 3F 26"><unientity>614C</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 3F 27"><unientity>614D</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 3F 28"><unientity>614B</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 3F 29"><unientity>613E</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 3F 2A"><unientity>6127</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 3F 2B"><unientity>6134</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 3F 2C"><unientity>6147</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 3F 2D"><unientity>6177</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 3F 2E"><unientity>6176</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 3F 2F"><unientity>6167</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 3F 30"><unientity>6170</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 3F 31"><unientity>615A</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 3F 32"><unientity>615D</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 3F 33"><unientity>6182</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 3F 34"><unientity>617C</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 3F 35"><unientity>6162</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 3F 36"><unientity>616E</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 3F 37"><unientity>6155</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 3F 38"><unientity>6158</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 3F 39"><unientity>6163</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 3F 3A"><unientity>615F</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 3F 3B"><unientity>616B</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 3F 3C"><unientity>617E</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 3F 3D"><unientity>61A7</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 3F 3E"><unientity>61B2</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 3F 3F"><unientity>6191</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 3F 40"><unientity>618E</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 3F 41"><unientity>61AB</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 3F 42"><unientity>61A4</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 3F 43"><unientity>61AC</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 3F 44"><unientity>619A</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 3F 45"><unientity>61A9</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 3F 46"><unientity>6194</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 3F 47"><unientity>618A</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 3F 48"><unientity>61B6</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 3F 49"><unientity>61CD</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 3F 4A"><unientity>61C9</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 3F 4B"><unientity>6190</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 3F 4C"><unientity>61BE</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 3F 4D"><unientity>61C2</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 3F 4E"><unientity>61C7</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 3F 4F"><unientity>61C8</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 3F 50"><unientity>61CA</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 3F 51"><unientity>61E3</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 3F 52"><unientity>61E6</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 3F 53"><unientity>E93C</unientity><unientityalt>61F2</unientityalt><desc>Variant of 4B3F53 which maps to 61F2</desc></character>
+<character hex="21 3F 54"><unientity>61F7</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 3F 55"><unientity>61F6</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 3F 56"><unientity>61F8</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 3F 57"><unientity>61F5</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 3F 58"><unientity>61FA</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 3F 59"><unientity>61FE</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 3F 5A"><unientity>61FF</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 3F 5B"><unientity>61FC</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 3F 5C"><unientity>6200</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 3F 5D"><unientity>6208</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 3F 5E"><unientity>620A</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 3F 5F"><unientity>620E</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 3F 60"><unientity>620D</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 3F 61"><unientity>620C</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 3F 62"><unientity>6210</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 3F 63"><unientity>6212</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 3F 64"><unientity>6211</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 3F 65"><unientity>6216</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 3F 66"><unientity>6215</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 3F 67"><unientity>621B</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 3F 68"><unientity>621A</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 3F 69"><unientity>621F</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 3F 6A"><unientity>6221</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 3F 6B"><unientity>6222</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 3F 6C"><unientity>622A</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 3F 6D"><unientity>622E</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 3F 6E"><unientity>6230</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 3F 6F"><unientity>6232</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 3F 70"><unientity>6234</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 3F 71"><unientity>6233</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 3F 72"><unientity>6236</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 3F 73"><unientity>623F</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 3F 74"><unientity>623E</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 3F 75"><unientity>6240</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 3F 76"><unientity>6241</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 3F 78"><unientity>6248</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 3F 79"><unientity>6249</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 3F 7A"><unientity>624B</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 3F 7D"><unientity>6253</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 3F 7E"><unientity>6254</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 40 21"><unientity>6252</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 40 22"><unientity>625B</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 40 23"><unientity>6263</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 40 24"><unientity>6258</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 40 25"><unientity>6296</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 40 26"><unientity>6297</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 40 27"><unientity>6292</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 40 28"><unientity>6276</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 40 29"><unientity>6289</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 40 2A"><unientity>627F</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 40 2B"><unientity>6279</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 40 2C"><unientity>6280</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 40 2D"><unientity>628A</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 40 2E"><unientity>626D</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 40 2F"><unientity>627C</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 40 30"><unientity>627E</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 40 31"><unientity>626F</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 40 32"><unientity>6284</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 40 33"><unientity>6295</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 40 34"><unientity>6291</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 40 35"><unientity>6298</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 40 36"><unientity>626E</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 40 37"><unientity>6273</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 40 38"><unientity>6293</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 40 39"><unientity>62C9</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 40 3A"><unientity>62C4</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 40 3B"><unientity>62CC</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 40 3C"><unientity>62A8</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 40 3D"><unientity>62DC</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 40 3E"><unientity>62BF</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 40 3F"><unientity>62C2</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 40 40"><unientity>62B9</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 40 41"><unientity>62D2</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 40 42"><unientity>62D3</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 40 43"><unientity>62DB</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 40 44"><unientity>62AB</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 40 45"><unientity>62CB</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 40 46"><unientity>62D4</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 40 47"><unientity>62BD</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 40 48"><unientity>62BC</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 40 49"><unientity>E93D</unientity><unientityalt>62D0</unientityalt><desc>Variant of 4B4049 which maps to 62D0</desc></character>
+<character hex="21 40 4A"><unientity>62C8</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 40 4B"><unientity>62D9</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 40 4C"><unientity>62DA</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 40 4D"><unientity>62AC</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 40 4E"><unientity>62C7</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 40 4F"><unientity>62B1</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 40 50"><unientity>62D6</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 40 51"><unientity>62D8</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 40 52"><unientity>62CD</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 40 53"><unientity>62B5</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 40 54"><unientity>62CE</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 40 55"><unientity>62D7</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 40 56"><unientity>62C6</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 40 57"><unientity>6309</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 40 58"><unientity>6316</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 40 59"><unientity>62FC</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 40 5A"><unientity>62F3</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 40 5B"><unientity>6308</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 40 5C"><unientity>62ED</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 40 5D"><unientity>6301</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 40 5E"><unientity>62EE</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 40 5F"><unientity>62EF</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 40 60"><unientity>62F7</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 40 61"><unientity>6307</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 40 62"><unientity>62F1</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 40 63"><unientity>62FD</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 40 64"><unientity>6311</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 40 65"><unientity>62EC</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 40 66"><unientity>E93E</unientity><unientityalt>62F4</unientityalt><desc>Variant of 4B4066 which maps to 62F4</desc></character>
+<character hex="21 40 67"><unientity>62FF</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 40 69"><unientity>6342</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 40 6A"><unientity>632A</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 40 6B"><unientity>6355</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 40 6C"><unientity>633E</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 40 6D"><unientity>632F</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 40 6E"><unientity>634E</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 40 6F"><unientity>634F</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 40 70"><unientity>6350</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 40 71"><unientity>6349</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 40 73"><unientity>632B</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 40 74"><unientity>6328</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 40 75"><unientity>633A</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 40 76"><unientity>63A5</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 40 77"><unientity>6369</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 40 78"><unientity>63A0</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 40 79"><unientity>6396</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 40 7A"><unientity>63A7</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 40 7B"><unientity>6372</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 40 7C"><unientity>6377</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 40 7D"><unientity>6383</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 40 7E"><unientity>636B</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 41 21"><unientity>6367</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 41 22"><unientity>6398</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 41 23"><unientity>639B</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 41 24"><unientity>63AA</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 41 25"><unientity>6371</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 41 26"><unientity>63A9</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 41 27"><unientity>638C</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 41 28"><unientity>6389</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 41 29"><unientity>63A2</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 41 2A"><unientity>6399</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 41 2B"><unientity>63A1</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 41 2C"><unientity>6388</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 41 2D"><unientity>63AC</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 41 2E"><unientity>633D</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 41 2F"><unientity>6392</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 41 30"><unientity>63A3</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 41 31"><unientity>6376</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 41 32"><unientity>638F</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 41 33"><unientity>63A8</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 41 34"><unientity>637B</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 41 35"><unientity>E93F</unientity><unientityalt>6368</unientityalt><desc>Variant of 4B4135 which maps to 6368</desc></character>
+<character hex="21 41 36"><unientity>6384</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 41 37"><unientity>6380</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 41 38"><unientity>63C6</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 41 39"><unientity>63C9</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 41 3A"><unientity>63CD</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 41 3B"><unientity>63E1</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 41 3C"><unientity>63C0</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 41 3D"><unientity>63E9</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 41 3E"><unientity>63D0</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 41 3F"><unientity>63DA</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 41 40"><unientity>63D6</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 41 41"><unientity>63ED</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 41 42"><unientity>63EE</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 41 43"><unientity>63CF</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 41 44"><unientity>63E3</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 41 45"><unientity>63F4</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 41 46"><unientity>E940</unientity><unientityalt>63DB</unientityalt><desc>Variant of 454146 which maps to 63DB</desc></character>
+<character hex="21 41 47"><unientity>63D2</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 41 48"><unientity>63EA</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 41 49"><unientity>641E</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 41 4A"><unientity>642A</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 41 4B"><unientity>643E</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 41 4C"><unientity>6413</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 41 4D"><unientity>640F</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 41 4E"><unientity>6414</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 41 4F"><unientity>640D</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 41 50"><unientity>642D</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 41 51"><unientity>643D</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 41 52"><unientity>6416</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 41 53"><unientity>6417</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 41 54"><unientity>641C</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 41 55"><unientity>6436</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 41 56"><unientity>642C</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 41 57"><unientity>6458</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 41 58"><unientity>6469</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 41 59"><unientity>6454</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 41 5A"><unientity>6452</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 41 5B"><unientity>646F</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 41 5C"><unientity>6478</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 41 5D"><unientity>6479</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 41 5E"><unientity>647A</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 41 5F"><unientity>645F</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 41 60"><unientity>6451</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 41 61"><unientity>6467</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 41 62"><unientity>649E</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 41 63"><unientity>64A4</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 41 64"><unientity>6487</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 41 65"><unientity>6488</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 41 66"><unientity>64A5</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 41 67"><unientity>64B0</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 41 68"><unientity>6493</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 41 69"><unientity>6495</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 41 6A"><unientity>6492</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 41 6B"><unientity>64A9</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 41 6C"><unientity>6491</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 41 6D"><unientity>64AE</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 41 6E"><unientity>64B2</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 41 6F"><unientity>64AD</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 41 70"><unientity>649A</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 41 71"><unientity>64AB</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 41 72"><unientity>64AC</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 41 73"><unientity>64C5</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 41 74"><unientity>64C1</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 41 75"><unientity>64D8</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 41 76"><unientity>64CA</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 41 77"><unientity>64BB</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 41 78"><unientity>64C2</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 41 79"><unientity>64BC</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 41 7A"><unientity>64CB</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 41 7B"><unientity>64CD</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 41 7C"><unientity>64DA</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 41 7D"><unientity>64C4</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 41 7E"><unientity>64C7</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 42 21"><unientity>64CE</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 42 22"><unientity>64D4</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 42 23"><unientity>64D2</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 42 24"><unientity>64BF</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 42 25"><unientity>64E0</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 42 26"><unientity>64F0</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 42 27"><unientity>64E6</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 42 28"><unientity>64EC</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 42 29"><unientity>64F1</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 42 2A"><unientity>64F4</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 42 2B"><unientity>64F2</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 42 2C"><unientity>6506</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 42 2D"><unientity>6500</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 42 2E"><unientity>64FE</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 42 2F"><unientity>64FB</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 42 30"><unientity>64FA</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 42 31"><unientity>650F</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 42 32"><unientity>6518</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 42 33"><unientity>6514</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 42 34"><unientity>6519</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 42 35"><unientity>651D</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 42 36"><unientity>651C</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 42 37"><unientity>6523</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 42 38"><unientity>6524</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 42 39"><unientity>652B</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 42 3A"><unientity>652A</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 42 3B"><unientity>652C</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 42 3C"><unientity>652F</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 42 3D"><unientity>6536</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 42 3E"><unientity>6539</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 42 3F"><unientity>653B</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 42 40"><unientity>653E</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 42 41"><unientity>653F</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 42 42"><unientity>6545</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 42 43"><unientity>6548</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 42 44"><unientity>654E</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 42 45"><unientity>6556</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 42 46"><unientity>6551</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 42 47"><unientity>6557</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 42 48"><unientity>655D</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 42 49"><unientity>6558</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 42 4A"><unientity>654F</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 42 4B"><unientity>6566</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 42 4C"><unientity>6562</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 42 4D"><unientity>6563</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 42 4E"><unientity>655E</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 42 4F"><unientity>5553</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 42 50"><unientity>656C</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 42 51"><unientity>6572</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 42 52"><unientity>6575</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 42 53"><unientity>6577</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 42 54"><unientity>6578</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 42 55"><unientity>6574</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 42 56"><unientity>6582</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 42 57"><unientity>6583</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 42 58"><unientity>6587</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 42 59"><unientity>6591</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 42 5A"><unientity>6590</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 42 5C"><unientity>6599</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 42 5D"><unientity>659C</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 42 5E"><unientity>659F</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 42 5F"><unientity>65A1</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 42 60"><unientity>65A4</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 42 61"><unientity>65A5</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 42 62"><unientity>65A7</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 42 63"><unientity>65AC</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 42 64"><unientity>65AF</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 42 65"><unientity>65B0</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 42 66"><unientity>65B7</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 42 67"><unientity>65B9</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 42 69"><unientity>65BD</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 42 6A"><unientity>65C1</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 42 6B"><unientity>65C5</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 42 6C"><unientity>65CE</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 42 6D"><unientity>65CB</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 42 6E"><unientity>65CC</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 42 6F"><unientity>65CF</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 42 70"><unientity>65D7</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 42 71"><unientity>65D6</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 42 72"><unientity>65E2</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 42 73"><unientity>65E5</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 42 75"><unientity>65E9</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 42 76"><unientity>65EC</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 42 77"><unientity>65ED</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 42 78"><unientity>65E8</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 42 79"><unientity>65F1</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 42 7A"><unientity>65FA</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 42 7B"><unientity>6606</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 42 7C"><unientity>6614</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 42 7D"><unientity>660C</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 42 7E"><unientity>6600</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 43 21"><unientity>660E</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 43 22"><unientity>6613</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 43 23"><unientity>6602</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 43 24"><unientity>660F</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 43 25"><unientity>6625</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 43 26"><unientity>6627</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 43 27"><unientity>662F</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 43 28"><unientity>662D</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 43 29"><unientity>6620</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 43 2A"><unientity>661F</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 43 2B"><unientity>6628</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 43 2C"><unientity>664F</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 43 2D"><unientity>6642</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 43 2E"><unientity>6652</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 43 2F"><unientity>6649</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 43 30"><unientity>6643</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 43 31"><unientity>664C</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 43 32"><unientity>665D</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 43 33"><unientity>6664</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 43 34"><unientity>6668</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 43 35"><unientity>6666</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 43 36"><unientity>665A</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 43 37"><unientity>666F</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 43 38"><unientity>666E</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 43 39"><unientity>FA12</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 43 3A"><unientity>6691</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 43 3B"><unientity>6670</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 43 3C"><unientity>6676</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 43 3D"><unientity>667A</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 43 3E"><unientity>6697</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 43 3F"><unientity>6687</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 43 40"><unientity>6689</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 43 41"><unientity>6688</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 43 42"><unientity>6696</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 43 43"><unientity>66A2</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 43 44"><unientity>66AB</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 43 45"><unientity>66B4</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 43 46"><unientity>66AE</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 43 47"><unientity>66C1</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 43 48"><unientity>66C9</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 43 49"><unientity>66C6</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 43 4A"><unientity>66B9</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 43 4B"><unientity>66D6</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 43 4C"><unientity>66D9</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 43 4D"><unientity>66E0</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 43 4E"><unientity>66DD</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 43 4F"><unientity>66E6</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 43 50"><unientity>66F0</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 43 51"><unientity>66F2</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 43 52"><unientity>66F3</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 43 53"><unientity>66F4</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 43 54"><unientity>66F7</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 43 55"><unientity>66F8</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 43 56"><unientity>66F9</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 43 57"><unientity>52D7</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 43 58"><unientity>66FE</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 43 59"><unientity>66FF</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 43 5A"><unientity>6703</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 43 5B"><unientity>6708</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 43 5C"><unientity>6709</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 43 5D"><unientity>670D</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 43 5E"><unientity>670B</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 43 5F"><unientity>6717</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 43 60"><unientity>6715</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 43 61"><unientity>6714</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 43 62"><unientity>671B</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 43 63"><unientity>671D</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 43 64"><unientity>671F</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 43 66"><unientity>6727</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 43 67"><unientity>6728</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 43 69"><unientity>672C</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 43 6A"><unientity>672B</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 43 6B"><unientity>672A</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 43 6D"><unientity>673D</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 43 6F"><unientity>6731</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 43 70"><unientity>6735</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 43 71"><unientity>675E</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 43 72"><unientity>6751</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 43 73"><unientity>674E</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 43 74"><unientity>675C</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 43 75"><unientity>6750</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 43 76"><unientity>6756</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 43 77"><unientity>675F</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 43 78"><unientity>674F</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 43 79"><unientity>6749</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 43 7B"><unientity>676D</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 43 7C"><unientity>678B</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 43 7D"><unientity>6795</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 43 7E"><unientity>6789</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 44 21"><unientity>6787</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 44 22"><unientity>6777</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 44 23"><unientity>679D</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 44 24"><unientity>6797</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 44 25"><unientity>676F</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 44 26"><unientity>6771</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 44 27"><unientity>6773</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 44 28"><unientity>679C</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 44 29"><unientity>6775</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 44 2A"><unientity>679A</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 44 2B"><unientity>6790</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 44 2D"><unientity>677E</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 44 2E"><unientity>67D3</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 44 2F"><unientity>67F1</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 44 30"><unientity>67FF</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 44 31"><unientity>67D4</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 44 32"><unientity>67C4</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 44 33"><unientity>67AF</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 44 34"><unientity>67D0</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 44 35"><unientity>67D1</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 44 36"><unientity>67EF</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 44 37"><unientity>67E9</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 44 38"><unientity>67B6</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 44 39"><unientity>67EC</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 44 3A"><unientity>67E5</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 44 3B"><unientity>67FA</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 44 3C"><unientity>67DA</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 44 3D"><unientity>6805</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 44 3E"><unientity>67DE</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 44 3F"><unientity>67B8</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 44 40"><unientity>67CF</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 44 41"><unientity>67F3</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 44 42"><unientity>6848</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 44 43"><unientity>6821</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 44 44"><unientity>6838</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 44 45"><unientity>6853</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 44 46"><unientity>6846</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 44 47"><unientity>6842</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 44 48"><unientity>6854</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 44 49"><unientity>6817</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 44 4A"><unientity>683D</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 44 4B"><unientity>6851</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 44 4C"><unientity>6829</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 44 4D"><unientity>6850</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 44 4E"><unientity>6839</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 44 50"><unientity>67F4</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 44 51"><unientity>6843</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 44 52"><unientity>6840</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 44 53"><unientity>682A</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 44 54"><unientity>6845</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 44 55"><unientity>683C</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 44 56"><unientity>E941</unientity><unientityalt>6813</unientityalt><desc>Variant of 4B4456 which maps to 6813</desc></character>
+<character hex="21 44 57"><unientity>6881</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 44 58"><unientity>6893</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 44 59"><unientity>68AF</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 44 5A"><unientity>6876</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 44 5B"><unientity>68B0</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 44 5C"><unientity>68A7</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 44 5D"><unientity>6897</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 44 5E"><unientity>68B5</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 44 5F"><unientity>68B3</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 44 60"><unientity>68A2</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 44 61"><unientity>687F</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 44 62"><unientity>68B1</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 44 63"><unientity>689D</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 44 64"><unientity>68AD</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 44 65"><unientity>6886</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 44 66"><unientity>6885</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 44 67"><unientity>68A8</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 44 68"><unientity>689F</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 44 69"><unientity>6894</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 44 6A"><unientity>6883</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 44 6B"><unientity>68D5</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 44 6C"><unientity>68FA</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 44 6D"><unientity>68C4</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 44 6E"><unientity>68F2</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 44 6F"><unientity>68D2</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 44 70"><unientity>68E3</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 44 71"><unientity>68DF</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 44 72"><unientity>68CB</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 44 73"><unientity>68EE</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 44 74"><unientity>690D</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 44 75"><unientity>6905</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 44 76"><unientity>68E7</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 44 77"><unientity>68E0</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 44 78"><unientity>68F5</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 44 79"><unientity>68CD</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 44 7A"><unientity>68D7</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 44 7B"><unientity>68D8</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 44 7C"><unientity>6912</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 44 7D"><unientity>68F9</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 44 7E"><unientity>68DA</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 45 21"><unientity>690E</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 45 22"><unientity>68C9</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 45 23"><unientity>6954</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 45 24"><unientity>6930</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 45 25"><unientity>6977</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 45 26"><unientity>6975</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 45 27"><unientity>695A</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 45 28"><unientity>6960</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 45 29"><unientity>696B</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 45 2A"><unientity>694A</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 45 2B"><unientity>6968</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 45 2C"><unientity>695E</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 45 2D"><unientity>696D</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 45 2E"><unientity>6979</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 45 2F"><unientity>6953</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 45 30"><unientity>6986</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 45 31"><unientity>69A8</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 45 32"><unientity>6995</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 45 33"><unientity>699C</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 45 34"><unientity>6994</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 45 35"><unientity>69C1</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 45 36"><unientity>69B7</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 45 37"><unientity>69AE</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 45 38"><unientity>699B</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 45 39"><unientity>69CB</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 45 3A"><unientity>69D3</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 45 3B"><unientity>69BB</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 45 3C"><unientity>69AB</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 45 3D"><unientity>69CC</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 45 3E"><unientity>69AD</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 45 3F"><unientity>69D0</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 45 40"><unientity>69CD</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 45 41"><unientity>69B4</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 45 42"><unientity>6A1F</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 45 43"><unientity>69E8</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 45 44"><unientity>6A23</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 45 45"><unientity>69EA</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 45 46"><unientity>6A01</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 45 47"><unientity>6A19</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 45 48"><unientity>69FD</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 45 49"><unientity>6A1E</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 45 4A"><unientity>6A13</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 45 4B"><unientity>6A21</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 45 4C"><unientity>69F3</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 45 4D"><unientity>6A0A</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 45 4E"><unientity>6A02</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 45 4F"><unientity>6A05</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 45 50"><unientity>6A3D</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 45 51"><unientity>6A58</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 45 52"><unientity>6A59</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 45 53"><unientity>6A62</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 45 54"><unientity>6A44</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 45 55"><unientity>6A39</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 45 56"><unientity>6A6B</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 45 57"><unientity>6A3A</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 45 58"><unientity>6A38</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 45 59"><unientity>6A47</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 45 5A"><unientity>6A61</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 45 5B"><unientity>6A4B</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 45 5C"><unientity>6A35</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 45 5D"><unientity>6A5F</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 45 5E"><unientity>6A80</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 45 5F"><unientity>6A94</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 45 60"><unientity>6A84</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 45 61"><unientity>6AA2</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 45 62"><unientity>6A9C</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 45 63"><unientity>6AB8</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 45 64"><unientity>6AB3</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 45 65"><unientity>6AC3</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 45 66"><unientity>6ABB</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 45 68"><unientity>6AAC</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 45 69"><unientity>6AE5</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 45 6A"><unientity>6ADA</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 45 6B"><unientity>6ADD</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 45 6C"><unientity>6ADB</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 45 6D"><unientity>6AD3</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 45 6E"><unientity>6B04</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 45 6F"><unientity>6AFB</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 45 70"><unientity>6B0A</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 45 71"><unientity>6B16</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 45 73"><unientity>6B21</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 45 74"><unientity>6B23</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 45 76"><unientity>6B3E</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 45 77"><unientity>6B3A</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 45 78"><unientity>6B3D</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 45 79"><unientity>6B47</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 45 7A"><unientity>6B49</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 45 7B"><unientity>6B4C</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 45 7C"><unientity>6B50</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 45 7D"><unientity>6B59</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 45 7E"><unientity>6B5F</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 46 21"><unientity>6B61</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 46 23"><unientity>6B63</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 46 24"><unientity>6B64</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 46 25"><unientity>6B65</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 46 27"><unientity>6B66</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 46 28"><unientity>6B6A</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 46 29"><unientity>6B72</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 46 2A"><unientity>6B77</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 46 2B"><unientity>6B78</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 46 2C"><unientity>6B79</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 46 2D"><unientity>6B7B</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 46 2E"><unientity>6B7F</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 46 2F"><unientity>6B83</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 46 30"><unientity>6B86</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 46 31"><unientity>6B8A</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 46 32"><unientity>6B89</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 46 33"><unientity>6B98</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 46 34"><unientity>6B96</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 46 35"><unientity>6BA4</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 46 36"><unientity>6BAE</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 46 37"><unientity>6BAF</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 46 38"><unientity>6BB2</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 46 39"><unientity>6BB5</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 46 3A"><unientity>6BB7</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 46 3B"><unientity>6BBA</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 46 3C"><unientity>6BBC</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 46 3D"><unientity>6BC0</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 46 3E"><unientity>6BBF</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 46 3F"><unientity>6BC5</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 46 40"><unientity>6BC6</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 46 41"><unientity>6BCB</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 46 42"><unientity>6BCD</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 46 43"><unientity>6BCF</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 46 44"><unientity>6BD2</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 46 46"><unientity>6BD4</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 46 47"><unientity>6BD7</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 46 48"><unientity>6BDB</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 46 49"><unientity>6BEB</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 46 4A"><unientity>6BEF</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 46 4B"><unientity>6BFD</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 46 4C"><unientity>6C0F</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 46 4D"><unientity>6C11</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 46 4E"><unientity>6C10</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 46 4F"><unientity>6C13</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 46 50"><unientity>6C16</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 46 51"><unientity>6C1B</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 46 52"><unientity>6C1F</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 46 53"><unientity>6C27</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 46 54"><unientity>6C26</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 46 55"><unientity>6C23</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 46 56"><unientity>6C28</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 46 57"><unientity>6C24</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 46 58"><unientity>6C2B</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 46 59"><unientity>6C2E</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 46 5A"><unientity>6C33</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 46 5B"><unientity>E942</unientity><unientityalt>6C2F</unientityalt><desc>Variant of 45465B which maps to 6C2F</desc></character>
+<character hex="21 46 5C"><unientity>6C34</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 46 5D"><unientity>6C38</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 46 5E"><unientity>6C41</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 46 60"><unientity>6C40</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 46 61"><unientity>6C42</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 46 62"><unientity>6C5E</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 46 63"><unientity>6C57</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 46 64"><unientity>6C5F</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 46 65"><unientity>6C59</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 46 66"><unientity>6C60</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 46 67"><unientity>6C55</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 46 68"><unientity>6C50</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 46 69"><unientity>6C5D</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 46 6A"><unientity>6C9B</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 46 6B"><unientity>6C81</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 46 6D"><unientity>6C7A</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 46 6E"><unientity>6C6A</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 46 6F"><unientity>6C8C</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 46 70"><unientity>6C90</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 46 71"><unientity>6C72</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 46 72"><unientity>6C70</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 46 73"><unientity>6C68</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 46 74"><unientity>6C96</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 46 76"><unientity>E943</unientity><unientityalt>6C89</unientityalt><desc>Variant of 4B4676 which maps to 6C89</desc></character>
+<character hex="21 46 77"><unientity>6C99</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 46 78"><unientity>6C7E</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 46 79"><unientity>6C7D</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 46 7A"><unientity>6C92</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 46 7B"><unientity>6C83</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 46 7C"><unientity>6CB1</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 46 7E"><unientity>6CF3</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 47 21"><unientity>6CE3</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 47 22"><unientity>6CF0</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 47 23"><unientity>6CB8</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 47 24"><unientity>6CD3</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 47 25"><unientity>6CAB</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 47 26"><unientity>6CE5</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 47 27"><unientity>6CBD</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 47 28"><unientity>6CB3</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 47 29"><unientity>6CC4</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 47 2A"><unientity>6CD5</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 47 2B"><unientity>6CE2</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 47 2C"><unientity>6CBC</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 47 2D"><unientity>6CAE</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 47 2E"><unientity>6CB9</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 47 2F"><unientity>6CF1</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 47 30"><unientity>6CC1</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 47 31"><unientity>6CBE</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 47 32"><unientity>6CC5</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 47 33"><unientity>6CD7</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 47 34"><unientity>6CBB</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 47 35"><unientity>6CDB</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 47 36"><unientity>6CE1</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 47 37"><unientity>6CBF</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 47 38"><unientity>6CCA</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 47 39"><unientity>6CCC</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 47 3A"><unientity>6CC9</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 47 3B"><unientity>6D41</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 47 3C"><unientity>6D0B</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 47 3D"><unientity>6D32</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 47 3E"><unientity>6D25</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 47 3F"><unientity>6D31</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 47 40"><unientity>6D2A</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 47 41"><unientity>6D0C</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 47 42"><unientity>6D1E</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 47 43"><unientity>6D17</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 47 44"><unientity>6D3B</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 47 45"><unientity>6D1B</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 47 46"><unientity>6D36</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 47 47"><unientity>6D3D</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 47 48"><unientity>6D3E</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 47 49"><unientity>6D6A</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 47 4A"><unientity>6D95</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 47 4B"><unientity>6D78</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 47 4C"><unientity>6D66</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 47 4D"><unientity>6D59</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 47 4E"><unientity>6D87</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 47 4F"><unientity>6D88</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 47 50"><unientity>6D6C</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 47 51"><unientity>6D93</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 47 52"><unientity>6D89</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 47 53"><unientity>6D6E</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 47 54"><unientity>6D74</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 47 55"><unientity>6D5A</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 47 56"><unientity>6D69</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 47 57"><unientity>6D77</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 47 58"><unientity>6DD9</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 47 59"><unientity>6DDA</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 47 5A"><unientity>6DF3</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 47 5B"><unientity>6DBC</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 47 5C"><unientity>6DE4</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 47 5D"><unientity>6DB2</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 47 5E"><unientity>6DE1</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 47 5F"><unientity>6DD2</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 47 60"><unientity>6DAE</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 47 61"><unientity>6DF8</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 47 62"><unientity>6DC7</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 47 63"><unientity>6DCB</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 47 64"><unientity>6DC5</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 47 65"><unientity>6DDE</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 47 66"><unientity>6DAF</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 47 67"><unientity>6DB5</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 47 68"><unientity>6DFA</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 47 69"><unientity>6DF9</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 47 6A"><unientity>6DCC</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 47 6B"><unientity>6DF7</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 47 6C"><unientity>6DB8</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 47 6D"><unientity>6DD1</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 47 6E"><unientity>6DF1</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 47 6F"><unientity>6DE8</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 47 70"><unientity>6DEB</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 47 71"><unientity>6DD8</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 47 72"><unientity>6DFB</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 47 73"><unientity>6DEE</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 47 74"><unientity>6DF5</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 47 75"><unientity>6D8E</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 47 76"><unientity>6DC6</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 47 77"><unientity>6DEA</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 47 78"><unientity>6DC4</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 47 79"><unientity>6E54</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 47 7A"><unientity>6E21</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 47 7B"><unientity>6E38</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 47 7C"><unientity>6E32</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 47 7D"><unientity>6E67</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 47 7E"><unientity>6E20</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 48 21"><unientity>6E5B</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 48 22"><unientity>6E1A</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 48 23"><unientity>6E56</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 48 24"><unientity>6E2F</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 48 25"><unientity>6E6E</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 48 26"><unientity>6E58</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 48 27"><unientity>6E23</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 48 28"><unientity>6E24</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 48 29"><unientity>6E1B</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 48 2A"><unientity>6E25</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 48 2B"><unientity>6E4A</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 48 2C"><unientity>6E3A</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 48 2D"><unientity>6E6F</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 48 2E"><unientity>6E2D</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 48 2F"><unientity>6E34</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 48 30"><unientity>6E2C</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 48 31"><unientity>6E26</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 48 32"><unientity>6E4D</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 48 33"><unientity>6E3E</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 48 34"><unientity>6E43</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 48 35"><unientity>6E19</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 48 36"><unientity>6E1D</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 48 37"><unientity>6ED3</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 48 38"><unientity>6EB6</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 48 39"><unientity>6EC2</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 48 3B"><unientity>6EAF</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 48 3C"><unientity>6EA2</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 48 3D"><unientity>6E9D</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 48 3F"><unientity>6EA5</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 48 40"><unientity>6E98</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 48 41"><unientity>6E90</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 48 42"><unientity>6EC5</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 48 43"><unientity>6EC7</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 48 44"><unientity>6EBC</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 48 45"><unientity>6EAB</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 48 46"><unientity>6ED1</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 48 47"><unientity>6ECB</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 48 48"><unientity>6EC4</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 48 49"><unientity>6ED4</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 48 4A"><unientity>6EAA</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 48 4B"><unientity>6E96</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 48 4C"><unientity>6E9C</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 48 4D"><unientity>6F33</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 48 4E"><unientity>6EF4</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 48 4F"><unientity>6EEC</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 48 50"><unientity>6EFE</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 48 51"><unientity>6F29</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 48 52"><unientity>6F14</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 48 53"><unientity>6F3E</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 48 54"><unientity>6F2C</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 48 55"><unientity>6F32</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 48 56"><unientity>6F0F</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 48 57"><unientity>E944</unientity><unientityalt>6F22</unientityalt><desc>Variant of 4B4857 which maps to 6F22</desc></character>
+<character hex="21 48 58"><unientity>6EFF</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 48 59"><unientity>6F23</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 48 5A"><unientity>6F38</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 48 5B"><unientity>6F15</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 48 5C"><unientity>6F31</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 48 5D"><unientity>6F02</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 48 5E"><unientity>6F06</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 48 5F"><unientity>6EEF</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 48 60"><unientity>6F2B</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 48 61"><unientity>6F2F</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 48 62"><unientity>6F20</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 48 63"><unientity>6F3F</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 48 64"><unientity>6EF2</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 48 65"><unientity>6F01</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 48 66"><unientity>6F11</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 48 67"><unientity>6ECC</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 48 68"><unientity>6F2A</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 48 69"><unientity>6F7C</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 48 6A"><unientity>6F88</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 48 6B"><unientity>6F84</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 48 6C"><unientity>6F51</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 48 6D"><unientity>6F64</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 48 6E"><unientity>6F97</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 48 6F"><unientity>6F54</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 48 70"><unientity>6F7A</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 48 71"><unientity>6F86</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 48 72"><unientity>6F8E</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 48 73"><unientity>6F6D</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 48 74"><unientity>6F5B</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 48 75"><unientity>6F6E</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 48 76"><unientity>6F78</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 48 77"><unientity>6F66</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 48 78"><unientity>6F70</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 48 79"><unientity>6F58</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 48 7A"><unientity>6FC2</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 48 7B"><unientity>6FB1</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 48 7C"><unientity>6FC3</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 48 7D"><unientity>6FA7</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 48 7E"><unientity>6FA1</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 49 21"><unientity>6FA4</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 49 22"><unientity>6FC1</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 49 24"><unientity>6FC0</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 49 25"><unientity>6FB3</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 49 26"><unientity>6FDF</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 49 27"><unientity>6FD8</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 49 28"><unientity>6FF1</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 49 29"><unientity>6FE0</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 49 2A"><unientity>6FEF</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 49 2B"><unientity>E945</unientity><unientityalt>6FEB</unientityalt><desc>Variant of 4B492B which maps to 6FEB</desc></character>
+<character hex="21 49 2C"><unientity>6FE1</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 49 2D"><unientity>6FE4</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 49 2E"><unientity>6F80</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 49 31"><unientity>700B</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 49 32"><unientity>7009</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 49 33"><unientity>7006</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 49 34"><unientity>6FFA</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 49 35"><unientity>7011</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 49 36"><unientity>6FFE</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 49 37"><unientity>700F</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 49 38"><unientity>701B</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 49 39"><unientity>701A</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 49 3A"><unientity>7028</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 49 3B"><unientity>701D</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 49 3C"><unientity>7015</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 49 3D"><unientity>701F</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 49 3F"><unientity>703E</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 49 40"><unientity>704C</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 49 41"><unientity>7051</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 49 42"><unientity>7058</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 49 43"><unientity>7063</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 49 44"><unientity>7064</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 49 45"><unientity>706B</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 49 46"><unientity>7070</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 49 47"><unientity>7076</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 49 48"><unientity>707C</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 49 49"><unientity>7078</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 49 4A"><unientity>707D</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 49 4B"><unientity>7095</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 49 4C"><unientity>708E</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 49 4D"><unientity>7092</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 49 4E"><unientity>7099</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 49 4F"><unientity>708A</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 49 50"><unientity>70AB</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 49 51"><unientity>70BA</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 49 52"><unientity>70AC</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 49 53"><unientity>70B3</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 49 54"><unientity>70AF</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 49 55"><unientity>70AD</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 49 56"><unientity>70AE</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 49 57"><unientity>70B8</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 49 58"><unientity>70CA</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 49 59"><unientity>70E4</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 49 5A"><unientity>70D8</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 49 5B"><unientity>70C8</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 49 5C"><unientity>70D9</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 49 5D"><unientity>70CF</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 49 5E"><unientity>70F9</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 49 5F"><unientity>7109</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 49 60"><unientity>710A</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 49 61"><unientity>70FD</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 49 62"><unientity>7119</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 49 63"><unientity>716E</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 49 64"><unientity>711A</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 49 65"><unientity>7136</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 49 66"><unientity>7121</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 49 67"><unientity>7130</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 49 68"><unientity>7126</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 49 69"><unientity>714E</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 49 6A"><unientity>7149</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 49 6B"><unientity>7159</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 49 6C"><unientity>7164</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 49 6D"><unientity>7169</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 49 6E"><unientity>715C</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 49 6F"><unientity>716C</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 49 70"><unientity>7166</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 49 71"><unientity>7167</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 49 72"><unientity>715E</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 49 73"><unientity>7165</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 49 74"><unientity>714C</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 49 75"><unientity>717D</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 49 77"><unientity>7199</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 49 78"><unientity>718A</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 49 79"><unientity>7184</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 49 7A"><unientity>719F</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 49 7B"><unientity>71A8</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 49 7C"><unientity>71AC</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 49 7D"><unientity>71B1</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 49 7E"><unientity>71D9</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 4A 21"><unientity>71BE</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 4A 22"><unientity>71C9</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 4A 23"><unientity>71D0</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 4A 24"><unientity>71C8</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 4A 25"><unientity>71DC</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 4A 26"><unientity>71D2</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 4A 27"><unientity>71B9</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 4A 28"><unientity>71D5</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 4A 29"><unientity>71CE</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 4A 2A"><unientity>71C3</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 4A 2B"><unientity>71C4</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 4A 2C"><unientity>71EE</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 4A 2D"><unientity>71E7</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 4A 2E"><unientity>71DF</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 4A 2F"><unientity>71E5</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 4A 30"><unientity>71ED</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 4A 31"><unientity>71E6</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 4A 32"><unientity>71EC</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 4A 33"><unientity>71F4</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 4A 34"><unientity>71FB</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 4A 35"><unientity>7206</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 4A 36"><unientity>720D</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 4A 37"><unientity>7210</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 4A 38"><unientity>721B</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 4A 39"><unientity>7228</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 4A 3A"><unientity>722A</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 4A 3B"><unientity>722D</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 4A 3C"><unientity>722C</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 4A 3D"><unientity>7230</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 4A 3E"><unientity>E946</unientity><unientityalt>7235</unientityalt><desc>Variant of 4B4A3E which maps to 7235</desc></character>
+<character hex="21 4A 3F"><unientity>7236</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 4A 40"><unientity>7238</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 4A 41"><unientity>7239</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 4A 42"><unientity>723A</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 4A 43"><unientity>723B</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 4A 44"><unientity>723D</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 4A 45"><unientity>723E</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 4A 46"><unientity>7246</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 4A 47"><unientity>7247</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 4A 48"><unientity>7248</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 4A 49"><unientity>724C</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 4A 4A"><unientity>7252</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 4A 4B"><unientity>7256</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 4A 4C"><unientity>7258</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 4A 4D"><unientity>7259</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 4A 4E"><unientity>725B</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 4A 4F"><unientity>725F</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 4A 50"><unientity>725D</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 4A 51"><unientity>7262</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 4A 52"><unientity>7261</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 4A 53"><unientity>7260</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 4A 54"><unientity>7267</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 4A 55"><unientity>7269</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 4A 56"><unientity>726F</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 4A 57"><unientity>7272</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 4A 58"><unientity>7274</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 4A 59"><unientity>7279</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 4A 5A"><unientity>727D</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 4A 5B"><unientity>7281</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 4A 5C"><unientity>7280</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 4A 5D"><unientity>7284</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 4A 5E"><unientity>7296</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 4A 5F"><unientity>7292</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 4A 60"><unientity>729B</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 4A 61"><unientity>72A2</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 4A 62"><unientity>72A7</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 4A 63"><unientity>72AC</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 4A 64"><unientity>72AF</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 4A 65"><unientity>72C4</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 4A 66"><unientity>72C2</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 4A 67"><unientity>72D9</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 4A 68"><unientity>72C0</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 4A 69"><unientity>72CE</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 4A 6A"><unientity>72D7</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 4A 6B"><unientity>72D0</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 4A 6C"><unientity>72E1</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 4A 6D"><unientity>72E9</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 4A 6E"><unientity>72E0</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 4A 6F"><unientity>72FC</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 4A 70"><unientity>72F9</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 4A 72"><unientity>72FD</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 4A 73"><unientity>72F7</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 4A 74"><unientity>731C</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 4A 75"><unientity>731B</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 4A 76"><unientity>7313</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 4A 77"><unientity>7316</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 4A 78"><unientity>7319</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 4A 79"><unientity>7336</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 4A 7A"><unientity>7337</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 4A 7B"><unientity>7329</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 4A 7C"><unientity>7325</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 4A 7D"><unientity>7334</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 4A 7E"><unientity>7344</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 4B 21"><unientity>733F</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 4B 22"><unientity>733E</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 4B 23"><unientity>7345</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 4B 24"><unientity>7350</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 4B 26"><unientity>7357</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 4B 27"><unientity>7368</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 4B 28"><unientity>7370</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 4B 29"><unientity>7372</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 4B 2A"><unientity>7377</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 4B 2B"><unientity>7378</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 4B 2C"><unientity>7375</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 4B 2D"><unientity>737A</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 4B 2E"><unientity>737B</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 4B 2F"><unientity>7380</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 4B 30"><unientity>7384</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 4B 31"><unientity>7387</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 4B 32"><unientity>7389</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 4B 33"><unientity>738B</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 4B 34"><unientity>7396</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 4B 35"><unientity>739F</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 4B 36"><unientity>73A8</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 4B 37"><unientity>73A9</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 4B 38"><unientity>73AB</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 4B 39"><unientity>73BB</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 4B 3A"><unientity>73CA</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 4B 3B"><unientity>73B7</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 4B 3C"><unientity>73C0</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 4B 3E"><unientity>73B2</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 4B 3F"><unientity>73CD</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 4B 40"><unientity>73ED</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 4B 41"><unientity>73EE</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 4B 42"><unientity>73E0</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 4B 43"><unientity>7405</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 4B 44"><unientity>7409</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 4B 45"><unientity>7403</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 4B 46"><unientity>740A</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 4B 47"><unientity>73FE</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 4B 48"><unientity>7406</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 4B 49"><unientity>740D</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 4B 4A"><unientity>743A</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 4B 4B"><unientity>7435</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 4B 4C"><unientity>7436</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 4B 4D"><unientity>7434</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 4B 4E"><unientity>742A</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 4B 4F"><unientity>7433</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 4B 50"><unientity>7422</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 4B 51"><unientity>7425</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 4B 53"><unientity>7455</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 4B 54"><unientity>745F</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 4B 55"><unientity>745A</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 4B 56"><unientity>7441</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 4B 57"><unientity>743F</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 4B 58"><unientity>745B</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 4B 59"><unientity>745E</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 4B 5A"><unientity>745C</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 4B 5B"><unientity>7459</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 4B 5C"><unientity>7483</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 4B 5D"><unientity>7469</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 4B 5E"><unientity>746A</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 4B 5F"><unientity>7463</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 4B 60"><unientity>7464</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 4B 61"><unientity>7470</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 4B 62"><unientity>748B</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 4B 63"><unientity>E947</unientity><unientityalt>749C</unientityalt><desc>Variant of 4B4B63 which maps to 749C</desc></character>
+<character hex="21 4B 64"><unientity>74A3</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 4B 65"><unientity>74A7</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 4B 66"><unientity>74A9</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 4B 67"><unientity>74B0</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 4B 68"><unientity>74A6</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 4B 69"><unientity>74BD</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 4B 6A"><unientity>74CA</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 4B 6B"><unientity>74CF</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 4B 6C"><unientity>74DC</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 4B 6D"><unientity>74E0</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 4B 6E"><unientity>74E2</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 4B 6F"><unientity>74E3</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 4B 70"><unientity>74E6</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 4B 71"><unientity>74F6</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 4B 72"><unientity>74F7</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 4B 73"><unientity>7504</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 4B 74"><unientity>750C</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 4B 75"><unientity>7515</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 4B 76"><unientity>7518</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 4B 77"><unientity>751A</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 4B 78"><unientity>751C</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 4B 79"><unientity>751F</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 4B 7A"><unientity>7522</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 4B 7B"><unientity>7526</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 4B 7C"><unientity>7525</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 4B 7D"><unientity>7528</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 4B 7E"><unientity>7529</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 4C 21"><unientity>752C</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 4C 22"><unientity>752B</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 4C 23"><unientity>752D</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 4C 24"><unientity>7530</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 4C 25"><unientity>7532</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 4C 26"><unientity>7531</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 4C 27"><unientity>7533</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 4C 28"><unientity>7537</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 4C 29"><unientity>7538</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 4C 2A"><unientity>753D</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 4C 2B"><unientity>754F</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 4C 2C"><unientity>754C</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 4C 2D"><unientity>755D</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 4C 2E"><unientity>755C</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 4C 2F"><unientity>7554</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 4C 30"><unientity>755A</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 4C 31"><unientity>7559</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 4C 32"><unientity>7566</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 4C 33"><unientity>7562</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 4C 34"><unientity>7570</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 4C 35"><unientity>7565</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 4C 36"><unientity>756B</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 4C 37"><unientity>756A</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 4C 38"><unientity>7578</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 4C 39"><unientity>7576</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 4C 3A"><unientity>7586</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 4C 3B"><unientity>7587</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 4C 3C"><unientity>758A</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 4C 3E"><unientity>758F</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 4C 3F"><unientity>7591</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 4C 40"><unientity>759D</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 4C 41"><unientity>7599</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 4C 42"><unientity>759A</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 4C 43"><unientity>75A4</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 4C 44"><unientity>75AB</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 4C 45"><unientity>75A5</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 4C 46"><unientity>75C7</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 4C 47"><unientity>75C5</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 4C 48"><unientity>75B3</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 4C 49"><unientity>75B2</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 4C 4A"><unientity>75BD</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 4C 4B"><unientity>75BE</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 4C 4C"><unientity>75BC</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 4C 4D"><unientity>75B9</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 4C 4E"><unientity>75D5</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 4C 4F"><unientity>75D4</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 4C 50"><unientity>75B5</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 4C 51"><unientity>E948</unientity><unientityalt>75CA</unientityalt><desc>Variant of 4B4C51 which maps to 75CA</desc></character>
+<character hex="21 4C 52"><unientity>75DB</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 4C 53"><unientity>75E3</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 4C 54"><unientity>75D8</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 4C 55"><unientity>75DE</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 4C 56"><unientity>75D9</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 4C 57"><unientity>75E2</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 4C 58"><unientity>7601</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 4C 59"><unientity>7600</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 4C 5A"><unientity>75F0</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 4C 5B"><unientity>75F2</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 4C 5C"><unientity>75F1</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 4C 5D"><unientity>75F4</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 4C 5E"><unientity>75FF</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 4C 5F"><unientity>75FA</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 4C 60"><unientity>760D</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 4C 61"><unientity>7627</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 4C 62"><unientity>7613</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 4C 63"><unientity>760B</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 4C 65"><unientity>7620</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 4C 66"><unientity>7629</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 4C 67"><unientity>761F</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 4C 68"><unientity>7624</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 4C 69"><unientity>7626</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 4C 6A"><unientity>7621</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 4C 6B"><unientity>7634</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 4C 6C"><unientity>7638</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 4C 6D"><unientity>7646</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 4C 6E"><unientity>7642</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 4C 6F"><unientity>764C</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 4C 70"><unientity>7656</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 4C 71"><unientity>7658</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 4C 73"><unientity>7662</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 4C 74"><unientity>7665</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 4C 75"><unientity>7669</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 4C 76"><unientity>766E</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 4C 77"><unientity>766C</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 4C 78"><unientity>7671</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 4C 79"><unientity>E949</unientity><unientityalt>7672</unientityalt><desc>Variant of 4B4C79 which maps to 7672</desc></character>
+<character hex="21 4C 7A"><unientity>7678</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 4C 7B"><unientity>767C</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 4C 7C"><unientity>767B</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 4C 7D"><unientity>767D</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 4C 7E"><unientity>767E</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 4D 21"><unientity>7682</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 4D 22"><unientity>7684</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 4D 23"><unientity>7687</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 4D 24"><unientity>7686</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 4D 26"><unientity>768E</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 4D 27"><unientity>7696</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 4D 28"><unientity>7693</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 4D 29"><unientity>769A</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 4D 2A"><unientity>76AE</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 4D 2B"><unientity>76B0</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 4D 2C"><unientity>76B4</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 4D 2D"><unientity>76BA</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 4D 2E"><unientity>76BF</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 4D 2F"><unientity>76C2</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 4D 31"><unientity>76C8</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 4D 32"><unientity>76C6</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 4D 33"><unientity>76CA</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 4D 34"><unientity>76CD</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 4D 35"><unientity>76CE</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 4D 36"><unientity>76D4</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 4D 37"><unientity>76D2</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 4D 38"><unientity>76DC</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 4D 39"><unientity>76DB</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 4D 3A"><unientity>76DE</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 4D 3B"><unientity>76DF</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 4D 3C"><unientity>76E1</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 4D 3D"><unientity>76E3</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 4D 3E"><unientity>76E4</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 4D 3F"><unientity>76E7</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 4D 40"><unientity>76E5</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 4D 41"><unientity>76EA</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 4D 42"><unientity>76EE</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 4D 43"><unientity>76EF</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 4D 44"><unientity>76F2</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 4D 45"><unientity>76F4</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 4D 46"><unientity>7709</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 4D 47"><unientity>76F9</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 4D 48"><unientity>76F8</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 4D 49"><unientity>7701</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 4D 4A"><unientity>770B</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 4D 4B"><unientity>76FC</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 4D 4C"><unientity>76FE</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 4D 4D"><unientity>7729</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 4D 4E"><unientity>7720</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 4D 4F"><unientity>771E</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 4D 50"><unientity>7728</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 4D 51"><unientity>7737</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 4D 52"><unientity>773C</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 4D 53"><unientity>7736</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 4D 54"><unientity>7738</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 4D 55"><unientity>773A</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 4D 56"><unientity>773E</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 4D 57"><unientity>774F</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 4D 58"><unientity>776B</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 4D 59"><unientity>775B</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 4D 5A"><unientity>776A</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 4D 5B"><unientity>7766</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 4D 5C"><unientity>7779</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 4D 5D"><unientity>775E</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 4D 5E"><unientity>7763</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 4D 5F"><unientity>775C</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 4D 60"><unientity>776C</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 4D 61"><unientity>7768</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 4D 62"><unientity>7765</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 4D 63"><unientity>777D</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 4D 64"><unientity>7771</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 4D 65"><unientity>777F</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 4D 66"><unientity>7784</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 4D 67"><unientity>7761</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 4D 68"><unientity>7787</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 4D 69"><unientity>778E</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 4D 6A"><unientity>778C</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 4D 6B"><unientity>7791</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 4D 6C"><unientity>779F</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 4D 6D"><unientity>779E</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 4D 6E"><unientity>77A0</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 4D 6F"><unientity>77A5</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 4D 70"><unientity>77B3</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 4D 71"><unientity>77AA</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 4D 72"><unientity>77B0</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 4D 73"><unientity>77AD</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 4D 74"><unientity>77AC</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 4D 75"><unientity>77A7</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 4D 76"><unientity>77BD</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 4D 77"><unientity>77BF</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 4D 78"><unientity>77BB</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 4D 7A"><unientity>77D3</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 4D 7B"><unientity>77D7</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 4D 7C"><unientity>77DA</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 4D 7D"><unientity>77DB</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 4D 7E"><unientity>77DC</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 4E 21"><unientity>77E2</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 4E 22"><unientity>77E3</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 4E 23"><unientity>77E5</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 4E 24"><unientity>77E9</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 4E 25"><unientity>77ED</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 4E 26"><unientity>77EE</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 4E 27"><unientity>77EF</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 4E 28"><unientity>77F3</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 4E 29"><unientity>77FD</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 4E 2A"><unientity>7802</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 4E 2B"><unientity>780D</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 4E 2C"><unientity>780C</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 4E 2D"><unientity>65AB</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 4E 2E"><unientity>7830</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 4E 2F"><unientity>781D</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 4E 30"><unientity>7834</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 4E 31"><unientity>7838</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 4E 32"><unientity>7837</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 4E 33"><unientity>7827</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 4E 34"><unientity>782D</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 4E 35"><unientity>7825</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 4E 36"><unientity>786B</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 4E 37"><unientity>784F</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 4E 38"><unientity>7843</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 4E 39"><unientity>786C</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 4E 3A"><unientity>785D</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 4E 3B"><unientity>786F</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 4E 3C"><unientity>78B0</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 4E 3D"><unientity>7897</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 4E 3E"><unientity>788E</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 4E 3F"><unientity>7898</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 4E 40"><unientity>7889</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 4E 41"><unientity>7891</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 4E 42"><unientity>787C</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 4E 43"><unientity>788C</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 4E 44"><unientity>78A7</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 4E 45"><unientity>78A9</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 4E 46"><unientity>789F</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 4E 47"><unientity>78B3</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 4E 48"><unientity>78CB</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 4E 49"><unientity>78BA</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 4E 4A"><unientity>78C1</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 4E 4B"><unientity>78C5</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 4E 4C"><unientity>78BC</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 4E 4D"><unientity>78D5</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 4E 4E"><unientity>78BE</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 4E 4F"><unientity>78CA</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 4E 50"><unientity>78D0</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 4E 51"><unientity>78E8</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 4E 52"><unientity>78EC</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 4E 53"><unientity>78DA</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 4E 54"><unientity>78F7</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 4E 55"><unientity>78F4</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 4E 56"><unientity>E94A</unientity><unientityalt>78FA</unientityalt><desc>Variant of 4B4E56 which maps to 78FA</desc></character>
+<character hex="21 4E 57"><unientity>7901</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 4E 58"><unientity>78EF</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 4E 59"><unientity>790E</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 4E 5A"><unientity>7919</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 4E 5B"><unientity>7926</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 4E 5C"><unientity>792C</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 4E 5D"><unientity>792A</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 4E 5E"><unientity>792B</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 4E 5F"><unientity>793A</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 4E 60"><unientity>7940</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 4E 61"><unientity>793E</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 4E 62"><unientity>7941</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 4E 63"><unientity>7945</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 4E 64"><unientity>7949</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 4E 65"><unientity>7948</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 4E 66"><unientity>7947</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 4E 67"><unientity>7955</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 4E 68"><unientity>7960</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 4E 69"><unientity>7950</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 4E 6A"><unientity>7956</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 4E 6B"><unientity>795E</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 4E 6C"><unientity>795D</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 4E 6D"><unientity>795F</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 4E 6E"><unientity>795A</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 4E 6F"><unientity>7957</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 4E 70"><unientity>7965</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 4E 71"><unientity>7968</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 4E 72"><unientity>796D</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 4E 73"><unientity>797A</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 4E 74"><unientity>7981</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 4E 75"><unientity>797F</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 4E 76"><unientity>798F</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 4E 77"><unientity>798D</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 4E 78"><unientity>798E</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 4E 79"><unientity>79A6</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 4E 7A"><unientity>79A7</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 4E 7B"><unientity>79AA</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 4E 7C"><unientity>79AE</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 4E 7D"><unientity>79B1</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 4E 7E"><unientity>79B9</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 4F 21"><unientity>79BD</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 4F 22"><unientity>842C</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 4F 23"><unientity>79BE</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 4F 24"><unientity>79C0</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 4F 25"><unientity>79C1</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 4F 26"><unientity>79BF</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 4F 27"><unientity>79C9</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 4F 28"><unientity>79D1</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 4F 29"><unientity>79CB</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 4F 2A"><unientity>79D2</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 4F 2B"><unientity>79E4</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 4F 2C"><unientity>79E6</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 4F 2D"><unientity>79E3</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 4F 2E"><unientity>79DF</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 4F 2F"><unientity>79E7</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 4F 30"><unientity>79E9</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 4F 31"><unientity>79FB</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 4F 32"><unientity>7A05</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 4F 33"><unientity>7A0D</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 4F 34"><unientity>7A08</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 4F 35"><unientity>7A0B</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 4F 36"><unientity>7A00</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 4F 37"><unientity>7A1F</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 4F 39"><unientity>7A20</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 4F 3A"><unientity>7A1A</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 4F 3B"><unientity>7A14</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 4F 3C"><unientity>7A31</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 4F 3D"><unientity>7A2E</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 4F 3E"><unientity>7A3F</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 4F 3F"><unientity>7A3C</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 4F 40"><unientity>7A40</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 4F 41"><unientity>7A3D</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 4F 42"><unientity>7A37</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 4F 43"><unientity>7A3B</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 4F 44"><unientity>7A4D</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 4F 45"><unientity>7A4E</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 4F 46"><unientity>7A4C</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 4F 47"><unientity>7A46</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 4F 48"><unientity>7A57</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 4F 49"><unientity>7A61</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 4F 4A"><unientity>7A62</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 4F 4B"><unientity>7A6B</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 4F 4C"><unientity>7A69</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 4F 4D"><unientity>7A74</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 4F 4E"><unientity>7A76</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 4F 4F"><unientity>7A79</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 4F 50"><unientity>7A7A</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 4F 51"><unientity>7A7F</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 4F 52"><unientity>7A81</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 4F 53"><unientity>7A84</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 4F 54"><unientity>7A88</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 4F 55"><unientity>7A92</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 4F 56"><unientity>7A95</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 4F 57"><unientity>7A98</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 4F 58"><unientity>7A96</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 4F 59"><unientity>7A97</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 4F 5A"><unientity>7A9F</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 4F 5B"><unientity>7AA0</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 4F 5C"><unientity>7AAA</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 4F 5D"><unientity>7AA9</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 4F 5E"><unientity>7AAF</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 4F 5F"><unientity>7AAE</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 4F 60"><unientity>7ABA</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 4F 61"><unientity>7AC5</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 4F 62"><unientity>7AC4</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 4F 63"><unientity>7AC7</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 4F 64"><unientity>7ACA</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 4F 65"><unientity>7ACB</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 4F 66"><unientity>7AD9</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 4F 67"><unientity>7AE5</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 4F 68"><unientity>7AE3</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 4F 69"><unientity>7AED</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 4F 6A"><unientity>7AEF</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 4F 6B"><unientity>7AF6</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 4F 6C"><unientity>7AF9</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 4F 6D"><unientity>7AFA</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 4F 6E"><unientity>7AFF</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 4F 6F"><unientity>7AFD</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 4F 70"><unientity>7B06</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 4F 71"><unientity>7B11</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 4F 72"><unientity>7B20</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 4F 73"><unientity>7B2C</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 4F 74"><unientity>7B28</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 4F 75"><unientity>7B1B</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 4F 76"><unientity>7B1E</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 4F 77"><unientity>7B19</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 4F 78"><unientity>7B26</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 4F 79"><unientity>7B46</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 4F 7A"><unientity>7B49</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 4F 7B"><unientity>7B50</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 4F 7C"><unientity>7B56</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 4F 7D"><unientity>7B52</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 4F 7E"><unientity>7B4B</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 50 21"><unientity>7B4D</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 50 22"><unientity>7B4F</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 50 23"><unientity>7B54</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 50 24"><unientity>7B60</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 50 25"><unientity>7B77</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 50 26"><unientity>7B75</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 50 27"><unientity>7BA1</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 50 28"><unientity>7B94</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 50 29"><unientity>7B95</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 50 2A"><unientity>7B9D</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 50 2B"><unientity>7B8B</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 50 2C"><unientity>7B97</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 50 2D"><unientity>7B8F</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 50 2E"><unientity>7BC7</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 50 2F"><unientity>7BAD</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 50 30"><unientity>7BC4</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 50 31"><unientity>7BB1</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 50 32"><unientity>7BB4</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 50 33"><unientity>7BC0</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 50 34"><unientity>7BC6</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 50 35"><unientity>7BC1</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 50 36"><unientity>7C11</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 50 37"><unientity>7BD9</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 50 38"><unientity>7BDB</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 50 39"><unientity>7BE4</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 50 3A"><unientity>7BC9</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 50 3B"><unientity>7BE1</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 50 3C"><unientity>7BE9</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 50 3D"><unientity>7C07</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 50 3E"><unientity>7C0D</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 50 3F"><unientity>7BFE</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 50 40"><unientity>7BF7</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 50 41"><unientity>7C21</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 50 42"><unientity>7C2B</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 50 43"><unientity>7C2A</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 50 44"><unientity>7C27</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 50 45"><unientity>7C1E</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 50 46"><unientity>7C23</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 50 47"><unientity>7C3F</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 50 48"><unientity>7C3E</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 50 49"><unientity>7C38</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 50 4A"><unientity>7C37</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 50 4B"><unientity>7C3D</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 50 4C"><unientity>7C43</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 50 4D"><unientity>7C4C</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 50 4E"><unientity>7C4D</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 50 4F"><unientity>7C50</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 50 50"><unientity>7C60</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 50 51"><unientity>7C5F</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 50 52"><unientity>7C64</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 50 53"><unientity>7C6C</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 50 54"><unientity>7C6E</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 50 55"><unientity>7C72</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 50 56"><unientity>7C73</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 50 57"><unientity>7C89</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 50 58"><unientity>7C92</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 50 59"><unientity>7C97</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 50 5A"><unientity>7C9F</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 50 5B"><unientity>7CA5</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 50 5C"><unientity>7CA4</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 50 5D"><unientity>7CB1</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 50 5E"><unientity>7CB3</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 50 5F"><unientity>7CBD</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 50 60"><unientity>7CB9</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 50 61"><unientity>FA1D</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 50 62"><unientity>7CCA</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 50 63"><unientity>7CD6</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 50 64"><unientity>7CD5</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 50 65"><unientity>7CE0</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 50 66"><unientity>7CDC</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 50 67"><unientity>7CDF</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 50 68"><unientity>7CDE</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 50 69"><unientity>7CE2</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 50 6A"><unientity>7CD9</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 50 6B"><unientity>7CE7</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 50 6C"><unientity>7CEF</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 50 6E"><unientity>7CFB</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 50 6F"><unientity>7CFE</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 50 70"><unientity>7D00</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 50 71"><unientity>7D02</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 50 72"><unientity>7D05</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 50 73"><unientity>7D09</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 50 74"><unientity>7D04</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 50 75"><unientity>7D07</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 50 76"><unientity>7D21</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 50 77"><unientity>7D0B</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 50 78"><unientity>7D0A</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 50 79"><unientity>7D20</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 50 7A"><unientity>7D1C</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 50 7B"><unientity>7D22</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 50 7C"><unientity>7D15</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 50 7D"><unientity>7D14</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 50 7E"><unientity>7D10</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 51 21"><unientity>7D17</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 51 22"><unientity>E94B</unientity><unientityalt>7D0D</unientityalt><desc>Variant of 455122 which maps to 7D0D</desc></character>
+<character hex="21 51 23"><unientity>7D1A</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 51 24"><unientity>7D19</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 51 25"><unientity>7D1B</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 51 26"><unientity>7D46</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 51 28"><unientity>7D3C</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 51 29"><unientity>7D2E</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 51 2A"><unientity>7D39</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 51 2B"><unientity>7D44</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 51 2C"><unientity>7D30</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 51 2D"><unientity>7D33</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 51 2E"><unientity>7D2F</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 51 2F"><unientity>7D40</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 51 30"><unientity>7D42</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 51 31"><unientity>7D71</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 51 32"><unientity>7D5E</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 51 33"><unientity>7D68</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 51 34"><unientity>7D50</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 51 35"><unientity>7D2B</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 51 36"><unientity>7D62</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 51 37"><unientity>7D76</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 51 38"><unientity>7D61</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 51 39"><unientity>7D66</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 51 3A"><unientity>7D6E</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 51 3B"><unientity>7D72</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 51 3C"><unientity>7D93</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 51 3D"><unientity>7D91</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 51 3E"><unientity>7D79</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 51 3F"><unientity>7D8F</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 51 40"><unientity>7D81</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 51 41"><unientity>7D9C</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 51 42"><unientity>7DBB</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 51 43"><unientity>7DB0</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 51 44"><unientity>7DCA</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 51 45"><unientity>7DBE</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 51 46"><unientity>7DB4</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 51 47"><unientity>7DBA</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 51 48"><unientity>7DB2</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 51 49"><unientity>7DB1</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 51 4A"><unientity>7DBD</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 51 4B"><unientity>7DB5</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 51 4C"><unientity>7DA0</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 51 4D"><unientity>7DA2</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 51 4E"><unientity>7DAD</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 51 4F"><unientity>7DBF</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 51 50"><unientity>7DB8</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 51 51"><unientity>7DC7</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 51 52"><unientity>7DE0</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 51 53"><unientity>7DEF</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 51 54"><unientity>E94C</unientity><unientityalt>7DF4</unientityalt><desc>Variant of 4B5154 which maps to 7DF4</desc></character>
+<character hex="21 51 55"><unientity>7DD6</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 51 56"><unientity>7DD8</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 51 57"><unientity>7DEC</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 51 58"><unientity>7DDD</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 51 59"><unientity>7DE9</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 51 5A"><unientity>7DE3</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 51 5B"><unientity>7DE8</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 51 5C"><unientity>7DDA</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 51 5D"><unientity>7D9E</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 51 5E"><unientity>7DDE</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 51 5F"><unientity>7E11</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 51 60"><unientity>7E0A</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 51 61"><unientity>7E08</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 51 62"><unientity>7E1B</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 51 63"><unientity>7DFB</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 51 64"><unientity>7E23</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 51 65"><unientity>7E2E</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 51 66"><unientity>7E3E</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 51 67"><unientity>7E46</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 51 68"><unientity>7E37</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 51 69"><unientity>7E32</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 51 6A"><unientity>7E43</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 51 6B"><unientity>7E41</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 51 6C"><unientity>7E2B</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 51 6D"><unientity>7E3D</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 51 6E"><unientity>7E31</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 51 6F"><unientity>7E45</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 51 70"><unientity>7E55</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 51 71"><unientity>7E54</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 51 72"><unientity>7E61</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 51 73"><unientity>7E5E</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 51 74"><unientity>7E5A</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 51 75"><unientity>7E6B</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 51 76"><unientity>7E69</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 51 77"><unientity>7E6D</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 51 78"><unientity>7E79</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 51 79"><unientity>7E6A</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 51 7A"><unientity>8FAE</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 51 7B"><unientity>7E7D</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 51 7C"><unientity>7E82</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 51 7D"><unientity>7E7C</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 51 7E"><unientity>7E8F</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 52 21"><unientity>7E8C</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 52 22"><unientity>7E93</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 52 23"><unientity>7E96</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 52 24"><unientity>7E9C</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 52 26"><unientity>7F38</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 52 27"><unientity>7F3A</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 52 28"><unientity>7F3D</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 52 29"><unientity>7F44</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 52 2B"><unientity>7F50</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 52 2C"><unientity>7F55</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 52 2D"><unientity>7F54</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 52 2E"><unientity>7F5F</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 52 2F"><unientity>7F72</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 52 30"><unientity>7F6E</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 52 31"><unientity>7F69</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 52 32"><unientity>7F6A</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 52 33"><unientity>7F70</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 52 34"><unientity>7F75</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 52 35"><unientity>7F77</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 52 36"><unientity>7F79</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 52 37"><unientity>7F85</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 52 38"><unientity>7F88</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 52 39"><unientity>7F8A</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 52 3A"><unientity>7F8C</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 52 3B"><unientity>7F8E</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 52 3C"><unientity>7F94</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 52 3D"><unientity>7F9E</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 52 3E"><unientity>7F9A</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 52 3F"><unientity>5584</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 52 40"><unientity>7FA8</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 52 41"><unientity>7FA4</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 52 42"><unientity>7FA9</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 52 43"><unientity>7FAF</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 52 44"><unientity>7FB2</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 52 45"><unientity>7FB6</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 52 46"><unientity>7FB8</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 52 47"><unientity>7FB9</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 52 48"><unientity>7FBD</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 52 49"><unientity>7FBF</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 52 4A"><unientity>7FC5</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 52 4B"><unientity>7FC1</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 52 4C"><unientity>7FCC</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 52 4D"><unientity>7FD2</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 52 4E"><unientity>E94D</unientity><unientityalt>7FCE</unientityalt><desc>Variant of 4B524E which maps to 7FCE</desc></character>
+<character hex="21 52 4F"><unientity>7FD4</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 52 50"><unientity>7FD5</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 52 51"><unientity>7FE0</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 52 52"><unientity>7FE1</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 52 53"><unientity>7FDF</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 52 54"><unientity>7FE9</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 52 55"><unientity>7FF0</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 52 56"><unientity>7FF3</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 52 57"><unientity>7FFC</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 52 58"><unientity>7FF9</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 52 59"><unientity>7FFB</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 52 5A"><unientity>7FF1</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 52 5B"><unientity>8000</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 52 5C"><unientity>8001</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 52 5D"><unientity>8003</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 52 5E"><unientity>8006</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 52 5F"><unientity>8005</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 52 60"><unientity>800C</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 52 61"><unientity>8010</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 52 62"><unientity>800D</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 52 63"><unientity>8012</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 52 64"><unientity>8015</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 52 65"><unientity>8018</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 52 66"><unientity>8019</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 52 67"><unientity>8017</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 52 68"><unientity>801C</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 52 69"><unientity>8033</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 52 6A"><unientity>8036</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 52 6B"><unientity>803F</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 52 6C"><unientity>803D</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 52 6D"><unientity>804A</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 52 6E"><unientity>8046</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 52 6F"><unientity>8056</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 52 70"><unientity>8058</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 52 71"><unientity>805E</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 52 72"><unientity>805A</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 52 73"><unientity>8071</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 52 74"><unientity>8072</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 52 75"><unientity>8073</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 52 76"><unientity>8070</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 52 77"><unientity>806F</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 52 78"><unientity>8077</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 52 79"><unientity>8076</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 52 7A"><unientity>807E</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 52 7B"><unientity>807D</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 52 7C"><unientity>807F</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 52 7E"><unientity>8084</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 53 21"><unientity>8085</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 53 22"><unientity>8087</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 53 23"><unientity>8089</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 53 24"><unientity>808B</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 53 25"><unientity>808C</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 53 26"><unientity>8093</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 53 27"><unientity>809D</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 53 28"><unientity>8098</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 53 29"><unientity>809B</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 53 2A"><unientity>809A</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 53 2B"><unientity>8096</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 53 2C"><unientity>80B2</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 53 2D"><unientity>80AA</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 53 2E"><unientity>80BA</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 53 2F"><unientity>80A5</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 53 30"><unientity>80A2</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 53 31"><unientity>80AB</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 53 32"><unientity>80B1</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 53 33"><unientity>80AF</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 53 34"><unientity>80A1</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 53 35"><unientity>80A9</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 53 36"><unientity>80B4</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 53 37"><unientity>80D6</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 53 38"><unientity>80CC</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 53 39"><unientity>80E5</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 53 3A"><unientity>80DA</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 53 3B"><unientity>80E1</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 53 3C"><unientity>80C3</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 53 3D"><unientity>80DB</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 53 3E"><unientity>80C4</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 53 3F"><unientity>80CE</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 53 40"><unientity>80DE</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 53 41"><unientity>80E4</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 53 42"><unientity>80F0</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 53 43"><unientity>8102</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 53 44"><unientity>8105</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 53 45"><unientity>80F1</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 53 46"><unientity>80F4</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 53 47"><unientity>80ED</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 53 48"><unientity>80FD</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 53 49"><unientity>8106</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 53 4A"><unientity>80F3</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 53 4B"><unientity>80F8</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 53 4C"><unientity>810A</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 53 4D"><unientity>8108</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 53 4E"><unientity>812B</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 53 4F"><unientity>812F</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 53 50"><unientity>8116</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 53 52"><unientity>8129</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 53 53"><unientity>8155</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 53 54"><unientity>8154</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 53 55"><unientity>814B</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 53 56"><unientity>8151</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 53 57"><unientity>8150</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 53 58"><unientity>814E</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 53 59"><unientity>8139</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 53 5A"><unientity>8146</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 53 5B"><unientity>813E</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 53 5C"><unientity>8171</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 53 5D"><unientity>8170</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 53 5E"><unientity>8178</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 53 5F"><unientity>8165</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 53 60"><unientity>816E</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 53 61"><unientity>8173</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 53 62"><unientity>816B</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 53 63"><unientity>8179</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 53 64"><unientity>817A</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 53 65"><unientity>8166</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 53 66"><unientity>8180</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 53 67"><unientity>818F</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 53 68"><unientity>817F</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 53 69"><unientity>818A</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 53 6A"><unientity>8188</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 53 6B"><unientity>819D</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 53 6C"><unientity>81A0</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 53 6D"><unientity>819B</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 53 6E"><unientity>819A</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 53 6F"><unientity>819C</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 53 70"><unientity>81B3</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 53 71"><unientity>81A9</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 53 72"><unientity>81A8</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 53 73"><unientity>81C6</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 53 74"><unientity>81BA</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 53 75"><unientity>81C3</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 53 76"><unientity>81C0</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 53 77"><unientity>81C2</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 53 78"><unientity>81BF</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 53 79"><unientity>81BD</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 53 7A"><unientity>81C9</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 53 7B"><unientity>81BE</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 53 7C"><unientity>81CD</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 53 7D"><unientity>81CF</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 53 7E"><unientity>81D8</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 54 21"><unientity>81DA</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 54 22"><unientity>81DF</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 54 23"><unientity>81E3</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 54 24"><unientity>81E5</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 54 25"><unientity>81E8</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 54 26"><unientity>81EA</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 54 27"><unientity>81EC</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 54 28"><unientity>81ED</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 54 29"><unientity>81F3</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 54 2B"><unientity>81FA</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 54 2C"><unientity>81FB</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 54 2D"><unientity>81FC</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 54 2E"><unientity>81FE</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 54 2F"><unientity>8200</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 54 30"><unientity>8202</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 54 31"><unientity>8205</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 54 32"><unientity>8207</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 54 33"><unientity>8208</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 54 34"><unientity>8209</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 54 35"><unientity>820A</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 54 36"><unientity>820C</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 54 37"><unientity>820D</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 54 38"><unientity>8210</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 54 39"><unientity>8212</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 54 3A"><unientity>8214</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 54 3B"><unientity>821B</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 54 3C"><unientity>821C</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 54 3D"><unientity>821E</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 54 3E"><unientity>821F</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 54 3F"><unientity>8222</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 54 40"><unientity>822A</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 54 41"><unientity>822B</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 54 42"><unientity>822C</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 54 43"><unientity>8228</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 54 44"><unientity>8237</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 54 45"><unientity>8235</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 54 46"><unientity>8239</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 54 47"><unientity>8236</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 54 48"><unientity>8247</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 54 49"><unientity>8258</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 54 4A"><unientity>8259</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 54 4B"><unientity>8266</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 54 4C"><unientity>826E</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 54 4D"><unientity>826F</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 54 4E"><unientity>8271</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 54 4F"><unientity>8272</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 54 50"><unientity>827E</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 54 51"><unientity>8292</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 54 52"><unientity>828B</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 54 53"><unientity>828D</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 54 54"><unientity>82B3</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 54 55"><unientity>829D</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 54 56"><unientity>8299</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 54 57"><unientity>82BD</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 54 58"><unientity>82AD</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 54 59"><unientity>82AC</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 54 5A"><unientity>82A5</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 54 5B"><unientity>829F</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 54 5C"><unientity>82BB</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 54 5D"><unientity>82B1</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 54 5E"><unientity>82B9</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 54 60"><unientity>82E7</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 54 61"><unientity>8305</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 54 62"><unientity>8309</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 54 63"><unientity>82E3</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 54 64"><unientity>82DB</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 54 65"><unientity>82E6</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 54 66"><unientity>8304</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 54 67"><unientity>82E5</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 54 68"><unientity>8302</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 54 69"><unientity>82DC</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 54 6A"><unientity>82D7</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 54 6B"><unientity>82F1</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 54 6C"><unientity>8301</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 54 6D"><unientity>82D3</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 54 6E"><unientity>82D4</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 54 6F"><unientity>82D1</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 54 70"><unientity>82DE</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 54 71"><unientity>82DF</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 54 72"><unientity>832B</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 54 73"><unientity>8352</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 54 74"><unientity>834A</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 54 75"><unientity>8338</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 54 76"><unientity>8354</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 54 77"><unientity>8350</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 54 78"><unientity>8349</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 54 79"><unientity>8335</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 54 7A"><unientity>8334</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 54 7B"><unientity>8336</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 54 7C"><unientity>8331</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 54 7D"><unientity>8340</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 54 7E"><unientity>8317</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 55 21"><unientity>5179</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 55 22"><unientity>834F</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 55 23"><unientity>8339</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 55 24"><unientity>838E</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 55 25"><unientity>8398</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 55 26"><unientity>839E</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 55 27"><unientity>8378</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 55 28"><unientity>83A2</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 55 29"><unientity>8396</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 55 2A"><unientity>83A7</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 55 2B"><unientity>83AB</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 55 2C"><unientity>E94E</unientity><unientityalt>8392</unientityalt><desc>Variant of 4B552C which maps to 8392</desc></character>
+<character hex="21 55 2D"><unientity>838A</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 55 2E"><unientity>8393</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 55 2F"><unientity>83A0</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 55 30"><unientity>8389</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 55 31"><unientity>8377</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 55 32"><unientity>837C</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 55 33"><unientity>837B</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 55 34"><unientity>840D</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 55 35"><unientity>83E0</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 55 36"><unientity>83E9</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 55 38"><unientity>8403</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 55 39"><unientity>83C5</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 55 3A"><unientity>83C1</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 55 3B"><unientity>840B</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 55 3C"><unientity>83EF</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 55 3E"><unientity>83F1</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 55 3F"><unientity>83BD</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 55 41"><unientity>840A</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 55 42"><unientity>840C</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 55 43"><unientity>83CC</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 55 44"><unientity>83DC</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 55 45"><unientity>83CA</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 55 46"><unientity>83F2</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 55 47"><unientity>840E</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 55 48"><unientity>8404</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 55 49"><unientity>843D</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 55 4A"><unientity>8482</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 55 4B"><unientity>8431</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 55 4C"><unientity>8475</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 55 4D"><unientity>8466</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 55 4E"><unientity>8457</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 55 4F"><unientity>8449</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 55 50"><unientity>846C</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 55 51"><unientity>846B</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 55 52"><unientity>845B</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 55 53"><unientity>8477</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 55 54"><unientity>843C</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 55 55"><unientity>8435</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 55 56"><unientity>8461</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 55 57"><unientity>8463</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 55 58"><unientity>8469</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 55 59"><unientity>8438</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 55 5A"><unientity>84B2</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 55 5B"><unientity>849E</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 55 5C"><unientity>84BF</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 55 5D"><unientity>84C6</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 55 5E"><unientity>84C4</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 55 5F"><unientity>84C9</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 55 60"><unientity>849C</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 55 61"><unientity>84CB</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 55 62"><unientity>84B8</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 55 63"><unientity>84C0</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 55 64"><unientity>8499</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 55 65"><unientity>84D3</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 55 66"><unientity>8490</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 55 67"><unientity>84BC</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 55 68"><unientity>853D</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 55 69"><unientity>84FF</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 55 6A"><unientity>8517</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 55 6B"><unientity>851A</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 55 6C"><unientity>84EE</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 55 6D"><unientity>852C</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 55 6E"><unientity>852D</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 55 6F"><unientity>8513</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 55 71"><unientity>8523</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 55 72"><unientity>8521</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 55 73"><unientity>8514</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 55 74"><unientity>84EC</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 55 75"><unientity>8525</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 55 76"><unientity>8569</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 55 77"><unientity>854A</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 55 78"><unientity>8559</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 55 79"><unientity>8548</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 55 7A"><unientity>8568</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 55 7B"><unientity>8543</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 55 7C"><unientity>856A</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 55 7D"><unientity>8549</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 55 7E"><unientity>8584</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 56 21"><unientity>85AA</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 56 22"><unientity>856D</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 56 23"><unientity>859B</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 56 24"><unientity>8591</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 56 25"><unientity>857E</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 56 26"><unientity>8594</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 56 27"><unientity>859C</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 56 28"><unientity>8587</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 56 29"><unientity>E94F</unientity><unientityalt>85CD</unientityalt><desc>Variant of 4B5629 which maps to 85CD</desc></character>
+<character hex="21 56 2A"><unientity>85A9</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 56 2B"><unientity>85CF</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 56 2C"><unientity>85AF</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 56 2D"><unientity>85D0</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 56 2E"><unientity>85C9</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 56 2F"><unientity>85B0</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 56 30"><unientity>85E9</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 56 31"><unientity>85DD</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 56 32"><unientity>85EA</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 56 33"><unientity>85E4</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 56 34"><unientity>85D5</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 56 35"><unientity>85E5</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 56 36"><unientity>85FB</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 56 37"><unientity>85F9</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 56 38"><unientity>8611</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 56 39"><unientity>85FA</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 56 3A"><unientity>8606</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 56 3B"><unientity>860B</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 56 3C"><unientity>8607</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 56 3D"><unientity>860A</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 56 3E"><unientity>862D</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 56 3F"><unientity>8617</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 56 40"><unientity>861A</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 56 41"><unientity>8638</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 56 42"><unientity>863F</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 56 43"><unientity>864E</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 56 44"><unientity>8650</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 56 45"><unientity>8654</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 56 46"><unientity>5F6A</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 56 47"><unientity>8655</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 56 48"><unientity>865C</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 56 49"><unientity>865B</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 56 4A"><unientity>865F</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 56 4B"><unientity>865E</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 56 4C"><unientity>8667</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 56 4F"><unientity>8679</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 56 50"><unientity>86A9</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 56 51"><unientity>86AA</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 56 52"><unientity>868A</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 56 53"><unientity>8693</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 56 54"><unientity>86A4</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 56 55"><unientity>868C</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 56 56"><unientity>86A3</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 56 57"><unientity>86C0</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 56 58"><unientity>86C7</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 56 59"><unientity>86B5</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 56 5A"><unientity>86CB</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 56 5B"><unientity>86B6</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 56 5C"><unientity>86C4</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 56 5D"><unientity>86C6</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 56 5E"><unientity>86B1</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 56 5F"><unientity>86AF</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 56 60"><unientity>86DF</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 56 61"><unientity>86D9</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 56 62"><unientity>86ED</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 56 63"><unientity>86D4</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 56 64"><unientity>86DB</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 56 65"><unientity>86E4</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 56 66"><unientity>86FB</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 56 67"><unientity>86F9</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 56 68"><unientity>8707</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 56 69"><unientity>8703</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 56 6A"><unientity>8708</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 56 6B"><unientity>8700</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 56 6C"><unientity>86FE</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 56 6D"><unientity>8713</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 56 6E"><unientity>8702</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 56 6F"><unientity>871C</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 56 70"><unientity>873F</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 56 71"><unientity>873B</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 56 72"><unientity>8722</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 56 73"><unientity>8725</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 56 74"><unientity>8734</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 56 75"><unientity>8718</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 56 76"><unientity>8755</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 56 77"><unientity>8760</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 56 78"><unientity>8776</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 56 79"><unientity>8774</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 56 7A"><unientity>8766</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 56 7B"><unientity>8778</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 56 7C"><unientity>8768</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 56 7D"><unientity>874C</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 56 7E"><unientity>8757</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 57 21"><unientity>8759</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 57 22"><unientity>8783</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 57 23"><unientity>8782</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 57 24"><unientity>87A2</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 57 25"><unientity>879E</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 57 26"><unientity>878D</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 57 27"><unientity>879F</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 57 28"><unientity>87D1</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 57 29"><unientity>87C0</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 57 2A"><unientity>87AB</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 57 2B"><unientity>87B3</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 57 2C"><unientity>87BB</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 57 2D"><unientity>87C8</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 57 2E"><unientity>87D2</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 57 2F"><unientity>87BA</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 57 30"><unientity>87C6</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 57 31"><unientity>87CB</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 57 32"><unientity>87EF</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 57 33"><unientity>87F2</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 57 34"><unientity>87EC</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 57 35"><unientity>87FB</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 57 36"><unientity>8805</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 57 37"><unientity>880D</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 57 38"><unientity>87F9</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 57 39"><unientity>8814</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 57 3A"><unientity>8815</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 57 3B"><unientity>8822</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 57 3C"><unientity>8823</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 57 3D"><unientity>8821</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 57 3E"><unientity>881F</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 57 3F"><unientity>8831</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 57 40"><unientity>8839</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 57 41"><unientity>8836</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 57 42"><unientity>883B</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 57 43"><unientity>8840</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 57 44"><unientity>884C</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 57 45"><unientity>884D</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 57 46"><unientity>E950</unientity><unientityalt>8853</unientityalt><desc>Variant of 4B5746 which maps to 8853</desc></character>
+<character hex="21 57 47"><unientity>8857</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 57 48"><unientity>8859</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 57 49"><unientity>885B</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 57 4A"><unientity>885D</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 57 4B"><unientity>8861</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 57 4C"><unientity>8862</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 57 4D"><unientity>8863</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 57 4E"><unientity>521D</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 57 4F"><unientity>8868</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 57 50"><unientity>886B</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 57 51"><unientity>8882</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 57 52"><unientity>8881</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 57 53"><unientity>8870</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 57 54"><unientity>8877</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 57 55"><unientity>8888</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 57 56"><unientity>88AB</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 57 57"><unientity>8892</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 57 58"><unientity>8896</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 57 59"><unientity>888D</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 57 5A"><unientity>888B</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 57 5B"><unientity>889E</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 57 5C"><unientity>88C1</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 57 5D"><unientity>88C2</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 57 5E"><unientity>88B1</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 57 5F"><unientity>88DF</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 57 60"><unientity>88D9</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 57 61"><unientity>88D8</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 57 62"><unientity>88DC</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 57 63"><unientity>88CF</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 57 64"><unientity>88D4</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 57 65"><unientity>88DD</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 57 66"><unientity>88D5</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 57 67"><unientity>8902</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 57 68"><unientity>88F3</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 57 69"><unientity>88F8</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 57 6A"><unientity>88F9</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 57 6B"><unientity>88F4</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 57 6C"><unientity>88FD</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 57 6D"><unientity>88E8</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 57 6E"><unientity>891A</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 57 6F"><unientity>8910</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 57 71"><unientity>8913</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 57 72"><unientity>8912</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 57 73"><unientity>8932</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 57 74"><unientity>892A</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 57 75"><unientity>8925</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 57 76"><unientity>892B</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 57 77"><unientity>893B</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 57 78"><unientity>8936</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 57 79"><unientity>8938</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 57 7A"><unientity>8944</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 57 7B"><unientity>895F</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 57 7C"><unientity>8960</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 57 7D"><unientity>8956</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 57 7E"><unientity>8964</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 58 21"><unientity>896A</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 58 22"><unientity>896F</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 58 23"><unientity>8972</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 58 24"><unientity>897F</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 58 25"><unientity>8981</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 58 26"><unientity>8983</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 58 28"><unientity>898B</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 58 29"><unientity>898F</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 58 2A"><unientity>8993</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 58 2B"><unientity>8996</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 58 2C"><unientity>89AA</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 58 2D"><unientity>89A6</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 58 2E"><unientity>89AC</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 58 2F"><unientity>89B2</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 58 30"><unientity>89BA</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 58 31"><unientity>89BD</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 58 32"><unientity>89C0</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 58 33"><unientity>89D2</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 58 34"><unientity>89E3</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 58 35"><unientity>89F4</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 58 36"><unientity>89F8</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 58 37"><unientity>8A00</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 58 38"><unientity>8A08</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 58 39"><unientity>8A02</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 58 3A"><unientity>8A03</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 58 3B"><unientity>8A10</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 58 3C"><unientity>8A18</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 58 3D"><unientity>8A0E</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 58 3E"><unientity>8A0C</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 58 3F"><unientity>8A15</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 58 40"><unientity>8A0A</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 58 41"><unientity>8A16</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 58 42"><unientity>8A17</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 58 43"><unientity>8A13</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 58 44"><unientity>8A2A</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 58 45"><unientity>8A23</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 58 46"><unientity>8A1D</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 58 47"><unientity>8A25</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 58 48"><unientity>8A31</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 58 49"><unientity>8A2D</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 58 4A"><unientity>8A1B</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 58 4B"><unientity>8A1F</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 58 4C"><unientity>8A3B</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 58 4D"><unientity>8A60</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 58 4E"><unientity>8A55</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 58 4F"><unientity>8A5E</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 58 51"><unientity>8A41</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 58 52"><unientity>8A54</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 58 53"><unientity>8A5B</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 58 54"><unientity>8A50</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 58 55"><unientity>8A46</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 58 56"><unientity>8A34</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 58 57"><unientity>8A3A</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 58 58"><unientity>8A6B</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 58 59"><unientity>8A72</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 58 5A"><unientity>8A73</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 58 5B"><unientity>8A66</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 58 5C"><unientity>8A69</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 58 5D"><unientity>8A70</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 58 5E"><unientity>8A63</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 58 5F"><unientity>8A7C</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 58 60"><unientity>8AA0</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 58 61"><unientity>8A87</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 58 62"><unientity>8A85</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 58 63"><unientity>8A6D</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 58 64"><unientity>8A79</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 58 65"><unientity>8A62</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 58 66"><unientity>8A71</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 58 67"><unientity>8A6E</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 58 68"><unientity>8A6C</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 58 69"><unientity>8AAA</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 58 6A"><unientity>8AA6</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 58 6B"><unientity>8AA1</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 58 6C"><unientity>8A9E</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 58 6D"><unientity>8A8C</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 58 6E"><unientity>8A93</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 58 6F"><unientity>8AA3</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 58 70"><unientity>8A8D</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 58 71"><unientity>E951</unientity><unientityalt>8AA4</unientityalt><desc>Variant of 4B5871 which maps to 8AA4</desc></character>
+<character hex="21 58 72"><unientity>8AA8</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 58 73"><unientity>8AA5</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 58 74"><unientity>8A98</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 58 75"><unientity>8A91</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 58 76"><unientity>8ABC</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 58 77"><unientity>8AC4</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 58 78"><unientity>8AD2</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 58 79"><unientity>8AC7</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 58 7A"><unientity>E952</unientity><unientityalt>8ACB</unientityalt><desc>Variant of 4B587A which maps to 8ACB</desc></character>
+<character hex="21 58 7B"><unientity>8AF8</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 58 7C"><unientity>8AB2</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 58 7D"><unientity>8ABF</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 58 7E"><unientity>8AC9</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 59 21"><unientity>8AC2</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 59 22"><unientity>8AB0</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 59 23"><unientity>8A95</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 59 24"><unientity>8AD6</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 59 25"><unientity>8AE6</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 59 26"><unientity>8AFA</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 59 27"><unientity>8AEB</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 59 28"><unientity>8AF1</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 59 29"><unientity>8AE7</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 59 2A"><unientity>8ADC</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 59 2B"><unientity>8B00</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 59 2C"><unientity>E953</unientity><unientityalt>8B01</unientityalt><desc>Variant of 2D592C which maps to 8B01</desc></character>
+<character hex="21 59 2D"><unientity>8B02</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 59 2E"><unientity>8AFE</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 59 2F"><unientity>8AF7</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 59 30"><unientity>8AED</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 59 31"><unientity>8B17</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 59 32"><unientity>8B19</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 59 33"><unientity>8B0E</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 59 34"><unientity>8B1B</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 59 35"><unientity>8B0A</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 59 36"><unientity>8B21</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 59 37"><unientity>8B04</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 59 38"><unientity>8B1D</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 59 39"><unientity>8B39</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 59 3A"><unientity>8B2C</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 59 3B"><unientity>8B28</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 59 3C"><unientity>8B58</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 59 3D"><unientity>8B5C</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 59 3E"><unientity>8B4E</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 59 3F"><unientity>8B49</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 59 40"><unientity>8B5A</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 59 41"><unientity>8B41</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 59 42"><unientity>8B4F</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 59 43"><unientity>8B70</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 59 44"><unientity>8B6C</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 59 45"><unientity>8B66</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 59 46"><unientity>8B6F</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 59 47"><unientity>8B74</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 59 48"><unientity>8B77</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 59 49"><unientity>8B7D</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 59 4A"><unientity>8B80</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 59 4B"><unientity>8B8A</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 59 4C"><unientity>8B93</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 59 4D"><unientity>8B96</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 59 4E"><unientity>8B92</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 59 4F"><unientity>8B9A</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 59 51"><unientity>8C41</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 59 52"><unientity>8C3F</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 59 53"><unientity>8C46</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 59 54"><unientity>8C48</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 59 55"><unientity>8C49</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 59 56"><unientity>8C4C</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 59 57"><unientity>8C4E</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 59 58"><unientity>8C50</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 59 59"><unientity>8C54</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 59 5A"><unientity>8C5A</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 59 5C"><unientity>8C62</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 59 5D"><unientity>8C6A</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 59 5E"><unientity>8C6B</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 59 5F"><unientity>8C6C</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 59 60"><unientity>8C7A</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 59 61"><unientity>8C79</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 59 62"><unientity>8C82</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 59 63"><unientity>8C8A</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 59 64"><unientity>8C89</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 59 65"><unientity>8C8D</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 59 66"><unientity>8C8C</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 59 67"><unientity>8C93</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 59 68"><unientity>8C9D</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 59 69"><unientity>8C9E</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 59 6A"><unientity>8CA0</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 59 6B"><unientity>8CA2</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 59 6C"><unientity>8CA1</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 59 6D"><unientity>8CAC</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 59 6E"><unientity>8CAB</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 59 6F"><unientity>8CA8</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 59 70"><unientity>8CAA</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 59 71"><unientity>8CA7</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 59 72"><unientity>8CA9</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 59 73"><unientity>8CAF</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 59 75"><unientity>8CBB</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 59 76"><unientity>8CC1</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 59 77"><unientity>8CC0</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 59 78"><unientity>8CB4</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 59 79"><unientity>8CBC</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 59 7A"><unientity>8CB7</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 59 7B"><unientity>8CB6</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 59 7C"><unientity>8CBD</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 59 7D"><unientity>8CB8</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 59 7E"><unientity>8CBF</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 5A 21"><unientity>8CC5</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 5A 22"><unientity>8CC7</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 5A 23"><unientity>8CCA</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 5A 24"><unientity>8CC8</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 5A 25"><unientity>8CC4</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 5A 26"><unientity>8CB2</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 5A 27"><unientity>8CC3</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 5A 28"><unientity>8CC2</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 5A 29"><unientity>8CD3</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 5A 2A"><unientity>8CD1</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 5A 2B"><unientity>8CD2</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 5A 2C"><unientity>8CE0</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 5A 2D"><unientity>8CE6</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 5A 2F"><unientity>8CE3</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 5A 30"><unientity>8CE2</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 5A 31"><unientity>8CE4</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 5A 32"><unientity>8CDE</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 5A 33"><unientity>8CDC</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 5A 34"><unientity>8CEA</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 5A 35"><unientity>8CED</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 5A 36"><unientity>8CF4</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 5A 37"><unientity>8CFD</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 5A 38"><unientity>8CFA</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 5A 39"><unientity>8D05</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 5A 3A"><unientity>8CFC</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 5A 3B"><unientity>E954</unientity><unientityalt>8D08</unientityalt><desc>Variant of 4B5A3B which maps to 8D08</desc></character>
+<character hex="21 5A 3C"><unientity>8D0B</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 5A 3D"><unientity>8D0A</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 5A 3E"><unientity>8D0F</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 5A 3F"><unientity>8D0D</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 5A 40"><unientity>8D13</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 5A 41"><unientity>8D16</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 5A 42"><unientity>8D1B</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 5A 43"><unientity>8D64</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 5A 44"><unientity>8D67</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 5A 45"><unientity>8D66</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 5A 46"><unientity>8D6B</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 5A 47"><unientity>8D6D</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 5A 48"><unientity>8D70</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 5A 49"><unientity>8D74</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 5A 4A"><unientity>8D73</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 5A 4B"><unientity>8D77</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 5A 4C"><unientity>8D85</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 5A 4D"><unientity>8D8A</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 5A 4E"><unientity>8D81</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 5A 4F"><unientity>8D99</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 5A 50"><unientity>8D95</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 5A 51"><unientity>8DA3</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 5A 52"><unientity>8D9F</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 5A 53"><unientity>8DA8</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 5A 54"><unientity>8DB3</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 5A 55"><unientity>8DB4</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 5A 56"><unientity>8DBE</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 5A 57"><unientity>8DCE</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 5A 58"><unientity>8DDD</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 5A 59"><unientity>8DDB</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 5A 5A"><unientity>8DCB</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 5A 5B"><unientity>8DDA</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 5A 5C"><unientity>8DC6</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 5A 5D"><unientity>8DD1</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 5A 5E"><unientity>8DCC</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 5A 5F"><unientity>8DE1</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 5A 60"><unientity>8DDF</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 5A 61"><unientity>8DE8</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 5A 62"><unientity>8DF3</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 5A 63"><unientity>8DFA</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 5A 64"><unientity>8DEA</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 5A 65"><unientity>8DEF</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 5A 66"><unientity>8DFC</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 5A 67"><unientity>8E2B</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 5A 68"><unientity>8E10</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 5A 69"><unientity>8E22</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 5A 6A"><unientity>8E1D</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 5A 6B"><unientity>8E0F</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 5A 6C"><unientity>8E29</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 5A 6D"><unientity>8E1F</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 5A 6E"><unientity>8E44</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 5A 6F"><unientity>8E31</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 5A 70"><unientity>8E42</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 5A 71"><unientity>8E34</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 5A 72"><unientity>8E39</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 5A 73"><unientity>8E35</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 5A 74"><unientity>8E49</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 5A 75"><unientity>8E4B</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 5A 76"><unientity>8E48</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 5A 77"><unientity>8E4A</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 5A 78"><unientity>8E63</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 5A 79"><unientity>8E59</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 5A 7A"><unientity>8E66</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 5A 7B"><unientity>8E64</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 5A 7C"><unientity>8E72</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 5A 7D"><unientity>8E6C</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 5A 7E"><unientity>8E7A</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 5B 21"><unientity>8E76</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 5B 22"><unientity>8E7C</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 5B 23"><unientity>8E82</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 5B 24"><unientity>8E81</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 5B 25"><unientity>8E87</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 5B 26"><unientity>8E89</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 5B 27"><unientity>8E85</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 5B 28"><unientity>8E8A</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 5B 29"><unientity>E955</unientity><unientityalt>8E8D</unientityalt><desc>Variant of 4B5B29 which maps to 8E8D</desc></character>
+<character hex="21 5B 2A"><unientity>8E91</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 5B 2B"><unientity>8EA1</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 5B 2C"><unientity>8EAA</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 5B 2D"><unientity>8EAB</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 5B 2E"><unientity>8EAC</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 5B 2F"><unientity>8EB2</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 5B 30"><unientity>8EBA</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 5B 31"><unientity>8EC0</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 5B 32"><unientity>8ECA</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 5B 33"><unientity>8ECB</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 5B 34"><unientity>8ECD</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 5B 35"><unientity>8ECC</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 5B 36"><unientity>8ED2</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 5B 37"><unientity>8ED4</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 5B 38"><unientity>8EDF</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 5B 39"><unientity>8EDB</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 5B 3A"><unientity>8EFB</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 5B 3B"><unientity>8EF8</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 5B 3C"><unientity>8EFC</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 5B 3D"><unientity>8F03</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 5B 3E"><unientity>8EFE</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 5B 3F"><unientity>8F09</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 5B 40"><unientity>8F0A</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 5B 41"><unientity>8F14</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 5B 42"><unientity>8F12</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 5B 43"><unientity>8F15</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 5B 44"><unientity>8F13</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 5B 45"><unientity>8F26</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 5B 46"><unientity>8F1B</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 5B 47"><unientity>8F1F</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 5B 48"><unientity>8F1D</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 5B 49"><unientity>8F29</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 5B 4A"><unientity>8F2A</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 5B 4B"><unientity>8F1C</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 5B 4C"><unientity>8F3B</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 5B 4D"><unientity>8F2F</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 5B 4E"><unientity>8F38</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 5B 4F"><unientity>8F44</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 5B 50"><unientity>8F3E</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 5B 51"><unientity>8F45</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 5B 52"><unientity>E956</unientity><unientityalt>8F42</unientityalt><desc>Variant of 4B5B52 which maps to 8F42</desc></character>
+<character hex="21 5B 53"><unientity>8F3F</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 5B 54"><unientity>8F4D</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 5B 55"><unientity>8F49</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 5B 56"><unientity>8F54</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 5B 57"><unientity>8F4E</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 5B 58"><unientity>8F5F</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 5B 59"><unientity>8F61</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 5B 5A"><unientity>8F9B</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 5B 5B"><unientity>8F9C</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 5B 5C"><unientity>8F9F</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 5B 5D"><unientity>8FA3</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 5B 5E"><unientity>8FA8</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 5B 5F"><unientity>8FA6</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 5B 60"><unientity>8FAD</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 5B 61"><unientity>8FAF</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 5B 62"><unientity>8FB0</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 5B 63"><unientity>8FB1</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 5B 64"><unientity>8FB2</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 5B 66"><unientity>8FC6</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 5B 67"><unientity>8FC5</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 5B 68"><unientity>8FC4</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 5B 69"><unientity>5DE1</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 5B 6A"><unientity>8FCE</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 5B 6B"><unientity>8FD1</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 5B 6C"><unientity>8FD4</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 5B 6D"><unientity>E957</unientity><unientityalt>8FF0</unientityalt><desc>Variant of 275B6D which maps to 8FF0</desc></character>
+<character hex="21 5B 6E"><unientity>8FE6</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 5B 6F"><unientity>8FE2</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 5B 70"><unientity>8FEA</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 5B 71"><unientity>8FE5</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 5B 73"><unientity>8FEB</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 5B 74"><unientity>9001</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 5B 75"><unientity>9006</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 5B 76"><unientity>8FF7</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 5B 77"><unientity>9000</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 5B 7A"><unientity>9003</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 5B 7B"><unientity>8FFD</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 5B 7C"><unientity>9005</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 5B 7D"><unientity>9019</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 5B 7E"><unientity>9023</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 5C 21"><unientity>901F</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 5C 22"><unientity>9017</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 5C 23"><unientity>901D</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 5C 24"><unientity>9010</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 5C 26"><unientity>900D</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 5C 27"><unientity>901E</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 5C 28"><unientity>901A</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 5C 29"><unientity>9020</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 5C 2A"><unientity>900F</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 5C 2B"><unientity>9022</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 5C 2C"><unientity>9016</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 5C 2D"><unientity>901B</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 5C 2E"><unientity>9014</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 5C 2F"><unientity>902E</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 5C 30"><unientity>9035</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 5C 31"><unientity>9031</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 5C 32"><unientity>FA25</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 5C 33"><unientity>9032</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 5C 34"><unientity>904B</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 5C 36"><unientity>9053</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 5C 37"><unientity>9042</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 5C 38"><unientity>9050</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 5C 39"><unientity>9054</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 5C 3A"><unientity>9055</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 5C 3B"><unientity>903C</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 5C 3C"><unientity>9047</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 5C 3D"><unientity>904F</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 5C 3E"><unientity>904E</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 5C 3F"><unientity>904D</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 5C 40"><unientity>9051</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 5C 41"><unientity>9041</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 5C 42"><unientity>903E</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 5C 43"><unientity>9058</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 5C 44"><unientity>9060</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 5C 45"><unientity>905C</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 5C 46"><unientity>9063</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 5C 47"><unientity>9065</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 5C 48"><unientity>905E</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 5C 49"><unientity>9069</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 5C 4A"><unientity>906E</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 5C 4B"><unientity>9068</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 5C 4C"><unientity>906D</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 5C 4D"><unientity>9075</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 5C 4E"><unientity>9074</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 5C 4F"><unientity>9078</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 5C 50"><unientity>9072</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 5C 51"><unientity>9077</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 5C 52"><unientity>907C</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 5C 53"><unientity>907A</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 5C 54"><unientity>907F</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 5C 55"><unientity>907D</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 5C 56"><unientity>9081</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 5C 57"><unientity>9084</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 5C 58"><unientity>9082</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 5C 59"><unientity>9080</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 5C 5A"><unientity>9087</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 5C 5B"><unientity>908A</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 5C 5C"><unientity>9090</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 5C 5D"><unientity>908F</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 5C 5E"><unientity>9091</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 5C 5F"><unientity>9095</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 5C 60"><unientity>90A3</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 5C 61"><unientity>90A2</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 5C 62"><unientity>90AA</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 5C 63"><unientity>90A6</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 5C 64"><unientity>90B5</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 5C 65"><unientity>90B1</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 5C 66"><unientity>90B8</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 5C 67"><unientity>90CE</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 5C 68"><unientity>90CA</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 5C 6A"><unientity>90E1</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 5C 6B"><unientity>90E8</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 5C 6C"><unientity>90ED</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 5C 6D"><unientity>90F5</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 5C 6E"><unientity>90FD</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 5C 6F"><unientity>9102</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 5C 70"><unientity>9109</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 5C 71"><unientity>9112</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 5C 72"><unientity>9119</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 5C 73"><unientity>912D</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 5C 74"><unientity>9130</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 5C 75"><unientity>9127</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 5C 76"><unientity>9131</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 5C 77"><unientity>E958</unientity><unientityalt>9139</unientityalt><desc>Variant of 4B5C77 which maps to 9139</desc></character>
+<character hex="21 5C 78"><unientity>9149</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 5C 79"><unientity>914B</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 5C 7A"><unientity>914A</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 5C 7B"><unientity>9152</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 5C 7C"><unientity>914D</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 5C 7D"><unientity>914C</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 5C 7E"><unientity>9157</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 5D 21"><unientity>9163</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 5D 22"><unientity>9165</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 5D 23"><unientity>916C</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 5D 24"><unientity>9169</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 5D 25"><unientity>916A</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 5D 26"><unientity>9175</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 5D 27"><unientity>9178</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 5D 28"><unientity>9177</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 5D 29"><unientity>9187</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 5D 2A"><unientity>9189</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 5D 2B"><unientity>918B</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 5D 2C"><unientity>9183</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 5D 2D"><unientity>9192</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 5D 2E"><unientity>91A3</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 5D 2F"><unientity>919E</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 5D 30"><unientity>919C</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 5D 31"><unientity>91AB</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 5D 32"><unientity>91AC</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 5D 33"><unientity>91BA</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 5D 34"><unientity>91C0</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 5D 35"><unientity>91C1</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 5D 36"><unientity>91C7</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 5D 37"><unientity>91C9</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 5D 38"><unientity>91CB</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 5D 3A"><unientity>91CD</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 5D 3B"><unientity>91CE</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 5D 3C"><unientity>91CF</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 5D 3D"><unientity>91D0</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 5D 3E"><unientity>91D1</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 5D 3F"><unientity>91DD</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 5D 40"><unientity>91D8</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 5D 41"><unientity>91D7</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 5D 42"><unientity>91DC</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 5D 43"><unientity>91F5</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 5D 44"><unientity>91E6</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 5D 45"><unientity>91E3</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 5D 46"><unientity>91E7</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 5D 47"><unientity>9223</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 5D 48"><unientity>920D</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 5D 49"><unientity>9215</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 5D 4A"><unientity>9209</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 5D 4B"><unientity>9214</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 5D 4C"><unientity>921E</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 5D 4D"><unientity>9210</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 5D 4F"><unientity>9237</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 5D 50"><unientity>9238</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 5D 51"><unientity>923D</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 5D 52"><unientity>923E</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 5D 53"><unientity>9240</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 5D 54"><unientity>924B</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 5D 55"><unientity>925B</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 5D 56"><unientity>9264</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 5D 57"><unientity>9251</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 5D 58"><unientity>E959</unientity><unientityalt>9234</unientityalt><desc>Variant of 4B5D58 which maps to 9234</desc></character>
+<character hex="21 5D 59"><unientity>9278</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 5D 5A"><unientity>9280</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 5D 5B"><unientity>92AC</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 5D 5C"><unientity>9285</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 5D 5D"><unientity>9298</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 5D 5E"><unientity>9296</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 5D 5F"><unientity>927B</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 5D 60"><unientity>9293</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 5D 61"><unientity>929C</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 5D 62"><unientity>92C5</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 5D 63"><unientity>92BB</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 5D 64"><unientity>92B3</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 5D 65"><unientity>92EA</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 5D 66"><unientity>92B7</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 5D 67"><unientity>92C1</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 5D 68"><unientity>92E4</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 5D 69"><unientity>92BC</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 5D 6A"><unientity>92D2</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 5D 6B"><unientity>9320</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 5D 6C"><unientity>9336</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 5D 6D"><unientity>92F8</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 5D 6E"><unientity>9333</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 5D 6F"><unientity>932F</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 5D 70"><unientity>9322</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 5D 71"><unientity>92FC</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 5D 72"><unientity>932B</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 5D 73"><unientity>931A</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 5D 74"><unientity>9304</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 5D 75"><unientity>9310</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 5D 76"><unientity>9326</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 5D 77"><unientity>934D</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 5D 78"><unientity>9382</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 5D 79"><unientity>9375</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 5D 7A"><unientity>9365</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 5D 7C"><unientity>934B</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 5D 7D"><unientity>9328</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 5D 7E"><unientity>9370</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 5E 21"><unientity>937E</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 5E 22"><unientity>9318</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 5E 23"><unientity>936C</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 5E 24"><unientity>935B</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 5E 25"><unientity>938A</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 5E 26"><unientity>9394</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 5E 27"><unientity>93AE</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 5E 28"><unientity>9396</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 5E 29"><unientity>93A2</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 5E 2A"><unientity>93B3</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 5E 2B"><unientity>93E1</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 5E 2C"><unientity>93D1</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 5E 2D"><unientity>93D6</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 5E 2E"><unientity>93C3</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 5E 2F"><unientity>93DF</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 5E 30"><unientity>93D7</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 5E 31"><unientity>93C8</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 5E 32"><unientity>93E2</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 5E 33"><unientity>93DC</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 5E 34"><unientity>93E4</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 5E 35"><unientity>93DD</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 5E 36"><unientity>93CD</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 5E 37"><unientity>93D8</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 5E 39"><unientity>9403</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 5E 3A"><unientity>942E</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 5E 3B"><unientity>93FD</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 5E 3C"><unientity>9433</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 5E 3D"><unientity>9435</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 5E 3E"><unientity>943A</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 5E 3F"><unientity>9438</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 5E 40"><unientity>9432</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 5E 42"><unientity>9451</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 5E 43"><unientity>9444</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 5E 44"><unientity>9463</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 5E 45"><unientity>9460</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 5E 46"><unientity>9472</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 5E 47"><unientity>9470</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 5E 48"><unientity>947E</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 5E 49"><unientity>947C</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 5E 4A"><unientity>947D</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 5E 4B"><unientity>947F</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 5E 4C"><unientity>9577</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 5E 4D"><unientity>9580</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 5E 4E"><unientity>9582</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 5E 4F"><unientity>9583</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 5E 50"><unientity>9589</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 5E 51"><unientity>9594</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 5E 52"><unientity>958F</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 5E 53"><unientity>958B</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 5E 54"><unientity>9591</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 5E 55"><unientity>9593</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 5E 56"><unientity>9592</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 5E 57"><unientity>9598</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 5E 58"><unientity>95A1</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 5E 59"><unientity>95A8</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 5E 5A"><unientity>95A9</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 5E 5B"><unientity>95A3</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 5E 5C"><unientity>95A5</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 5E 5D"><unientity>95A4</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 5E 5E"><unientity>95B1</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 5E 5F"><unientity>95AD</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 5E 60"><unientity>95BB</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 5E 61"><unientity>95CA</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 5E 62"><unientity>95CB</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 5E 63"><unientity>95CC</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 5E 64"><unientity>95C8</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 5E 65"><unientity>95C6</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 5E 67"><unientity>95D6</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 5E 68"><unientity>95D0</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 5E 69"><unientity>95DC</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 5E 6A"><unientity>95E1</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 5E 6B"><unientity>95E2</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 5E 6C"><unientity>961C</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 5E 6D"><unientity>9621</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 5E 6E"><unientity>9632</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 5E 6F"><unientity>9631</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 5E 70"><unientity>962E</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 5E 71"><unientity>962A</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 5E 72"><unientity>9640</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 5E 73"><unientity>963F</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 5E 74"><unientity>963B</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 5E 75"><unientity>9644</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 5E 76"><unientity>9650</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 5E 77"><unientity>964C</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 5E 78"><unientity>964B</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 5E 79"><unientity>964D</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 5E 7A"><unientity>9662</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 5E 7B"><unientity>9663</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 5E 7C"><unientity>965B</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 5E 7D"><unientity>9661</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 5E 7E"><unientity>965D</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 5F 21"><unientity>9664</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 5F 22"><unientity>966A</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 5F 23"><unientity>9673</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 5F 24"><unientity>9678</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 5F 25"><unientity>9675</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 5F 26"><unientity>9672</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 5F 27"><unientity>9676</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 5F 28"><unientity>9677</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 5F 29"><unientity>9674</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 5F 2A"><unientity>9670</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 5F 2B"><unientity>968A</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 5F 2C"><unientity>968E</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 5F 2D"><unientity>968B</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 5F 2E"><unientity>967D</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 5F 2F"><unientity>9685</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 5F 30"><unientity>9686</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 5F 31"><unientity>968D</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 5F 32"><unientity>9698</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 5F 33"><unientity>9694</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 5F 34"><unientity>9699</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 5F 35"><unientity>9695</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 5F 36"><unientity>969C</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 5F 37"><unientity>969B</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 5F 38"><unientity>96A7</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 5F 39"><unientity>96A8</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 5F 3A"><unientity>96AA</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 5F 3B"><unientity>96B1</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 5F 3C"><unientity>96B4</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 5F 3D"><unientity>96B8</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 5F 3E"><unientity>96BB</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 5F 3F"><unientity>96C0</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 5F 40"><unientity>96C7</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 5F 41"><unientity>96C6</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 5F 42"><unientity>96C4</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 5F 43"><unientity>96C1</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 5F 44"><unientity>96C5</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 5F 45"><unientity>96CD</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 5F 46"><unientity>96CB</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 5F 47"><unientity>96C9</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 5F 48"><unientity>96CC</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 5F 49"><unientity>96D5</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 5F 4A"><unientity>96D6</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 5F 4B"><unientity>96DC</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 5F 4C"><unientity>96DE</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 5F 4D"><unientity>96DB</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 5F 4E"><unientity>96D9</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 5F 4F"><unientity>96E2</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 5F 50"><unientity>E95A</unientity><unientityalt>96E3</unientityalt><desc>Variant of 4B5F50 which maps to 96E3</desc></character>
+<character hex="21 5F 51"><unientity>96E8</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 5F 52"><unientity>96EA</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 5F 53"><unientity>96EF</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 5F 54"><unientity>96F2</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 5F 55"><unientity>96FB</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 5F 56"><unientity>96F7</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 5F 57"><unientity>96F9</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 5F 58"><unientity>96F6</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 5F 59"><unientity>9700</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 5F 5A"><unientity>9707</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 5F 5B"><unientity>9704</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 5F 5C"><unientity>9709</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 5F 5D"><unientity>9706</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 5F 5E"><unientity>9711</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 5F 5F"><unientity>970E</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 5F 60"><unientity>9716</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 5F 61"><unientity>970F</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 5F 62"><unientity>970D</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 5F 63"><unientity>9713</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 5F 64"><unientity>971C</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 5F 65"><unientity>971E</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 5F 66"><unientity>972A</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 5F 67"><unientity>9727</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 5F 68"><unientity>9738</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 5F 69"><unientity>9739</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 5F 6A"><unientity>9732</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 5F 6B"><unientity>973D</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 5F 6C"><unientity>973E</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 5F 6D"><unientity>9744</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 5F 6E"><unientity>9742</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 5F 6F"><unientity>9748</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 5F 70"><unientity>9751</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 5F 71"><unientity>FA1C</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 5F 72"><unientity>E95B</unientity><unientityalt>975B</unientityalt><desc>Variant of 4B5F72 which maps to 975B</desc></character>
+<character hex="21 5F 73"><unientity>975C</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 5F 74"><unientity>975E</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 5F 75"><unientity>9760</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 5F 76"><unientity>9761</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 5F 78"><unientity>9766</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 5F 79"><unientity>9768</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 5F 7A"><unientity>9769</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 5F 7B"><unientity>9776</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 5F 7C"><unientity>9774</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 5F 7D"><unientity>977C</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 5F 7E"><unientity>9785</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 60 21"><unientity>978D</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 60 22"><unientity>978B</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 60 23"><unientity>978F</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 60 24"><unientity>9798</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 60 25"><unientity>97A0</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 60 26"><unientity>97A3</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 60 27"><unientity>97A6</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 60 28"><unientity>97AD</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 60 29"><unientity>97C3</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 60 2A"><unientity>97C1</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 60 2B"><unientity>97C6</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 60 2C"><unientity>97CB</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 60 2D"><unientity>97CC</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 60 2E"><unientity>97D3</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 60 2F"><unientity>97DC</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 60 30"><unientity>97ED</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 60 31"><unientity>97F3</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 60 32"><unientity>7AE0</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 60 33"><unientity>7ADF</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 60 34"><unientity>97F6</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 60 35"><unientity>97FB</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 60 36"><unientity>E95C</unientity><unientityalt>97FF</unientityalt><desc>Variant of 456036 which maps to 97FF</desc></character>
+<character hex="21 60 37"><unientity>9801</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 60 38"><unientity>9802</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 60 39"><unientity>9803</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 60 3A"><unientity>9805</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 60 3B"><unientity>9806</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 60 3C"><unientity>9808</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 60 3D"><unientity>9810</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 60 3E"><unientity>980A</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 60 3F"><unientity>9811</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 60 40"><unientity>9813</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 60 41"><unientity>9812</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 60 42"><unientity>980C</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 60 43"><unientity>9817</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 60 44"><unientity>E95D</unientity><unientityalt>9818</unientityalt><desc>Variant of 4B6044 which maps to 9818</desc></character>
+<character hex="21 60 45"><unientity>9821</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 60 46"><unientity>982D</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 60 47"><unientity>9830</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 60 48"><unientity>9838</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 60 49"><unientity>983B</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 60 4A"><unientity>9839</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 60 4B"><unientity>9837</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 60 4C"><unientity>9824</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 60 4D"><unientity>9846</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 60 4E"><unientity>9854</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 60 4F"><unientity>984D</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 60 50"><unientity>984C</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 60 51"><unientity>984E</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 60 52"><unientity>9853</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 60 53"><unientity>E95E</unientity><unientityalt>985E</unientityalt><desc>Variant of 4B6053 which maps to 985E</desc></character>
+<character hex="21 60 54"><unientity>985A</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 60 55"><unientity>9858</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 60 56"><unientity>9867</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 60 57"><unientity>986B</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 60 58"><unientity>986F</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 60 59"><unientity>9871</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 60 5A"><unientity>9870</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 60 5B"><unientity>98A8</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 60 5C"><unientity>98AF</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 60 5D"><unientity>98B1</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 60 5E"><unientity>98B3</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 60 5F"><unientity>98B6</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 60 60"><unientity>98BA</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 60 61"><unientity>98BC</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 60 62"><unientity>98C4</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 60 63"><unientity>98DB</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 60 64"><unientity>98DF</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 60 65"><unientity>98E2</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 60 66"><unientity>98E7</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 60 67"><unientity>98E9</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 60 68"><unientity>98ED</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 60 69"><unientity>98EA</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 60 6A"><unientity>98EE</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 60 6B"><unientity>98EF</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 60 6C"><unientity>98FC</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 60 6D"><unientity>98F4</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 60 6E"><unientity>98FD</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 60 6F"><unientity>98FE</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 60 70"><unientity>9903</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 60 71"><unientity>990A</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 60 72"><unientity>990C</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 60 73"><unientity>9909</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 60 74"><unientity>9910</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 60 75"><unientity>9912</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 60 76"><unientity>9918</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 60 77"><unientity>9913</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 60 78"><unientity>9905</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 60 79"><unientity>9928</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 60 7A"><unientity>991E</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 60 7B"><unientity>991B</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 60 7C"><unientity>9921</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 60 7D"><unientity>9935</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 60 7E"><unientity>993E</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 61 21"><unientity>993F</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 61 22"><unientity>993D</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 61 23"><unientity>9945</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 61 24"><unientity>9952</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 61 25"><unientity>9951</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 61 26"><unientity>995C</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 61 27"><unientity>995E</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 61 28"><unientity>9996</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 61 29"><unientity>9999</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 61 2A"><unientity>99A5</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 61 2B"><unientity>99A8</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 61 2C"><unientity>99AC</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 61 2D"><unientity>99AE</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 61 2E"><unientity>99AD</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 61 2F"><unientity>99B3</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 61 30"><unientity>99B1</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 61 31"><unientity>99B4</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 61 32"><unientity>99C1</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 61 33"><unientity>99D0</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 61 34"><unientity>99DD</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 61 35"><unientity>99D5</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 61 36"><unientity>99DF</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 61 37"><unientity>99DB</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 61 38"><unientity>99D2</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 61 39"><unientity>99D9</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 61 3A"><unientity>99D1</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 61 3B"><unientity>99ED</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 61 3C"><unientity>99F1</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 61 3D"><unientity>9A01</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 61 3E"><unientity>99FF</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 61 3F"><unientity>99E2</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 61 40"><unientity>9A0E</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 61 41"><unientity>9A19</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 61 42"><unientity>9A16</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 61 43"><unientity>9A2B</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 61 44"><unientity>9A30</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 61 45"><unientity>9A37</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 61 46"><unientity>9A43</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 61 47"><unientity>9A45</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 61 48"><unientity>9A40</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 61 49"><unientity>9A3E</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 61 4A"><unientity>9A55</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 61 4B"><unientity>9A5A</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 61 4C"><unientity>9A5B</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 61 4D"><unientity>9A57</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 61 4E"><unientity>9A5F</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 61 4F"><unientity>9A62</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 61 50"><unientity>9A65</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 61 51"><unientity>9A6A</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 61 52"><unientity>9AA8</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 61 53"><unientity>9AAF</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 61 54"><unientity>9AB0</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 61 55"><unientity>9AB7</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 61 56"><unientity>9AB8</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 61 57"><unientity>9ABC</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 61 58"><unientity>9ACF</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 61 59"><unientity>9AD3</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 61 5A"><unientity>9AD4</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 61 5B"><unientity>9AD2</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 61 5C"><unientity>9AD8</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 61 5D"><unientity>9AE5</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 61 5F"><unientity>9AEE</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 61 60"><unientity>9AFB</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 61 61"><unientity>9AED</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 61 62"><unientity>9B03</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 61 63"><unientity>9B06</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 61 64"><unientity>9B0D</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 61 65"><unientity>9B1A</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 61 66"><unientity>9B22</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 61 67"><unientity>9B25</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 61 68"><unientity>9B27</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 61 6A"><unientity>9B31</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 61 6B"><unientity>9B32</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 61 6C"><unientity>9B3C</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 61 6D"><unientity>9B41</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 61 6E"><unientity>9B42</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 61 6F"><unientity>9B45</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 61 70"><unientity>9B44</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 61 71"><unientity>9B4F</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 61 72"><unientity>9B54</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 61 73"><unientity>9B58</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 61 74"><unientity>9B5A</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 61 75"><unientity>9B77</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 61 76"><unientity>9B6F</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 61 77"><unientity>9B91</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 61 78"><unientity>9BAB</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 61 79"><unientity>9BAE</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 61 7A"><unientity>9BAA</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 61 7B"><unientity>9BCA</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 61 7C"><unientity>9BC9</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 61 7D"><unientity>9BE8</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 61 7E"><unientity>9BE7</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 62 21"><unientity>9C13</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 62 22"><unientity>9C0D</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 62 23"><unientity>9BFD</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 62 24"><unientity>9C2D</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 62 25"><unientity>9C25</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 62 26"><unientity>9C31</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 62 27"><unientity>9C3E</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 62 28"><unientity>9C3B</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 62 29"><unientity>9C54</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 62 2A"><unientity>9C57</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 62 2B"><unientity>9C56</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 62 2C"><unientity>9C49</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 62 2D"><unientity>9C77</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 62 2E"><unientity>9C78</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 62 2F"><unientity>9CE5</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 62 30"><unientity>9CE9</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 62 31"><unientity>9CF6</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 62 32"><unientity>9CF4</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 62 33"><unientity>9CF3</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 62 34"><unientity>9D06</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 62 35"><unientity>9D09</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 62 36"><unientity>9D15</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 62 37"><unientity>9D23</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 62 38"><unientity>9D28</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 62 39"><unientity>9D26</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 62 3A"><unientity>9D1B</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 62 3B"><unientity>E95F</unientity><unientityalt>9D12</unientityalt><desc>Variant of 4B623B which maps to 9D12</desc></character>
+<character hex="21 62 3C"><unientity>9D3B</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 62 3D"><unientity>9D3F</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 62 3E"><unientity>9D61</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 62 3F"><unientity>9D51</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 62 40"><unientity>9D60</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 62 41"><unientity>9D5D</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 62 42"><unientity>9D89</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 62 43"><unientity>9D72</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 62 44"><unientity>9D6A</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 62 45"><unientity>9D6C</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 62 46"><unientity>9DB4</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 62 47"><unientity>9DAF</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 62 48"><unientity>9DC2</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 62 49"><unientity>9DD3</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 62 4A"><unientity>9DD7</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 62 4B"><unientity>9DE5</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 62 4C"><unientity>9DF9</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 62 4D"><unientity>9DFA</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 62 4E"><unientity>9E1A</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 62 4F"><unientity>9E1E</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 62 50"><unientity>9E79</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 62 51"><unientity>9E7D</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 62 52"><unientity>9E7C</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 62 53"><unientity>9E7F</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 62 54"><unientity>9E82</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 62 55"><unientity>9E8B</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 62 56"><unientity>9E97</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 62 57"><unientity>9E92</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 62 58"><unientity>9E93</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 62 59"><unientity>9E9D</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 62 5A"><unientity>9E9F</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 62 5B"><unientity>9EA5</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 62 5C"><unientity>9EA9</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 62 5D"><unientity>9EB4</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 62 5E"><unientity>9EB5</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 62 5F"><unientity>9EBB</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 62 60"><unientity>9EBC</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 62 61"><unientity>9EBE</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 62 62"><unientity>9EC3</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 62 63"><unientity>9ECD</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 62 64"><unientity>9ECE</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 62 65"><unientity>9ECF</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 62 66"><unientity>9ED1</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 62 67"><unientity>58A8</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 62 68"><unientity>9ED8</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 62 69"><unientity>9ED4</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 62 6A"><unientity>9EDE</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 62 6B"><unientity>9EDC</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 62 6C"><unientity>9EDB</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 62 6D"><unientity>9EDD</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 62 6E"><unientity>9EE0</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 62 6F"><unientity>9EE8</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 62 70"><unientity>9EEF</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 62 71"><unientity>9EF4</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 62 72"><unientity>9EF7</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 62 73"><unientity>9F07</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 62 74"><unientity>9F0E</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 62 75"><unientity>9F13</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 62 76"><unientity>9F15</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 62 77"><unientity>9F19</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 62 78"><unientity>9F20</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 62 79"><unientity>9F2C</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 62 7A"><unientity>9F34</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 62 7B"><unientity>9F3B</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 62 7C"><unientity>9F3E</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 62 7D"><unientity>9F4A</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 62 7E"><unientity>9F4B</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 63 21"><unientity>9F52</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 63 22"><unientity>9F5F</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 63 23"><unientity>9F63</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 63 24"><unientity>E960</unientity><unientityalt>9F61</unientityalt><desc>Variant of 456324 which maps to 9F61</desc></character>
+<character hex="21 63 25"><unientity>9F66</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 63 26"><unientity>9F5C</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 63 27"><unientity>9F6C</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 63 28"><unientity>9F6A</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 63 29"><unientity>9F77</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 63 2A"><unientity>9F72</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 63 2B"><unientity>9F8D</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 63 2C"><unientity>9F94</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 63 2D"><unientity>9F9C</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 63 30"><unientity>8288</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 64 24"><unientity>4E0F</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 64 25"><unientity>5187</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 64 29"><unientity>4E28</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 64 2E"><unientity>4E31</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 64 31"><unientity>4E36</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 64 33"><unientity>4E3F</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 64 34"><unientity>4E42</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 64 37"><unientity>738D</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 64 3C"><unientity>4E5C</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 64 3F"><unientity>6C39</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 64 46"><unientity>4E85</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 64 50"><unientity>4EA0</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 64 51"><unientity>4EA2</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 64 52"><unientity>4EB3</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 64 55"><unientity>E961</unientity><unientityalt>4EB6</unientityalt><desc>Variant of 4B6455 which maps to 4EB6</desc></character>
+<character hex="21 64 58"><unientity>4EB9</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 64 5A"><unientity>4EBC</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 64 5E"><unientity>4EC9</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 64 61"><unientity>4EC8</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 64 62"><unientity>E9E2</unientity><desc>East Asian ideograph not in Unicode</desc></character>
+<character hex="21 64 63"><unientity>4EE8</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 64 6B"><unientity>4EE1</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 64 72"><unientity>4F08</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 64 73"><unientity>4F0E</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 64 75"><unientity>4F03</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 64 7C"><unientity>4F22</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 65 27"><unientity>4EF5</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 65 28"><unientity>4F07</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 65 2A"><unientity>4F00</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 65 2C"><unientity>4F0B</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 65 32"><unientity>4F3B</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 65 36"><unientity>4F58</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 65 37"><unientity>4F62</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 65 39"><unientity>4F64</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 65 3A"><unientity>4F49</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 65 3F"><unientity>4F3E</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 65 40"><unientity>4F66</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 65 44"><unientity>4F67</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 65 4D"><unientity>4F68</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 65 4E"><unientity>4F5A</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 65 4F"><unientity>4F5F</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 65 56"><unientity>4F82</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 65 57"><unientity>4F7C</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 65 5A"><unientity>4F98</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 65 5B"><unientity>4F92</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 65 5C"><unientity>4F7D</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 65 60"><unientity>4F80</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 65 61"><unientity>4F74</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 65 62"><unientity>4F76</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 65 64"><unientity>4FA2</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 65 66"><unientity>4F91</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 65 67"><unientity>4F95</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 65 6C"><unientity>4F4C</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 65 6D"><unientity>4F97</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 65 6E"><unientity>4F94</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 65 70"><unientity>4F79</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 65 71"><unientity>4F9A</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 65 72"><unientity>4F81</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 65 73"><unientity>4F78</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 65 76"><unientity>4F9C</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 65 77"><unientity>4F90</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 65 7B"><unientity>4F7A</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 65 7C"><unientity>4FCD</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 66 22"><unientity>4FE4</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 66 26"><unientity>4FB7</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 66 27"><unientity>4FC5</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 66 29"><unientity>4FC9</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 66 2A"><unientity>4FE5</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 66 2C"><unientity>4FE7</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 66 33"><unientity>4FDC</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 66 35"><unientity>4FD4</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 66 37"><unientity>4FC1</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 66 3B"><unientity>4FDB</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 66 3E"><unientity>4FC6</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 66 43"><unientity>4FB9</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 66 46"><unientity>501E</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 66 48"><unientity>503F</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 66 49"><unientity>5005</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 66 4C"><unientity>5007</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 66 4D"><unientity>5013</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 66 4E"><unientity>5022</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 66 52"><unientity>4FF5</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 66 59"><unientity>4FF4</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 66 5B"><unientity>5037</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 66 5E"><unientity>502E</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 66 61"><unientity>4FF6</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 66 62"><unientity>501C</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 66 66"><unientity>502C</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 66 69"><unientity>5010</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 66 79"><unientity>503D</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 67 22"><unientity>506F</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 67 23"><unientity>5050</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 67 25"><unientity>5070</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 67 29"><unientity>5053</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 67 2A"><unientity>506A</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 67 2C"><unientity>5056</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 67 31"><unientity>506D</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 67 38"><unientity>505D</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 67 39"><unientity>5048</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 67 3B"><unientity>5058</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 67 3C"><unientity>5072</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 67 41"><unientity>5041</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 67 46"><unientity>5015</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 67 48"><unientity>507A</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 67 4A"><unientity>506C</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 67 4B"><unientity>505F</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 67 4D"><unientity>506B</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 67 4E"><unientity>5094</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 67 50"><unientity>509E</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 67 52"><unientity>509B</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 67 53"><unientity>509A</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 67 57"><unientity>50A3</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 67 5A"><unientity>508C</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 67 5C"><unientity>5088</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 67 62"><unientity>508E</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 67 64"><unientity>5095</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 67 67"><unientity>50A6</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 67 6A"><unientity>5092</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 67 6C"><unientity>509C</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 67 71"><unientity>50C7</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 67 75"><unientity>50C9</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 67 7B"><unientity>50CA</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 67 7C"><unientity>50B4</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 68 22"><unientity>50C2</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 68 2C"><unientity>50BA</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 68 2E"><unientity>50CD</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 68 32"><unientity>50D4</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 68 34"><unientity>50EF</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 68 35"><unientity>50E6</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 68 3A"><unientity>50F4</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 68 3B"><unientity>50CE</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 68 3C"><unientity>50DD</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 68 41"><unientity>50F3</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 68 42"><unientity>50E8</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 68 44"><unientity>50F0</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 68 46"><unientity>50D9</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 68 55"><unientity>50EC</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 68 5B"><unientity>510E</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 68 5F"><unientity>5105</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 68 61"><unientity>50FC</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 68 65"><unientity>5106</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 68 66"><unientity>5107</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 68 67"><unientity>510F</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 68 68"><unientity>50FE</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 68 69"><unientity>510B</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 68 6A"><unientity>50FD</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 68 6D"><unientity>5101</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 68 71"><unientity>5115</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 68 72"><unientity>5113</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 68 78"><unientity>511A</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 68 79"><unientity>9797</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 68 7E"><unientity>5126</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 69 29"><unientity>5124</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 69 2B"><unientity>5129</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 69 30"><unientity>5131</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 69 3E"><unientity>5135</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 69 40"><unientity>5133</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 69 44"><unientity>513A</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 69 47"><unientity>5139</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 69 48"><unientity>513B</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 69 51"><unientity>5159</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 69 52"><unientity>515B</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 69 55"><unientity>515D</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 69 56"><unientity>515E</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 69 58"><unientity>515F</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 69 59"><unientity>5161</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 69 5C"><unientity>5163</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 69 67"><unientity>5182</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 69 69"><unientity>5184</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 69 6E"><unientity>518F</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 69 70"><unientity>5194</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 69 71"><unientity>5193</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 69 75"><unientity>5196</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 69 7B"><unientity>51A1</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 69 7C"><unientity>51A3</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 6A 22"><unientity>51AA</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 6A 23"><unientity>51AB</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 6A 26"><unientity>51B1</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 6A 35"><unientity>51BC</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 6A 43"><unientity>51CA</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 6A 46"><unientity>51C7</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 6A 4E"><unientity>51D1</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 6A 4F"><unientity>51D0</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 6A 54"><unientity>51D3</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 6A 63"><unientity>51D9</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 6A 66"><unientity>51DF</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 6A 68"><unientity>51E2</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 6A 73"><unientity>5160</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 6A 78"><unientity>51F5</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 6A 79"><unientity>51F7</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 6B 24"><unientity>5213</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 6B 26"><unientity>5216</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 6B 2A"><unientity>521C</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 6B 33"><unientity>5231</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 6B 36"><unientity>5235</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 6B 37"><unientity>5232</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 6B 39"><unientity>5233</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 6B 3E"><unientity>5244</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 6B 43"><unientity>5249</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 6B 47"><unientity>5260</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 6B 4B"><unientity>525A</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 6B 4C"><unientity>5252</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 6B 4D"><unientity>525E</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 6B 50"><unientity>525F</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 6B 53"><unientity>5255</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 6B 5B"><unientity>526E</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 6B 5E"><unientity>5268</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 6B 5F"><unientity>7B9A</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 6B 6B"><unientity>5278</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 6B 74"><unientity>5282</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 6B 75"><unientity>5281</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 6B 79"><unientity>528C</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 6B 7A"><unientity>528A</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 6B 7C"><unientity>5290</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 6C 21"><unientity>5293</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 6C 27"><unientity>5296</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 6C 29"><unientity>5298</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 6C 2B"><unientity>529A</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 6C 2C"><unientity>5299</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 6C 2E"><unientity>52A6</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 6C 31"><unientity>52AD</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 6C 33"><unientity>52AE</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 6C 37"><unientity>52BB</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 6C 38"><unientity>52BC</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 6C 3C"><unientity>52CA</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 6C 3D"><unientity>52CD</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 6C 40"><unientity>52D0</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 6C 41"><unientity>52D1</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 6C 46"><unientity>52D4</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 6C 48"><unientity>52D6</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 6C 4C"><unientity>52E3</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 6C 4E"><unientity>52E1</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 6C 50"><unientity>55E7</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 6C 53"><unientity>52E9</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 6C 58"><unientity>52F0</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 6C 5A"><unientity>52F1</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 6C 5E"><unientity>52F7</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 6C 61"><unientity>52F9</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 6C 62"><unientity>52FA</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 6C 64"><unientity>52FC</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 6C 69"><unientity>5307</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 6C 6A"><unientity>5303</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 6C 6B"><unientity>E9E3</unientity><desc>East Asian ideograph not in Unicode</desc></character>
+<character hex="21 6C 6E"><unientity>530A</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 6C 6F"><unientity>530B</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 6C 77"><unientity>5311</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 6C 7B"><unientity>6706</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 6D 23"><unientity>531A</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 6D 24"><unientity>531C</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 6D 25"><unientity>531F</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 6D 2E"><unientity>532D</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 6D 33"><unientity>5330</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 6D 36"><unientity>5335</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 6D 3A"><unientity>5338</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 6D 3E"><unientity>533D</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 6D 41"><unientity>534C</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 6D 42"><unientity>534D</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 6D 4B"><unientity>535D</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 6D 4C"><unientity>5363</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 6D 4E"><unientity>E9E4</unientity><desc>East Asian ideograph not in Unicode</desc></character>
+<character hex="21 6D 53"><unientity>536C</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 6D 57"><unientity>5372</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 6D 58"><unientity>537A</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 6D 5D"><unientity>5380</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 6D 64"><unientity>538E</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 6D 66"><unientity>5393</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 6D 67"><unientity>5394</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 6D 6D"><unientity>5399</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 6D 74"><unientity>8652</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 6D 7A"><unientity>53A4</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 6D 7B"><unientity>53AB</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 6E 2C"><unientity>53B5</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 6E 2E"><unientity>53B9</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 6E 3E"><unientity>53D0</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 6E 48"><unientity>53DA</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 6E 57"><unientity>53FB</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 6E 58"><unientity>535F</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 6E 61"><unientity>5414</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 6E 68"><unientity>5406</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 6E 6C"><unientity>544C</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 6E 6D"><unientity>5445</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 6E 6F"><unientity>541A</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 6E 70"><unientity>5432</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 6E 76"><unientity>5421</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 6E 78"><unientity>5430</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 6E 79"><unientity>5454</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 6E 7D"><unientity>543D</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 6F 21"><unientity>544F</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 6F 24"><unientity>542A</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 6F 26"><unientity>5422</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 6F 27"><unientity>5423</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 6F 2E"><unientity>545F</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 6F 2F"><unientity>549C</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 6F 35"><unientity>5488</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 6F 37"><unientity>547F</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 6F 39"><unientity>5482</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 6F 3A"><unientity>546D</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 6F 3B"><unientity>5491</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 6F 42"><unientity>5494</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 6F 43"><unientity>546B</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 6F 49"><unientity>548D</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 6F 4A"><unientity>5463</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 6F 4B"><unientity>5474</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 6F 52"><unientity>5466</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 6F 53"><unientity>5464</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 6F 55"><unientity>54A4</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 6F 58"><unientity>54A1</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 6F 5A"><unientity>54AD</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 6F 5B"><unientity>54BA</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 6F 5C"><unientity>54CF</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 6F 5E"><unientity>54BE</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 6F 60"><unientity>54A5</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 6F 63"><unientity>54A7</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 6F 64"><unientity>54B5</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 6F 66"><unientity>54A2</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 6F 67"><unientity>5472</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 6F 68"><unientity>5470</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 6F 69"><unientity>54BC</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 6F 6A"><unientity>54B7</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 6F 6B"><unientity>54DE</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 6F 6C"><unientity>54D6</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 6F 6D"><unientity>54AE</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 6F 71"><unientity>54BF</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 6F 74"><unientity>54C6</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 6F 7B"><unientity>551A</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 6F 7C"><unientity>54E2</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 6F 7D"><unientity>5507</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 70 23"><unientity>5517</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 70 24"><unientity>54FD</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 70 25"><unientity>54E7</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 70 27"><unientity>54F3</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 70 2A"><unientity>54E4</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 70 2B"><unientity>550A</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 70 2D"><unientity>54FF</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 70 2E"><unientity>5518</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 70 30"><unientity>5504</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 70 32"><unientity>54EF</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 70 34"><unientity>5508</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 70 38"><unientity>54F6</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 70 39"><unientity>54F7</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 70 3E"><unientity>550E</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 70 44"><unientity>5523</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 70 46"><unientity>550F</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 70 47"><unientity>5511</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 70 4B"><unientity>5575</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 70 4D"><unientity>5573</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 70 4E"><unientity>554C</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 70 4F"><unientity>5576</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 70 50"><unientity>554D</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 70 51"><unientity>555A</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 70 53"><unientity>553C</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 70 55"><unientity>5550</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 70 57"><unientity>5539</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 70 58"><unientity>5548</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 70 59"><unientity>552D</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 70 5A"><unientity>5551</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 70 5D"><unientity>552A</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 70 60"><unientity>5562</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 70 61"><unientity>5536</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 70 64"><unientity>5549</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 70 68"><unientity>5530</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 70 6A"><unientity>5540</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 70 6B"><unientity>5535</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 70 70"><unientity>5545</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 70 79"><unientity>553F</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 70 7B"><unientity>5541</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 70 7D"><unientity>5565</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 71 23"><unientity>5591</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 71 25"><unientity>5577</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 71 26"><unientity>55A8</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 71 27"><unientity>55AD</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 71 2A"><unientity>5605</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 71 2D"><unientity>5593</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 71 2F"><unientity>5586</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 71 34"><unientity>5588</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 71 36"><unientity>55B4</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 71 43"><unientity>E962</unientity><unientityalt>55E2</unientityalt><desc>Variant of 2D7143 which maps to 55E2</desc></character>
+<character hex="21 71 44"><unientity>5581</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 71 45"><unientity>558E</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 71 47"><unientity>55B5</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 71 49"><unientity>558F</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 71 4B"><unientity>5559</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 71 50"><unientity>55A4</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 71 51"><unientity>5592</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 71 52"><unientity>5599</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 71 56"><unientity>55F4</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 71 58"><unientity>55CC</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 71 59"><unientity>55D0</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 71 5A"><unientity>55DB</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 71 5B"><unientity>55CD</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 71 5C"><unientity>55DE</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 71 5D"><unientity>55D9</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 71 5E"><unientity>55C3</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 71 5F"><unientity>55C9</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 71 61"><unientity>55CA</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 71 62"><unientity>55DD</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 71 64"><unientity>55D4</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 71 65"><unientity>55C4</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 71 69"><unientity>55E9</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 71 6F"><unientity>55CF</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 71 70"><unientity>55D2</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 71 75"><unientity>55E5</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 71 77"><unientity>55D6</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 71 78"><unientity>55C1</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 71 79"><unientity>55F2</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 71 7E"><unientity>5627</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 72 24"><unientity>55FB</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 72 25"><unientity>5612</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 72 27"><unientity>55F8</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 72 28"><unientity>560F</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 72 2B"><unientity>55F9</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 72 2E"><unientity>561E</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 72 31"><unientity>560C</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 72 34"><unientity>561C</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 72 35"><unientity>5610</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 72 36"><unientity>5601</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 72 38"><unientity>5613</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 72 39"><unientity>55F6</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 72 3C"><unientity>5602</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 72 42"><unientity>561D</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 72 44"><unientity>55FF</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 72 47"><unientity>5642</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 72 48"><unientity>564C</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 72 4B"><unientity>564B</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 72 52"><unientity>5640</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 72 55"><unientity>5635</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 72 57"><unientity>5649</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 72 58"><unientity>5641</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 72 5C"><unientity>5658</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 72 5D"><unientity>5620</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 72 5E"><unientity>5654</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 72 60"><unientity>562A</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 72 61"><unientity>563D</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 72 64"><unientity>562C</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 72 67"><unientity>5638</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 72 69"><unientity>564D</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 72 6B"><unientity>562B</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 72 6C"><unientity>564F</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 72 6E"><unientity>5670</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 72 6F"><unientity>565F</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 72 70"><unientity>567C</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 72 72"><unientity>5660</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 72 78"><unientity>5676</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 72 7A"><unientity>5666</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 72 7B"><unientity>5673</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 72 7C"><unientity>566D</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 72 7E"><unientity>5672</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 73 25"><unientity>5693</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 73 28"><unientity>568C</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 73 32"><unientity>56BA</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 73 34"><unientity>5686</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 73 35"><unientity>5684</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 73 36"><unientity>5691</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 73 37"><unientity>568A</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 73 3E"><unientity>569E</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 73 41"><unientity>569C</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 73 42"><unientity>569A</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 73 45"><unientity>5699</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 73 4B"><unientity>56AD</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 73 4C"><unientity>56A6</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 73 4E"><unientity>56AC</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 73 53"><unientity>56B2</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 73 5A"><unientity>56B3</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 73 5B"><unientity>56C3</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 73 60"><unientity>56C5</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 73 62"><unientity>56CF</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 73 67"><unientity>56CD</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 73 6A"><unientity>56D4</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 73 6B"><unientity>56D7</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 73 6D"><unientity>56DD</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 73 6F"><unientity>56E1</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 73 70"><unientity>56DF</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 73 75"><unientity>56EB</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 73 76"><unientity>56EE</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 73 77"><unientity>56E7</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 73 79"><unientity>56FB</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 73 7E"><unientity>56F7</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 74 21"><unientity>56F9</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 74 24"><unientity>56FF</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 74 27"><unientity>5705</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 74 28"><unientity>5704</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 74 29"><unientity>5702</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 74 2C"><unientity>570A</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 74 2D"><unientity>5709</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 74 2E"><unientity>5707</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 74 30"><unientity>570C</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 74 31"><unientity>5715</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 74 32"><unientity>5714</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 74 35"><unientity>571A</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 74 36"><unientity>571B</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 74 37"><unientity>571C</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 74 39"><unientity>571D</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 74 3A"><unientity>571E</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 74 41"><unientity>5724</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 74 42"><unientity>572E</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 74 43"><unientity>5729</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 74 48"><unientity>5738</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 74 4C"><unientity>572A</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 74 63"><unientity>5749</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 74 65"><unientity>5745</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 74 68"><unientity>574B</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 74 69"><unientity>574C</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 74 6A"><unientity>573F</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 74 70"><unientity>5768</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 74 75"><unientity>578A</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 74 77"><unientity>576D</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 74 79"><unientity>5774</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 74 7A"><unientity>5767</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 75 26"><unientity>5770</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 75 28"><unientity>5771</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 75 2A"><unientity>576E</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 75 2D"><unientity>5776</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 75 2E"><unientity>5789</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 75 30"><unientity>577F</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 75 31"><unientity>5775</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 75 32"><unientity>577B</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 75 33"><unientity>5788</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 75 35"><unientity>5773</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 75 38"><unientity>579F</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 75 39"><unientity>5790</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 75 3A"><unientity>5793</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 75 3F"><unientity>579E</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 75 40"><unientity>57B5</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 75 43"><unientity>579A</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 75 45"><unientity>5794</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 75 47"><unientity>57A4</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 75 48"><unientity>5799</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 75 49"><unientity>578C</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 75 4B"><unientity>5797</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 75 4E"><unientity>579D</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 75 52"><unientity>579C</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 75 54"><unientity>57A7</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 75 57"><unientity>57A1</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 75 59"><unientity>EA00</unientity><desc>East Asian ideograph not found in unified han</desc></character>
+<character hex="21 75 5B"><unientity>5795</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 75 5F"><unientity>57B8</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 75 60"><unientity>57C7</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 75 6A"><unientity>5809</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 75 6C"><unientity>57BE</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 75 71"><unientity>57DB</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 75 73"><unientity>57D5</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 75 77"><unientity>57D2</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 75 7E"><unientity>57C6</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 76 22"><unientity>57C4</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 76 27"><unientity>70FE</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 76 29"><unientity>57E3</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 76 2A"><unientity>57FB</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 76 2B"><unientity>5803</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 76 2C"><unientity>57F6</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 76 2D"><unientity>57E6</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 76 31"><unientity>57ED</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 76 33"><unientity>5800</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 76 35"><unientity>57EC</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 76 36"><unientity>5807</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 76 39"><unientity>580E</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 76 3B"><unientity>580F</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 76 3D"><unientity>57F4</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 76 3E"><unientity>5810</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 76 40"><unientity>580D</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 76 43"><unientity>57EF</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 76 48"><unientity>5801</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 76 49"><unientity>5812</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 76 4D"><unientity>57FD</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 76 4E"><unientity>57F8</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 76 50"><unientity>580C</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 76 51"><unientity>5813</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 76 52"><unientity>57F0</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 76 56"><unientity>580B</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 76 58"><unientity>57F3</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 76 59"><unientity>5804</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 76 5A"><unientity>57CF</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 76 5B"><unientity>57DD</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 76 5F"><unientity>5847</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 76 67"><unientity>581B</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 76 69"><unientity>5819</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 76 6A"><unientity>5833</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 76 6C"><unientity>581E</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 76 6D"><unientity>583F</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 76 71"><unientity>5827</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 76 76"><unientity>5828</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 76 78"><unientity>582E</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 76 7A"><unientity>581D</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 76 7D"><unientity>5844</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 77 21"><unientity>5848</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 77 23"><unientity>5818</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 77 26"><unientity>57F5</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 77 29"><unientity>582D</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 77 2B"><unientity>5820</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 77 30"><unientity>584E</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 77 33"><unientity>585D</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 77 35"><unientity>5859</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 77 37"><unientity>584B</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 77 3D"><unientity>5865</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 77 40"><unientity>586C</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 77 42"><unientity>5852</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 77 45"><unientity>5864</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 77 47"><unientity>5853</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 77 48"><unientity>584F</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 77 49"><unientity>583D</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 77 4D"><unientity>584D</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 77 4E"><unientity>5856</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 77 55"><unientity>589A</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 77 58"><unientity>5892</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 77 5A"><unientity>588E</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 77 5C"><unientity>5889</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 77 5F"><unientity>5840</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 77 60"><unientity>589B</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 77 61"><unientity>587C</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 77 63"><unientity>5888</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 77 65"><unientity>5890</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 77 68"><unientity>5898</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 77 6B"><unientity>587D</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 77 6F"><unientity>587F</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 77 70"><unientity>5881</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 77 7B"><unientity>58A9</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 77 7E"><unientity>58A1</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 78 24"><unientity>58B1</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 78 2B"><unientity>58AD</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 78 2E"><unientity>58A0</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 78 30"><unientity>58A3</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 78 32"><unientity>58A6</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 78 3A"><unientity>58C8</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 78 41"><unientity>58BC</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 78 49"><unientity>58BF</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 78 4B"><unientity>58C6</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 78 4C"><unientity>58BA</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 78 50"><unientity>58D6</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 78 54"><unientity>58D2</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 78 56"><unientity>58CE</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 78 5A"><unientity>58E0</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 78 5E"><unientity>58DA</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 78 6C"><unientity>58FC</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 78 70"><unientity>5902</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 78 73"><unientity>5906</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 78 74"><unientity>6535</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 78 7A"><unientity>5910</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 78 7C"><unientity>8641</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 79 28"><unientity>592C</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 79 2B"><unientity>592F</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 79 30"><unientity>593C</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 79 33"><unientity>5940</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 79 38"><unientity>594D</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 79 43"><unientity>5953</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 79 4B"><unientity>595C</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 79 4F"><unientity>5961</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 79 54"><unientity>596C</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 79 55"><unientity>596D</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 79 65"><unientity>597C</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 79 69"><unientity>59A7</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 79 6B"><unientity>5998</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 79 6F"><unientity>599A</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 79 71"><unientity>59A0</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 79 7C"><unientity>5997</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 7A 21"><unientity>5990</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 7A 24"><unientity>59C5</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 7A 25"><unientity>59B5</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 7A 28"><unientity>59CF</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 7A 2A"><unientity>59BA</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 7A 2C"><unientity>59B8</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 7A 35"><unientity>59B2</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 7A 3A"><unientity>59B7</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 7A 3E"><unientity>59C1</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 7A 43"><unientity>59F9</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 7A 44"><unientity>59F8</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 7A 4F"><unientity>59EE</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 7A 50"><unientity>59F1</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 7A 51"><unientity>5A00</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 7A 52"><unientity>59DE</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 7A 56"><unientity>59FD</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 7A 5D"><unientity>59F6</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 7A 5E"><unientity>59DD</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 7A 5F"><unientity>59FA</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 7A 61"><unientity>59E4</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 7A 6E"><unientity>5A2A</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 7A 75"><unientity>5A16</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 7A 78"><unientity>5A09</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 7A 7E"><unientity>5A12</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 7B 2C"><unientity>5A60</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 7B 31"><unientity>5A67</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 7B 3A"><unientity>5A38</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 7B 3B"><unientity>5A5E</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 7B 3C"><unientity>5A6D</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 7B 3D"><unientity>5A35</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 7B 3E"><unientity>5A55</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 7B 41"><unientity>5A2C</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 7B 48"><unientity>5A50</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 7B 49"><unientity>5A65</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 7B 52"><unientity>5A64</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 7B 65"><unientity>5A8A</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 7B 69"><unientity>5ACF</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 7B 6A"><unientity>5A7A</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 7B 71"><unientity>5A9F</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 7B 75"><unientity>5AA0</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 7C 21"><unientity>5AA6</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 7C 22"><unientity>5A8C</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 7C 24"><unientity>5AA7</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 7C 25"><unientity>5A9E</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 7C 26"><unientity>5AA2</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 7C 27"><unientity>5A9C</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 7C 28"><unientity>5A7C</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 7C 29"><unientity>5A96</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 7C 30"><unientity>5A93</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 7C 31"><unientity>5AAC</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 7C 34"><unientity>5AAE</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 7C 35"><unientity>5A95</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 7C 36"><unientity>5AAF</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 7C 39"><unientity>5AC8</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 7C 3E"><unientity>5AB5</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 7C 41"><unientity>5AC4</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 7C 45"><unientity>5AB7</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 7C 49"><unientity>5AD1</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 7C 4A"><unientity>5A90</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 7C 4F"><unientity>5AB8</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 7C 50"><unientity>5ABA</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 7C 52"><unientity>5AAA</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 7C 59"><unientity>5AD3</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 7C 5B"><unientity>5AB1</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 7C 60"><unientity>5ADC</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 7C 6D"><unientity>5AE5</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 7C 6E"><unientity>5AE0</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 7C 72"><unientity>5AEA</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 7C 7B"><unientity>5ADA</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 7C 7C"><unientity>5AEB</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 7D 26"><unientity>5AFF</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 7D 2A"><unientity>5AFD</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 7D 2B"><unientity>5B08</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 7D 2E"><unientity>5B0D</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 7D 38"><unientity>5B03</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 7D 3D"><unientity>5B17</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 7D 3E"><unientity>5B16</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 7D 40"><unientity>5B19</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 7D 47"><unientity>5B1B</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 7D 48"><unientity>5B21</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 7D 52"><unientity>5B2C</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 7D 59"><unientity>5B32</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 7D 63"><unientity>5B3F</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 7D 6E"><unientity>5B45</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 7D 74"><unientity>5B4C</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 7D 76"><unientity>5B4B</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 7D 7C"><unientity>5B56</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 7E 21"><unientity>5B5B</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 7E 23"><unientity>5B62</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 7E 24"><unientity>5B65</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 7E 25"><unientity>5B67</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 7E 27"><unientity>E9E5</unientity><desc>East Asian ideograph not in Unicode</desc></character>
+<character hex="21 7E 28"><unientity>5B6C</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 7E 2A"><unientity>5B6E</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 7E 30"><unientity>5B7B</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 7E 31"><unientity>5B7C</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 7E 32"><unientity>5B80</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 7E 34"><unientity>5B84</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 7E 35"><unientity>E9E6</unientity><desc>East Asian ideograph not in Unicode</desc></character>
+<character hex="21 7E 40"><unientity>5B95</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 7E 43"><unientity>5B93</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 7E 49"><unientity>5BAC</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 7E 52"><unientity>5BA7</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 7E 55"><unientity>5BB7</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 7E 59"><unientity>5BC1</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 7E 5B"><unientity>EA01</unientity><desc>East Asian ideography not found in unified han</desc></character>
+<character hex="21 7E 60"><unientity>5BC9</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 7E 68"><unientity>5BD4</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 7E 6A"><unientity>5BC3</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 7E 6E"><unientity>5BD6</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 7E 75"><unientity>5BD7</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 7E 79"><unientity>5BE0</unientity><desc>East Asian ideograph</desc></character>
+<character hex="21 7E 7E"><unientity>5BEA</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 22 24"><unientity>5BF0</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 22 25"><unientity>5BEF</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 22 33"><unientity>5C00</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 22 35"><unientity>5C57</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 22 3C"><unientity>5C15</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 22 46"><unientity>5C22</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 22 48"><unientity>5C25</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 22 4B"><unientity>5C2A</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 22 52"><unientity>5C2F</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 22 5B"><unientity>5C32</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 22 63"><unientity>5C3B</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 22 65"><unientity>5C44</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 22 67"><unientity>5C49</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 22 79"><unientity>5C59</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 22 7B"><unientity>5C5D</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 22 7C"><unientity>5C5F</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 23 23"><unientity>5C63</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 23 29"><unientity>5C67</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 23 2B"><unientity>5C68</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 23 30"><unientity>5C6D</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 23 31"><unientity>5C6E</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 23 37"><unientity>5C74</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 23 39"><unientity>5C73</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 23 3B"><unientity>5C77</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 23 3C"><unientity>5C7A</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 23 40"><unientity>5C7C</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 23 46"><unientity>5C8F</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 23 49"><unientity>5C88</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 23 4B"><unientity>5C8D</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 23 4D"><unientity>5C99</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 23 55"><unientity>5CA6</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 23 57"><unientity>5CA0</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 23 5C"><unientity>5CA2</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 23 60"><unientity>5CB5</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 23 61"><unientity>5CA7</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 23 66"><unientity>5CA8</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 23 67"><unientity>5CAC</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 23 6B"><unientity>5CA3</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 23 6C"><unientity>5CB6</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 23 6D"><unientity>5CC1</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 23 6F"><unientity>5CAD</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 23 70"><unientity>5CD5</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 23 78"><unientity>5CD3</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 23 79"><unientity>E9E7</unientity><desc>East Asian ideograph not in Unicode</desc></character>
+<character hex="22 24 26"><unientity>5CE0</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 24 28"><unientity>5CD2</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 24 29"><unientity>5CDD</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 24 2B"><unientity>5CCB</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 24 30"><unientity>5CC7</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 24 31"><unientity>5CDC</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 24 34"><unientity>5D00</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 24 3B"><unientity>5CFF</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 24 3C"><unientity>5CEB</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 24 41"><unientity>5CF4</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 24 46"><unientity>5CF1</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 24 49"><unientity>5D1E</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 24 4A"><unientity>5D12</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 24 50"><unientity>5D1A</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 24 52"><unientity>5D0C</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 24 53"><unientity>5D20</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 24 54"><unientity>5D21</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 24 57"><unientity>5D27</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 24 58"><unientity>5D0D</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 24 5A"><unientity>5D26</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 24 5D"><unientity>5D2E</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 24 69"><unientity>5D24</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 24 71"><unientity>5D36</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 24 72"><unientity>5D3E</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 24 74"><unientity>5D4B</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 24 76"><unientity>5D57</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 24 77"><unientity>5D34</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 25 25"><unientity>5D3F</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 25 26"><unientity>5D52</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 25 27"><unientity>5D3D</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 25 28"><unientity>5D4E</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 25 2C"><unientity>5D59</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 25 2D"><unientity>5D47</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 25 2F"><unientity>5D32</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 25 31"><unientity>5D42</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 25 34"><unientity>5D74</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 25 39"><unientity>5D6F</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 25 3A"><unientity>5D6B</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 25 3F"><unientity>5D75</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 25 44"><unientity>5D4A</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 25 49"><unientity>5D6C</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 25 4A"><unientity>5D62</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 25 4D"><unientity>5D82</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 25 50"><unientity>5D79</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 25 51"><unientity>5D8E</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 25 5A"><unientity>5D81</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 25 60"><unientity>5D7E</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 25 66"><unientity>5D92</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 25 68"><unientity>5D99</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 25 69"><unientity>5D97</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 25 6A"><unientity>5DA2</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 25 73"><unientity>5DA1</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 25 75"><unientity>5D93</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 25 77"><unientity>5DA0</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 25 7B"><unientity>5D94</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 25 7E"><unientity>5DAC</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 26 26"><unientity>5DA7</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 26 2A"><unientity>5DB0</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 26 2E"><unientity>5DB4</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 26 2F"><unientity>5DAE</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 26 30"><unientity>5DB6</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 26 32"><unientity>5DB8</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 26 34"><unientity>5DBF</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 26 36"><unientity>5DB7</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 26 3E"><unientity>5DC3</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 26 44"><unientity>5DC7</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 26 46"><unientity>5DC9</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 26 47"><unientity>5DCB</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 26 4E"><unientity>5DD8</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 26 50"><unientity>5DDB</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 26 52"><unientity>5DDC</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 26 56"><unientity>5DE4</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 26 62"><unientity>5E00</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 26 64"><unientity>51E7</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 26 72"><unientity>5E14</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 26 73"><unientity>5E17</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 26 76"><unientity>5E19</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 26 77"><unientity>5E12</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 26 78"><unientity>5E1F</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 26 7A"><unientity>5E23</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 26 7B"><unientity>5E21</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 27 22"><unientity>5E22</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 27 24"><unientity>5E28</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 27 35"><unientity>5E44</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 27 36"><unientity>5E43</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 27 39"><unientity>5E42</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 27 3F"><unientity>5E4E</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 27 47"><unientity>5E58</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 27 48"><unientity>5E48</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 27 57"><unientity>5E5E</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 27 58"><unientity>5E61</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 27 5D"><unientity>5E68</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 27 5F"><unientity>5E6C</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 27 60"><unientity>5E6A</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 27 63"><unientity>5E6E</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 27 64"><unientity>5E6D</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 27 65"><unientity>5E70</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 27 6D"><unientity>5E75</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 27 77"><unientity>5E80</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 27 7E"><unientity>5E8B</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 28 2F"><unientity>5EA4</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 28 35"><unientity>5EA5</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 28 36"><unientity>5EAF</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 28 42"><unientity>5EB9</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 28 4B"><unientity>5EB3</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 28 4C"><unientity>5EC4</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 28 51"><unientity>5ECC</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 28 55"><unientity>5ECB</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 28 57"><unientity>5ECD</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 28 5A"><unientity>5ED2</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 28 5B"><unientity>5ED1</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 28 5C"><unientity>5ED5</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 28 5F"><unientity>5ED4</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 28 60"><unientity>5ED9</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 28 61"><unientity>5ECE</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 28 68"><unientity>5EE1</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 28 6D"><unientity>5EE7</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 28 71"><unientity>5EE8</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 28 7C"><unientity>5EED</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 29 21"><unientity>5EF1</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 29 23"><unientity>5EF4</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 29 35"><unientity>5F07</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 29 3A"><unientity>5F0B</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 29 4A"><unientity>5F28</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 29 4B"><unientity>5F22</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 29 4C"><unientity>5F23</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 29 4D"><unientity>5F24</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 29 51"><unientity>5F33</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 29 52"><unientity>5F30</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 29 58"><unientity>5F38</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 29 5C"><unientity>5F40</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 29 5F"><unientity>5F44</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 29 62"><unientity>5F4D</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 29 68"><unientity>5F50</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 29 69"><unientity>5F54</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 29 6A"><unientity>5F56</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 29 6C"><unientity>5F58</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 29 70"><unientity>5F60</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 29 71"><unientity>5F61</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 29 72"><unientity>5F63</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 29 73"><unientity>809C</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 29 74"><unientity>5F67</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 29 78"><unientity>5F72</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 29 79"><unientity>5F73</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 29 7C"><unientity>5F74</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 2A 23"><unientity>5F82</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 2A 27"><unientity>5F89</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 2A 2B"><unientity>5F94</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 2A 34"><unientity>EA02</unientity><desc>East Asian ideograph not found in unified han</desc></character>
+<character hex="22 2A 39"><unientity>5F9C</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 2A 3D"><unientity>5F9A</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 2A 46"><unientity>5FAF</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 2A 50"><unientity>5FBC</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 2A 57"><unientity>5FC9</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 2A 5F"><unientity>5FD1</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 2A 61"><unientity>5FD2</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 2A 63"><unientity>5FD0</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 2A 67"><unientity>5FCE</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 2A 68"><unientity>5FED</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 2A 72"><unientity>5FEE</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 2A 73"><unientity>5FF8</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 2A 78"><unientity>5FE1</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 2A 7B"><unientity>5FE4</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 2B 24"><unientity>5FEA</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 2B 2A"><unientity>6026</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 2B 2C"><unientity>6029</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 2B 2D"><unientity>602B</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 2B 30"><unientity>6019</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 2B 31"><unientity>6008</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 2B 36"><unientity>600A</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 2B 37"><unientity>600C</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 2B 38"><unientity>601B</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 2B 3C"><unientity>6017</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 2B 3D"><unientity>6033</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 2B 45"><unientity>600D</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 2B 46"><unientity>6010</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 2B 4B"><unientity>6039</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 2B 50"><unientity>6013</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 2B 53"><unientity>6054</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 2B 57"><unientity>605D</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 2B 5A"><unientity>6047</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 2B 5E"><unientity>6049</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 2B 5F"><unientity>6053</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 2B 68"><unientity>6067</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 2B 6F"><unientity>604C</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 2B 71"><unientity>6041</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 2B 72"><unientity>6077</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 2B 74"><unientity>6042</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 2B 76"><unientity>605F</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 2B 7A"><unientity>6061</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 2C 24"><unientity>608A</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 2C 2B"><unientity>6092</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 2C 2C"><unientity>609D</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 2C 2D"><unientity>6081</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 2C 2F"><unientity>609E</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 2C 30"><unientity>6083</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 2C 32"><unientity>6097</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 2C 34"><unientity>60A7</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 2C 3A"><unientity>6095</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 2C 3E"><unientity>60C7</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 2C 42"><unientity>60B0</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 2C 46"><unientity>60BE</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 2C 47"><unientity>60D3</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 2C 48"><unientity>60D4</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 2C 4E"><unientity>60CE</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 2C 51"><unientity>60CF</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 2C 53"><unientity>60D9</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 2C 54"><unientity>60B3</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 2C 56"><unientity>60DD</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 2C 5D"><unientity>60C4</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 2C 60"><unientity>60B1</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 2C 62"><unientity>60E3</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 2C 66"><unientity>60E2</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 2C 67"><unientity>60E5</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 2C 69"><unientity>60DB</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 2C 6E"><unientity>60E9</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 2C 70"><unientity>6114</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 2C 73"><unientity>6103</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 2C 75"><unientity>6119</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 2C 7C"><unientity>60FD</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 2C 7D"><unientity>610D</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 2D 2A"><unientity>610A</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 2D 2C"><unientity>6110</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 2D 32"><unientity>6112</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 2D 34"><unientity>60F2</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 2D 37"><unientity>6125</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 2D 3B"><unientity>60F8</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 2D 3F"><unientity>6121</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 2D 41"><unientity>60FC</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 2D 43"><unientity>6106</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 2D 48"><unientity>6149</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 2D 4A"><unientity>614A</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 2D 4E"><unientity>612B</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 2D 50"><unientity>6129</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 2D 51"><unientity>6150</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 2D 56"><unientity>53AF</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 2D 58"><unientity>6130</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 2D 5B"><unientity>6141</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 2D 5E"><unientity>6137</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 2D 61"><unientity>6146</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 2D 66"><unientity>615E</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 2D 67"><unientity>6175</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 2D 68"><unientity>6174</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 2D 6B"><unientity>6183</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 2D 70"><unientity>6171</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 2D 74"><unientity>616A</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 2D 77"><unientity>6173</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 2D 79"><unientity>6164</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 2D 7B"><unientity>6153</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 2E 23"><unientity>618B</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 2E 2C"><unientity>616F</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 2E 2D"><unientity>6165</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 2E 2F"><unientity>615C</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 2E 32"><unientity>619D</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 2E 33"><unientity>61A6</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 2E 3D"><unientity>61A2</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 2E 40"><unientity>61A8</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 2E 42"><unientity>619C</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 2E 43"><unientity>61AF</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 2E 45"><unientity>6196</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 2E 46"><unientity>6197</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 2E 47"><unientity>61AD</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 2E 4C"><unientity>6192</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 2E 52"><unientity>61AE</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 2E 55"><unientity>618D</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 2E 5A"><unientity>61CB</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 2E 5C"><unientity>61CC</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 2E 5D"><unientity>61C6</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 2E 68"><unientity>61BA</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 2E 6A"><unientity>61B8</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 2E 71"><unientity>61E0</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 2E 77"><unientity>61E5</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 2E 7D"><unientity>61DC</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 2E 7E"><unientity>61DF</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 2F 29"><unientity>61F3</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 2F 3D"><unientity>6201</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 2F 41"><unientity>6204</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 2F 43"><unientity>6207</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 2F 44"><unientity>6209</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 2F 47"><unientity>6214</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 2F 56"><unientity>6223</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 2F 5B"><unientity>6225</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 2F 5D"><unientity>6224</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 2F 61"><unientity>6229</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 2F 67"><unientity>622D</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 2F 69"><unientity>97EF</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 2F 6E"><unientity>6239</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 2F 6F"><unientity>623A</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 2F 70"><unientity>623D</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 2F 75"><unientity>6243</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 2F 77"><unientity>6246</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 2F 78"><unientity>6245</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 2F 79"><unientity>624A</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 2F 7A"><unientity>6250</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 2F 7C"><unientity>625E</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 30 26"><unientity>6268</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 30 28"><unientity>6260</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 30 2B"><unientity>625A</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 30 2C"><unientity>6262</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 30 2D"><unientity>6266</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 30 31"><unientity>6286</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 30 32"><unientity>628E</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 30 41"><unientity>62A3</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 30 43"><unientity>6282</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 30 46"><unientity>6285</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 30 4B"><unientity>629D</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 30 56"><unientity>62A6</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 30 57"><unientity>62D1</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 30 61"><unientity>62E4</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 30 69"><unientity>62B6</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 30 6A"><unientity>62C3</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 30 72"><unientity>630D</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 31 25"><unientity>62F5</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 31 31"><unientity>630C</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 31 32"><unientity>6360</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 31 37"><unientity>62F6</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 31 3A"><unientity>6331</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 31 42"><unientity>6345</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 31 44"><unientity>6343</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 31 45"><unientity>6335</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 31 47"><unientity>6353</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 31 48"><unientity>6364</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 31 49"><unientity>6336</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 31 4A"><unientity>6344</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 31 54"><unientity>6339</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 31 58"><unientity>6357</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 31 5A"><unientity>633C</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 31 5B"><unientity>6358</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 31 5C"><unientity>634B</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 31 5F"><unientity>6354</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 31 68"><unientity>637D</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 31 6A"><unientity>63B6</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 31 6B"><unientity>6382</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 31 6C"><unientity>636C</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 31 6E"><unientity>639F</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 31 72"><unientity>639E</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 31 73"><unientity>637F</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 31 79"><unientity>6381</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 31 7B"><unientity>6397</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 31 7D"><unientity>63AB</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 32 25"><unientity>6387</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 32 26"><unientity>637A</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 32 27"><unientity>638E</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 32 2A"><unientity>6386</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 32 2F"><unientity>6375</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 32 30"><unientity>63AF</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 32 37"><unientity>63B1</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 32 38"><unientity>63B0</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 32 39"><unientity>63AE</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 32 3A"><unientity>637C</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 32 3B"><unientity>6390</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 32 3D"><unientity>63AD</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 32 41"><unientity>636D</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 32 43"><unientity>63DE</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 32 44"><unientity>63E5</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 32 47"><unientity>63D3</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 32 4F"><unientity>63BD</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 32 50"><unientity>63C3</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 32 52"><unientity>63F5</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 32 58"><unientity>63E6</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 32 5B"><unientity>63E0</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 32 5C"><unientity>63D5</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 32 5D"><unientity>63F6</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 32 5E"><unientity>63F2</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 32 5F"><unientity>63F8</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 32 66"><unientity>E9E8</unientity><desc>East Asian ideograph not in Unicode</desc></character>
+<character hex="22 32 6A"><unientity>63F9</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 32 70"><unientity>63BE</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 32 72"><unientity>63EB</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 32 73"><unientity>63DD</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 32 76"><unientity>E9E9</unientity><desc>East Asian ideograph not in Unicode</desc></character>
+<character hex="22 32 79"><unientity>63C4</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 32 7A"><unientity>63DC</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 32 7B"><unientity>63D7</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 32 7E"><unientity>6412</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 33 22"><unientity>6410</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 33 24"><unientity>6434</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 33 29"><unientity>641B</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 33 2B"><unientity>6420</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 33 2C"><unientity>6424</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 33 2F"><unientity>6426</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 33 31"><unientity>640C</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 33 36"><unientity>6415</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 33 37"><unientity>6418</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 33 38"><unientity>640E</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 33 39"><unientity>EA03</unientity><desc>East Asian ideography not found in unified han</desc></character>
+<character hex="22 33 3B"><unientity>6422</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 33 3D"><unientity>6421</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 33 44"><unientity>6430</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 33 45"><unientity>6441</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 33 48"><unientity>6435</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 33 4C"><unientity>6409</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 33 51"><unientity>640A</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 33 53"><unientity>6440</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 33 59"><unientity>6407</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 33 5B"><unientity>643B</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 33 5D"><unientity>643F</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 33 68"><unientity>645B</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 33 6A"><unientity>644F</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 33 6C"><unientity>646B</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 33 6F"><unientity>6476</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 33 76"><unientity>6474</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 33 78"><unientity>647D</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 33 7B"><unientity>6473</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 34 23"><unientity>644E</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 34 24"><unientity>6464</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 34 27"><unientity>6482</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 34 28"><unientity>645E</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 34 2C"><unientity>647B</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 34 2E"><unientity>645C</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 34 3C"><unientity>649D</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 34 3F"><unientity>6499</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 34 42"><unientity>648F</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 34 4D"><unientity>6496</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 34 4E"><unientity>64A2</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 34 54"><unientity>6490</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 34 5B"><unientity>64B6</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 34 61"><unientity>6498</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 34 62"><unientity>649F</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 34 65"><unientity>E9EA</unientity><desc>East Asian ideograph not in Unicode</desc></character>
+<character hex="22 34 66"><unientity>64B3</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 34 6A"><unientity>64D7</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 34 6C"><unientity>64D3</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 34 74"><unientity>64BE</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 34 75"><unientity>64D0</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 35 2A"><unientity>64EF</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 35 2D"><unientity>64E1</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 35 2E"><unientity>64E5</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 35 31"><unientity>64EB</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 35 33"><unientity>64E2</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 35 36"><unientity>64ED</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 35 38"><unientity>64E4</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 35 42"><unientity>64F7</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 35 46"><unientity>6504</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 35 4B"><unientity>64FD</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 35 4F"><unientity>6508</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 35 53"><unientity>6509</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 35 59"><unientity>651A</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 35 5B"><unientity>6516</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 35 61"><unientity>651B</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 35 69"><unientity>6527</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 35 6D"><unientity>6522</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 35 6F"><unientity>6529</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 35 72"><unientity>6525</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 35 77"><unientity>652E</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 35 7C"><unientity>6541</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 36 2C"><unientity>6538</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 36 34"><unientity>6542</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 36 36"><unientity>6549</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 36 3E"><unientity>6554</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 36 3F"><unientity>6555</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 36 45"><unientity>6567</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 36 47"><unientity>6561</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 36 4F"><unientity>656D</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 36 54"><unientity>657A</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 36 64"><unientity>6585</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 36 6E"><unientity>658C</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 36 70"><unientity>6592</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 36 71"><unientity>6595</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 36 75"><unientity>659B</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 36 77"><unientity>659D</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 36 7A"><unientity>65A0</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 37 22"><unientity>65A8</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 37 23"><unientity>65A6</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 37 27"><unientity>65AE</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 37 2A"><unientity>65B6</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 37 2C"><unientity>65B8</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 37 2F"><unientity>65BF</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 37 31"><unientity>65C6</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 37 32"><unientity>65C3</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 37 33"><unientity>65C4</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 37 34"><unientity>65C2</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 37 3B"><unientity>65D0</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 37 3C"><unientity>65D2</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 37 44"><unientity>65DB</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 37 45"><unientity>65DC</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 37 47"><unientity>65DD</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 37 48"><unientity>65DF</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 37 4A"><unientity>65E1</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 37 4E"><unientity>65E4</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 37 54"><unientity>65F4</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 37 55"><unientity>65F0</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 37 5A"><unientity>6609</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 37 5B"><unientity>65FB</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 37 5C"><unientity>65FC</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 37 5E"><unientity>660A</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 37 64"><unientity>6603</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 37 6A"><unientity>6611</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 37 6B"><unientity>6615</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 37 6D"><unientity>6604</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 37 6E"><unientity>6631</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 37 72"><unientity>6621</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 37 75"><unientity>662C</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 37 77"><unientity>6635</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 37 7C"><unientity>661E</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 37 7D"><unientity>663A</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 38 27"><unientity>6633</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 38 28"><unientity>662B</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 38 2B"><unientity>6634</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 38 2C"><unientity>6624</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 38 31"><unientity>6645</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 38 32"><unientity>665F</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 38 3D"><unientity>6665</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 38 3E"><unientity>665C</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 38 3F"><unientity>6661</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 38 48"><unientity>665B</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 38 49"><unientity>6659</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 38 4A"><unientity>6667</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 38 4C"><unientity>665E</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 38 4D"><unientity>6657</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 38 50"><unientity>667E</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 38 51"><unientity>666C</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 38 5A"><unientity>6678</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 38 60"><unientity>6673</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 38 66"><unientity>666D</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 38 68"><unientity>6677</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 38 70"><unientity>6684</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 38 71"><unientity>668C</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 38 72"><unientity>6693</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 38 75"><unientity>668B</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 38 76"><unientity>6690</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 38 79"><unientity>6694</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 38 7A"><unientity>668A</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 38 7C"><unientity>6698</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 38 7D"><unientity>668D</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 39 24"><unientity>7A25</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 39 2A"><unientity>66A0</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 39 30"><unientity>5C21</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 39 32"><unientity>669D</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 39 3A"><unientity>66B2</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 39 40"><unientity>66B5</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 39 41"><unientity>66AA</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 39 43"><unientity>66AC</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 39 47"><unientity>66B1</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 39 4E"><unientity>66C8</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 39 4F"><unientity>66BE</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 39 54"><unientity>66C0</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 39 55"><unientity>66C7</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 39 5A"><unientity>66BB</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 39 5C"><unientity>66C4</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 39 60"><unientity>66CF</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 39 71"><unientity>66DA</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 39 72"><unientity>66DB</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 39 73"><unientity>66E2</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 39 76"><unientity>66E1</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 39 78"><unientity>66E8</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 39 7C"><unientity>66E9</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 3A 28"><unientity>6705</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 3A 30"><unientity>670F</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 3A 31"><unientity>6710</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 3A 33"><unientity>6712</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 3A 34"><unientity>6713</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 3A 38"><unientity>6719</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 3A 39"><unientity>6718</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 3A 47"><unientity>6723</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 3A 4C"><unientity>673E</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 3A 4E"><unientity>673F</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 3A 58"><unientity>6757</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 3A 5B"><unientity>6745</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 3A 5C"><unientity>6747</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 3A 60"><unientity>675D</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 3A 61"><unientity>6755</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 3A 66"><unientity>674C</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 3A 67"><unientity>6759</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 3A 68"><unientity>6748</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 3A 6B"><unientity>6763</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 3A 6E"><unientity>6753</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 3A 71"><unientity>674A</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 3A 75"><unientity>6793</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 3A 78"><unientity>677C</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 3A 7A"><unientity>679F</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 3A 7C"><unientity>6785</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 3B 21"><unientity>677B</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 3B 22"><unientity>6792</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 3B 23"><unientity>6776</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 3B 25"><unientity>6791</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 3B 26"><unientity>6799</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 3B 28"><unientity>67A4</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 3B 2E"><unientity>678F</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 3B 30"><unientity>6772</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 3B 31"><unientity>E963</unientity><unientityalt>6798</unientityalt><desc>Variant of 4C3B31 which maps to 6798</desc></character>
+<character hex="22 3B 32"><unientity>676A</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 3B 39"><unientity>67AC</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 3B 3B"><unientity>67A0</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 3B 3F"><unientity>67A1</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 3B 44"><unientity>67F9</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 3B 48"><unientity>678D</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 3B 49"><unientity>678C</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 3B 4C"><unientity>67FC</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 3B 4E"><unientity>6810</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 3B 51"><unientity>67C8</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 3B 54"><unientity>67CC</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 3B 58"><unientity>67C5</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 3B 5C"><unientity>67BB</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 3B 5F"><unientity>67B0</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 3B 60"><unientity>6803</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 3B 61"><unientity>67F8</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 3B 63"><unientity>67D8</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 3B 64"><unientity>67B7</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 3B 6D"><unientity>6802</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 3B 6F"><unientity>67E4</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 3B 70"><unientity>67D9</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 3B 71"><unientity>67DB</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 3B 72"><unientity>67B5</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 3B 74"><unientity>67DF</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 3B 75"><unientity>67F7</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 3B 77"><unientity>67B3</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 3B 78"><unientity>6806</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 3B 79"><unientity>67AE</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 3B 7A"><unientity>67F6</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 3B 7C"><unientity>67EE</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 3B 7D"><unientity>6AAF</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 3B 7E"><unientity>67B2</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 3C 21"><unientity>67B9</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 3C 23"><unientity>67C2</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 3C 24"><unientity>67E3</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 3C 26"><unientity>67CA</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 3C 28"><unientity>67CE</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 3C 29"><unientity>67E2</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 3C 2A"><unientity>67F2</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 3C 2B"><unientity>67C3</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 3C 2D"><unientity>67DD</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 3C 2F"><unientity>67E7</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 3C 30"><unientity>6849</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 3C 31"><unientity>683E</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 3C 36"><unientity>6814</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 3C 37"><unientity>684B</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 3C 38"><unientity>681E</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 3C 3B"><unientity>6833</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 3C 40"><unientity>6831</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 3C 41"><unientity>6832</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 3C 42"><unientity>6835</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 3C 43"><unientity>683B</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 3C 44"><unientity>684E</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 3C 47"><unientity>682B</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 3C 48"><unientity>682D</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 3C 4A"><unientity>684D</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 3C 4F"><unientity>6844</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 3C 55"><unientity>685D</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 3C 56"><unientity>685E</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 3C 58"><unientity>6834</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 3C 59"><unientity>6812</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 3C 65"><unientity>685A</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 3C 68"><unientity>686B</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 3C 69"><unientity>686C</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 3C 6B"><unientity>6879</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 3C 6E"><unientity>68B2</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 3C 71"><unientity>689B</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 3C 72"><unientity>687E</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 3C 74"><unientity>68B6</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 3C 76"><unientity>6882</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 3C 7A"><unientity>6890</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 3D 21"><unientity>6872</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 3D 22"><unientity>689C</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 3D 25"><unientity>686D</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 3D 2E"><unientity>68A9</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 3D 30"><unientity>6898</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 3D 32"><unientity>688B</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 3D 33"><unientity>68A0</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 3D 34"><unientity>686F</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 3D 39"><unientity>68A3</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 3D 3B"><unientity>6874</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 3D 3C"><unientity>6875</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 3D 3F"><unientity>6877</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 3D 40"><unientity>688F</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 3D 43"><unientity>687B</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 3D 44"><unientity>688E</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 3D 4B"><unientity>68B4</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 3D 50"><unientity>692C</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 3D 51"><unientity>6917</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 3D 53"><unientity>690C</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 3D 56"><unientity>690B</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 3D 58"><unientity>68D3</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 3D 59"><unientity>6904</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 3D 5B"><unientity>690A</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 3D 5C"><unientity>6909</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 3D 5D"><unientity>6929</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 3D 62"><unientity>68EC</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 3D 63"><unientity>692A</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 3D 64"><unientity>68EA</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 3D 65"><unientity>681F</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 3D 66"><unientity>7439</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 3D 6A"><unientity>6910</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 3D 6E"><unientity>68D6</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 3D 6F"><unientity>68EB</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 3D 73"><unientity>68F1</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 3D 78"><unientity>68FD</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 3D 79"><unientity>68FC</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 3D 7B"><unientity>68F3</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 3D 7C"><unientity>6913</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 3E 21"><unientity>6907</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 3E 23"><unientity>691A</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 3E 24"><unientity>6919</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 3E 2A"><unientity>68DE</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 3E 2B"><unientity>691B</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 3E 2D"><unientity>68FB</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 3E 33"><unientity>68E1</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 3E 37"><unientity>68D1</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 3E 38"><unientity>68D0</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 3E 39"><unientity>6908</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 3E 3E"><unientity>68E8</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 3E 3F"><unientity>68F0</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 3E 40"><unientity>68C3</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 3E 44"><unientity>6911</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 3E 46"><unientity>68D4</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 3E 47"><unientity>68EF</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 3E 49"><unientity>68C6</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 3E 4B"><unientity>68C7</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 3E 53"><unientity>6974</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 3E 55"><unientity>6938</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 3E 58"><unientity>6962</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 3E 5D"><unientity>6958</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 3E 5F"><unientity>6957</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 3E 60"><unientity>693F</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 3E 61"><unientity>6971</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 3E 64"><unientity>6945</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 3E 65"><unientity>695D</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 3E 66"><unientity>6932</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 3E 69"><unientity>696E</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 3E 6A"><unientity>6963</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 3E 6B"><unientity>6948</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 3E 6E"><unientity>6939</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 3E 70"><unientity>696A</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 3E 73"><unientity>6937</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 3E 7A"><unientity>696C</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 3E 7B"><unientity>694E</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 3E 7D"><unientity>6980</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 3E 7E"><unientity>6933</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 3F 21"><unientity>6952</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 3F 25"><unientity>695B</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 3F 2D"><unientity>6985</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 3F 32"><unientity>693D</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 3F 35"><unientity>6978</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 3F 37"><unientity>697B</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 3F 3A"><unientity>6934</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 3F 3B"><unientity>6969</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 3F 3D"><unientity>6944</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 3F 3E"><unientity>696F</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 3F 44"><unientity>698A</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 3F 45"><unientity>69A0</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 3F 46"><unientity>69B1</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 3F 50"><unientity>69CE</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 3F 51"><unientity>69CA</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 3F 59"><unientity>698D</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 3F 5A"><unientity>6991</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 3F 5C"><unientity>69AA</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 3F 60"><unientity>69BC</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 3F 61"><unientity>69A7</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 3F 65"><unientity>699E</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 3F 68"><unientity>69D9</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 3F 6A"><unientity>698E</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 3F 6D"><unientity>69D6</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 3F 75"><unientity>69A5</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 3F 77"><unientity>69BE</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 3F 78"><unientity>69D1</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 3F 7A"><unientity>69F6</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 3F 7E"><unientity>69D5</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 40 27"><unientity>69BF</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 40 2D"><unientity>69A3</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 40 2E"><unientity>69A4</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 40 34"><unientity>69D4</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 40 38"><unientity>69C3</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 40 3D"><unientity>6A12</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 40 3E"><unientity>6A11</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 40 41"><unientity>6A00</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 40 46"><unientity>69E6</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 40 4B"><unientity>6A0B</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 40 4C"><unientity>69E5</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 40 4D"><unientity>69E9</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 40 50"><unientity>69FC</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 40 54"><unientity>6A17</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 40 56"><unientity>69E7</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 40 57"><unientity>69EB</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 40 5B"><unientity>69F1</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 40 5E"><unientity>6A2B</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 40 5F"><unientity>69FF</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 40 60"><unientity>6A20</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 40 64"><unientity>69ED</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 40 67"><unientity>6A1B</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 40 68"><unientity>6A2D</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 40 6E"><unientity>6A18</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 40 72"><unientity>6A1D</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 40 75"><unientity>6A0C</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 40 76"><unientity>6A0F</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 40 7C"><unientity>69EE</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 41 23"><unientity>69F0</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 41 24"><unientity>69F2</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 41 28"><unientity>6A14</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 41 29"><unientity>6A63</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 41 37"><unientity>6A67</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 41 39"><unientity>6A43</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 41 3A"><unientity>6A33</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 41 3B"><unientity>6A32</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 41 3C"><unientity>6A5A</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 41 3F"><unientity>6A28</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 41 40"><unientity>6A48</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 41 41"><unientity>6A50</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 41 42"><unientity>6A52</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 41 43"><unientity>6A72</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 41 45"><unientity>6A3E</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 41 46"><unientity>6A77</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 41 47"><unientity>6A5B</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 41 4A"><unientity>6A5E</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 41 4B"><unientity>6A5C</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 41 4F"><unientity>6A51</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 41 51"><unientity>6A56</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 41 53"><unientity>6A36</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 41 56"><unientity>6A7A</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 41 58"><unientity>6A3F</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 41 6C"><unientity>69F9</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 41 6D"><unientity>6A64</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 41 73"><unientity>6A8D</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 41 75"><unientity>6AA8</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 41 77"><unientity>6AA5</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 41 79"><unientity>6A96</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 41 7E"><unientity>6A7D</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 42 22"><unientity>6A7F</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 42 23"><unientity>6A89</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 42 24"><unientity>6A91</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 42 26"><unientity>6A9F</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 42 2A"><unientity>6A92</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 42 2B"><unientity>6AA3</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 42 34"><unientity>6A99</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 42 35"><unientity>6A9D</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 42 36"><unientity>6A7E</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 42 37"><unientity>6A9B</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 42 42"><unientity>6AA0</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 42 47"><unientity>6A90</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 42 49"><unientity>6A9E</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 42 4A"><unientity>6A87</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 42 4B"><unientity>6A8E</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 42 51"><unientity>6AAB</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 42 55"><unientity>6AC8</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 42 57"><unientity>6AAE</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 42 5D"><unientity>6ABF</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 42 64"><unientity>6ACA</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 42 68"><unientity>6AB4</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 42 79"><unientity>6AE6</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 42 7E"><unientity>6AED</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 43 25"><unientity>6ACC</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 43 28"><unientity>6AD1</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 43 33"><unientity>6ADF</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 43 34"><unientity>6ACD</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 43 35"><unientity>6ADE</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 43 37"><unientity>6AEC</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 43 39"><unientity>6AF3</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 43 3A"><unientity>6AE7</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 43 3F"><unientity>6AEB</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 43 40"><unientity>6AEA</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 43 44"><unientity>6AF1</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 43 45"><unientity>6AE8</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 43 48"><unientity>6AF5</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 43 4E"><unientity>6AFD</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 43 50"><unientity>6AFA</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 43 52"><unientity>6B01</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 43 58"><unientity>6B03</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 43 59"><unientity>6AF8</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 43 5F"><unientity>6B0D</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 43 60"><unientity>6B09</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 43 61"><unientity>6B0E</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 43 67"><unientity>6B11</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 43 6D"><unientity>6B19</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 43 6E"><unientity>6B17</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 43 72"><unientity>6B1E</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 43 7E"><unientity>6B2C</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 44 2A"><unientity>6B35</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 44 2C"><unientity>6B37</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 44 2D"><unientity>6B3B</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 44 32"><unientity>6B39</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 44 35"><unientity>6B3F</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 44 37"><unientity>6B46</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 44 38"><unientity>6B41</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 44 3A"><unientity>6B40</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 44 3B"><unientity>6B42</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 44 3C"><unientity>6B43</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 44 3E"><unientity>6B48</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 44 3F"><unientity>6B4A</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 44 46"><unientity>E964</unientity><unientityalt>6B4E</unientityalt><desc>Variant of 4C4446 which maps to 6B4E</desc></character>
+<character hex="22 44 4A"><unientity>6B57</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 44 4C"><unientity>6B54</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 44 4E"><unientity>6B55</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 44 51"><unientity>6B5C</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 44 53"><unientity>6B5E</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 44 54"><unientity>6B60</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 44 5B"><unientity>6B6B</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 44 5D"><unientity>6B6C</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 44 5F"><unientity>6B6E</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 44 61"><unientity>6B71</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 44 6B"><unientity>6B7E</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 44 71"><unientity>6B82</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 44 73"><unientity>6B84</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 44 79"><unientity>6B8D</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 44 7B"><unientity>6B95</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 45 25"><unientity>6B99</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 45 29"><unientity>6B9B</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 45 35"><unientity>6BA3</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 45 36"><unientity>6BA2</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 45 38"><unientity>6BAA</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 45 39"><unientity>6BAB</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 45 3B"><unientity>6BAD</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 45 3D"><unientity>6BB0</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 45 3F"><unientity>6BB3</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 45 47"><unientity>6BBD</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 45 4D"><unientity>6996</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 45 54"><unientity>6BC8</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 45 5B"><unientity>6BD6</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 45 60"><unientity>6BDA</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 45 62"><unientity>6BDC</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 45 63"><unientity>6BDD</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 45 65"><unientity>6BDF</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 45 6F"><unientity>6BE7</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 45 70"><unientity>6BEA</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 45 71"><unientity>6BE8</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 46 2A"><unientity>6BF6</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 46 2C"><unientity>6BF3</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 46 33"><unientity>6BF8</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 46 37"><unientity>6BFA</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 46 38"><unientity>6BF9</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 46 42"><unientity>6BFF</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 46 44"><unientity>6C06</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 46 48"><unientity>6C04</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 46 4A"><unientity>6C05</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 46 4C"><unientity>6C08</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 46 51"><unientity>6C0C</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 46 52"><unientity>6C0D</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 46 59"><unientity>6C15</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 46 5A"><unientity>6C18</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 46 5B"><unientity>6C19</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 46 5C"><unientity>6C1A</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 46 5E"><unientity>6C1D</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 46 60"><unientity>6C20</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 46 62"><unientity>6C21</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 46 64"><unientity>6C2A</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 46 66"><unientity>6C2D</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 46 67"><unientity>6C30</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 46 68"><unientity>6C2C</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 46 69"><unientity>E9EB</unientity><desc>East Asian ideograph not in Unicode</desc></character>
+<character hex="22 46 70"><unientity>6C3B</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 46 74"><unientity>6C3F</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 46 78"><unientity>6C46</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 46 7A"><unientity>6C52</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 46 7B"><unientity>6C62</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 46 7C"><unientity>6C4A</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 47 24"><unientity>6C5C</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 47 26"><unientity>6C5B</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 47 27"><unientity>6C4D</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 47 2B"><unientity>6C4B</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 47 2C"><unientity>6C54</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 47 2D"><unientity>6C63</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 47 30"><unientity>6C78</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 47 31"><unientity>6C74</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 47 32"><unientity>6C86</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 47 33"><unientity>6C76</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 47 38"><unientity>6C6C</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 47 39"><unientity>6C67</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 47 3B"><unientity>6C84</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 47 3E"><unientity>6C94</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 47 40"><unientity>6C8F</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 47 42"><unientity>6C65</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 47 47"><unientity>6C6F</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 47 49"><unientity>6C9D</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 47 4A"><unientity>6C69</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 47 4B"><unientity>6C9A</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 47 4C"><unientity>6C6D</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 47 4D"><unientity>6C93</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 47 51"><unientity>6C87</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 47 52"><unientity>6C6E</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 47 56"><unientity>6C95</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 47 5A"><unientity>6C82</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 47 5C"><unientity>6CA0</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 47 62"><unientity>6CEB</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 47 63"><unientity>6CEE</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 47 64"><unientity>6CC0</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 47 66"><unientity>6CEF</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 47 67"><unientity>6CAC</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 47 6E"><unientity>E965</unientity><unientityalt>6CAD</unientityalt><desc>Variant of 4C476E which maps to 6CAD</desc></character>
+<character hex="22 47 70"><unientity>6CAF</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 47 72"><unientity>6CF5</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 47 7A"><unientity>6CBA</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 47 7B"><unientity>7553</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 47 7D"><unientity>6CC2</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 48 24"><unientity>6CD8</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 48 26"><unientity>6CC6</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 48 28"><unientity>6CCE</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 48 29"><unientity>6CE9</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 48 2D"><unientity>6CF2</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 48 2F"><unientity>6CE0</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 48 30"><unientity>6CD1</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 48 32"><unientity>6CD2</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 48 33"><unientity>6CB4</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 48 37"><unientity>6D1D</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 48 3B"><unientity>6D28</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 48 44"><unientity>6D39</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 48 4D"><unientity>6D26</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 48 4E"><unientity>6D27</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 48 4F"><unientity>6D0F</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 48 50"><unientity>6D0A</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 48 51"><unientity>6D3F</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 48 5A"><unientity>6D07</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 48 5B"><unientity>6D04</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 48 5C"><unientity>6CDA</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 48 60"><unientity>6D2E</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 48 61"><unientity>6D35</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 48 62"><unientity>6D3A</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 48 64"><unientity>6D19</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 48 67"><unientity>6D0E</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 48 6A"><unientity>6D2B</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 48 6B"><unientity>6D11</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 48 6C"><unientity>6D00</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 48 6D"><unientity>6D24</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 48 6F"><unientity>6D33</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 48 73"><unientity>6D63</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 48 77"><unientity>6DA5</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 48 7D"><unientity>6D92</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 49 25"><unientity>6D6D</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 49 26"><unientity>6D6F</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 49 28"><unientity>6D61</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 49 29"><unientity>6D91</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 49 2C"><unientity>6D81</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 49 2E"><unientity>6D8A</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 49 2F"><unientity>E966</unientity><unientityalt>6D34</unientityalt><desc>Variant of 34492F which maps to 6D34</desc></character>
+<character hex="22 49 34"><unientity>6D79</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 49 35"><unientity>6DEF</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 49 39"><unientity>6D7F</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 49 3B"><unientity>6D85</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 49 3C"><unientity>6D65</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 49 3E"><unientity>6D5E</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 49 40"><unientity>6D67</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 49 43"><unientity>6D94</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 49 46"><unientity>6D60</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 49 48"><unientity>6D98</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 49 4B"><unientity>6D7C</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 49 4C"><unientity>6D70</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 49 4F"><unientity>6D96</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 49 59"><unientity>6DAB</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 49 5A"><unientity>6DB4</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 49 5C"><unientity>6DAA</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 49 60"><unientity>6DEC</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 49 6A"><unientity>6DAC</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 49 6B"><unientity>6DB7</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 49 6C"><unientity>6DE2</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 49 6D"><unientity>6DD5</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 49 6E"><unientity>6DE9</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 49 71"><unientity>6DF6</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 49 79"><unientity>6E0F</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 49 7B"><unientity>6DBF</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 4A 2A"><unientity>6DDF</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 4A 2D"><unientity>6DD3</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 4A 32"><unientity>6DFC</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 4A 35"><unientity>6DDD</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 4A 36"><unientity>6DDC</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 4A 39"><unientity>6DDB</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 4A 3D"><unientity>6DA4</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 4A 44"><unientity>6E12</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 4A 46"><unientity>6DF0</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 4A 4A"><unientity>6DE6</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 4A 4C"><unientity>6E1F</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 4A 50"><unientity>6E27</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 4A 55"><unientity>6E49</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 4A 58"><unientity>6E3C</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 4A 60"><unientity>6E8A</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 4A 62"><unientity>6E4B</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 4A 66"><unientity>6E62</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 4A 6A"><unientity>6E51</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 4A 6B"><unientity>6E44</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 4A 6D"><unientity>6E63</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 4A 71"><unientity>6E73</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 4A 74"><unientity>6E4F</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 4A 77"><unientity>6E4E</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 4B 22"><unientity>6E28</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 4B 24"><unientity>6E5C</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 4B 26"><unientity>6E31</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 4B 28"><unientity>6E5E</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 4B 2C"><unientity>6E84</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 4B 2E"><unientity>6E2E</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 4B 30"><unientity>6E36</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 4B 31"><unientity>6E5D</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 4B 32"><unientity>6E72</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 4B 33"><unientity>6E30</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 4B 34"><unientity>6E53</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 4B 36"><unientity>6E39</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 4B 37"><unientity>6E71</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 4B 38"><unientity>6E69</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 4B 39"><unientity>6E6B</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 4B 3B"><unientity>6E8B</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 4B 3E"><unientity>6E76</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 4B 40"><unientity>6E2A</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 4B 41"><unientity>6E4C</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 4B 42"><unientity>6E22</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 4B 43"><unientity>6ECE</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 4B 45"><unientity>6E9B</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 4B 46"><unientity>6E9F</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 4B 48"><unientity>6EC8</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 4B 49"><unientity>6ED8</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 4B 4A"><unientity>6E8F</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 4B 4D"><unientity>6E93</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 4B 4F"><unientity>6EA0</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 4B 51"><unientity>6EB1</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 4B 57"><unientity>6EA8</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 4B 59"><unientity>6E92</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 4B 5A"><unientity>6EA7</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 4B 5E"><unientity>6E8E</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 4B 60"><unientity>6ED9</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 4B 61"><unientity>6EBD</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 4B 63"><unientity>6EC1</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 4B 69"><unientity>6EBB</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 4B 6A"><unientity>6EC9</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 4B 6C"><unientity>6EB3</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 4B 6D"><unientity>6EB7</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 4B 75"><unientity>6EA4</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 4B 79"><unientity>6ECF</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 4B 7C"><unientity>6ECA</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 4B 7D"><unientity>6ED5</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 4C 21"><unientity>6EC3</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 4C 24"><unientity>6EB4</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 4C 26"><unientity>6EB2</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 4C 29"><unientity>6EB5</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 4C 2E"><unientity>6EF8</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 4C 30"><unientity>6F37</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 4C 34"><unientity>6EFD</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 4C 35"><unientity>6F09</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 4C 3C"><unientity>6F3B</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 4C 3D"><unientity>6F63</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 4C 3E"><unientity>6F12</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 4C 3F"><unientity>6F26</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 4C 41"><unientity>6F1A</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 4C 42"><unientity>6EF6</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 4C 43"><unientity>6F19</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 4C 44"><unientity>6F00</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 4C 4B"><unientity>6F24</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 4C 51"><unientity>6F18</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 4C 57"><unientity>6F1F</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 4C 5A"><unientity>6F0A</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 4C 5E"><unientity>6F36</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 4C 60"><unientity>6EF9</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 4C 61"><unientity>6EEE</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 4C 62"><unientity>6F41</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 4C 64"><unientity>6F95</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 4C 65"><unientity>6F2D</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 4C 67"><unientity>6F34</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 4C 6B"><unientity>6F49</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 4C 6D"><unientity>6F30</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 4C 76"><unientity>6EFA</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 4C 77"><unientity>6EEB</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 4C 78"><unientity>6F08</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 4C 79"><unientity>6F0E</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 4C 7B"><unientity>6F35</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 4D 23"><unientity>6F7E</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 4D 24"><unientity>6F9D</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 4D 27"><unientity>6F87</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 4D 2B"><unientity>6F6F</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 4D 2F"><unientity>6F5A</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 4D 30"><unientity>6F60</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 4D 35"><unientity>6F90</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 4D 37"><unientity>6F8D</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 4D 39"><unientity>6F92</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 4D 3A"><unientity>6F89</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 4D 3C"><unientity>6F8C</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 4D 3D"><unientity>E967</unientity><unientityalt>6F62</unientityalt><desc>Variant of 4C4D3D which maps to 6F62</desc></character>
+<character hex="22 4D 44"><unientity>6F0B</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 4D 4B"><unientity>6F6C</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 4D 4D"><unientity>6F8B</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 4D 58"><unientity>6E88</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 4D 5A"><unientity>6F55</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 4D 5F"><unientity>6F72</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 4D 62"><unientity>6F57</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 4D 63"><unientity>6F5F</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 4D 68"><unientity>6F5D</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 4D 73"><unientity>6FB6</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 4D 74"><unientity>6F9F</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 4D 79"><unientity>6FA6</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 4D 7C"><unientity>6FC6</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 4D 7D"><unientity>6FBC</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 4E 21"><unientity>6FAA</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 4E 25"><unientity>6FBF</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 4E 26"><unientity>6FC7</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 4E 2D"><unientity>6FC9</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 4E 2E"><unientity>6F5E</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 4E 2F"><unientity>6FC8</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 4E 30"><unientity>6FA0</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 4E 32"><unientity>6FCA</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 4E 35"><unientity>6FB4</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 4E 37"><unientity>6FAF</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 4E 3C"><unientity>6FA8</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 4E 40"><unientity>6FA5</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 4E 41"><unientity>6FB0</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 4E 42"><unientity>6FAE</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 4E 43"><unientity>6FD9</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 4E 44"><unientity>6FDA</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 4E 50"><unientity>6FD4</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 4E 56"><unientity>6FE9</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 4E 57"><unientity>6FF8</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 4E 5D"><unientity>6FDE</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 4E 5E"><unientity>6FEE</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 4E 62"><unientity>6FF0</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 4E 66"><unientity>7005</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 4E 67"><unientity>700C</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 4E 6A"><unientity>700D</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 4E 72"><unientity>7026</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 4F 24"><unientity>7020</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 4F 26"><unientity>7027</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 4F 2B"><unientity>E968</unientity><unientityalt>701E</unientityalt><desc>Variant of 4C4F2B which maps to 701E</desc></character>
+<character hex="22 4F 2F"><unientity>702E</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 4F 31"><unientity>702D</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 4F 35"><unientity>7021</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 4F 39"><unientity>7018</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 4F 3A"><unientity>7023</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 4F 41"><unientity>703C</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 4F 44"><unientity>7035</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 4F 51"><unientity>7034</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 4F 53"><unientity>7039</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 4F 54"><unientity>703A</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 4F 5D"><unientity>7043</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 4F 61"><unientity>7044</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 4F 67"><unientity>7047</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 4F 69"><unientity>7049</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 4F 6B"><unientity>7055</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 4F 71"><unientity>7052</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 4F 73"><unientity>705C</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 4F 78"><unientity>7059</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 4F 7B"><unientity>705E</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 4F 7C"><unientity>7061</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 4F 7D"><unientity>705D</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 50 21"><unientity>9E02</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 50 25"><unientity>7066</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 50 27"><unientity>7065</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 50 28"><unientity>7068</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 50 29"><unientity>7054</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 50 39"><unientity>7074</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 50 3B"><unientity>707A</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 50 40"><unientity>7093</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 50 42"><unientity>7086</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 50 48"><unientity>E9EC</unientity><desc>East Asian ideograph not in Unicode</desc></character>
+<character hex="22 50 49"><unientity>7084</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 50 4A"><unientity>7081</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 50 56"><unientity>7088</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 50 57"><unientity>7098</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 50 59"><unientity>708C</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 50 5C"><unientity>70B7</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 50 62"><unientity>70A1</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 50 63"><unientity>70A3</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 50 68"><unientity>7551</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 50 6F"><unientity>70A7</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 50 70"><unientity>79CC</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 50 71"><unientity>70B5</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 50 72"><unientity>70BF</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 50 73"><unientity>70A9</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 50 78"><unientity>70EA</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 50 7B"><unientity>70E5</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 50 7C"><unientity>70DC</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 50 7D"><unientity>70D3</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 51 22"><unientity>70DD</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 51 23"><unientity>70E1</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 51 26"><unientity>70E3</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 51 28"><unientity>70E0</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 51 2B"><unientity>70D4</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 51 2E"><unientity>70D1</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 51 38"><unientity>70CB</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 51 3A"><unientity>70D0</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 51 3B"><unientity>70C7</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 51 3C"><unientity>70DA</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 51 3D"><unientity>70C6</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 51 3F"><unientity>70FA</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 51 42"><unientity>70F7</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 51 44"><unientity>7104</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 51 48"><unientity>70F3</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 51 4A"><unientity>7110</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 51 4C"><unientity>7103</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 51 50"><unientity>70F4</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 51 55"><unientity>7111</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 51 56"><unientity>7112</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 51 5C"><unientity>710C</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 51 60"><unientity>70F6</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 51 66"><unientity>7113</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 51 67"><unientity>70EF</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 51 68"><unientity>7100</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 51 6C"><unientity>711E</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 51 6D"><unientity>7134</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 51 6E"><unientity>7120</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 51 6F"><unientity>713F</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 51 74"><unientity>7131</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 51 75"><unientity>712D</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 52 27"><unientity>7139</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 52 28"><unientity>7135</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 52 2C"><unientity>713B</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 52 2E"><unientity>711C</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 52 32"><unientity>713D</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 52 35"><unientity>712F</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 52 3B"><unientity>7129</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 52 43"><unientity>712E</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 52 48"><unientity>7177</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 52 51"><unientity>7146</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 52 52"><unientity>7152</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 52 54"><unientity>714F</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 52 55"><unientity>715D</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 52 56"><unientity>7141</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 52 57"><unientity>7160</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 52 59"><unientity>7175</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 52 5A"><unientity>7173</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 52 5C"><unientity>7143</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 52 5D"><unientity>715A</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 52 5E"><unientity>7176</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 52 60"><unientity>714B</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 52 62"><unientity>7147</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 52 65"><unientity>7168</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 52 66"><unientity>7171</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 52 67"><unientity>715F</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 52 69"><unientity>7150</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 52 6B"><unientity>7153</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 52 70"><unientity>7144</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 52 76"><unientity>7172</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 52 78"><unientity>7178</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 52 7B"><unientity>7187</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 52 7C"><unientity>717B</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 53 23"><unientity>7192</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 53 2B"><unientity>7180</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 53 2C"><unientity>7189</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 53 32"><unientity>7185</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 53 33"><unientity>7196</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 53 36"><unientity>717C</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 53 39"><unientity>7198</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 53 3C"><unientity>7197</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 53 3E"><unientity>71B5</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 53 3F"><unientity>71A9</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 53 42"><unientity>71A5</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 53 46"><unientity>719E</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 53 47"><unientity>71B2</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 53 4A"><unientity>719B</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 53 4E"><unientity>71AF</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 53 51"><unientity>71A4</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 53 52"><unientity>71A0</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 53 55"><unientity>719A</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 53 57"><unientity>71B3</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 53 59"><unientity>71B4</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 53 67"><unientity>71D1</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 53 69"><unientity>71C7</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 53 6A"><unientity>71B7</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 53 6D"><unientity>71CA</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 53 6F"><unientity>71CF</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 53 70"><unientity>71D6</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 53 72"><unientity>71BA</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 53 75"><unientity>71C2</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 53 77"><unientity>71C5</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 53 7A"><unientity>71BF</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 53 7C"><unientity>71B8</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 54 21"><unientity>71DD</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 54 22"><unientity>71C0</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 54 24"><unientity>71C1</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 54 26"><unientity>71D4</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 54 29"><unientity>71CB</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 54 2A"><unientity>71DE</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 54 32"><unientity>71EB</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 54 36"><unientity>71E8</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 54 3A"><unientity>71F5</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 54 3D"><unientity>71F3</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 54 3F"><unientity>71E1</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 54 47"><unientity>71E0</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 54 4B"><unientity>720C</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 54 4F"><unientity>71FC</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 54 56"><unientity>71F9</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 54 5B"><unientity>720E</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 54 5C"><unientity>5911</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 54 5E"><unientity>720A</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 54 60"><unientity>7217</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 54 61"><unientity>7207</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 54 66"><unientity>7215</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 54 69"><unientity>7213</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 54 6E"><unientity>7218</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 54 71"><unientity>720B</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 54 79"><unientity>721A</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 54 7D"><unientity>721F</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 55 21"><unientity>721D</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 55 29"><unientity>7225</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 55 2A"><unientity>7226</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 55 41"><unientity>723F</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 55 43"><unientity>7241</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 55 44"><unientity>7242</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 55 4F"><unientity>7250</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 55 51"><unientity>724F</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 55 52"><unientity>7253</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 55 53"><unientity>7255</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 55 56"><unientity>725A</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 55 59"><unientity>7263</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 55 61"><unientity>7273</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 55 63"><unientity>726E</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 55 66"><unientity>7276</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 55 68"><unientity>7277</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 55 6B"><unientity>727E</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 55 6D"><unientity>727C</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 55 71"><unientity>727F</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 55 74"><unientity>7289</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 55 7C"><unientity>728B</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 56 22"><unientity>728D</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 56 28"><unientity>728F</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 56 48"><unientity>72A8</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 56 4C"><unientity>72AB</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 56 4E"><unientity>72B0</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 56 4F"><unientity>72B4</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 56 51"><unientity>72C6</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 56 52"><unientity>72B5</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 56 56"><unientity>72BC</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 56 58"><unientity>72C3</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 56 5B"><unientity>72C1</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 56 60"><unientity>72D6</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 56 64"><unientity>72D2</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 56 67"><unientity>72C9</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 56 6C"><unientity>72CC</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 56 6E"><unientity>72DB</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 56 6F"><unientity>72CD</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 56 73"><unientity>72E8</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 56 76"><unientity>72EB</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 56 79"><unientity>72E5</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 56 7E"><unientity>72FA</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 57 24"><unientity>72F4</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 57 25"><unientity>72FE</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 57 29"><unientity>7302</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 57 2C"><unientity>72FB</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 57 2D"><unientity>7301</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 57 2E"><unientity>72F3</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 57 31"><unientity>731D</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 57 35"><unientity>730B</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 57 36"><unientity>7317</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 57 3B"><unientity>7307</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 57 3E"><unientity>7318</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 57 42"><unientity>731E</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 57 46"><unientity>7331</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 57 49"><unientity>7338</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 57 4A"><unientity>7322</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 57 4C"><unientity>7332</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 57 4D"><unientity>732C</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 57 4E"><unientity>7327</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 57 4F"><unientity>732B</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 57 52"><unientity>732F</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 57 55"><unientity>7328</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 57 5A"><unientity>7347</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 57 5B"><unientity>7348</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 57 5C"><unientity>7349</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 57 5F"><unientity>733B</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 57 62"><unientity>733A</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 57 65"><unientity>7340</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 57 68"><unientity>734D</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 57 6B"><unientity>7352</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 57 72"><unientity>735E</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 57 74"><unientity>735D</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 57 79"><unientity>7360</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 57 7B"><unientity>7358</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 57 7E"><unientity>7362</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 58 21"><unientity>734B</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 58 25"><unientity>7367</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 58 29"><unientity>736C</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 58 2B"><unientity>736B</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 58 2F"><unientity>736F</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 58 36"><unientity>737C</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 58 38"><unientity>737E</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 58 3B"><unientity>7381</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 58 3F"><unientity>7388</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 58 42"><unientity>738E</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 58 46"><unientity>7395</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 58 47"><unientity>7392</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 58 48"><unientity>7397</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 58 4C"><unientity>7393</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 58 4D"><unientity>7394</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 58 51"><unientity>739E</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 58 52"><unientity>73A6</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 58 5D"><unientity>73A5</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 58 62"><unientity>73A2</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 58 63"><unientity>73A0</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 58 67"><unientity>73B6</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 58 68"><unientity>73CF</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 58 6A"><unientity>73C2</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 58 6B"><unientity>73D0</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 58 6F"><unientity>73BF</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 58 70"><unientity>73C8</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 58 7D"><unientity>73CC</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 59 21"><unientity>73D3</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 59 27"><unientity>73EA</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 59 28"><unientity>73E5</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 59 2A"><unientity>73D9</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 59 2B"><unientity>73EF</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 59 2F"><unientity>73D4</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 59 30"><unientity>73DB</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 59 32"><unientity>73D6</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 59 35"><unientity>73BC</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 59 36"><unientity>73E7</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 59 38"><unientity>73E3</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 59 3A"><unientity>73DE</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 59 3C"><unientity>73E6</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 59 3F"><unientity>73E9</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 59 45"><unientity>73F6</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 59 47"><unientity>73FA</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 59 4A"><unientity>73F8</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 59 54"><unientity>73F5</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 59 5A"><unientity>73FD</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 59 5C"><unientity>7407</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 59 5E"><unientity>7412</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 59 63"><unientity>743C</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 59 66"><unientity>742E</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 59 67"><unientity>742F</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 59 69"><unientity>7414</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 59 6A"><unientity>742C</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 59 6C"><unientity>7430</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 59 6E"><unientity>742B</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 59 70"><unientity>73F7</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 59 71"><unientity>741A</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 59 78"><unientity>7416</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 59 7A"><unientity>7426</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 5A 21"><unientity>7428</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 5A 23"><unientity>7429</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 5A 28"><unientity>7420</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 5A 2A"><unientity>741B</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 5A 2B"><unientity>7424</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 5A 2C"><unientity>7432</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 5A 2D"><unientity>742D</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 5A 30"><unientity>7415</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 5A 32"><unientity>743B</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 5A 36"><unientity>7444</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 5A 40"><unientity>7447</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 5A 43"><unientity>7458</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 5A 45"><unientity>7442</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 5A 47"><unientity>744B</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 5A 4A"><unientity>744A</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 5A 4F"><unientity>7452</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 5A 55"><unientity>7457</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 5A 56"><unientity>7451</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 5A 5A"><unientity>745D</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 5A 5B"><unientity>7454</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 5A 5D"><unientity>7440</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 5A 60"><unientity>746D</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 5A 61"><unientity>7462</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 5A 62"><unientity>7473</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 5A 68"><unientity>7474</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 5A 69"><unientity>746E</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 5A 6A"><unientity>7471</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 5A 6B"><unientity>7468</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 5A 78"><unientity>7460</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 5A 79"><unientity>7472</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 5A 7A"><unientity>7484</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 5A 7B"><unientity>7487</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 5A 7E"><unientity>7488</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 5B 21"><unientity>7489</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 5B 22"><unientity>747C</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 5B 27"><unientity>7482</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 5B 28"><unientity>747E</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 5B 2A"><unientity>748A</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 5B 2D"><unientity>7486</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 5B 30"><unientity>747A</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 5B 38"><unientity>7480</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 5B 3C"><unientity>7481</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 5B 3E"><unientity>747D</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 5B 3F"><unientity>7485</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 5B 40"><unientity>7497</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 5B 43"><unientity>7498</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 5B 45"><unientity>749A</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 5B 4D"><unientity>74A4</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 5B 54"><unientity>749F</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 5B 55"><unientity>749D</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 5B 56"><unientity>748D</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 5B 57"><unientity>749E</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 5B 59"><unientity>74A0</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 5B 5D"><unientity>74A1</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 5B 60"><unientity>74B2</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 5B 61"><unientity>74B1</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 5B 66"><unientity>74B4</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 5B 67"><unientity>74AB</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 5B 69"><unientity>74AA</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 5B 6A"><unientity>7490</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 5B 6C"><unientity>74A5</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 5B 6E"><unientity>74A8</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 5B 76"><unientity>74B8</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 5B 7A"><unientity>74C0</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 5C 25"><unientity>74BF</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 5C 28"><unientity>74B5</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 5C 29"><unientity>74BA</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 5C 30"><unientity>74C8</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 5C 31"><unientity>74C5</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 5C 32"><unientity>74CC</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 5C 38"><unientity>74D6</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 5C 3A"><unientity>74D4</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 5C 3D"><unientity>74D8</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 5C 40"><unientity>74DA</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 5C 41"><unientity>74DB</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 5C 47"><unientity>74DE</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 5C 50"><unientity>74E4</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 5C 52"><unientity>74E7</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 5C 54"><unientity>74E9</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 5C 58"><unientity>74F1</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 5C 5A"><unientity>74F0</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 5C 5C"><unientity>74EE</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 5C 61"><unientity>74F4</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 5C 63"><unientity>74F8</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 5C 66"><unientity>74FB</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 5C 67"><unientity>74FF</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 5C 71"><unientity>7505</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 5C 77"><unientity>7503</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 5C 7D"><unientity>7507</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 5D 25"><unientity>750E</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 5D 28"><unientity>750D</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 5D 2C"><unientity>7511</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 5D 2D"><unientity>750F</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 5D 32"><unientity>7512</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 5D 33"><unientity>7513</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 5D 39"><unientity>7517</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 5D 42"><unientity>7521</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 5D 44"><unientity>7524</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 5D 49"><unientity>752F</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 5D 4D"><unientity>753A</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 5D 4F"><unientity>753F</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 5D 51"><unientity>7540</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 5D 52"><unientity>753E</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 5D 55"><unientity>754A</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 5D 57"><unientity>754E</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 5D 58"><unientity>7547</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 5D 59"><unientity>754B</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 5D 5A"><unientity>7548</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 5D 5F"><unientity>755F</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 5D 60"><unientity>755B</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 5D 62"><unientity>7564</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 5D 67"><unientity>7563</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 5D 69"><unientity>756F</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 5D 6B"><unientity>756C</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 5D 6D"><unientity>7579</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 5D 6E"><unientity>757A</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 5D 71"><unientity>7577</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 5D 75"><unientity>7571</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 5D 79"><unientity>757D</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 5D 7E"><unientity>757F</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 5E 25"><unientity>7583</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 5E 2C"><unientity>7590</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 5E 2D"><unientity>7592</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 5E 2E"><unientity>7594</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 5E 31"><unientity>7595</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 5E 35"><unientity>7598</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 5E 37"><unientity>75A2</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 5E 3B"><unientity>75A3</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 5E 3E"><unientity>75BA</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 5E 43"><unientity>75B0</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 5E 44"><unientity>75C3</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 5E 46"><unientity>75BF</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 5E 47"><unientity>75B4</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 5E 4A"><unientity>75C2</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 5E 4E"><unientity>75C1</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 5E 50"><unientity>75B1</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 5E 51"><unientity>75C4</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 5E 58"><unientity>75CD</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 5E 5C"><unientity>75CF</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 5E 5E"><unientity>75CC</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 5E 5F"><unientity>75D0</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 5E 63"><unientity>75E7</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 5E 66"><unientity>75E1</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 5E 67"><unientity>75E6</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 5E 71"><unientity>75E4</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 5E 72"><unientity>75E0</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 5E 73"><unientity>75D7</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 5E 7A"><unientity>7602</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 5E 7E"><unientity>7603</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 5F 21"><unientity>75F9</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 5F 22"><unientity>75FC</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 5F 29"><unientity>7616</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 5F 2C"><unientity>7608</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 5F 2D"><unientity>7615</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 5F 2E"><unientity>760C</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 5F 2F"><unientity>760F</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 5F 3B"><unientity>7610</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 5F 3C"><unientity>760A</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 5F 3E"><unientity>7625</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 5F 3F"><unientity>761A</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 5F 40"><unientity>761B</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 5F 47"><unientity>7619</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 5F 48"><unientity>761E</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 5F 4C"><unientity>761D</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 5F 50"><unientity>7622</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 5F 51"><unientity>762F</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 5F 54"><unientity>762D</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 5F 5C"><unientity>7633</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 5F 5E"><unientity>763B</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 5F 5F"><unientity>7630</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 5F 60"><unientity>763C</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 5F 62"><unientity>7635</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 5F 67"><unientity>7648</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 5F 68"><unientity>764E</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 5F 69"><unientity>7647</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 5F 6A"><unientity>7643</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 5F 6E"><unientity>764D</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 5F 6F"><unientity>7649</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 5F 75"><unientity>7654</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 5F 7A"><unientity>765C</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 5F 7B"><unientity>7657</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 60 22"><unientity>7664</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 60 24"><unientity>7659</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 60 2B"><unientity>765F</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 60 32"><unientity>7667</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 60 35"><unientity>766A</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 60 37"><unientity>766D</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 60 38"><unientity>766F</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 60 3A"><unientity>7670</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 60 40"><unientity>7676</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 60 41"><unientity>7677</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 60 48"><unientity>7680</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 60 4A"><unientity>768B</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 60 52"><unientity>7695</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 60 55"><unientity>656B</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 60 59"><unientity>7699</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 60 5D"><unientity>769C</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 60 5F"><unientity>769D</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 60 65"><unientity>76A4</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 60 66"><unientity>76A5</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 60 67"><unientity>76A6</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 60 6A"><unientity>76AA</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 60 6D"><unientity>76AD</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 60 74"><unientity>76B8</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 60 77"><unientity>76BD</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 61 23"><unientity>76CB</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 61 26"><unientity>76CC</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 61 3B"><unientity>76E6</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 61 3C"><unientity>76E9</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 61 40"><unientity>76EC</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 61 44"><unientity>76ED</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 61 48"><unientity>76F1</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 61 4B"><unientity>7704</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 61 4F"><unientity>7708</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 61 50"><unientity>7707</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 61 53"><unientity>76F7</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 61 54"><unientity>770A</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 61 59"><unientity>76FB</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 61 5E"><unientity>772B</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 61 60"><unientity>770E</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 61 62"><unientity>771B</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 61 63"><unientity>7724</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 61 6C"><unientity>7722</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 61 6D"><unientity>771A</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 61 6F"><unientity>7721</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 61 74"><unientity>7740</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 61 75"><unientity>7739</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 61 76"><unientity>772F</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 61 77"><unientity>7731</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 62 22"><unientity>7725</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 62 25"><unientity>7735</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 62 26"><unientity>7734</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 62 2D"><unientity>7747</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 62 31"><unientity>7745</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 62 32"><unientity>774D</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 62 33"><unientity>774A</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 62 35"><unientity>7743</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 62 37"><unientity>774E</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 62 3A"><unientity>775F</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 62 3D"><unientity>7760</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 62 3E"><unientity>7752</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 62 42"><unientity>7758</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 62 44"><unientity>7756</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 62 45"><unientity>775A</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 62 4F"><unientity>7762</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 62 52"><unientity>7780</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 62 56"><unientity>776F</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 62 5D"><unientity>777E</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 62 5F"><unientity>7785</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 62 60"><unientity>777A</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 62 66"><unientity>E969</unientity><unientityalt>778B</unientityalt><desc>Variant of 4C6266 which maps to 778B</desc></character>
+<character hex="22 62 6A"><unientity>778D</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 62 72"><unientity>7798</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 62 73"><unientity>7796</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 62 75"><unientity>77A2</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 62 76"><unientity>7799</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 62 7A"><unientity>77B5</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 62 7D"><unientity>77B7</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 63 23"><unientity>77B6</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 63 29"><unientity>77BE</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 63 2B"><unientity>77B9</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 63 2C"><unientity>77BC</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 63 35"><unientity>77CD</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 63 3A"><unientity>77D1</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 63 45"><unientity>77DE</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 63 46"><unientity>77DF</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 63 4F"><unientity>77E7</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 63 52"><unientity>77E6</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 63 55"><unientity>77EC</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 63 59"><unientity>77F0</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 63 5A"><unientity>77F1</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 63 5C"><unientity>77F4</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 63 60"><unientity>77FC</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 63 67"><unientity>77F8</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 63 68"><unientity>77FB</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 63 70"><unientity>7809</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 63 71"><unientity>7806</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 63 73"><unientity>7819</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 63 74"><unientity>7811</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 63 78"><unientity>7812</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 64 24"><unientity>781B</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 64 26"><unientity>782C</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 64 27"><unientity>7823</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 64 28"><unientity>782B</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 64 2A"><unientity>7829</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 64 2D"><unientity>7822</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 64 31"><unientity>7835</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 64 32"><unientity>7833</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 64 33"><unientity>782E</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 64 35"><unientity>7820</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 64 38"><unientity>783D</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 64 3B"><unientity>781F</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 64 3D"><unientity>7831</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 64 44"><unientity>784D</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 64 48"><unientity>7848</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 64 49"><unientity>7853</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 64 4A"><unientity>7854</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 64 4B"><unientity>7845</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 64 4C"><unientity>7852</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 64 4E"><unientity>7850</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 64 4F"><unientity>7858</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 64 50"><unientity>7826</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 64 52"><unientity>7847</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 64 56"><unientity>784C</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 64 5A"><unientity>7868</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 64 5B"><unientity>786D</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 64 60"><unientity>7864</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 64 61"><unientity>785C</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 64 64"><unientity>7876</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 64 66"><unientity>786A</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 64 69"><unientity>7886</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 64 6B"><unientity>789A</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 64 6C"><unientity>787F</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 64 6D"><unientity>7887</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 64 70"><unientity>7894</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 64 76"><unientity>788F</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 64 7E"><unientity>7899</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 65 29"><unientity>7893</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 65 2C"><unientity>7892</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 65 2D"><unientity>7896</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 65 2F"><unientity>78B2</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 65 31"><unientity>78A1</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 65 32"><unientity>78B6</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 65 39"><unientity>78B7</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 65 3B"><unientity>78A4</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 65 3E"><unientity>78B4</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 65 40"><unientity>78AD</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 65 41"><unientity>78A3</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 65 43"><unientity>789E</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 65 44"><unientity>78A8</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 65 48"><unientity>78AB</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 65 4E"><unientity>78BB</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 65 55"><unientity>78CC</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 65 56"><unientity>78C9</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 65 58"><unientity>78D1</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 65 5A"><unientity>78D8</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 65 5E"><unientity>78C8</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 65 60"><unientity>78D4</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 65 68"><unientity>78DF</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 65 6A"><unientity>78E7</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 65 6E"><unientity>78DB</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 65 6F"><unientity>78E1</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 65 73"><unientity>78E0</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 65 76"><unientity>78EE</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 65 77"><unientity>78E3</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 65 79"><unientity>78F2</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 65 7E"><unientity>7905</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 66 21"><unientity>78F9</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 66 22"><unientity>78FD</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 66 27"><unientity>78FE</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 66 29"><unientity>78FB</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 66 2B"><unientity>7904</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 66 2E"><unientity>7912</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 66 32"><unientity>790C</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 66 34"><unientity>7913</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 66 35"><unientity>7911</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 66 43"><unientity>791E</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 66 46"><unientity>7922</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 66 4C"><unientity>7924</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 66 4D"><unientity>7927</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 66 50"><unientity>7929</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 66 55"><unientity>7931</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 66 5D"><unientity>7934</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 66 60"><unientity>7936</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 66 65"><unientity>793D</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 66 67"><unientity>7942</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 66 68"><unientity>793F</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 66 6A"><unientity>794A</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 66 6B"><unientity>794D</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 66 75"><unientity>7946</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 66 77"><unientity>7958</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 66 79"><unientity>795B</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 66 7A"><unientity>795C</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 66 7B"><unientity>794F</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 66 7C"><unientity>7953</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 66 7D"><unientity>E9D0</unientity><unientityalt>7953</unientityalt><desc>Unrelated variant of EACC 22667C which maps to 7953</desc></character>
+<character hex="22 67 21"><unientity>7951</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 67 23"><unientity>7954</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 67 2A"><unientity>7967</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 67 2D"><unientity>796B</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 67 30"><unientity>7972</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 67 3E"><unientity>797C</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 67 4A"><unientity>7998</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 67 4B"><unientity>798A</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 67 4D"><unientity>7999</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 67 4E"><unientity>7995</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 67 4F"><unientity>798B</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 67 50"><unientity>7996</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 67 54"><unientity>7994</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 67 55"><unientity>7993</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 67 5C"><unientity>799A</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 67 5F"><unientity>79A1</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 67 60"><unientity>799B</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 67 61"><unientity>79A3</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 67 64"><unientity>799D</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 67 6E"><unientity>79A9</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 67 70"><unientity>79AB</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 67 71"><unientity>79A8</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 67 75"><unientity>79B0</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 67 7A"><unientity>79B3</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 67 7B"><unientity>79B4</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 68 22"><unientity>79B8</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 68 23"><unientity>79BA</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 68 25"><unientity>79BC</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 68 28"><unientity>79C6</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 68 2A"><unientity>79C8</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 68 2D"><unientity>79D4</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 68 2E"><unientity>79D5</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 68 32"><unientity>79D6</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 68 3D"><unientity>79EC</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 68 3E"><unientity>E96A</unientity><unientityalt>79EB</unientityalt><desc>Variant of 4C683E which maps to 79EB</desc></character>
+<character hex="22 68 42"><unientity>79E1</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 68 44"><unientity>79DD</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 68 45"><unientity>79ED</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 68 48"><unientity>79F8</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 68 4F"><unientity>7A02</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 68 50"><unientity>7A0A</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 68 54"><unientity>7A09</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 68 5C"><unientity>7A03</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 68 61"><unientity>7A0C</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 68 6B"><unientity>7A11</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 68 6C"><unientity>7A18</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 68 6F"><unientity>E96B</unientity><unientityalt>7A19</unientityalt><desc>Variant of 2E686F which maps to 7A19</desc></character>
+<character hex="22 68 71"><unientity>7A1E</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 68 76"><unientity>7A17</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 68 7E"><unientity>7A2D</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 69 22"><unientity>7A2C</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 69 39"><unientity>7A48</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 69 3D"><unientity>7A4B</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 69 3E"><unientity>7A47</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 69 3F"><unientity>7A44</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 69 40"><unientity>7A5C</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 69 4D"><unientity>7A5F</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 69 4F"><unientity>7A60</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 69 57"><unientity>7A6E</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 69 5F"><unientity>7A70</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 69 66"><unientity>7A75</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 69 69"><unientity>7A78</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 69 6B"><unientity>7A80</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 69 70"><unientity>7A85</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 69 75"><unientity>7A86</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 69 78"><unientity>7A8A</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 69 7A"><unientity>7A94</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 69 7E"><unientity>68A5</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 6A 28"><unientity>7AA3</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 6A 2B"><unientity>7A9E</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 6A 2C"><unientity>7AA7</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 6A 2E"><unientity>7AA8</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 6A 31"><unientity>7AAC</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 6A 36"><unientity>7AB3</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 6A 3A"><unientity>7ABD</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 6A 3C"><unientity>7AB6</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 6A 3D"><unientity>7AB8</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 6A 3E"><unientity>7AB5</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 6A 3F"><unientity>7ABB</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 6A 43"><unientity>7ABF</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 6A 49"><unientity>7ACD</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 6A 4B"><unientity>7ACF</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 6A 4F"><unientity>7AD1</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 6A 51"><unientity>7AD3</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 6A 52"><unientity>7AD4</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 6A 54"><unientity>7AD5</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 6A 55"><unientity>7ADA</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 6A 5A"><unientity>7AE1</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 6A 5E"><unientity>7AE6</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 6A 66"><unientity>7AEB</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 6A 6B"><unientity>7AF0</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 6A 76"><unientity>7AF5</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 6A 7C"><unientity>7AFE</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 6B 27"><unientity>7B39</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 6B 2D"><unientity>7B0F</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 6B 2E"><unientity>7B08</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 6B 33"><unientity>7B0A</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 6B 35"><unientity>7B35</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 6B 36"><unientity>7B25</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 6B 39"><unientity>7B38</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 6B 3B"><unientity>7B3B</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 6B 3F"><unientity>7B24</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 6B 40"><unientity>7B33</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 6B 42"><unientity>7B2A</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 6B 44"><unientity>7B18</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 6B 47"><unientity>7B31</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 6B 4A"><unientity>7B2B</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 6B 4B"><unientity>7B37</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 6B 4D"><unientity>7B1F</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 6B 52"><unientity>7B4A</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 6B 53"><unientity>E9ED</unientity><desc>East Asian ideograph not in Unicode</desc></character>
+<character hex="22 6B 54"><unientity>E96C</unientity><unientityalt>7B04</unientityalt><desc>Variant of 2E6B54 which maps to 7B04</desc></character>
+<character hex="22 6B 55"><unientity>7B47</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 6B 59"><unientity>7B58</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 6B 5B"><unientity>7B6C</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 6B 60"><unientity>7B48</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 6B 61"><unientity>7B45</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 6B 62"><unientity>7B4C</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 6B 63"><unientity>7B4E</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 6B 68"><unientity>7B66</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 6B 6C"><unientity>7B64</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 6B 6E"><unientity>7B69</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 6B 70"><unientity>7B6D</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 6B 74"><unientity>7B62</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 6B 75"><unientity>7B6E</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 6B 76"><unientity>7B74</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 6B 79"><unientity>7B72</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 6B 7A"><unientity>7B78</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 6B 7B"><unientity>7B6F</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 6B 7C"><unientity>7B67</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 6B 7E"><unientity>7B65</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 6C 26"><unientity>7B71</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 6C 27"><unientity>7B70</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 6C 29"><unientity>7B73</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 6C 2D"><unientity>7B9C</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 6C 33"><unientity>7B92</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 6C 34"><unientity>7B91</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 6C 35"><unientity>7B90</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 6C 38"><unientity>7BA3</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 6C 3A"><unientity>7B8D</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 6C 41"><unientity>7B85</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 6C 43"><unientity>7B8E</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 6C 44"><unientity>7B98</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 6C 46"><unientity>7B86</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 6C 48"><unientity>7B99</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 6C 52"><unientity>7BB2</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 6C 58"><unientity>7BCB</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 6C 59"><unientity>7BB8</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 6C 5A"><unientity>7BCF</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 6C 5C"><unientity>7BD0</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 6C 60"><unientity>7BBE</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 6C 6F"><unientity>7BCC</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 6D 22"><unientity>7BDD</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 6D 24"><unientity>7BE5</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 6D 29"><unientity>7BE8</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 6D 2E"><unientity>7BF9</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 6D 2F"><unientity>7BD4</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 6D 32"><unientity>7BDF</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 6D 35"><unientity>7BD8</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 6D 37"><unientity>E9D1</unientity><unientityalt>7BEA</unientityalt><desc>Unrelated variant of EACC 3A6A7C which maps to 7BEA</desc></character>
+<character hex="22 6D 3B"><unientity>7C06</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 6D 3E"><unientity>7BF0</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 6D 41"><unientity>7C0F</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 6D 46"><unientity>7C0B</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 6D 47"><unientity>7C00</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 6D 4B"><unientity>7C0C</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 6D 4F"><unientity>7BF4</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 6D 54"><unientity>7BF3</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 6D 5A"><unientity>7C09</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 6D 5B"><unientity>7C03</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 6D 5C"><unientity>7BFC</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 6D 5F"><unientity>7C1C</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 6D 61"><unientity>7C26</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 6D 62"><unientity>7C28</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 6D 63"><unientity>7C20</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 6D 66"><unientity>7C1F</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 6D 68"><unientity>7C2F</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 6D 75"><unientity>7C30</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 6E 27"><unientity>7C35</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 6E 2A"><unientity>7C40</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 6E 30"><unientity>7C39</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 6E 34"><unientity>7C3B</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 6E 35"><unientity>7C34</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 6E 3B"><unientity>7C42</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 6E 46"><unientity>7C4E</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 6E 54"><unientity>7C5D</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 6E 56"><unientity>7C5C</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 6E 57"><unientity>7C5A</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 6E 58"><unientity>7C5B</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 6E 59"><unientity>7C59</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 6E 5B"><unientity>7C5E</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 6E 5C"><unientity>7C67</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 6E 5E"><unientity>7C63</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 6E 61"><unientity>7C68</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 6E 62"><unientity>7C65</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 6E 6F"><unientity>7C6F</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 6E 75"><unientity>7C75</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 6E 79"><unientity>7C7E</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 6E 7A"><unientity>7C78</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 6E 7D"><unientity>7C7D</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 6F 21"><unientity>7C81</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 6F 28"><unientity>7C8E</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 6F 29"><unientity>7C91</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 6F 2A"><unientity>7C83</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 6F 2C"><unientity>7C8D</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 6F 3A"><unientity>7C99</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 6F 3B"><unientity>7C98</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 6F 3E"><unientity>7C9C</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 6F 40"><unientity>7C95</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 6F 42"><unientity>7CA7</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 6F 43"><unientity>7CA2</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 6F 45"><unientity>7C9E</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 6F 46"><unientity>7CA9</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 6F 48"><unientity>7CA8</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 6F 49"><unientity>7CA1</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 6F 4A"><unientity>7CAC</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 6F 4C"><unientity>7CA6</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 6F 54"><unientity>7CB2</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 6F 58"><unientity>7CBB</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 6F 59"><unientity>7CBF</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 6F 5E"><unientity>7CBA</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 6F 5F"><unientity>7CBC</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 6F 64"><unientity>7CC2</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 6F 66"><unientity>7CCE</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 6F 68"><unientity>7CC8</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 6F 69"><unientity>7CC5</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 6F 6D"><unientity>7CCC</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 6F 6F"><unientity>7CC9</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 6F 71"><unientity>7CD2</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 6F 75"><unientity>7CD7</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 6F 77"><unientity>7CE1</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 6F 7B"><unientity>E96D</unientity><unientityalt>7CE8</unientityalt><desc>Variant of 4C6F7B which maps to 7CE8</desc></character>
+<character hex="22 70 22"><unientity>7CDD</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 70 28"><unientity>7CED</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 70 2E"><unientity>7CF0</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 70 30"><unientity>7CF2</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 70 35"><unientity>7CF4</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 70 39"><unientity>7CF6</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 70 42"><unientity>7D06</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 70 44"><unientity>7D03</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 70 45"><unientity>7D08</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 70 49"><unientity>7D0F</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 70 4A"><unientity>7D13</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 70 50"><unientity>7D18</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 70 51"><unientity>7D1E</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 70 52"><unientity>7D1D</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 70 59"><unientity>7D35</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 70 5A"><unientity>7D3D</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 70 61"><unientity>7D3A</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 70 62"><unientity>7D32</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 70 65"><unientity>7D31</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 70 68"><unientity>7D45</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 70 6A"><unientity>7D3F</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 70 6C"><unientity>7D29</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 70 6F"><unientity>7D41</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 70 71"><unientity>7D3E</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 70 7A"><unientity>7D5C</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 70 7C"><unientity>7D53</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 70 7E"><unientity>7D5A</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 71 22"><unientity>7D70</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 71 29"><unientity>7D67</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 71 2B"><unientity>7D6A</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 71 2C"><unientity>7D6B</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 71 30"><unientity>7D73</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 71 34"><unientity>7D4E</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 71 37"><unientity>7D8B</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 71 39"><unientity>7D88</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 71 3B"><unientity>7D85</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 71 3D"><unientity>7D8E</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 71 42"><unientity>7D7F</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 71 44"><unientity>7D86</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 71 48"><unientity>7D8D</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 71 4B"><unientity>7D9B</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 71 4D"><unientity>7D83</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 71 4F"><unientity>7D7D</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 71 54"><unientity>7D7B</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 71 58"><unientity>7D7A</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 71 59"><unientity>7D96</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 71 5A"><unientity>7D5B</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 71 5B"><unientity>7D8C</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 71 61"><unientity>7DA3</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 71 62"><unientity>7DAE</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 71 67"><unientity>7DCB</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 71 69"><unientity>7DAA</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 71 6A"><unientity>7DCE</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 71 6B"><unientity>7DC9</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 71 6E"><unientity>7DC5</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 71 6F"><unientity>7DA6</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 71 74"><unientity>7DC4</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 71 78"><unientity>7DAC</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 71 7D"><unientity>7DB9</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 72 22"><unientity>7D9F</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 72 29"><unientity>7DE1</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 72 2A"><unientity>7DD9</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 72 2B"><unientity>7DE4</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 72 31"><unientity>7DD7</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 72 36"><unientity>7DF9</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 72 3A"><unientity>7E06</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 72 3C"><unientity>7DF2</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 72 3E"><unientity>7DE6</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 72 46"><unientity>7DDC</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 72 47"><unientity>7DF1</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 72 48"><unientity>7DF6</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 72 49"><unientity>7DE5</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 72 4B"><unientity>7DF5</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 72 50"><unientity>7E17</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 72 51"><unientity>7E1E</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 72 52"><unientity>7E21</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 72 53"><unientity>7E0B</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 72 55"><unientity>7E12</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 72 56"><unientity>7E22</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 72 5B"><unientity>7E20</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 72 5D"><unientity>7E1D</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 72 5E"><unientity>7E09</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 72 5F"><unientity>7E1F</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 72 65"><unientity>7E15</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 72 69"><unientity>7E10</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 72 6A"><unientity>7E0F</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 72 6D"><unientity>7E3B</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 72 71"><unientity>7E34</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 72 72"><unientity>7E2D</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 72 73"><unientity>7E2F</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 72 75"><unientity>7E36</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 72 77"><unientity>7E3A</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 72 79"><unientity>7E39</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 72 7D"><unientity>7E44</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 73 21"><unientity>7E35</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 73 26"><unientity>7E3F</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 73 28"><unientity>7E47</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 73 2D"><unientity>7E52</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 73 2F"><unientity>7E51</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 73 33"><unientity>7E50</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 73 34"><unientity>7E67</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 73 37"><unientity>7E56</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 73 48"><unientity>7E68</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 73 49"><unientity>7E6E</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 73 4E"><unientity>7E70</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 73 51"><unientity>7E6F</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 73 52"><unientity>7E73</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 73 58"><unientity>7E7B</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 73 59"><unientity>7E7E</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 73 5B"><unientity>7E81</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 73 5D"><unientity>7E8A</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 73 5E"><unientity>7E87</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 73 60"><unientity>7E88</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 73 64"><unientity>7E86</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 73 6A"><unientity>7E91</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 73 6B"><unientity>7E95</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 73 6D"><unientity>7E94</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 73 70"><unientity>7E9B</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 73 71"><unientity>7E9A</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 73 73"><unientity>7E99</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 73 74"><unientity>7E98</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 74 25"><unientity>7F43</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 74 27"><unientity>7F46</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 74 28"><unientity>7F45</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 74 2B"><unientity>7F4B</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 74 2E"><unientity>7F4C</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 74 2F"><unientity>7F4D</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 74 31"><unientity>7F4E</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 74 32"><unientity>7F4F</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 74 3E"><unientity>7F60</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 74 3F"><unientity>7F61</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 74 43"><unientity>7F5D</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 74 45"><unientity>7F5B</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 74 47"><unientity>7F63</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 74 50"><unientity>7F65</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 74 51"><unientity>7F66</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 74 53"><unientity>7F6D</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 74 54"><unientity>7F6B</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 74 55"><unientity>7F67</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 74 57"><unientity>7F68</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 74 5E"><unientity>7F71</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 74 60"><unientity>7F73</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 74 63"><unientity>7F76</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 74 6A"><unientity>7F7F</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 74 6B"><unientity>7F7E</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 74 6C"><unientity>7F7D</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 74 72"><unientity>7F86</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 74 7A"><unientity>7F91</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 74 7E"><unientity>7F96</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 75 23"><unientity>7F97</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 75 24"><unientity>7F95</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 75 2C"><unientity>7FA2</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 75 33"><unientity>7FA7</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 75 3B"><unientity>7FB0</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 75 3C"><unientity>7FAD</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 75 3F"><unientity>7FB1</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 75 40"><unientity>7FB4</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 75 42"><unientity>7FB5</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 75 4A"><unientity>7FBC</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 75 4C"><unientity>7FBE</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 75 51"><unientity>7FC3</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 75 57"><unientity>7FCA</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 75 67"><unientity>7FDB</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 75 68"><unientity>7FE3</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 75 6C"><unientity>7FE6</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 75 6F"><unientity>7FE5</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 75 72"><unientity>7FEC</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 75 73"><unientity>7FEB</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 75 77"><unientity>7FEF</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 75 7A"><unientity>7FEE</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 76 29"><unientity>7FFD</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 76 2A"><unientity>7FFE</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 76 2C"><unientity>7FFF</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 76 2E"><unientity>8004</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 76 31"><unientity>8008</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 76 33"><unientity>800B</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 76 34"><unientity>800E</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 76 35"><unientity>8011</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 76 36"><unientity>800F</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 76 37"><unientity>8014</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 76 39"><unientity>8016</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 76 3B"><unientity>801F</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 76 3D"><unientity>801E</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 76 3E"><unientity>801D</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 76 4B"><unientity>8025</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 76 4C"><unientity>8026</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 76 4D"><unientity>802A</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 76 4E"><unientity>8029</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 76 4F"><unientity>8028</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 76 5B"><unientity>8030</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 76 5D"><unientity>8031</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 76 60"><unientity>8035</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 76 69"><unientity>8039</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 76 6B"><unientity>8041</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 76 70"><unientity>8043</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 76 7B"><unientity>8052</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 76 7E"><unientity>8062</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 77 28"><unientity>8063</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 77 32"><unientity>806C</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 77 39"><unientity>8075</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 77 3E"><unientity>807B</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 77 3F"><unientity>8079</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 77 47"><unientity>808A</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 77 49"><unientity>808E</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 77 4E"><unientity>809F</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 77 5C"><unientity>670A</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 77 60"><unientity>80A7</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 77 61"><unientity>80B0</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 77 68"><unientity>80B8</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 77 69"><unientity>80B5</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 77 6A"><unientity>80A6</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 77 73"><unientity>80E0</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 77 75"><unientity>6711</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 77 7B"><unientity>80DF</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 77 7D"><unientity>80C2</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 78 27"><unientity>80D9</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 78 2A"><unientity>80DD</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 78 2D"><unientity>80CF</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 78 2F"><unientity>80CD</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 78 30"><unientity>80D7</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 78 33"><unientity>80F2</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 78 34"><unientity>80FA</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 78 38"><unientity>80FE</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 78 3C"><unientity>8103</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 78 40"><unientity>80F9</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 78 41"><unientity>80EF</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 78 42"><unientity>80D4</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 78 49"><unientity>811D</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 78 4B"><unientity>8118</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 78 50"><unientity>8130</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 78 54"><unientity>8124</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 78 55"><unientity>811B</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 78 60"><unientity>812A</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 78 61"><unientity>811E</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 78 64"><unientity>8121</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 78 66"><unientity>8117</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 78 69"><unientity>813A</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 78 6A"><unientity>815A</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 78 6D"><unientity>8148</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 78 77"><unientity>814C</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 78 7C"><unientity>8153</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 78 7D"><unientity>8141</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 79 25"><unientity>814D</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 79 2E"><unientity>6720</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 79 32"><unientity>8160</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 79 3B"><unientity>8169</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 79 3C"><unientity>817C</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 79 41"><unientity>8161</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 79 46"><unientity>8176</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 79 47"><unientity>8174</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 79 48"><unientity>8167</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 79 4B"><unientity>816F</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 79 4D"><unientity>8182</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 79 51"><unientity>818B</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 79 52"><unientity>8186</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 79 59"><unientity>8183</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 79 6A"><unientity>819F</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 79 6B"><unientity>81A3</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 79 70"><unientity>8198</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 79 75"><unientity>8195</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 79 77"><unientity>8197</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 79 7C"><unientity>81AA</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 79 7D"><unientity>81A6</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 79 7E"><unientity>6725</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 7A 2C"><unientity>81B5</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 7A 2E"><unientity>81B0</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 7A 2F"><unientity>81B4</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 7A 33"><unientity>81B7</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 7A 37"><unientity>81BB</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 7A 38"><unientity>81C1</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 7A 39"><unientity>81CC</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 7A 3A"><unientity>81CA</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 7A 3B"><unientity>81C4</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 7A 40"><unientity>81D1</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 7A 41"><unientity>81CE</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 7A 43"><unientity>81D0</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 7A 4B"><unientity>81DB</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 7A 4F"><unientity>81DD</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 7A 53"><unientity>81DE</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 7A 56"><unientity>81E0</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 7A 57"><unientity>81E2</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 7A 5B"><unientity>81E7</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 7A 60"><unientity>81EF</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 7A 65"><unientity>81F2</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 7A 68"><unientity>81F6</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 7A 70"><unientity>8201</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 7A 72"><unientity>E9EE</unientity><desc>East Asian ideograph not in Unicode</desc></character>
+<character hex="22 7A 74"><unientity>8203</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 7A 75"><unientity>8204</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 7A 77"><unientity>820B</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 7B 27"><unientity>821D</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 7B 29"><unientity>8220</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 7B 2E"><unientity>822D</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 7B 2F"><unientity>822F</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 7B 32"><unientity>8238</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 7B 34"><unientity>823A</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 7B 35"><unientity>8233</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 7B 36"><unientity>8234</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 7B 3A"><unientity>8232</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 7B 42"><unientity>8248</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 7B 43"><unientity>8249</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 7B 45"><unientity>8244</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 7B 47"><unientity>8240</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 7B 48"><unientity>8241</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 7B 4A"><unientity>8245</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 7B 4B"><unientity>824B</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 7B 50"><unientity>824F</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 7B 53"><unientity>824E</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 7B 56"><unientity>8256</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 7B 57"><unientity>8257</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 7B 5E"><unientity>825A</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 7B 62"><unientity>825F</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 7B 67"><unientity>8262</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 7B 6B"><unientity>8268</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 7B 6F"><unientity>826D</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 7B 77"><unientity>8278</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 7B 7D"><unientity>827F</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 7C 24"><unientity>828E</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 7C 25"><unientity>8291</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 7C 27"><unientity>828F</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 7C 28"><unientity>8284</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 7C 2D"><unientity>8283</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 7C 2E"><unientity>828A</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 7C 31"><unientity>82AF</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 7C 34"><unientity>82A7</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 7C 38"><unientity>82AB</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 7C 3A"><unientity>82B0</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 7C 3C"><unientity>82A4</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 7C 3F"><unientity>829A</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 7C 42"><unientity>82A3</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 7C 44"><unientity>82B7</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 7C 45"><unientity>E96E</unientity><unientityalt>82AE</unientityalt><desc>Variant of 4C7C45 which maps to 82AE</desc></character>
+<character hex="22 7C 46"><unientity>82A9</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 7C 49"><unientity>82BC</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 7C 4C"><unientity>82A8</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 7C 4E"><unientity>82B4</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 7C 50"><unientity>82A1</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 7C 53"><unientity>82AA</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 7C 55"><unientity>82D9</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 7C 57"><unientity>82FE</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 7C 5A"><unientity>82E0</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 7C 5B"><unientity>82D0</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 7C 5C"><unientity>8300</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 7C 5F"><unientity>82EA</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 7C 60"><unientity>82F7</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 7C 62"><unientity>82EF</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 7C 63"><unientity>833A</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 7C 64"><unientity>82E4</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 7C 65"><unientity>82D5</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 7C 67"><unientity>8307</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 7C 68"><unientity>82FA</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 7C 69"><unientity>82F4</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 7C 6A"><unientity>82E2</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 7C 6D"><unientity>82D2</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 7C 6E"><unientity>8314</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 7C 71"><unientity>82EB</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 7C 72"><unientity>82D8</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 7C 73"><unientity>82E1</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 7C 75"><unientity>82F6</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 7C 7B"><unientity>8310</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 7C 7C"><unientity>82F3</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 7D 21"><unientity>830C</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 7D 22"><unientity>82FB</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 7D 24"><unientity>82FD</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 7D 26"><unientity>8333</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 7D 29"><unientity>8328</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 7D 2B"><unientity>8344</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 7D 2E"><unientity>8351</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 7D 35"><unientity>831B</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 7D 3B"><unientity>8356</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 7D 3F"><unientity>8322</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 7D 40"><unientity>832C</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 7D 48"><unientity>833C</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 7D 4A"><unientity>834D</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 7D 4D"><unientity>E96F</unientity><unientityalt>8343</unientityalt><desc>Variant of 4C7D4D which maps to 8343</desc></character>
+<character hex="22 7D 52"><unientity>832F</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 7D 53"><unientity>8348</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 7D 54"><unientity>8312</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 7D 56"><unientity>8316</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 7D 58"><unientity>831A</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 7D 5F"><unientity>8347</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 7D 62"><unientity>83A8</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 7D 67"><unientity>83AD</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 7D 6D"><unientity>8373</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 7D 72"><unientity>83B0</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 7D 76"><unientity>831D</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 7D 7A"><unientity>838F</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 7D 7C"><unientity>8395</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 7D 7E"><unientity>8375</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 7E 21"><unientity>837F</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 7E 22"><unientity>8399</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 7E 23"><unientity>83A6</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 7E 25"><unientity>8387</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 7E 26"><unientity>83B9</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 7E 2B"><unientity>83A9</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 7E 2F"><unientity>839B</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 7E 33"><unientity>83AA</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 7E 37"><unientity>839C</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 7E 38"><unientity>839F</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 7E 41"><unientity>83CF</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 7E 43"><unientity>83F9</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 7E 45"><unientity>8421</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 7E 51"><unientity>8423</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 7E 52"><unientity>83EA</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 7E 53"><unientity>8413</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 7E 56"><unientity>83FC</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 7E 57"><unientity>83F6</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 7E 59"><unientity>8410</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 7E 5A"><unientity>83E1</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 7E 60"><unientity>83C6</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 7E 61"><unientity>8407</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 7E 63"><unientity>83EB</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 7E 6A"><unientity>83BF</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 7E 6B"><unientity>83E2</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 7E 6D"><unientity>8401</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 7E 71"><unientity>83D8</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 7E 72"><unientity>83E5</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 7E 74"><unientity>8418</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 7E 79"><unientity>83CE</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 7E 7B"><unientity>83D3</unientity><desc>East Asian ideograph</desc></character>
+<character hex="22 7E 7D"><unientity>83D6</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 22 23"><unientity>83FD</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 22 25"><unientity>841E</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 22 29"><unientity>83C9</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 22 2A"><unientity>83DF</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 22 2C"><unientity>841F</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 22 2E"><unientity>840F</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 22 30"><unientity>8411</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 22 36"><unientity>839A</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 22 3C"><unientity>83F3</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 22 43"><unientity>83D1</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 22 48"><unientity>8453</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 22 4A"><unientity>848E</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 22 4C"><unientity>8439</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 22 4D"><unientity>8476</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 22 4E"><unientity>8479</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 22 5C"><unientity>8451</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 22 5F"><unientity>847D</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 22 62"><unientity>845A</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 22 66"><unientity>8459</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 22 69"><unientity>8473</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 22 6E"><unientity>843E</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 22 71"><unientity>846D</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 22 78"><unientity>847A</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 22 7B"><unientity>8484</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 22 7C"><unientity>8478</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 23 24"><unientity>8432</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 23 29"><unientity>845C</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 23 2D"><unientity>842A</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 23 2E"><unientity>8429</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 23 32"><unientity>8471</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 23 35"><unientity>845F</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 23 36"><unientity>8460</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 23 37"><unientity>846E</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 23 3A"><unientity>8446</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 23 3C"><unientity>8452</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 23 3F"><unientity>844A</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 23 45"><unientity>844E</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 23 49"><unientity>8497</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 23 50"><unientity>84A1</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 23 53"><unientity>849F</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 23 56"><unientity>84BA</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 23 58"><unientity>84B9</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 23 5C"><unientity>84B4</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 23 5E"><unientity>84C1</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 23 5F"><unientity>84BB</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 23 68"><unientity>84CD</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 23 70"><unientity>84B1</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 23 71"><unientity>849D</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 23 72"><unientity>84D0</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 23 75"><unientity>8494</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 23 79"><unientity>84C7</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 23 7A"><unientity>84BD</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 23 7C"><unientity>84C2</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 24 21"><unientity>8495</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 24 27"><unientity>84AF</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 24 29"><unientity>84AD</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 24 32"><unientity>84A8</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 24 33"><unientity>84D6</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 24 35"><unientity>84DA</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 24 3A"><unientity>8493</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 24 3F"><unientity>84CF</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 24 41"><unientity>84CA</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 24 46"><unientity>8506</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 24 47"><unientity>850B</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 24 4D"><unientity>8500</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 24 59"><unientity>851F</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 24 5C"><unientity>853B</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 24 5F"><unientity>84EA</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 24 66"><unientity>84F4</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 24 6A"><unientity>850C</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 24 72"><unientity>852F</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 24 75"><unientity>8515</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 24 77"><unientity>84F7</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 24 7A"><unientity>84FC</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 24 7C"><unientity>84EB</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 24 7D"><unientity>84FD</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 25 24"><unientity>851E</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 25 2A"><unientity>8518</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 25 2D"><unientity>8526</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 25 2E"><unientity>E970</unientity><unientityalt>8507</unientityalt><desc>Variant of 2F252E which maps to 8507</desc></character>
+<character hex="23 25 2F"><unientity>84E7</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 25 34"><unientity>84F0</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 25 35"><unientity>84EF</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 25 36"><unientity>8556</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 25 46"><unientity>8541</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 25 4B"><unientity>8558</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 25 4D"><unientity>8553</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 25 4E"><unientity>8561</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 25 4F"><unientity>8540</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 25 5A"><unientity>8546</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 25 5C"><unientity>8564</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 25 5D"><unientity>855E</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 25 5E"><unientity>8573</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 25 5F"><unientity>8551</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 25 64"><unientity>8562</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 25 6B"><unientity>8563</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 25 6C"><unientity>848D</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 25 6D"><unientity>8542</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 25 71"><unientity>854E</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 25 74"><unientity>8555</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 25 76"><unientity>855D</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 25 77"><unientity>858C</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 26 25"><unientity>8580</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 26 28"><unientity>858F</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 26 2D"><unientity>8579</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 26 32"><unientity>857F</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 26 33"><unientity>8577</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 26 34"><unientity>8578</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 26 35"><unientity>8598</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 26 36"><unientity>857B</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 26 3D"><unientity>85A4</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 26 42"><unientity>857A</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 26 44"><unientity>8597</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 26 45"><unientity>8557</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 26 49"><unientity>85A8</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 26 4E"><unientity>8586</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 26 50"><unientity>8599</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 26 51"><unientity>858A</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 26 52"><unientity>85A2</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 26 54"><unientity>8590</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 26 56"><unientity>8585</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 26 57"><unientity>8588</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 26 5A"><unientity>85B8</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 26 5D"><unientity>85C1</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 26 61"><unientity>85BA</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 26 68"><unientity>85CE</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 26 6A"><unientity>85C2</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 26 6B"><unientity>85B7</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 26 6C"><unientity>85B9</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 26 6E"><unientity>85B3</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 26 6F"><unientity>85BD</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 26 70"><unientity>85C4</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 26 72"><unientity>85BF</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 26 75"><unientity>85BE</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 26 7E"><unientity>85B6</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 27 24"><unientity>8624</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 27 28"><unientity>85F7</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 27 2C"><unientity>85E6</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 27 2E"><unientity>85D4</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 27 31"><unientity>85ED</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 27 39"><unientity>85DA</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 27 43"><unientity>85DF</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 27 45"><unientity>85D8</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 27 4C"><unientity>85DC</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 27 4E"><unientity>85F5</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 27 52"><unientity>8622</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 27 54"><unientity>8610</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 27 57"><unientity>85FC</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 27 5B"><unientity>85FF</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 27 5E"><unientity>85FE</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 27 60"><unientity>8600</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 27 68"><unientity>8604</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 27 71"><unientity>8605</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 27 75"><unientity>862B</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 28 22"><unientity>8627</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 28 26"><unientity>8629</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 28 32"><unientity>8637</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 28 38"><unientity>8636</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 28 3E"><unientity>863C</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 28 3F"><unientity>8640</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 28 40"><unientity>863A</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 28 4C"><unientity>8645</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 28 59"><unientity>864D</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 28 5A"><unientity>8653</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 28 5E"><unientity>8659</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 28 66"><unientity>8661</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 28 69"><unientity>8662</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 28 6A"><unientity>8663</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 28 71"><unientity>8669</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 28 78"><unientity>866C</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 28 7B"><unientity>8672</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 28 7C"><unientity>866F</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 28 7E"><unientity>867B</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 29 25"><unientity>867A</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 29 26"><unientity>8673</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 29 27"><unientity>867C</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 29 2E"><unientity>8696</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 29 2F"><unientity>86A8</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 29 36"><unientity>8691</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 29 37"><unientity>869C</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 29 39"><unientity>8698</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 29 3C"><unientity>868D</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 29 3D"><unientity>868B</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 29 40"><unientity>86A6</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 29 42"><unientity>869D</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 29 46"><unientity>86A0</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 29 48"><unientity>86A7</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 29 4B"><unientity>86BF</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 29 58"><unientity>86BA</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 29 59"><unientity>86B0</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 29 60"><unientity>86B3</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 29 62"><unientity>86C9</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 29 63"><unientity>86B4</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 29 67"><unientity>86D8</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 29 6E"><unientity>86E3</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 29 6F"><unientity>86E9</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 29 71"><unientity>86EC</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 29 74"><unientity>86D5</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 29 77"><unientity>86D0</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 29 7A"><unientity>86D1</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 29 7E"><unientity>86DE</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 2A 25"><unientity>870B</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 2A 2F"><unientity>86FA</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 2A 33"><unientity>86F8</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 2A 34"><unientity>8706</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 2A 36"><unientity>870E</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 2A 38"><unientity>8709</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 2A 3A"><unientity>870A</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 2A 3E"><unientity>870D</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 2A 42"><unientity>874A</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 2A 43"><unientity>8723</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 2A 44"><unientity>8737</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 2A 45"><unientity>8728</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 2A 49"><unientity>8740</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 2A 4B"><unientity>872E</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 2A 4C"><unientity>873D</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 2A 4E"><unientity>871E</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 2A 53"><unientity>8743</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 2A 55"><unientity>8744</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 2A 57"><unientity>873E</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 2A 59"><unientity>8729</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 2A 5A"><unientity>8739</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 2A 5F"><unientity>871A</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 2A 64"><unientity>8731</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 2A 65"><unientity>8711</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 2A 66"><unientity>8712</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 2A 6B"><unientity>874F</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 2A 6C"><unientity>8771</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 2A 6D"><unientity>8763</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 2A 71"><unientity>8764</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 2A 73"><unientity>8765</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 2A 74"><unientity>877D</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 2A 79"><unientity>8758</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 2A 7B"><unientity>877B</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 2B 21"><unientity>8761</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 2B 24"><unientity>876A</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 2B 27"><unientity>874E</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 2B 28"><unientity>875F</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 2B 2D"><unientity>876F</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 2B 2E"><unientity>875D</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 2B 30"><unientity>876E</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 2B 33"><unientity>874D</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 2B 35"><unientity>8753</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 2B 3A"><unientity>87A3</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 2B 3D"><unientity>8793</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 2B 45"><unientity>8799</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 2B 48"><unientity>8788</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 2B 4C"><unientity>8798</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 2B 53"><unientity>8785</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 2B 54"><unientity>878B</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 2B 55"><unientity>8784</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 2B 58"><unientity>87A9</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 2B 5D"><unientity>8789</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 2B 60"><unientity>87AD</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 2B 66"><unientity>87BE</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 2B 6E"><unientity>87C4</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 2B 6F"><unientity>87AF</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 2B 72"><unientity>87AC</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 2B 78"><unientity>87AE</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 2B 7E"><unientity>87BF</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 2C 24"><unientity>87BD</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 2C 2C"><unientity>87EE</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 2C 30"><unientity>87F3</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 2C 31"><unientity>87F0</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 2C 34"><unientity>87EA</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 2C 36"><unientity>87DB</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 2C 37"><unientity>87E2</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 2C 39"><unientity>87EB</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 2C 3A"><unientity>87D6</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 2C 3F"><unientity>87F5</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 2C 47"><unientity>87E0</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 2C 48"><unientity>87D3</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 2C 49"><unientity>87DC</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 2C 4C"><unientity>87E3</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 2C 4D"><unientity>8801</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 2C 4F"><unientity>8803</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 2C 50"><unientity>880A</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 2C 55"><unientity>87F6</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 2C 57"><unientity>87F7</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 2C 5C"><unientity>880B</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 2C 5D"><unientity>8806</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 2C 5F"><unientity>87FE</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 2C 61"><unientity>8810</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 2C 63"><unientity>8819</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 2C 64"><unientity>8811</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 2C 66"><unientity>8818</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 2C 6A"><unientity>8813</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 2C 6B"><unientity>8816</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 2C 72"><unientity>8834</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 2C 73"><unientity>881C</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 2C 7A"><unientity>881B</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 2D 23"><unientity>8828</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 2D 2A"><unientity>8832</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 2D 2E"><unientity>882E</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 2D 32"><unientity>882D</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 2D 3C"><unientity>883C</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 2D 41"><unientity>8841</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 2D 42"><unientity>E9EF</unientity><desc>East Asian ideograph not in Unicode</desc></character>
+<character hex="23 2D 44"><unientity>8844</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 2D 4B"><unientity>8847</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 2D 51"><unientity>884A</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 2D 53"><unientity>884E</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 2D 56"><unientity>8852</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 2D 57"><unientity>8850</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 2D 59"><unientity>8856</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 2D 5A"><unientity>8855</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 2D 5E"><unientity>885C</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 2D 5F"><unientity>885A</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 2D 69"><unientity>8869</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 2D 6D"><unientity>886D</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 2D 6E"><unientity>887A</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 2D 71"><unientity>8875</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 2D 75"><unientity>8872</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 2D 79"><unientity>887D</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 2D 7C"><unientity>8879</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 2D 7D"><unientity>887F</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 2D 7E"><unientity>887E</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 2E 28"><unientity>88A2</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 2E 2A"><unientity>88A4</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 2E 2F"><unientity>88AA</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 2E 34"><unientity>889A</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 2E 3A"><unientity>8890</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 2E 3B"><unientity>888C</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 2E 3D"><unientity>88A0</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 2E 40"><unientity>8899</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 2E 45"><unientity>8897</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 2E 48"><unientity>88C9</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 2E 49"><unientity>88BF</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 2E 4A"><unientity>88BA</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 2E 4F"><unientity>88C0</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 2E 51"><unientity>88B2</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 2E 54"><unientity>88BC</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 2E 57"><unientity>88B7</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 2E 59"><unientity>88BD</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 2E 5A"><unientity>88C4</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 2E 5E"><unientity>88CB</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 2E 60"><unientity>88CC</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 2E 62"><unientity>88DB</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 2E 64"><unientity>88CE</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 2E 68"><unientity>88D2</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 2E 71"><unientity>88F1</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 2E 72"><unientity>88FE</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 2E 75"><unientity>88F2</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 2E 78"><unientity>8900</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 2E 7A"><unientity>88F0</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 2F 21"><unientity>88FC</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 2F 23"><unientity>88EF</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 2F 24"><unientity>8903</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 2F 2D"><unientity>8909</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 2F 2F"><unientity>8918</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 2F 35"><unientity>8906</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 2F 36"><unientity>890C</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 2F 37"><unientity>8919</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 2F 3D"><unientity>890A</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 2F 43"><unientity>8915</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 2F 45"><unientity>892F</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 2F 47"><unientity>8930</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 2F 4E"><unientity>8921</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 2F 4F"><unientity>8927</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 2F 51"><unientity>891F</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 2F 53"><unientity>8931</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 2F 54"><unientity>891E</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 2F 56"><unientity>8926</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 2F 57"><unientity>8922</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 2F 5A"><unientity>8935</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 2F 5D"><unientity>8941</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 2F 60"><unientity>8933</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 2F 66"><unientity>8954</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 2F 6F"><unientity>894F</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 2F 72"><unientity>8947</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 2F 7A"><unientity>894C</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 2F 7B"><unientity>8946</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 30 21"><unientity>894D</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 30 23"><unientity>8962</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 30 24"><unientity>895A</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 30 25"><unientity>895E</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 30 29"><unientity>895B</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 30 2C"><unientity>895C</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 30 2D"><unientity>895D</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 30 31"><unientity>8966</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 30 37"><unientity>896D</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 30 3A"><unientity>896B</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 30 3B"><unientity>896E</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 30 3C"><unientity>896C</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 30 41"><unientity>8976</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 30 42"><unientity>8974</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 30 49"><unientity>897B</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 30 4A"><unientity>897C</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 30 53"><unientity>8984</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 30 55"><unientity>8985</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 30 62"><unientity>8991</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 30 64"><unientity>8997</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 30 66"><unientity>8998</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 30 6B"><unientity>899C</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 30 6F"><unientity>89A1</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 30 76"><unientity>89A5</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 30 79"><unientity>89A9</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 30 7D"><unientity>89AF</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 31 2A"><unientity>89B8</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 31 2B"><unientity>89B7</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 31 2C"><unientity>89B6</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 31 2F"><unientity>89BC</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 31 32"><unientity>89BF</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 31 3A"><unientity>89D6</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 31 3B"><unientity>89D5</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 31 3F"><unientity>89DA</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 31 43"><unientity>89E5</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 31 45"><unientity>89DC</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 31 47"><unientity>89E1</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 31 4C"><unientity>89E9</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 31 4D"><unientity>89EB</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 31 53"><unientity>89ED</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 31 58"><unientity>89F1</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 31 5C"><unientity>89F3</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 31 5E"><unientity>89F5</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 31 60"><unientity>89F6</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 31 64"><unientity>89F7</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 31 6B"><unientity>89FF</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 31 6C"><unientity>8A06</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 31 6D"><unientity>8A07</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 31 6E"><unientity>8A04</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 31 70"><unientity>8A0F</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 31 71"><unientity>8A11</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 31 72"><unientity>8A12</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 31 73"><unientity>8A0D</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 31 7A"><unientity>8A27</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 31 7D"><unientity>8A29</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 32 25"><unientity>8A22</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 32 27"><unientity>8A51</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 32 28"><unientity>8A4A</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 32 2A"><unientity>8A4E</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 32 30"><unientity>8A56</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 32 37"><unientity>8A57</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 32 39"><unientity>8A48</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 32 3B"><unientity>8A58</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 32 3C"><unientity>8A52</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 32 40"><unientity>8A3D</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 32 42"><unientity>8A45</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 32 4F"><unientity>8A7F</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 32 50"><unientity>8A86</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 32 56"><unientity>8A61</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 32 58"><unientity>8A3E</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 32 59"><unientity>8A82</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 32 5D"><unientity>8A84</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 32 5E"><unientity>8A75</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 32 69"><unientity>8A8F</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 32 6F"><unientity>8A96</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 32 71"><unientity>8A9A</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 32 7E"><unientity>8AB6</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 33 21"><unientity>8ABE</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 33 25"><unientity>8ACF</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 33 27"><unientity>8AC6</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 33 2C"><unientity>8AD1</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 33 2D"><unientity>8AD3</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 33 31"><unientity>8AAF</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 33 33"><unientity>8AD4</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 33 36"><unientity>8ACD</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 33 38"><unientity>8AB9</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 33 3B"><unientity>8ADB</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 33 3F"><unientity>8AD0</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 33 40"><unientity>8AD7</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 33 44"><unientity>8AF3</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 33 45"><unientity>8AE2</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 33 49"><unientity>8B4C</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 33 4C"><unientity>8ADD</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 33 4E"><unientity>8AF6</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 33 4F"><unientity>8AF4</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 33 50"><unientity>8AF5</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 33 53"><unientity>8ADF</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 33 56"><unientity>8B03</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 33 57"><unientity>8AE4</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 33 59"><unientity>8B14</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 33 5D"><unientity>8AFC</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 33 62"><unientity>8ADE</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 33 63"><unientity>8AE1</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 33 64"><unientity>8B07</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 33 6B"><unientity>8B0C</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 33 6F"><unientity>8B1C</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 33 73"><unientity>8B16</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 33 76"><unientity>8B1F</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 33 78"><unientity>8B0B</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 33 79"><unientity>8B06</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 33 7A"><unientity>8B05</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 33 7C"><unientity>8B0F</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 33 7D"><unientity>8B10</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 34 22"><unientity>8B2B</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 34 2A"><unientity>8B37</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 34 2D"><unientity>8B26</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 34 30"><unientity>8B33</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 34 38"><unientity>8B3E</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 34 3A"><unientity>8B29</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 34 42"><unientity>8B48</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 34 44"><unientity>8B54</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 34 48"><unientity>8B53</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 34 49"><unientity>8B4A</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 34 4A"><unientity>8B46</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 34 4D"><unientity>8B56</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 34 4F"><unientity>8B3F</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 34 59"><unientity>8B59</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 34 5F"><unientity>8B4D</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 34 68"><unientity>8B6B</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 34 6B"><unientity>8B6D</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 34 70"><unientity>8B78</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 34 73"><unientity>8B45</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 34 78"><unientity>8B85</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 34 79"><unientity>8B81</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 34 7B"><unientity>8B7E</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 35 23"><unientity>8B8B</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 35 26"><unientity>8B87</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 35 2D"><unientity>8B95</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 35 2E"><unientity>8B94</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 35 37"><unientity>8B9C</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 35 3A"><unientity>8B9F</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 35 3D"><unientity>8C3A</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 35 44"><unientity>8C40</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 35 45"><unientity>8C42</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 35 4B"><unientity>8C47</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 35 4D"><unientity>8C4B</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 35 50"><unientity>8C4F</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 35 52"><unientity>8C55</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 35 54"><unientity>8C57</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 35 55"><unientity>8C5C</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 35 56"><unientity>8C5D</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 35 5C"><unientity>86C3</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 35 63"><unientity>8C68</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 35 65"><unientity>8C6D</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 35 6D"><unientity>8C73</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 35 6F"><unientity>8C74</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 35 71"><unientity>8C75</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 35 73"><unientity>8C77</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 35 74"><unientity>8C76</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 35 7B"><unientity>8C78</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 35 7D"><unientity>8C7B</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 36 2A"><unientity>8C86</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 36 2D"><unientity>8C85</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 36 2E"><unientity>8C88</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 36 39"><unientity>8C94</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 36 41"><unientity>8C9B</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 36 43"><unientity>8C9F</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 36 44"><unientity>8CA4</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 36 4E"><unientity>8CB0</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 36 51"><unientity>8CBA</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 36 52"><unientity>8CB5</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 36 53"><unientity>8CB9</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 36 57"><unientity>8CCD</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 36 5E"><unientity>8CD8</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 36 5F"><unientity>8CD5</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 36 67"><unientity>8CE8</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 36 68"><unientity>8CE9</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 36 6A"><unientity>8CE1</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 36 6F"><unientity>8CEB</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 36 70"><unientity>8CDA</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 36 72"><unientity>8CDD</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 36 74"><unientity>8CD9</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 36 76"><unientity>8CEE</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 36 7B"><unientity>8CF1</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 36 7C"><unientity>8CF5</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 36 7E"><unientity>8CFB</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 37 21"><unientity>8CF7</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 37 25"><unientity>8D04</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 37 26"><unientity>8CFE</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 37 2B"><unientity>8D07</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 37 2D"><unientity>8D09</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 37 32"><unientity>8D0C</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 37 39"><unientity>8D11</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 37 3A"><unientity>8D10</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 37 3B"><unientity>8D12</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 37 3D"><unientity>8D14</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 37 3E"><unientity>8D18</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 37 48"><unientity>8D6C</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 37 52"><unientity>8D78</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 37 5C"><unientity>8D7A</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 37 61"><unientity>8D84</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 37 71"><unientity>8D94</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 37 75"><unientity>8D8D</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 38 22"><unientity>8D96</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 38 2F"><unientity>8DA1</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 38 33"><unientity>8DA6</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 38 52"><unientity>8DAB</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 38 59"><unientity>8DAF</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 38 5A"><unientity>8DB0</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 38 66"><unientity>8DB2</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 38 6E"><unientity>8DBC</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 38 6F"><unientity>8DBA</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 38 70"><unientity>8DB9</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 38 71"><unientity>8DC2</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 38 72"><unientity>8DC1</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 38 73"><unientity>8DBF</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 39 21"><unientity>8DCF</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 39 22"><unientity>8DD6</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 39 27"><unientity>8DD0</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 39 2B"><unientity>8DC5</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 39 2F"><unientity>8DE4</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 39 34"><unientity>8DEC</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 39 35"><unientity>8DEB</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 39 36"><unientity>8DF4</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 39 38"><unientity>8DE9</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 39 3A"><unientity>8DE6</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 39 3B"><unientity>8DE3</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 39 3D"><unientity>8DE7</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 39 3E"><unientity>8DF2</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 39 3F"><unientity>8E09</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 39 41"><unientity>8DFD</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 39 44"><unientity>8DFF</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 39 46"><unientity>8E05</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 39 49"><unientity>8E01</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 39 4E"><unientity>8E04</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 39 50"><unientity>8E06</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 39 52"><unientity>8E2A</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 39 54"><unientity>8E23</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 39 57"><unientity>8E2E</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 39 58"><unientity>8E21</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 39 5C"><unientity>8E1E</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 39 64"><unientity>8E16</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 39 66"><unientity>8E26</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 39 67"><unientity>8E27</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 39 68"><unientity>8E14</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 39 69"><unientity>8E18</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 39 6F"><unientity>8E41</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 39 77"><unientity>8E40</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 39 79"><unientity>8E36</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 39 7E"><unientity>8E3D</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 3A 21"><unientity>8E30</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 3A 24"><unientity>8E47</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 3A 26"><unientity>8E46</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 3A 2E"><unientity>8E4C</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 3A 30"><unientity>8E50</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 3A 32"><unientity>8E4F</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 3A 34"><unientity>8E5C</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 3A 35"><unientity>8E62</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 3A 36"><unientity>8E60</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 3A 3A"><unientity>8E54</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 3A 3B"><unientity>8E67</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 3A 3E"><unientity>8E5A</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 3A 3F"><unientity>8E5E</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 3A 40"><unientity>8E55</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 3A 41"><unientity>8E61</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 3A 43"><unientity>8E5D</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 3A 44"><unientity>8E75</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 3A 45"><unientity>8E74</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 3A 46"><unientity>8E95</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 3A 48"><unientity>8E6D</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 3A 4B"><unientity>8E69</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 3A 52"><unientity>8E83</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 3A 53"><unientity>8E84</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 3A 57"><unientity>8E8B</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 3A 5D"><unientity>8E94</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 3A 5E"><unientity>8E9A</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 3A 5F"><unientity>8E92</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 3A 60"><unientity>8E93</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 3A 62"><unientity>8E90</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 3A 63"><unientity>8E98</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 3A 64"><unientity>8E9E</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 3A 6B"><unientity>8EA5</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 3A 6F"><unientity>8EA7</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 3A 71"><unientity>8EA9</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 3A 72"><unientity>8E99</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 3A 78"><unientity>8EB3</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 3A 7A"><unientity>8EBC</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 3A 7D"><unientity>8EB6</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 3B 2E"><unientity>8EC9</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 3B 2F"><unientity>8ECF</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 3B 31"><unientity>8ECE</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 3B 33"><unientity>8ED5</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 3B 3F"><unientity>8EFA</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 3B 42"><unientity>8EF9</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 3B 4B"><unientity>8EE8</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 3B 4F"><unientity>8EEB</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 3B 51"><unientity>8EFF</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 3B 56"><unientity>8F00</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 3B 59"><unientity>8F05</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 3B 5A"><unientity>8F08</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 3B 5B"><unientity>8F07</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 3B 63"><unientity>8F27</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 3B 64"><unientity>8F2C</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 3B 6B"><unientity>8F1E</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 3B 6D"><unientity>8F25</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 3B 6E"><unientity>8F20</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 3B 75"><unientity>8F17</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 3B 78"><unientity>8F36</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 3B 79"><unientity>8F2E</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 3B 7A"><unientity>8F33</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 3B 7D"><unientity>8F2D</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 3C 26"><unientity>8F39</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 3C 27"><unientity>8F34</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 3C 2D"><unientity>8F40</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 3C 30"><unientity>8F46</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 3C 31"><unientity>8F4A</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 3C 33"><unientity>8F47</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 3C 3D"><unientity>8F52</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 3C 48"><unientity>8F56</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 3C 49"><unientity>8F57</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 3C 4B"><unientity>8F55</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 3C 4C"><unientity>8F58</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 3C 4D"><unientity>8F5C</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 3C 4E"><unientity>8F5E</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 3C 53"><unientity>8F5D</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 3C 57"><unientity>8F62</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 3C 59"><unientity>8F63</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 3C 5A"><unientity>8F64</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 3C 65"><unientity>8FA4</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 3C 66"><unientity>8FA5</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 3C 6C"><unientity>8FB5</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 3C 6D"><unientity>8FB7</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 3C 6E"><unientity>8FBB</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 3C 70"><unientity>8FBC</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 3C 74"><unientity>8FBF</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 3C 75"><unientity>8FD2</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 3C 77"><unientity>8FCB</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 3C 7A"><unientity>8FCA</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 3C 7B"><unientity>8FD3</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 3C 7D"><unientity>8FCD</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 3D 21"><unientity>8FDA</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 3D 22"><unientity>8FD5</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 3D 2F"><unientity>8FE4</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 3D 30"><unientity>8FEE</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 3D 35"><unientity>8FF9</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 3D 3C"><unientity>8FFB</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 3D 3F"><unientity>9004</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 3D 40"><unientity>9008</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 3D 44"><unientity>9011</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 3D 45"><unientity>900B</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 3D 48"><unientity>900C</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 3D 49"><unientity>9021</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 3D 4A"><unientity>902D</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 3D 4E"><unientity>902C</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 3D 56"><unientity>9037</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 3D 57"><unientity>9034</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 3D 58"><unientity>902F</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 3D 59"><unientity>9036</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 3D 5B"><unientity>9046</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 3D 5D"><unientity>9052</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 3D 67"><unientity>9049</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 3D 6A"><unientity>9044</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 3D 74"><unientity>9062</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 3D 75"><unientity>905D</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 3D 78"><unientity>905B</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 3D 7B"><unientity>906B</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 3E 21"><unientity>9070</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 3E 25"><unientity>906F</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 3E 26"><unientity>9079</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 3E 28"><unientity>9076</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 3E 2A"><unientity>907B</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 3E 2C"><unientity>9085</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 3E 34"><unientity>9083</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 3E 37"><unientity>9088</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 3E 3A"><unientity>908B</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 3E 3F"><unientity>9099</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 3E 40"><unientity>9097</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 3E 43"><unientity>909B</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 3E 44"><unientity>909C</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 3E 48"><unientity>90A1</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 3E 51"><unientity>90A8</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 3E 54"><unientity>90A0</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 3E 58"><unientity>90AF</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 3E 59"><unientity>90B3</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 3E 5B"><unientity>90B6</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 3E 5D"><unientity>90B0</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 3E 5F"><unientity>90AD</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 3E 61"><unientity>90B2</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 3E 68"><unientity>90C9</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 3E 6A"><unientity>90BD</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 3E 6F"><unientity>90D5</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 3E 72"><unientity>90BE</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 3E 75"><unientity>90C7</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 3E 78"><unientity>90C8</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 3E 79"><unientity>90C3</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 3F 22"><unientity>90DD</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 3F 23"><unientity>90DF</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 3F 26"><unientity>90E2</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 3F 27"><unientity>90D8</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 3F 28"><unientity>90DB</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 3F 2A"><unientity>90DC</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 3F 2C"><unientity>90D7</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 3F 2D"><unientity>90E4</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 3F 2E"><unientity>90EF</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 3F 2F"><unientity>90EA</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 3F 32"><unientity>90F0</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 3F 33"><unientity>90F4</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 3F 34"><unientity>90F2</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 3F 3E"><unientity>90EB</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 3F 3F"><unientity>90F3</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 3F 46"><unientity>90FC</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 3F 47"><unientity>90FE</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 3F 49"><unientity>9104</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 3F 4A"><unientity>90FF</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 3F 4C"><unientity>9106</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 3F 4E"><unientity>9100</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 3F 50"><unientity>9107</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 3F 57"><unientity>910F</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 3F 58"><unientity>9111</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 3F 5A"><unientity>9116</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 3F 5C"><unientity>9114</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 3F 60"><unientity>910B</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 3F 63"><unientity>9118</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 3F 64"><unientity>911C</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 3F 66"><unientity>9120</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 3F 67"><unientity>9122</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 3F 6A"><unientity>911E</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 3F 71"><unientity>9124</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 3F 72"><unientity>911A</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 3F 74"><unientity>9125</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 3F 77"><unientity>912F</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 3F 79"><unientity>912B</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 40 21"><unientity>9132</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 40 24"><unientity>9126</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 40 2B"><unientity>9134</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 40 2C"><unientity>9136</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 40 31"><unientity>913A</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 40 32"><unientity>913B</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 40 3B"><unientity>9143</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 40 3E"><unientity>9146</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 40 3F"><unientity>9145</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 40 40"><unientity>9148</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 40 41"><unientity>9147</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 40 42"><unientity>9150</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 40 43"><unientity>914E</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 40 48"><unientity>9159</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 40 49"><unientity>915C</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 40 4D"><unientity>9156</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 40 50"><unientity>9158</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 40 52"><unientity>915A</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 40 53"><unientity>9161</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 40 56"><unientity>9164</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 40 61"><unientity>916F</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 40 62"><unientity>916E</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 40 66"><unientity>917A</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 40 68"><unientity>9172</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 40 69"><unientity>9179</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 40 6A"><unientity>9176</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 40 6B"><unientity>9174</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 40 6C"><unientity>9173</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 40 6D"><unientity>9185</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 40 6F"><unientity>9182</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 40 70"><unientity>918A</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 40 71"><unientity>9186</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 40 72"><unientity>918C</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 40 73"><unientity>9181</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 40 7B"><unientity>9191</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 40 7D"><unientity>9190</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 40 7E"><unientity>918E</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 41 24"><unientity>918D</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 41 25"><unientity>9193</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 41 2B"><unientity>919D</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 41 2C"><unientity>919A</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 41 30"><unientity>91A2</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 41 34"><unientity>E971</unientity><unientityalt>919B</unientityalt><desc>Variant of 4D4134 which maps to 919B</desc></character>
+<character hex="23 41 37"><unientity>91A8</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 41 3D"><unientity>91AA</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 41 41"><unientity>91AF</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 41 42"><unientity>91B1</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 41 47"><unientity>91AD</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 41 48"><unientity>91AE</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 41 4B"><unientity>91B4</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 41 4C"><unientity>91B2</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 41 4D"><unientity>91B5</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 41 56"><unientity>91BF</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 41 57"><unientity>91BD</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 41 5A"><unientity>91C2</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 41 5B"><unientity>91C4</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 41 5C"><unientity>91C3</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 41 61"><unientity>91D4</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 41 62"><unientity>91D3</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 41 63"><unientity>91D5</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 41 64"><unientity>91D9</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 41 68"><unientity>91E2</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 41 69"><unientity>91ED</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 41 6A"><unientity>91F7</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 41 6B"><unientity>91FA</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 41 6F"><unientity>91F2</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 41 71"><unientity>91E8</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 41 72"><unientity>91F6</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 41 73"><unientity>91EE</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 41 74"><unientity>91F4</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 41 77"><unientity>91F1</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 41 79"><unientity>91E9</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 41 7A"><unientity>91F8</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 42 21"><unientity>91F9</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 42 22"><unientity>91E4</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 42 23"><unientity>9204</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 42 25"><unientity>9201</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 42 26"><unientity>922B</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 42 27"><unientity>920A</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 42 28"><unientity>9225</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 42 2A"><unientity>9292</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 42 2C"><unientity>9228</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 42 2E"><unientity>9207</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 42 2F"><unientity>9203</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 42 31"><unientity>9200</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 42 32"><unientity>9218</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 42 33"><unientity>91FE</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 42 36"><unientity>9208</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 42 37"><unientity>9226</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 42 38"><unientity>921C</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 42 3B"><unientity>9224</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 42 43"><unientity>9212</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 42 48"><unientity>91FF</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 42 4A"><unientity>9216</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 42 4B"><unientity>9211</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 42 4E"><unientity>9206</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 42 4F"><unientity>92A2</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 42 51"><unientity>9230</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 42 52"><unientity>9249</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 42 54"><unientity>924D</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 42 55"><unientity>9248</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 42 58"><unientity>923A</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 42 5C"><unientity>922E</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 42 5F"><unientity>9233</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 42 61"><unientity>9266</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 42 64"><unientity>925E</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 42 68"><unientity>9235</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 42 6B"><unientity>9250</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 42 6C"><unientity>926B</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 42 6D"><unientity>9239</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 42 6F"><unientity>926D</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 42 70"><unientity>926C</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 42 71"><unientity>924F</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 42 74"><unientity>923F</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 42 77"><unientity>9260</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 42 7E"><unientity>9236</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 43 23"><unientity>924E</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 43 26"><unientity>924C</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 43 27"><unientity>9256</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 43 2B"><unientity>925A</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 43 2E"><unientity>9241</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 43 2F"><unientity>9283</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 43 31"><unientity>92A5</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 43 33"><unientity>9282</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 43 35"><unientity>92A8</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 43 37"><unientity>927C</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 43 38"><unientity>92A4</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 43 3E"><unientity>9276</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 43 3F"><unientity>928D</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 43 40"><unientity>92EE</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 43 42"><unientity>9288</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 43 43"><unientity>927A</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 43 45"><unientity>928E</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 43 46"><unientity>92A0</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 43 47"><unientity>9277</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 43 49"><unientity>92AA</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 43 50"><unientity>92A6</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 43 54"><unientity>927E</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 43 55"><unientity>929A</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 43 58"><unientity>92AB</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 43 5B"><unientity>9291</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 43 5D"><unientity>929B</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 43 62"><unientity>927F</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 43 64"><unientity>92A3</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 43 66"><unientity>92C8</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 43 6A"><unientity>92C3</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 43 6F"><unientity>92D0</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 43 71"><unientity>92F1</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 43 72"><unientity>92DF</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 43 75"><unientity>92E6</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 43 76"><unientity>92B6</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 43 77"><unientity>92C0</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 43 79"><unientity>92BE</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 43 7A"><unientity>92D9</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 43 7E"><unientity>92D5</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 44 21"><unientity>92C6</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 44 25"><unientity>92F4</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 44 27"><unientity>92CF</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 44 2A"><unientity>92B2</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 44 2C"><unientity>92E7</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 44 2D"><unientity>92C7</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 44 2E"><unientity>92F0</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 44 2F"><unientity>92DB</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 44 30"><unientity>92DC</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 44 31"><unientity>92D8</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 44 33"><unientity>92E9</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 44 35"><unientity>92DD</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 44 39"><unientity>92D1</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 44 3A"><unientity>92CA</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 44 3C"><unientity>92C2</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 44 3E"><unientity>92CC</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 44 40"><unientity>92EF</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 44 41"><unientity>92E8</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 44 43"><unientity>92EB</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 44 45"><unientity>92F5</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 44 48"><unientity>92F2</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 44 4C"><unientity>9303</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 44 4D"><unientity>9307</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 44 4E"><unientity>931E</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 44 4F"><unientity>9344</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 44 53"><unientity>931D</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 44 54"><unientity>92FA</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 44 58"><unientity>931F</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 44 5A"><unientity>9331</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 44 5B"><unientity>9306</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 44 5D"><unientity>92F9</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 44 5F"><unientity>930F</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 44 62"><unientity>9302</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 44 64"><unientity>9324</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 44 66"><unientity>9312</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 44 69"><unientity>9338</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 44 6A"><unientity>9323</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 44 6C"><unientity>9321</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 44 71"><unientity>9340</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 44 72"><unientity>9301</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 44 74"><unientity>9315</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 44 76"><unientity>9329</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 44 78"><unientity>932E</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 44 79"><unientity>932A</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 44 7B"><unientity>933F</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 44 7C"><unientity>933A</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 44 7E"><unientity>9335</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 45 22"><unientity>9314</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 45 28"><unientity>92FE</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 45 2F"><unientity>9342</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 45 31"><unientity>9341</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 45 32"><unientity>9319</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 45 35"><unientity>934C</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 45 41"><unientity>9379</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 45 44"><unientity>9386</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 45 47"><unientity>936A</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 45 48"><unientity>935C</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 45 4C"><unientity>934F</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 45 4D"><unientity>9347</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 45 51"><unientity>937A</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 45 53"><unientity>9356</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 45 54"><unientity>9371</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 45 56"><unientity>937C</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 45 5C"><unientity>9377</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 45 5D"><unientity>9349</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 45 5E"><unientity>9358</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 45 5F"><unientity>935A</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 45 60"><unientity>E9F0</unientity><desc>East Asian ideograph not in Unicode</desc></character>
+<character hex="23 45 62"><unientity>935F</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 45 64"><unientity>9376</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 45 66"><unientity>9355</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 45 67"><unientity>9354</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 45 6A"><unientity>9348</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 45 6B"><unientity>9374</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 45 6E"><unientity>9351</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 45 6F"><unientity>9364</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 45 71"><unientity>936B</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 45 72"><unientity>936D</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 45 73"><unientity>9360</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 45 77"><unientity>936E</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 45 79"><unientity>938F</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 45 7A"><unientity>93AC</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 45 7B"><unientity>9395</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 45 7E"><unientity>938B</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 46 21"><unientity>93B5</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 46 22"><unientity>938C</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 46 23"><unientity>9388</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 46 25"><unientity>93B9</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 46 27"><unientity>93A1</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 46 28"><unientity>93B0</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 46 29"><unientity>93A3</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 46 2A"><unientity>93B7</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 46 2B"><unientity>939B</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 46 2D"><unientity>9398</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 46 3C"><unientity>9389</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 46 3D"><unientity>93A4</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 46 40"><unientity>93BC</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 46 42"><unientity>93A7</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 46 44"><unientity>93BD</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 46 47"><unientity>93A6</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 46 48"><unientity>939A</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 46 4A"><unientity>93AA</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 46 4D"><unientity>939E</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 46 4F"><unientity>9397</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 46 51"><unientity>93BB</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 46 53"><unientity>93F1</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 46 56"><unientity>93DE</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 46 57"><unientity>93EE</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 46 5A"><unientity>93C7</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 46 5B"><unientity>93F2</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 46 5D"><unientity>93D4</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 46 5F"><unientity>93E5</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 46 62"><unientity>93F9</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 46 63"><unientity>93CA</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 46 64"><unientity>93C4</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 46 66"><unientity>93E8</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 46 67"><unientity>93E7</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 46 72"><unientity>93DA</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 46 73"><unientity>93D0</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 46 74"><unientity>93EF</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 46 75"><unientity>93DB</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 46 7C"><unientity>93CC</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 47 2C"><unientity>93D3</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 47 2F"><unientity>93A9</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 47 30"><unientity>93E6</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 47 32"><unientity>940B</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 47 34"><unientity>9413</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 47 3B"><unientity>940F</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 47 3C"><unientity>E9F1</unientity><desc>East Asian ideograph not in Unicode</desc></character>
+<character hex="23 47 3D"><unientity>93FB</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 47 49"><unientity>93FA</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 47 4D"><unientity>9419</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 47 4E"><unientity>940D</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 47 50"><unientity>9426</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 47 51"><unientity>9427</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 47 55"><unientity>9409</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 47 58"><unientity>9414</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 47 59"><unientity>9404</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 47 5C"><unientity>9422</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 47 5D"><unientity>9406</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 47 60"><unientity>9410</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 47 62"><unientity>9423</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 47 67"><unientity>93F5</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 47 69"><unientity>93F7</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 47 6A"><unientity>9407</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 47 6F"><unientity>940E</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 47 71"><unientity>9411</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 47 74"><unientity>943F</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 47 79"><unientity>9429</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 47 7C"><unientity>943D</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 48 27"><unientity>93F4</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 48 28"><unientity>9436</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 48 2B"><unientity>943B</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 48 2D"><unientity>9424</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 48 30"><unientity>9437</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 48 32"><unientity>9440</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 48 35"><unientity>942B</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 48 36"><unientity>942D</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 48 37"><unientity>9441</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 48 38"><unientity>9431</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 48 3D"><unientity>9467</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 48 3E"><unientity>944C</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 48 40"><unientity>9445</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 48 42"><unientity>9450</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 48 4A"><unientity>944A</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 48 53"><unientity>9466</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 48 57"><unientity>9464</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 48 58"><unientity>9462</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 48 5C"><unientity>9465</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 48 5D"><unientity>9455</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 48 5E"><unientity>945E</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 48 62"><unientity>946A</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 48 68"><unientity>946B</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 48 69"><unientity>946D</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 48 6C"><unientity>946F</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 48 6D"><unientity>9471</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 48 71"><unientity>9477</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 48 7B"><unientity>9482</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 48 7C"><unientity>9481</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 49 2E"><unientity>9585</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 49 30"><unientity>9588</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 49 31"><unientity>958C</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 49 34"><unientity>9597</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 49 36"><unientity>958E</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 49 38"><unientity>959F</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 49 3A"><unientity>95A0</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 49 42"><unientity>95AC</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 49 44"><unientity>95AB</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 49 48"><unientity>95BC</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 49 49"><unientity>95BE</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 49 4A"><unientity>95CD</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 49 4D"><unientity>95B9</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 49 4E"><unientity>95BA</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 49 4F"><unientity>95B6</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 49 50"><unientity>95BF</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 49 52"><unientity>95BD</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 49 59"><unientity>95C9</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 49 5D"><unientity>95CE</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 49 60"><unientity>95D5</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 49 62"><unientity>95D2</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 49 63"><unientity>95D3</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 49 64"><unientity>95D1</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 49 65"><unientity>95C3</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 49 66"><unientity>95DA</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 49 69"><unientity>95DE</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 49 6A"><unientity>95E0</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 49 6F"><unientity>95E5</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 49 72"><unientity>95E4</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 49 76"><unientity>95E7</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 49 7A"><unientity>961E</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 49 7B"><unientity>9624</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 49 7C"><unientity>9622</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 4A 21"><unientity>9627</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 4A 2F"><unientity>9642</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 4A 30"><unientity>963D</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 4A 32"><unientity>963C</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 4A 3C"><unientity>9651</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 4A 42"><unientity>9660</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 4A 44"><unientity>965C</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 4A 46"><unientity>9658</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 4A 4A"><unientity>965F</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 4A 4B"><unientity>9656</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 4A 51"><unientity>966C</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 4A 5D"><unientity>967B</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 4A 5E"><unientity>967F</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 4A 62"><unientity>967E</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 4A 63"><unientity>9684</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 4A 65"><unientity>9688</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 4A 6C"><unientity>9689</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 4A 6D"><unientity>9682</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 4A 6E"><unientity>9683</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 4A 79"><unientity>9696</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 4A 7A"><unientity>9697</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 4B 2F"><unientity>96A4</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 4B 35"><unientity>96A9</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 4B 37"><unientity>96AE</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 4B 3B"><unientity>96B0</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 4B 3C"><unientity>96B2</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 4B 3E"><unientity>96B3</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 4B 48"><unientity>96B9</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 4B 49"><unientity>96BC</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 4B 52"><unientity>96CE</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 4B 53"><unientity>96CA</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 4B 57"><unientity>96D2</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 4B 64"><unientity>96DF</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 4B 66"><unientity>96D8</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 4B 67"><unientity>96DD</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 4B 71"><unientity>96E9</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 4B 74"><unientity>96F1</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 4B 76"><unientity>96F0</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 4B 77"><unientity>96F4</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 4B 78"><unientity>96FA</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 4B 7A"><unientity>96F5</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 4C 22"><unientity>96FF</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 4C 27"><unientity>9702</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 4C 29"><unientity>9708</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 4C 2A"><unientity>9705</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 4C 38"><unientity>971B</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 4C 3D"><unientity>971D</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 4C 3E"><unientity>9719</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 4C 47"><unientity>9723</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 4C 49"><unientity>9722</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 4C 4A"><unientity>9724</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 4C 4E"><unientity>9728</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 4C 50"><unientity>9726</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 4C 52"><unientity>9731</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 4C 58"><unientity>9730</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 4C 5C"><unientity>9736</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 4C 6A"><unientity>9741</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 4C 6B"><unientity>9747</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 4C 6C"><unientity>9746</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 4C 6E"><unientity>9749</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 4C 75"><unientity>9758</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 4C 76"><unientity>975A</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 4C 78"><unientity>975D</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 4C 7B"><unientity>975F</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 4C 7D"><unientity>9764</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 4D 25"><unientity>9767</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 4D 2C"><unientity>976B</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 4D 30"><unientity>976E</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 4D 31"><unientity>9777</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 4D 32"><unientity>9778</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 4D 35"><unientity>9773</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 4D 37"><unientity>9783</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 4D 38"><unientity>977A</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 4D 3A"><unientity>9780</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 4D 3C"><unientity>9781</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 4D 40"><unientity>9784</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 4D 43"><unientity>977F</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 4D 49"><unientity>9789</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 4D 54"><unientity>9794</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 4D 59"><unientity>979B</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 4D 5A"><unientity>979F</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 4D 5C"><unientity>979A</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 4D 62"><unientity>979C</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 4D 6A"><unientity>97AC</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 4D 70"><unientity>97AE</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 4D 71"><unientity>97A8</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 4D 74"><unientity>97AB</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 4D 78"><unientity>97A5</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 4D 7A"><unientity>97B2</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 4D 7C"><unientity>97B4</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 4E 24"><unientity>97B3</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 4E 26"><unientity>97B5</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 4E 29"><unientity>97B9</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 4E 2D"><unientity>97B8</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 4E 35"><unientity>97BE</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 4E 38"><unientity>97C0</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 4E 3B"><unientity>97C5</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 4E 43"><unientity>97C9</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 4E 4B"><unientity>97CE</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 4E 4C"><unientity>97CD</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 4E 4E"><unientity>97D0</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 4E 51"><unientity>97D4</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 4E 53"><unientity>97D8</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 4E 54"><unientity>97D9</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 4E 59"><unientity>97DD</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 4E 5C"><unientity>97DE</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 4E 5E"><unientity>97E0</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 4E 60"><unientity>97E1</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 4E 6C"><unientity>97F5</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 4E 73"><unientity>97FA</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 4E 79"><unientity>9807</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 4E 7B"><unientity>980F</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 4E 7E"><unientity>980D</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 4F 23"><unientity>980E</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 4F 26"><unientity>9816</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 4F 2C"><unientity>9826</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 4F 2D"><unientity>981E</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 4F 34"><unientity>982B</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 4F 37"><unientity>9820</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 4F 38"><unientity>981F</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 4F 3D"><unientity>9833</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 4F 40"><unientity>982E</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 4F 44"><unientity>982F</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 4F 45"><unientity>9832</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 4F 4B"><unientity>9847</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 4F 4E"><unientity>9844</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 4F 60"><unientity>9852</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 4F 62"><unientity>984B</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 4F 66"><unientity>983F</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 4F 6A"><unientity>985C</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 4F 6B"><unientity>9859</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 4F 6F"><unientity>9857</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 4F 72"><unientity>9856</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 4F 77"><unientity>9862</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 4F 7E"><unientity>9868</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 50 21"><unientity>9865</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 50 22"><unientity>9866</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 50 29"><unientity>986C</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 50 30"><unientity>9873</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 50 31"><unientity>9874</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 50 39"><unientity>98AD</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 50 40"><unientity>98B4</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 50 48"><unientity>98B8</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 50 4A"><unientity>98BF</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 50 4D"><unientity>98BB</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 50 4E"><unientity>98C0</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 50 53"><unientity>98C6</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 50 5F"><unientity>98E1</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 50 60"><unientity>98E3</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 50 61"><unientity>98E4</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 50 63"><unientity>98E5</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 50 68"><unientity>98F1</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 50 6C"><unientity>98EB</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 51 24"><unientity>9907</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 51 28"><unientity>9902</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 51 2F"><unientity>9916</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 51 30"><unientity>9914</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 51 31"><unientity>9917</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 51 32"><unientity>9911</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 51 38"><unientity>9915</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 51 3A"><unientity>9924</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 51 3B"><unientity>991F</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 51 40"><unientity>991C</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 51 43"><unientity>9929</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 51 45"><unientity>9927</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 51 47"><unientity>991A</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 51 4F"><unientity>992E</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 51 50"><unientity>992C</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 51 51"><unientity>992A</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 51 53"><unientity>9933</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 51 54"><unientity>E972</unientity><unientityalt>9942</unientityalt><desc>Variant of 4D5154 which maps to 9942</desc></character>
+<character hex="23 51 55"><unientity>9932</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 51 56"><unientity>992B</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 51 58"><unientity>9931</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 51 5C"><unientity>993B</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 51 60"><unientity>993A</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 51 61"><unientity>9941</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 51 64"><unientity>9940</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 51 66"><unientity>993C</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 51 6A"><unientity>9948</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 51 6C"><unientity>9947</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 51 6D"><unientity>9949</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 51 70"><unientity>9943</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 51 71"><unientity>994D</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 51 72"><unientity>994C</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 51 73"><unientity>994E</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 51 74"><unientity>9950</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 51 7A"><unientity>9958</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 51 7B"><unientity>9954</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 51 7E"><unientity>9955</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 52 22"><unientity>E973</unientity><unientityalt>9957</unientityalt><desc>Variant of 475222 which maps to 9957</desc></character>
+<character hex="23 52 29"><unientity>995D</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 52 2B"><unientity>995F</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 52 2F"><unientity>9997</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 52 30"><unientity>9998</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 52 3B"><unientity>99A3</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 52 3C"><unientity>99A1</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 52 3E"><unientity>99A6</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 52 41"><unientity>99A9</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 52 42"><unientity>99AA</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 52 49"><unientity>99B5</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 52 4D"><unientity>99BF</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 52 4E"><unientity>99BC</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 52 4F"><unientity>99C3</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 52 53"><unientity>99B9</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 52 54"><unientity>99BD</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 52 61"><unientity>99D3</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 52 63"><unientity>99D4</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 52 65"><unientity>99C9</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 52 69"><unientity>99D8</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 52 74"><unientity>99EC</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 52 7A"><unientity>99F0</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 52 7B"><unientity>99E3</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 52 7C"><unientity>99EA</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 53 24"><unientity>9A02</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 53 29"><unientity>99F8</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 53 2A"><unientity>99F4</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 53 30"><unientity>99FB</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 53 31"><unientity>99FD</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 53 3D"><unientity>9A0F</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 53 3E"><unientity>9A0B</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 53 3F"><unientity>9A09</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 53 44"><unientity>9A04</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 53 45"><unientity>9A11</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 53 47"><unientity>9A05</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 53 48"><unientity>9A10</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 53 4C"><unientity>9A24</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 53 4D"><unientity>9A22</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 53 4F"><unientity>9A20</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 53 52"><unientity>9A27</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 53 59"><unientity>9A2F</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 53 5A"><unientity>9A38</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 53 60"><unientity>9A2D</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 53 61"><unientity>9A35</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 53 64"><unientity>9A32</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 53 69"><unientity>9A36</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 53 6A"><unientity>9A2E</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 53 70"><unientity>9A41</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 53 74"><unientity>9A3B</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 53 79"><unientity>9A42</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 53 7A"><unientity>9A44</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 53 7D"><unientity>9A48</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 53 7E"><unientity>9A4C</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 54 22"><unientity>9A4D</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 54 24"><unientity>9A52</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 54 27"><unientity>9A4A</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 54 2A"><unientity>9A58</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 54 2C"><unientity>9A56</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 54 33"><unientity>9A64</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 54 34"><unientity>9A66</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 54 3A"><unientity>9A6B</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 54 3F"><unientity>9AAD</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 54 41"><unientity>9AAB</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 54 43"><unientity>9AB1</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 54 45"><unientity>9AB3</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 54 49"><unientity>9AB6</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 54 4C"><unientity>9ABB</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 54 50"><unientity>9ABA</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 54 54"><unientity>9ABD</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 54 57"><unientity>9AC1</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 54 59"><unientity>9AC0</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 54 5A"><unientity>9AC2</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 54 5D"><unientity>9AC8</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 54 66"><unientity>9AD0</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 54 6A"><unientity>9AD1</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 54 6D"><unientity>9AD6</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 54 72"><unientity>9ADC</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 54 74"><unientity>9ADF</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 54 76"><unientity>9AE0</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 54 77"><unientity>9AE2</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 55 21"><unientity>9AE7</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 55 27"><unientity>9AEB</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 55 28"><unientity>9AF2</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 55 2A"><unientity>9AEF</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 55 32"><unientity>9AF9</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 55 35"><unientity>9AFD</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 55 36"><unientity>9B01</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 55 38"><unientity>9B02</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 55 3B"><unientity>9B00</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 55 3C"><unientity>9B08</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 55 3E"><unientity>9B04</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 55 41"><unientity>9B05</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 55 43"><unientity>9B0B</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 55 47"><unientity>9B0E</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 55 4E"><unientity>9B11</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 55 4F"><unientity>9B10</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 55 54"><unientity>9B18</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 55 56"><unientity>9B1D</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 55 5E"><unientity>9B1F</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 55 66"><unientity>9B23</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 55 6C"><unientity>9B29</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 55 73"><unientity>9B2D</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 55 74"><unientity>E9F2</unientity><desc>East Asian ideograph not in Unicode</desc></character>
+<character hex="23 55 76"><unientity>9B2F</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 55 7D"><unientity>9B34</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 56 22"><unientity>9B35</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 56 23"><unientity>9B37</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 56 36"><unientity>9B43</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 56 3A"><unientity>9B48</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 56 3C"><unientity>9B4E</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 56 3E"><unientity>9B4D</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 56 41"><unientity>9B4B</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 56 47"><unientity>9B51</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 56 5D"><unientity>9B74</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 56 63"><unientity>9B68</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 56 72"><unientity>9B80</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 56 73"><unientity>9B8C</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 56 7A"><unientity>9B95</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 56 7B"><unientity>9B7D</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 57 21"><unientity>9B83</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 57 29"><unientity>9B8E</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 57 2B"><unientity>9B90</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 57 2E"><unientity>9B93</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 57 2F"><unientity>9B97</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 57 31"><unientity>9B92</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 57 32"><unientity>9B98</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 57 36"><unientity>9B9F</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 57 39"><unientity>9B9D</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 57 3C"><unientity>9BAD</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 57 3D"><unientity>9B9A</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 57 3F"><unientity>9BA8</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 57 42"><unientity>9B9E</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 57 43"><unientity>9B99</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 57 49"><unientity>9B86</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 57 4E"><unientity>9BA0</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 57 56"><unientity>9BC7</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 57 59"><unientity>9BD2</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 57 5D"><unientity>9BC6</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 57 5E"><unientity>9BBF</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 57 5F"><unientity>9BC1</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 57 66"><unientity>9BB9</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 57 6B"><unientity>9BBB</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 57 6C"><unientity>9BD3</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 57 6E"><unientity>9BC0</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 57 72"><unientity>9BC8</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 57 77"><unientity>9BD7</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 57 7A"><unientity>9BD6</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 57 7C"><unientity>9BEB</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 58 23"><unientity>9BD5</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 58 27"><unientity>9BE4</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 58 2B"><unientity>9BF1</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 58 2C"><unientity>9BE1</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 58 2D"><unientity>9BDB</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 58 2F"><unientity>9BE2</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 58 31"><unientity>9BF0</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 58 34"><unientity>9BD4</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 58 3E"><unientity>9BFF</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 58 43"><unientity>9C06</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 58 44"><unientity>9C15</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 58 49"><unientity>9C0A</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 58 4B"><unientity>9C08</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 58 4C"><unientity>9C14</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 58 4D"><unientity>9C04</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 58 52"><unientity>9C02</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 58 54"><unientity>9C10</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 58 59"><unientity>9C12</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 58 5C"><unientity>9C09</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 58 66"><unientity>9C1C</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 58 69"><unientity>9C2F</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 58 6E"><unientity>9C23</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 58 70"><unientity>9C2E</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 58 71"><unientity>9C28</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 58 78"><unientity>9C21</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 58 79"><unientity>9C24</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 58 7E"><unientity>9C46</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 59 25"><unientity>9C32</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 59 26"><unientity>9C44</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 59 28"><unientity>9C48</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 59 29"><unientity>9C39</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 59 2A"><unientity>9C33</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 59 30"><unientity>9C47</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 59 32"><unientity>9C35</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 59 34"><unientity>9C37</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 59 38"><unientity>9C52</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 59 3B"><unientity>9C58</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 59 45"><unientity>9C51</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 59 49"><unientity>9C63</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 59 4F"><unientity>9C67</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 59 55"><unientity>9C5F</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 59 56"><unientity>9C60</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 59 58"><unientity>9C6D</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 59 5B"><unientity>9C68</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 59 5C"><unientity>9C6F</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 59 5E"><unientity>9C6E</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 59 6B"><unientity>9C7A</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 59 73"><unientity>9CE7</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 59 74"><unientity>9CF0</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 59 77"><unientity>9CF2</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 5A 21"><unientity>9D02</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 5A 22"><unientity>9D03</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 5A 23"><unientity>9CF7</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 5A 24"><unientity>9D04</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 5A 28"><unientity>9D07</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 5A 2C"><unientity>9CF8</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 5A 2F"><unientity>9D2A</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 5A 30"><unientity>9D25</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 5A 3F"><unientity>9D1E</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 5A 44"><unientity>9D1D</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 5A 48"><unientity>9D1F</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 5A 4F"><unientity>9D41</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 5A 53"><unientity>9D36</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 5A 63"><unientity>9D3E</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 5A 65"><unientity>9D30</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 5A 68"><unientity>9D42</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 5A 69"><unientity>9D40</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 5A 6B"><unientity>9D3D</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 5A 70"><unientity>9D5C</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 5A 75"><unientity>9D53</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 5A 7B"><unientity>9D59</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 5B 26"><unientity>9D5A</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 5B 2A"><unientity>9D52</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 5B 2C"><unientity>9D77</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 5B 2E"><unientity>9D8A</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 5B 2F"><unientity>9D7A</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 5B 35"><unientity>9D87</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 5B 3F"><unientity>9D78</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 5B 42"><unientity>9D7E</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 5B 47"><unientity>9D69</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 5B 4D"><unientity>9D7B</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 5B 4F"><unientity>9D83</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 5B 52"><unientity>9D6F</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 5B 59"><unientity>9DA9</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 5B 5E"><unientity>9D92</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 5B 60"><unientity>9D98</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 5B 66"><unientity>9DA4</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 5B 67"><unientity>9DAA</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 5B 6A"><unientity>9DA1</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 5B 6B"><unientity>9D9A</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 5B 70"><unientity>9D96</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 5B 74"><unientity>9DB1</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 5B 76"><unientity>9DB6</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 5B 77"><unientity>9DBC</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 5B 79"><unientity>9DC0</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 5B 7A"><unientity>9DC1</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 5B 7B"><unientity>9DB8</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 5B 7C"><unientity>9DBA</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 5B 7E"><unientity>9DCF</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 5C 22"><unientity>9DC7</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 5C 27"><unientity>9DC3</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 5C 28"><unientity>9DBB</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 5C 32"><unientity>9DB9</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 5C 34"><unientity>9DAC</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 5C 36"><unientity>9DB2</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 5C 3A"><unientity>9DDF</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 5C 3E"><unientity>9DD9</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 5C 45"><unientity>9DD6</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 5C 46"><unientity>9DDE</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 5C 4F"><unientity>9DE9</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 5C 57"><unientity>9DF2</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 5C 5B"><unientity>9DF8</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 5C 5C"><unientity>9DFC</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 5C 5F"><unientity>9DEB</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 5C 65"><unientity>9DEF</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 5C 6A"><unientity>9DED</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 5C 6C"><unientity>9DE6</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 5C 6D"><unientity>9DEE</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 5C 71"><unientity>9E07</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 5C 7E"><unientity>9DFD</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 5D 27"><unientity>9E0E</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 5D 2B"><unientity>9E11</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 5D 36"><unientity>9E15</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 5D 37"><unientity>9E18</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 5D 39"><unientity>9E1C</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 5D 3A"><unientity>9E1B</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 5D 3B"><unientity>9E1D</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 5D 3C"><unientity>9E75</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 5D 42"><unientity>9E7A</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 5D 43"><unientity>9E7B</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 5D 47"><unientity>9E80</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 5D 48"><unientity>9E83</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 5D 49"><unientity>9E84</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 5D 4B"><unientity>9E88</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 5D 4F"><unientity>9E87</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 5D 55"><unientity>9E90</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 5D 58"><unientity>9E8C</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 5D 5A"><unientity>9E95</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 5D 5C"><unientity>9E91</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 5D 5D"><unientity>9E9B</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 5D 66"><unientity>9E9E</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 5D 77"><unientity>9EAD</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 5D 79"><unientity>9EAF</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 5D 7A"><unientity>9EB0</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 5E 30"><unientity>9EC1</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 5E 35"><unientity>9EC6</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 5E 37"><unientity>9EC8</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 5E 42"><unientity>9ECC</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 5E 4A"><unientity>9ED0</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 5E 4C"><unientity>9ED3</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 5E 53"><unientity>9EDA</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 5E 55"><unientity>9EDF</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 5E 57"><unientity>9EE3</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 5E 59"><unientity>9EE5</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 5E 5C"><unientity>9EE7</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 5E 60"><unientity>9EEE</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 5E 66"><unientity>9EF0</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 5E 6F"><unientity>9EF6</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 5E 74"><unientity>9EF9</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 5E 76"><unientity>9EFB</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 5E 77"><unientity>9EFC</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 5E 7A"><unientity>9EFD</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 5E 7B"><unientity>E9F3</unientity><desc>East Asian ideograph not in Unicode</desc></character>
+<character hex="23 5E 7C"><unientity>9EFF</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 5E 7D"><unientity>9F02</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 5F 2F"><unientity>9F0F</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 5F 31"><unientity>9F10</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 5F 32"><unientity>9F12</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 5F 33"><unientity>9F16</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 5F 34"><unientity>9F17</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 5F 37"><unientity>9F1A</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 5F 45"><unientity>9F22</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 5F 48"><unientity>9F2B</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 5F 49"><unientity>9F26</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 5F 53"><unientity>9F2F</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 5F 5E"><unientity>9F39</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 5F 5F"><unientity>9F37</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 5F 64"><unientity>9F3D</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 5F 69"><unientity>9F41</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 5F 6D"><unientity>9F45</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 5F 6F"><unientity>9F46</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 5F 71"><unientity>9F48</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 5F 73"><unientity>9F49</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 5F 79"><unientity>9F4E</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 5F 7B"><unientity>9F4F</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 5F 7C"><unientity>9F54</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 5F 7E"><unientity>9F55</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 60 23"><unientity>9F57</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 60 28"><unientity>9F60</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 60 3F"><unientity>9F6E</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 60 40"><unientity>9F6F</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 60 47"><unientity>9F76</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 60 5B"><unientity>9F8E</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 60 61"><unientity>9F93</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 60 62"><unientity>9F95</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 60 6B"><unientity>9FA0</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 60 71"><unientity>9FA5</unientity><desc>East Asian ideograph</desc></character>
+<character hex="23 60 72"><unientity>9FA4</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 30 32"><unientity>5E76</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 30 4C"><unientity>5E72</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 30 4D"><unientity>4E71</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 30 58"><unientity>4E9A</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 31 38"><unientity>5E03</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 31 3C"><unientity>5360</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 31 4C"><unientity>6765</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 31 4F"><unientity>4ED1</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 31 5D"><unientity>4FA0</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 31 69"><unientity>E901</unientity><desc>Duplicate simplified ideograph</desc></character>
+<character hex="27 31 6C"><unientity>4ED3</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 31 73"><unientity>4EEC</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 31 79"><unientity>4FE9</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 32 24"><unientity>4E2A</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 32 26"><unientity>4F25</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 32 2D"><unientity>4F26</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 32 2E"><unientity>E902</unientity><desc>Duplicate simplified ideograph</desc></character>
+<character hex="27 32 33"><unientity>4F1F</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 32 35"><unientity>4FA7</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 32 38"><unientity>4FA6</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 32 3E"><unientity>5BB6</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 32 40"><unientity>5907</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 32 41"><unientity>6770</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 32 43"><unientity>4F27</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 32 44"><unientity>4F1E</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 32 46"><unientity>4F20</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 32 47"><unientity>503A</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 32 49"><unientity>4EC5</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 32 4A"><unientity>503E</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 32 4C"><unientity>4F24</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 32 51"><unientity>4FA5</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 32 55"><unientity>4EC6</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 32 56"><unientity>4F2A</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 32 57"><unientity>8C61</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 32 58"><unientity>4FA8</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 32 59"><unientity>4EEA</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 32 5A"><unientity>4EBF</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 32 5D"><unientity>4EF7</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 32 5E"><unientity>4FAC</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 32 60"><unientity>4FA9</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 32 61"><unientity>4FED</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 32 62"><unientity>50A7</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 32 63"><unientity>E903</unientity><desc>Duplicate simplified ideograph</desc></character>
+<character hex="27 32 65"><unientity>4FE6</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 32 66"><unientity>4F18</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 32 67"><unientity>507F</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 32 69"><unientity>50A8</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 32 6A"><unientity>4FEA</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 32 6B"><unientity>4FE8</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 32 73"><unientity>51F6</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 32 7A"><unientity>513F</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 32 7B"><unientity>5156</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 33 23"><unientity>4E24</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 33 40"><unientity>51BB</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 33 48"><unientity>51EF</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 33 6B"><unientity>514B</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 33 6D"><unientity>5219</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 33 70"><unientity>521A</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 33 76"><unientity>5240</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 33 78"><unientity>521B</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 33 7C"><unientity>5212</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 33 7E"><unientity>5267</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 34 21"><unientity>5251</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 34 22"><unientity>5218</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 34 23"><unientity>5242</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 34 2F"><unientity>52B2</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 34 33"><unientity>52A1</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 34 34"><unientity>52A8</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 34 35"><unientity>52B3</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 34 36"><unientity>52CB</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 34 37"><unientity>80DC</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 34 38"><unientity>52BF</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 34 3C"><unientity>52B1</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 34 3D"><unientity>529D</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 34 51"><unientity>6C47</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 34 52"><unientity>532E</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 34 55"><unientity>533A</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 34 5F"><unientity>5346</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 34 60"><unientity>534F</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 34 7A"><unientity>538C</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 34 7B"><unientity>5389</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 34 7D"><unientity>53C2</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 35 2B"><unientity>4E1B</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 36 3E"><unientity>5458</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 36 48"><unientity>95EE</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 36 49"><unientity>54D1</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 36 63"><unientity>4E27</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 36 68"><unientity>5355</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 36 6D"><unientity>5524</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 36 6F"><unientity>4E54</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 36 71"><unientity>54DF</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 36 78"><unientity>556C</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 36 7A"><unientity>5417</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 37 21"><unientity>545C</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 37 22"><unientity>545B</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 37 27"><unientity>5567</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 37 2C"><unientity>53F9</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 37 2E"><unientity>5455</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 37 30"><unientity>5C1D</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 37 31"><unientity>55BD</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 37 32"><unientity>5520</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 37 33"><unientity>5578</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 37 3D"><unientity>5480</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 37 40"><unientity>53FD</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 37 44"><unientity>5428</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 37 45"><unientity>55B7</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 37 46"><unientity>E904</unientity><desc>Duplicate simplified ideograph</desc></character>
+<character hex="27 37 47"><unientity>54DD</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 37 4B"><unientity>55F3</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 37 4E"><unientity>549B</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 37 51"><unientity>5413</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 37 54"><unientity>565C</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 37 55"><unientity>5411</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 37 56"><unientity>5499</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 37 5A"><unientity>4E25</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 37 5B"><unientity>5624</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 37 5C"><unientity>556D</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 37 5D"><unientity>55EB</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 37 5E"><unientity>56A3</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 37 61"><unientity>E905</unientity><desc>Duplicate simplified ideograph</desc></character>
+<character hex="27 37 62"><unientity>5453</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 37 64"><unientity>5631</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 37 6F"><unientity>56EF</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 37 70"><unientity>56F4</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 37 71"><unientity>56ED</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 37 72"><unientity>5706</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 37 73"><unientity>56E2</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 37 74"><unientity>56FE</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 38 3B"><unientity>6267</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 38 3E"><unientity>57A9</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 38 44"><unientity>62A5</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 38 45"><unientity>5C27</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 38 4A"><unientity>573A</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 38 4D"><unientity>6D82</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 38 55"><unientity>575E</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 38 56"><unientity>5757</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 38 59"><unientity>5C18</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 38 5A"><unientity>57AB</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 38 5B"><unientity>5811</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 38 60"><unientity>575F</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 38 61"><unientity>5760</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 38 62"><unientity>5815</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 38 64"><unientity>575B</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 38 67"><unientity>57A6</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 38 69"><unientity>538B</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 38 6B"><unientity>5739</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 38 6C"><unientity>5792</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 38 6D"><unientity>5784</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 38 6E"><unientity>574F</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 38 6F"><unientity>575C</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 38 71"><unientity>575D</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 38 74"><unientity>58EE</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 38 76"><unientity>58F6</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 38 77"><unientity>5BFF</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 39 23"><unientity>4F19</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 39 24"><unientity>68A6</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 39 2E"><unientity>5939</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 39 3F"><unientity>5941</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 39 40"><unientity>593A</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 39 41"><unientity>594B</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 39 53"><unientity>5986</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 3A 27"><unientity>5987</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 3A 28"><unientity>5A04</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 3A 36"><unientity>5988</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 3A 3B"><unientity>59AA</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 3A 41"><unientity>5A34</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 3A 43"><unientity>5A75</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 3A 44"><unientity>5A07</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 3A 45"><unientity>59A9</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 3A 48"><unientity>5AD4</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 3A 4A"><unientity>5A74</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 3A 4B"><unientity>5A76</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 3A 5B"><unientity>5B59</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 3A 5F"><unientity>5B5A</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 3A 60"><unientity>5B66</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 3A 63"><unientity>5B6A</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 3B 2E"><unientity>5BDD</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 3B 31"><unientity>5B9E</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 3B 32"><unientity>5B81</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 3B 35"><unientity>5BBD</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 3B 36"><unientity>5BA1</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 3B 37"><unientity>5199</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 3B 38"><unientity>5BA0</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 3B 39"><unientity>5B9D</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 3B 3F"><unientity>4E13</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 3B 40"><unientity>5C06</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 3B 42"><unientity>5BFB</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 3B 43"><unientity>5BF9</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 3B 44"><unientity>5BFC</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 3B 4C"><unientity>5C34</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 3B 60"><unientity>5C61</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 3B 61"><unientity>5C42</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 3B 63"><unientity>5C5E</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 3B 6E"><unientity>5188</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 3B 74"><unientity>5CE1</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 3B 79"><unientity>5C9B</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 3C 28"><unientity>5C9A</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 3C 2A"><unientity>5D2D</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 3C 2B"><unientity>5C96</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 3C 2D"><unientity>5C7F</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 3C 2E"><unientity>5CB3</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 3C 31"><unientity>5CE6</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 3C 32"><unientity>5DC5</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 3C 33"><unientity>5CA9</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 3C 4F"><unientity>5E05</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 3C 51"><unientity>5E08</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 3C 52"><unientity>5E10</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 3C 53"><unientity>5E26</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 3C 58"><unientity>5E27</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 3C 5C"><unientity>5E3C</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 3C 5E"><unientity>5E01</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 3C 60"><unientity>5E1C</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 3C 61"><unientity>5E2E</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 3C 6B"><unientity>51E0</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 3C 76"><unientity>5E93</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 3C 77"><unientity>5750</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 3C 7E"><unientity>5395</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 3D 27"><unientity>5E9F</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 3D 2A"><unientity>5E7F</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 3D 2B"><unientity>5E99</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 3D 2C"><unientity>5382</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 3D 2D"><unientity>5E9E</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 3D 2E"><unientity>5E90</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 3D 2F"><unientity>5385</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 3D 47"><unientity>5F20</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 3D 4B"><unientity>5F39</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 3D 4C"><unientity>5F25</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 3D 4D"><unientity>5F2F</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 3D 4F"><unientity>E906</unientity><desc>Duplicate simplified ideograph</desc></character>
+<character hex="27 3D 65"><unientity>540E</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 3D 67"><unientity>5F84</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 3D 6C"><unientity>4ECE</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 3D 6F"><unientity>590D</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 3D 74"><unientity>5F7B</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 3D 76"><unientity>5F81</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 3E 57"><unientity>5FF0</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 3E 5C"><unientity>95F7</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 3E 5E"><unientity>6005</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 3E 61"><unientity>6076</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 3E 6C"><unientity>60EC</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 3E 70"><unientity>607B</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 3E 77"><unientity>7231</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 3E 7E"><unientity>607C</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 3F 28"><unientity>6001</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 3F 29"><unientity>5FFE</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 3F 2B"><unientity>6006</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 3F 2E"><unientity>5E86</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 3F 31"><unientity>60ED</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 3F 33"><unientity>5FE7</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 3F 36"><unientity>8651</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 3F 38"><unientity>60E8</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 3F 39"><unientity>60EF</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 3F 3A"><unientity>6078</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 3F 3B"><unientity>6002</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 3F 3C"><unientity>6B32</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 3F 3E"><unientity>5BAA</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 3F 3F"><unientity>51ED</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 3F 41"><unientity>60AF</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 3F 42"><unientity>6124</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 3F 44"><unientity>60EE</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 3F 45"><unientity>6187</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 3F 47"><unientity>60EB</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 3F 48"><unientity>5FC6</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 3F 4A"><unientity>5E94</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 3F 4B"><unientity>601C</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 3F 4E"><unientity>6073</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 3F 54"><unientity>6000</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 3F 55"><unientity>61D2</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 3F 56"><unientity>60AC</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 3F 58"><unientity>5FCF</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 3F 59"><unientity>6151</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 3F 5B"><unientity>60E7</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 3F 5C"><unientity>604B</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 3F 6E"><unientity>6218</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 3F 6F"><unientity>620F</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 40 6C"><unientity>631F</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 40 7B"><unientity>5377</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 40 7D"><unientity>626B</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 40 7E"><unientity>626A</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 41 23"><unientity>6302</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 41 36"><unientity>62A1</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 41 3C"><unientity>62E3</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 41 3F"><unientity>626C</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 41 42"><unientity>6325</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 41 4F"><unientity>635F</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 41 53"><unientity>6363</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 41 55"><unientity>62A2</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 41 5A"><unientity>5C4F</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 41 5B"><unientity>631A</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 41 5F"><unientity>6402</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 41 60"><unientity>63B4</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 41 65"><unientity>635E</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 41 66"><unientity>62E8</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 41 68"><unientity>6320</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 41 6E"><unientity>6251</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 41 71"><unientity>629A</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 41 74"><unientity>62E5</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 41 76"><unientity>51FB</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 41 77"><unientity>631E</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 41 7A"><unientity>6321</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 41 7C"><unientity>636E</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 41 7D"><unientity>63B3</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 41 7E"><unientity>62E9</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 42 22"><unientity>62C5</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 42 24"><unientity>6361</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 42 25"><unientity>6324</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 42 26"><unientity>62E7</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 42 28"><unientity>62DF</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 42 29"><unientity>6401</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 42 2A"><unientity>6269</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 42 2B"><unientity>63B7</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 42 2C"><unientity>64B5</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 42 2E"><unientity>6270</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 42 2F"><unientity>64DE</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 42 30"><unientity>6446</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 42 31"><unientity>62E2</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 42 33"><unientity>62E6</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 42 34"><unientity>6400</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 42 35"><unientity>6444</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 42 37"><unientity>631B</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 42 38"><unientity>644A</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 42 3A"><unientity>6405</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 42 3B"><unientity>63FD</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 42 47"><unientity>8D25</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 42 4F"><unientity>542F</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 42 52"><unientity>654C</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 42 54"><unientity>6570</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 42 56"><unientity>655B</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 42 57"><unientity>6BD9</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 42 63"><unientity>65A9</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 42 66"><unientity>65AD</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 43 2D"><unientity>65F6</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 43 32"><unientity>663C</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 43 40"><unientity>6656</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 43 41"><unientity>6655</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 43 43"><unientity>7545</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 43 44"><unientity>6682</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 43 48"><unientity>6653</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 43 49"><unientity>E907</unientity><desc>Duplicate simplified ideograph</desc></character>
+<character hex="27 43 4B"><unientity>66A7</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 43 4D"><unientity>65F7</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 43 55"><unientity>4E66</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 43 5A"><unientity>4F1A</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 43 66"><unientity>80E7</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 44 26"><unientity>4E1C</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 44 63"><unientity>6761</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 44 68"><unientity>67AD</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 44 69"><unientity>6800</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 44 6D"><unientity>5F03</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 44 6E"><unientity>6816</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 44 71"><unientity>680B</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 44 76"><unientity>6808</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 44 7A"><unientity>67A3</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 44 7C"><unientity>832D</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 45 26"><unientity>6781</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 45 2A"><unientity>6768</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 45 2B"><unientity>6862</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 45 2D"><unientity>4E1A</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 45 2F"><unientity>67AB</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 45 37"><unientity>8363</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 45 39"><unientity>6784</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 45 40"><unientity>67AA</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 45 44"><unientity>6837</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 45 46"><unientity>6869</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 45 47"><unientity>6807</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 45 49"><unientity>67A2</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 45 4A"><unientity>697C</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 45 4C"><unientity>6868</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 45 4E"><unientity>4E50</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 45 4F"><unientity>679E</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 45 53"><unientity>692D</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 45 55"><unientity>6811</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 45 57"><unientity>6866</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 45 58"><unientity>6734</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 45 5B"><unientity>6865</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 45 5D"><unientity>673A</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 45 5F"><unientity>6863</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 45 61"><unientity>68C0</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 45 62"><unientity>6867</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 45 63"><unientity>67E0</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 45 64"><unientity>69DF</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 45 65"><unientity>67DC</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 45 66"><unientity>69DB</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 45 6A"><unientity>6988</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 45 6B"><unientity>691F</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 45 6C"><unientity>6809</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 45 6D"><unientity>6A79</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 45 6E"><unientity>680F</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 45 6F"><unientity>6A31</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 45 70"><unientity>6743</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 45 71"><unientity>6984</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 45 78"><unientity>94A6</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 45 7A"><unientity>E908</unientity><desc>Duplicate simplified ideograph</desc></character>
+<character hex="27 45 7C"><unientity>6B27</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 45 7E"><unientity>6B24</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 46 21"><unientity>6B22</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 46 29"><unientity>5C81</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 46 2A"><unientity>5386</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 46 2B"><unientity>5F52</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 46 33"><unientity>6B8B</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 46 35"><unientity>6B87</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 46 36"><unientity>6B93</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 46 37"><unientity>6BA1</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 46 38"><unientity>6B7C</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 46 3B"><unientity>6740</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 46 3C"><unientity>58F3</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 46 40"><unientity>6BB4</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 46 55"><unientity>6C14</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 46 58"><unientity>6C22</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 47 4E"><unientity>6CFE</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 47 59"><unientity>6CEA</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 47 68"><unientity>6D45</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 47 74"><unientity>6E0A</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 47 77"><unientity>6CA6</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 47 7D"><unientity>6D8C</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 48 2D"><unientity>6C64</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 48 30"><unientity>6D4B</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 48 31"><unientity>6DA1</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 48 33"><unientity>6D51</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 48 3D"><unientity>6C9F</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 48 41"><unientity>6C85</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 48 42"><unientity>706D</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 48 44"><unientity>6E7F</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 48 48"><unientity>6CA7</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 48 4B"><unientity>51C6</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 48 4F"><unientity>6CAA</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 48 54"><unientity>6E0D</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 48 55"><unientity>6DA8</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 48 57"><unientity>6C49</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 48 58"><unientity>6EE1</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 48 59"><unientity>6D9F</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 48 5A"><unientity>6E10</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 48 5F"><unientity>6EDE</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 48 63"><unientity>6D46</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 48 64"><unientity>6E17</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 48 65"><unientity>6E14</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 48 6C"><unientity>6CFC</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 48 6D"><unientity>6DA6</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 48 6E"><unientity>6DA7</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 48 6F"><unientity>6D01</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 48 71"><unientity>6D47</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 48 78"><unientity>6E83</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 48 7B"><unientity>6DC0</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 48 7C"><unientity>6D53</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 49 21"><unientity>6CFD</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 49 22"><unientity>6D4A</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 49 26"><unientity>6D4E</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 49 27"><unientity>6CDE</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 49 28"><unientity>6EE8</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 49 2B"><unientity>6EE5</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 49 2D"><unientity>6D9B</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 49 2E"><unientity>6DA9</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 49 31"><unientity>6C88</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 49 32"><unientity>6CFB</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 49 33"><unientity>6E0E</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 49 34"><unientity>6E85</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 49 36"><unientity>6EE4</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 49 37"><unientity>6D4F</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 49 3A"><unientity>6FD1</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 49 3B"><unientity>6CA5</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 49 3C"><unientity>6FD2</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 49 3D"><unientity>6F47</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 49 3F"><unientity>6F9C</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 49 41"><unientity>6D12</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 49 42"><unientity>6EE9</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 49 43"><unientity>6E7E</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 49 44"><unientity>6EE6</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 49 4A"><unientity>707E</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 49 51"><unientity>4E3A</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 49 5D"><unientity>4E4C</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 49 66"><unientity>65E0</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 49 6A"><unientity>70BC</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 49 6D"><unientity>70E6</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 49 6F"><unientity>7080</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 49 75"><unientity>6247</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 49 7D"><unientity>70ED</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 49 7E"><unientity>70EB</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 4A 21"><unientity>70BD</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 4A 22"><unientity>7096</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 4A 24"><unientity>706F</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 4A 25"><unientity>7116</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 4A 26"><unientity>70E7</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 4A 2E"><unientity>8425</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 4A 30"><unientity>70DB</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 4A 31"><unientity>707F</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 4A 33"><unientity>70E9</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 4A 36"><unientity>70C1</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 4A 37"><unientity>7089</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 4A 38"><unientity>70C2</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 4A 42"><unientity>7237</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 4A 45"><unientity>5C14</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 4A 46"><unientity>5899</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 4A 4C"><unientity>724D</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 4A 53"><unientity>5B83</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 4A 5A"><unientity>7275</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 4A 5E"><unientity>8366</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 4A 61"><unientity>728A</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 4A 62"><unientity>727A</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 4A 68"><unientity>72B6</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 4A 70"><unientity>72ED</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 4A 72"><unientity>72C8</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 4A 79"><unientity>72B9</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 4A 7E"><unientity>72F1</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 4B 22"><unientity>72EF</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 4B 23"><unientity>72EE</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 4B 27"><unientity>72EC</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 4B 28"><unientity>72DE</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 4B 29"><unientity>83B7</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 4B 2A"><unientity>72B7</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 4B 2B"><unientity>517D</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 4B 2C"><unientity>730E</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 4B 2D"><unientity>736D</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 4B 2E"><unientity>732E</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 4B 2F"><unientity>7321</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 4B 47"><unientity>73B0</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 4B 57"><unientity>73F2</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 4B 5E"><unientity>739B</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 4B 5F"><unientity>7410</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 4B 64"><unientity>7391</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 4B 67"><unientity>73AF</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 4B 68"><unientity>7477</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 4B 69"><unientity>73BA</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 4B 6B"><unientity>73D1</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 4B 74"><unientity>74EF</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 4B 7A"><unientity>4EA7</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 4C 2D"><unientity>4EA9</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 4C 31"><unientity>7544</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 4C 33"><unientity>6BD5</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 4C 34"><unientity>5F02</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 4C 36"><unientity>753B</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 4C 39"><unientity>5F53</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 4C 3B"><unientity>7574</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 4C 3C"><unientity>8FED</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 4C 56"><unientity>75C9</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 4C 60"><unientity>75A1</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 4C 61"><unientity>759F</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 4C 62"><unientity>75EA</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 4C 63"><unientity>75AF</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 4C 6A"><unientity>75AE</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 4C 6D"><unientity>75E8</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 4C 6E"><unientity>7597</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 4C 71"><unientity>75A0</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 4C 73"><unientity>75D2</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 4C 75"><unientity>765E</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 4C 76"><unientity>763E</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 4C 77"><unientity>7663</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 4C 78"><unientity>762B</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 4C 79"><unientity>766B</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 4C 7B"><unientity>53D1</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 4D 29"><unientity>7691</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 4D 2D"><unientity>76B1</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 4D 3A"><unientity>76CF</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 4D 3C"><unientity>5C3D</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 4D 3D"><unientity>76D1</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 4D 3E"><unientity>76D8</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 4D 3F"><unientity>5362</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 4D 56"><unientity>4F17</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 4D 57"><unientity>56F0</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 4D 5D"><unientity>7750</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 4D 73"><unientity>4E86</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 4D 7C"><unientity>77A9</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 4E 27"><unientity>77EB</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 4E 3B"><unientity>781A</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 4E 3E"><unientity>7815</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 4E 45"><unientity>7855</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 4E 49"><unientity>786E</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 4E 4C"><unientity>7801</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 4E 53"><unientity>7816</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 4E 58"><unientity>77F6</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 4E 59"><unientity>7840</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 4E 5A"><unientity>788D</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 4E 5B"><unientity>77FF</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 4E 5C"><unientity>77FE</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 4E 5D"><unientity>783A</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 4E 5E"><unientity>783E</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 4E 6F"><unientity>E909</unientity><desc>Duplicate simplified ideograph</desc></character>
+<character hex="27 4E 77"><unientity>7978</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 4E 78"><unientity>796F</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 4E 7B"><unientity>7985</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 4E 7C"><unientity>793C</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 4E 7D"><unientity>7977</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 4F 22"><unientity>4E07</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 4F 25"><unientity>53B6</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 4F 36"><unientity>5E0C</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 4F 3C"><unientity>79F0</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 4F 3D"><unientity>79CD</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 4F 40"><unientity>8C37</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 4F 44"><unientity>79EF</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 4F 46"><unientity>7A23</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 4F 49"><unientity>7A51</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 4F 4A"><unientity>79FD</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 4F 4B"><unientity>E90A</unientity><desc>Duplicate simplified ideograph</desc></character>
+<character hex="27 4F 4C"><unientity>7A33</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 4F 5C"><unientity>6D3C</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 4F 5D"><unientity>7A9D</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 4F 5F"><unientity>7A77</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 4F 60"><unientity>7AA5</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 4F 61"><unientity>7A8D</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 4F 62"><unientity>7A9C</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 4F 63"><unientity>7AA6</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 4F 64"><unientity>7A83</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 4F 6B"><unientity>7ADE</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 4F 70"><unientity>E90B</unientity><desc>Duplicate simplified ideograph</desc></character>
+<character hex="27 4F 79"><unientity>7B14</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 50 21"><unientity>7B0B</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 50 23"><unientity>8345</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 50 2A"><unientity>94B3</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 50 2B"><unientity>7B3A</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 50 30"><unientity>8303</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 50 33"><unientity>8282</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 50 38"><unientity>7BAC</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 50 39"><unientity>7B03</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 50 3A"><unientity>7B51</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 50 3C"><unientity>7B5B</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 50 3E"><unientity>7BD3</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 50 41"><unientity>7B80</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 50 42"><unientity>7BAB</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 50 45"><unientity>7BAA</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 50 46"><unientity>7BD1</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 50 48"><unientity>5E18</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 50 4B"><unientity>7B7E</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 50 4C"><unientity>7BEE</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 50 4D"><unientity>7B79</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 50 50"><unientity>7B3C</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 50 51"><unientity>7C41</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 50 52"><unientity>E90C</unientity><desc>Duplicate simplified ideograph</desc></character>
+<character hex="27 50 53"><unientity>7BF1</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 50 54"><unientity>7BA9</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 50 55"><unientity>5401</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 50 60"><unientity>7C8B</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 50 62"><unientity>E90D</unientity><desc>Duplicate simplified ideograph</desc></character>
+<character hex="27 50 68"><unientity>7CAA</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 50 6B"><unientity>7CAE</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 50 6F"><unientity>7EA0</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 50 70"><unientity>7EAA</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 50 71"><unientity>7EA3</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 50 72"><unientity>7EA2</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 50 73"><unientity>7EAB</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 50 74"><unientity>7EA6</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 50 75"><unientity>7EA5</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 50 76"><unientity>7EBA</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 50 77"><unientity>7EB9</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 50 7A"><unientity>7EAD</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 50 7C"><unientity>7EB0</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 50 7D"><unientity>7EAF</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 50 7E"><unientity>7EBD</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 51 21"><unientity>7EB1</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 51 22"><unientity>7EB3</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 51 23"><unientity>7EA7</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 51 24"><unientity>7EB8</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 51 25"><unientity>7EB7</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 51 26"><unientity>7ECA</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 51 28"><unientity>7ECB</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 51 29"><unientity>624E</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 51 2A"><unientity>7ECD</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 51 2B"><unientity>7EC4</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 51 2C"><unientity>7EC6</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 51 2D"><unientity>7EC5</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 51 2F"><unientity>7ECC</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 51 30"><unientity>7EC8</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 51 31"><unientity>7EDF</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 51 32"><unientity>7EDE</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 51 33"><unientity>7ED2</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 51 34"><unientity>7ED3</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 51 36"><unientity>7EDA</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 51 37"><unientity>7EDD</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 51 38"><unientity>7EDC</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 51 39"><unientity>7ED9</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 51 3B"><unientity>4E1D</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 51 3C"><unientity>7ECF</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 51 3D"><unientity>6346</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 51 3E"><unientity>7EE2</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 51 3F"><unientity>7EE5</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 51 40"><unientity>7ED1</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 51 41"><unientity>7EFC</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 51 42"><unientity>7EFD</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 51 43"><unientity>7EFE</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 51 44"><unientity>7D27</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 51 45"><unientity>7EEB</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 51 46"><unientity>7F00</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 51 48"><unientity>7F51</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 51 49"><unientity>7EB2</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 51 4A"><unientity>7EF0</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 51 4C"><unientity>7EFF</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 51 4D"><unientity>7EF8</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 51 4E"><unientity>7EF4</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 51 4F"><unientity>7EF5</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 51 50"><unientity>7EB6</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 51 51"><unientity>7F01</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 51 52"><unientity>7F14</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 51 53"><unientity>7EAC</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 51 54"><unientity>7EC3</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 51 55"><unientity>7EEA</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 51 56"><unientity>7F04</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 51 57"><unientity>7F05</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 51 58"><unientity>7F09</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 51 59"><unientity>7F13</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 51 5A"><unientity>7F18</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 51 5B"><unientity>7F16</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 51 5C"><unientity>7EBF</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 51 5D"><unientity>7F0D</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 51 5E"><unientity>7F0E</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 51 5F"><unientity>7F23</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 51 60"><unientity>7F22</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 51 61"><unientity>8426</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 51 62"><unientity>7F1A</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 51 63"><unientity>81F4</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 51 64"><unientity>E974</unientity><unientityalt>53BF</unientityalt><desc>Variant of 455164 which maps to 53BF</desc></character>
+<character hex="27 51 65"><unientity>7F29</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 51 66"><unientity>7EE9</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 51 67"><unientity>7F2A</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 51 68"><unientity>7F15</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 51 69"><unientity>7F27</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 51 6C"><unientity>7F1D</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 51 6D"><unientity>603B</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 51 6E"><unientity>7EB5</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 51 6F"><unientity>7F2B</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 51 70"><unientity>7F2E</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 51 71"><unientity>7EC7</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 51 72"><unientity>7EE3</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 51 73"><unientity>7ED5</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 51 74"><unientity>7F2D</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 51 75"><unientity>E90E</unientity><desc>Duplicate simplified ideograph</desc></character>
+<character hex="27 51 76"><unientity>7EF3</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 51 77"><unientity>8327</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 51 78"><unientity>7ECE</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 51 79"><unientity>7ED8</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 51 7A"><unientity>8FAB</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 51 7B"><unientity>7F24</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 51 7D"><unientity>7EE7</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 51 7E"><unientity>7F20</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 52 21"><unientity>7EED</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 52 22"><unientity>7F28</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 52 23"><unientity>7EA4</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 52 24"><unientity>7F06</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 52 33"><unientity>7F5A</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 52 34"><unientity>9A82</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 52 35"><unientity>7F62</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 52 37"><unientity>7F57</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 52 38"><unientity>7F81</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 52 42"><unientity>4E49</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 52 4D"><unientity>4E60</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 52 51"><unientity>7FC6</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 52 58"><unientity>7FD8</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 52 6F"><unientity>5723</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 52 71"><unientity>95FB</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 52 74"><unientity>58F0</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 52 75"><unientity>8038</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 52 76"><unientity>806A</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 52 77"><unientity>8054</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 52 78"><unientity>804C</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 52 79"><unientity>8042</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 52 7A"><unientity>804B</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 52 7B"><unientity>542C</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 53 21"><unientity>8083</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 53 44"><unientity>80C1</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 53 4A"><unientity>8090</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 53 4D"><unientity>8109</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 53 58"><unientity>80BE</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 53 59"><unientity>80C0</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 53 5E"><unientity>80A0</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 53 62"><unientity>80BF</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 53 65"><unientity>8111</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 53 6C"><unientity>80F6</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 53 6E"><unientity>80A4</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 53 71"><unientity>817B</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 53 78"><unientity>8113</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 53 79"><unientity>80C6</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 53 7A"><unientity>8138</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 53 7B"><unientity>810D</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 53 7C"><unientity>8110</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 53 7D"><unientity>8191</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 53 7E"><unientity>814A</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 54 21"><unientity>80EA</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 54 22"><unientity>E90F</unientity><desc>Duplicate simplified ideograph</desc></character>
+<character hex="27 54 25"><unientity>4E34</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 54 2B"><unientity>53F0</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 54 32"><unientity>4E0E</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 54 33"><unientity>5174</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 54 34"><unientity>4E3E</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 54 35"><unientity>65E7</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 54 4A"><unientity>8231</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 54 4B"><unientity>8230</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 54 4E"><unientity>8270</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 54 58"><unientity>E910</unientity><desc>Duplicate simplified ideograph</desc></character>
+<character hex="27 54 5C"><unientity>520D</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 55 28"><unientity>835A</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 55 29"><unientity>830E</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 55 2A"><unientity>82CB</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 55 2D"><unientity>5E84</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 55 3C"><unientity>534E</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 55 41"><unientity>83B1</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 55 4D"><unientity>82C7</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 55 4F"><unientity>53F6</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 55 51"><unientity>E911</unientity><desc>Duplicate simplified ideograph</desc></character>
+<character hex="27 55 53"><unientity>8364</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 55 55"><unientity>83B4</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 55 5D"><unientity>5E2D</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 55 63"><unientity>836A</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 55 64"><unientity>82CE</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 55 67"><unientity>82CD</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 55 68"><unientity>8298</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 55 6C"><unientity>83B2</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 55 6E"><unientity>836B</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 55 71"><unientity>848B</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 55 73"><unientity>535C</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 55 76"><unientity>8361</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 55 7C"><unientity>829C</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 56 22"><unientity>8427</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 56 24"><unientity>59DC</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 56 26"><unientity>8537</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 56 29"><unientity>84DD</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 56 2A"><unientity>8428</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 56 2E"><unientity>501F</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 56 31"><unientity>827A</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 56 32"><unientity>85AE</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 56 35"><unientity>836F</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 56 37"><unientity>853C</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 56 39"><unientity>853A</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 56 3A"><unientity>82A6</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 56 3B"><unientity>82F9</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 56 3C"><unientity>82CF</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 56 3D"><unientity>8574</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 56 3E"><unientity>5170</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 56 40"><unientity>85D3</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 56 42"><unientity>841D</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 56 44"><unientity>4E47</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 56 47"><unientity>5904</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 56 48"><unientity>864F</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 56 4A"><unientity>53F7</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 56 4C"><unientity>4E8F</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 56 5A"><unientity>65E6</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 56 76"><unientity>8680</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 56 79"><unientity>E912</unientity><desc>Duplicate simplified ideograph</desc></character>
+<character hex="27 56 7A"><unientity>867E</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 57 24"><unientity>8424</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 57 25"><unientity>8682</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 57 2C"><unientity>877C</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 57 32"><unientity>86F2</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 57 33"><unientity>866B</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 57 34"><unientity>8749</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 57 35"><unientity>8681</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 57 36"><unientity>8747</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 57 3C"><unientity>86CE</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 57 3E"><unientity>8721</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 57 3F"><unientity>86CA</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 57 41"><unientity>8695</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 57 42"><unientity>86EE</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 57 46"><unientity>672E</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 57 47"><unientity>4E8D</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 57 49"><unientity>536B</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 57 4A"><unientity>E913</unientity><desc>Duplicate simplified ideograph</desc></character>
+<character hex="27 57 62"><unientity>8865</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 57 63"><unientity>91CC</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 57 65"><unientity>88C5</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 57 6C"><unientity>5236</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 57 71"><unientity>8934</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 57 73"><unientity>88E4</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 57 77"><unientity>4EB5</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 57 79"><unientity>891B</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 57 7C"><unientity>88C6</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 57 7D"><unientity>8884</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 58 21"><unientity>889C</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 58 22"><unientity>886C</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 58 23"><unientity>88AD</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 58 28"><unientity>89C1</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 58 29"><unientity>89C4</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 58 2A"><unientity>89C5</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 58 2B"><unientity>89C6</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 58 2C"><unientity>4EB2</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 58 2D"><unientity>89CE</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 58 2E"><unientity>89CA</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 58 2F"><unientity>89D0</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 58 30"><unientity>89C9</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 58 31"><unientity>89C8</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 58 32"><unientity>89C2</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 58 35"><unientity>89DE</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 58 38"><unientity>8BA1</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 58 39"><unientity>8BA2</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 58 3A"><unientity>8BA3</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 58 3B"><unientity>8BA6</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 58 3C"><unientity>8BB0</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 58 3D"><unientity>8BA8</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 58 3E"><unientity>8BA7</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 58 3F"><unientity>8BAA</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 58 40"><unientity>8BAF</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 58 41"><unientity>8BAB</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 58 43"><unientity>8BAD</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 58 44"><unientity>8BBF</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 58 45"><unientity>8BC0</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 58 46"><unientity>8BB6</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 58 47"><unientity>8BB7</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 58 48"><unientity>8BB8</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 58 49"><unientity>8BBE</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 58 4A"><unientity>8BB9</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 58 4B"><unientity>8BBC</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 58 4C"><unientity>6CE8</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 58 4E"><unientity>8BC4</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 58 4F"><unientity>8BCD</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 58 51"><unientity>8BC2</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 58 52"><unientity>8BCF</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 58 53"><unientity>8BC5</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 58 54"><unientity>8BC8</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 58 55"><unientity>8BCB</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 58 56"><unientity>8BC9</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 58 57"><unientity>8BCA</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 58 58"><unientity>8BE7</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 58 59"><unientity>8BE5</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 58 5A"><unientity>8BE6</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 58 5B"><unientity>8BD5</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 58 5C"><unientity>8BD7</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 58 5D"><unientity>8BD8</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 58 5E"><unientity>8BE3</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 58 5F"><unientity>8BD9</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 58 60"><unientity>8BDA</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 58 61"><unientity>5938</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 58 62"><unientity>8BDB</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 58 63"><unientity>8BE1</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 58 65"><unientity>8BE2</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 58 66"><unientity>8BDD</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 58 67"><unientity>8BE0</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 58 68"><unientity>8BDF</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 58 69"><unientity>8BF4</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 58 6A"><unientity>8BF5</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 58 6B"><unientity>8BEB</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 58 6C"><unientity>8BED</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 58 6D"><unientity>5FD7</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 58 6F"><unientity>8BEC</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 58 70"><unientity>8BA4</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 58 71"><unientity>8BEF</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 58 72"><unientity>8BF2</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 58 73"><unientity>8BF0</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 58 74"><unientity>8BF1</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 58 75"><unientity>8BF3</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 58 76"><unientity>8C0A</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 58 77"><unientity>8C06</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 58 78"><unientity>8C05</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 58 79"><unientity>8C08</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 58 7A"><unientity>8BF7</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 58 7B"><unientity>8BF8</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 58 7C"><unientity>8BFE</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 58 7D"><unientity>8C03</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 58 7E"><unientity>8BFF</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 59 21"><unientity>8C04</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 59 22"><unientity>8C01</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 59 23"><unientity>8BDE</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 59 24"><unientity>8BBA</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 59 25"><unientity>8C1B</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 59 26"><unientity>8C1A</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 59 27"><unientity>8C0F</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 59 28"><unientity>8BB3</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 59 29"><unientity>8C10</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 59 2A"><unientity>8C0D</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 59 2B"><unientity>8C0B</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 59 2C"><unientity>8C12</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 59 2D"><unientity>8C13</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 59 2E"><unientity>8BFA</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 59 2F"><unientity>8BBD</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 59 30"><unientity>8C15</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 59 31"><unientity>8C24</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 59 32"><unientity>8C26</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 59 33"><unientity>8C1C</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 59 34"><unientity>8BB2</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 59 35"><unientity>8C0E</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 59 36"><unientity>8C23</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 59 37"><unientity>8A8A</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 59 38"><unientity>8C22</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 59 39"><unientity>8C28</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 59 3A"><unientity>8C2C</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 59 3B"><unientity>8C1F</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 59 3C"><unientity>8BC6</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 59 3D"><unientity>8C31</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 59 3E"><unientity>8C32</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 59 3F"><unientity>8BC1</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 59 40"><unientity>8C2D</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 59 42"><unientity>8BA5</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 59 43"><unientity>8BAE</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 59 46"><unientity>8BD1</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 59 47"><unientity>8C34</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 59 48"><unientity>62A4</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 59 49"><unientity>8A89</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 59 4A"><unientity>8BFB</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 59 4B"><unientity>53D8</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 59 4C"><unientity>8BA9</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 59 4D"><unientity>8C36</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 59 4E"><unientity>8C17</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 59 54"><unientity>5C82</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 59 57"><unientity>7AD6</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 59 58"><unientity>4E30</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 59 5E"><unientity>4E88</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 59 66"><unientity>7683</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 59 68"><unientity>8D1D</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 59 69"><unientity>8D1E</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 59 6A"><unientity>8D1F</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 59 6B"><unientity>8D21</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 59 6C"><unientity>8D22</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 59 6D"><unientity>8D23</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 59 6E"><unientity>8D2F</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 59 6F"><unientity>8D27</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 59 70"><unientity>8D2A</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 59 71"><unientity>8D2B</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 59 72"><unientity>8D29</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 59 75"><unientity>8D39</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 59 76"><unientity>8D32</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 59 77"><unientity>8D3A</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 59 78"><unientity>8D35</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 59 79"><unientity>8D34</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 59 7A"><unientity>4E70</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 59 7B"><unientity>8D2C</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 59 7C"><unientity>8D3B</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 59 7D"><unientity>8D37</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 59 7E"><unientity>8D38</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 5A 21"><unientity>8D45</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 5A 22"><unientity>8D44</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 5A 23"><unientity>8D3C</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 5A 24"><unientity>8D3E</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 5A 25"><unientity>8D3F</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 5A 26"><unientity>8D40</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 5A 27"><unientity>8D41</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 5A 28"><unientity>8D42</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 5A 29"><unientity>5BBE</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 5A 2A"><unientity>8D48</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 5A 2B"><unientity>8D4A</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 5A 2C"><unientity>8D54</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 5A 2D"><unientity>8D4B</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 5A 2F"><unientity>5356</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 5A 30"><unientity>8D24</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 5A 31"><unientity>8D31</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 5A 32"><unientity>8D4F</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 5A 33"><unientity>8D50</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 5A 34"><unientity>8D28</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 5A 35"><unientity>8D4C</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 5A 36"><unientity>8D56</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 5A 37"><unientity>8D5B</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 5A 38"><unientity>8D5A</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 5A 39"><unientity>8D58</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 5A 3A"><unientity>8D2D</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 5A 3B"><unientity>8D60</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 5A 3C"><unientity>8D5D</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 5A 3D"><unientity>8D5E</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 5A 3E"><unientity>8D62</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 5A 3F"><unientity>8D61</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 5A 40"><unientity>8D43</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 5A 41"><unientity>8D4E</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 5A 42"><unientity>8D63</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 5A 4F"><unientity>8D75</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 5A 50"><unientity>8D76</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 5A 53"><unientity>8D8B</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 5A 68"><unientity>8DF5</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 5A 71"><unientity>8E0A</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 5A 78"><unientity>8E52</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 5A 7E"><unientity>8DF7</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 5B 26"><unientity>8DB8</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 5B 28"><unientity>8E0C</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 5B 29"><unientity>8DC3</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 5B 2A"><unientity>8E2F</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 5B 2B"><unientity>8E51</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 5B 2C"><unientity>8E8F</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 5B 31"><unientity>8EAF</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 5B 32"><unientity>8F66</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 5B 33"><unientity>8F67</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 5B 34"><unientity>519B</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 5B 35"><unientity>8F68</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 5B 36"><unientity>8F69</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 5B 37"><unientity>8F6B</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 5B 38"><unientity>8F6F</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 5B 39"><unientity>8F6D</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 5B 3A"><unientity>8F72</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 5B 3B"><unientity>8F74</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 5B 3C"><unientity>8F76</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 5B 3D"><unientity>8F83</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 5B 3E"><unientity>8F7C</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 5B 3F"><unientity>8F7D</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 5B 40"><unientity>8F7E</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 5B 41"><unientity>8F85</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 5B 42"><unientity>8F84</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 5B 43"><unientity>8F7B</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 5B 45"><unientity>8F87</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 5B 46"><unientity>8F86</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 5B 47"><unientity>8F8D</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 5B 48"><unientity>8F89</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 5B 49"><unientity>8F88</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 5B 4A"><unientity>8F6E</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 5B 4B"><unientity>8F8E</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 5B 4C"><unientity>8F90</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 5B 4D"><unientity>8F91</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 5B 4E"><unientity>8F93</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 5B 4F"><unientity>8F96</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 5B 50"><unientity>8F97</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 5B 51"><unientity>8F95</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 5B 52"><unientity>6BC2</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 5B 53"><unientity>8206</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 5B 54"><unientity>8F99</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 5B 55"><unientity>8F6C</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 5B 56"><unientity>8F9A</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 5B 57"><unientity>8F7F</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 5B 58"><unientity>8F70</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 5B 59"><unientity>8F94</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 5B 5F"><unientity>529E</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 5B 60"><unientity>8F9E</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 5B 61"><unientity>8FA9</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 5B 64"><unientity>519C</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 5B 6D"><unientity>8FF0</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 5B 7D"><unientity>8FD9</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 5B 7E"><unientity>8FDE</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 5C 33"><unientity>8FDB</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 5C 34"><unientity>8FD0</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 5C 39"><unientity>8FBE</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 5C 3A"><unientity>8FDD</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 5C 3C"><unientity>8FC2</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 5C 3E"><unientity>8FC7</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 5C 44"><unientity>8FDC</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 5C 45"><unientity>900A</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 5C 48"><unientity>9012</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 5C 49"><unientity>9002</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 5C 4F"><unientity>9009</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 5C 50"><unientity>8FDF</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 5C 51"><unientity>8FC1</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 5C 52"><unientity>8FBD</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 5C 53"><unientity>9057</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 5C 56"><unientity>8FC8</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 5C 57"><unientity>8FD8</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 5C 5A"><unientity>E975</unientity><unientityalt>8FE9</unientityalt><desc>Variant of 2D5C5A which maps to 8FE9</desc></character>
+<character hex="27 5C 5B"><unientity>8FB9</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 5C 5C"><unientity>9026</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 5C 5D"><unientity>903B</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 5C 6B"><unientity>5369</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 5C 6D"><unientity>90AE</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 5C 70"><unientity>4E61</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 5C 71"><unientity>90B9</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 5C 73"><unientity>90D1</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 5C 74"><unientity>90BB</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 5C 75"><unientity>9093</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 5D 2A"><unientity>9154</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 5D 2F"><unientity>915D</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 5D 30"><unientity>4E11</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 5D 31"><unientity>533B</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 5D 32"><unientity>9171</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 5D 34"><unientity>917F</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 5D 35"><unientity>8845</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 5D 38"><unientity>91CA</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 5D 3D"><unientity>5398</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 5D 3F"><unientity>9488</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 5D 40"><unientity>9489</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 5D 41"><unientity>948A</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 5D 43"><unientity>9497</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 5D 45"><unientity>9493</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 5D 46"><unientity>948F</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 5D 47"><unientity>9499</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 5D 48"><unientity>949D</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 5D 49"><unientity>94AE</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 5D 4A"><unientity>94A0</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 5D 4B"><unientity>949E</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 5D 4C"><unientity>94A7</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 5D 4D"><unientity>94A4</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 5D 4F"><unientity>94B4</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 5D 50"><unientity>94B9</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 5D 51"><unientity>94B8</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 5D 52"><unientity>94C0</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 5D 53"><unientity>94BE</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 5D 55"><unientity>94C5</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 5D 56"><unientity>94A9</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 5D 57"><unientity>94C2</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 5D 58"><unientity>94C3</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 5D 59"><unientity>94F0</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 5D 5A"><unientity>94F6</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 5D 5B"><unientity>94D0</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 5D 5C"><unientity>94DC</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 5D 5D"><unientity>94ED</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 5D 5E"><unientity>94E2</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 5D 5F"><unientity>94EC</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 5D 60"><unientity>94E8</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 5D 61"><unientity>8854</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 5D 62"><unientity>950C</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 5D 63"><unientity>9511</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 5D 64"><unientity>9510</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 5D 65"><unientity>94FA</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 5D 66"><unientity>9500</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 5D 67"><unientity>94DD</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 5D 68"><unientity>9504</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 5D 69"><unientity>9509</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 5D 6A"><unientity>950B</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 5D 6B"><unientity>952D</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 5D 6D"><unientity>952F</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 5D 6E"><unientity>9530</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 5D 6F"><unientity>9519</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 5D 70"><unientity>94B1</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 5D 71"><unientity>94A2</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 5D 72"><unientity>9521</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 5D 73"><unientity>94EE</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 5D 74"><unientity>5F55</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 5D 75"><unientity>9525</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 5D 76"><unientity>9526</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 5D 77"><unientity>9540</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 5D 78"><unientity>9541</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 5D 79"><unientity>952E</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 5D 7A"><unientity>9532</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 5D 7C"><unientity>9505</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 5D 7D"><unientity>951A</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 5D 7E"><unientity>953E</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 5E 21"><unientity>949F</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 5E 22"><unientity>9524</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 5E 23"><unientity>9539</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 5E 24"><unientity>953B</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 5E 25"><unientity>9551</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 5E 27"><unientity>9547</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 5E 28"><unientity>9501</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 5E 29"><unientity>94A8</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 5E 2A"><unientity>954D</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 5E 2B"><unientity>955C</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 5E 2C"><unientity>955D</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 5E 2E"><unientity>955E</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 5E 2F"><unientity>94F2</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 5E 30"><unientity>94FF</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 5E 31"><unientity>94FE</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 5E 32"><unientity>9556</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 5E 33"><unientity>9557</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 5E 34"><unientity>9542</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 5E 35"><unientity>9558</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 5E 36"><unientity>9559</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 5E 37"><unientity>9535</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 5E 39"><unientity>94D9</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 5E 3A"><unientity>9570</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 5E 3B"><unientity>9508</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 5E 3C"><unientity>956D</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 5E 3D"><unientity>94C1</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 5E 3E"><unientity>94DB</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 5E 3F"><unientity>94CE</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 5E 40"><unientity>956F</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 5E 43"><unientity>94F8</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 5E 44"><unientity>9573</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 5E 45"><unientity>94C4</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 5E 46"><unientity>9576</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 5E 47"><unientity>94A5</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 5E 48"><unientity>92AE</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 5E 49"><unientity>9523</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 5E 4A"><unientity>94BB</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 5E 4B"><unientity>51FF</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 5E 4C"><unientity>957F</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 5E 4D"><unientity>95E8</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 5E 4E"><unientity>95E9</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 5E 4F"><unientity>95EA</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 5E 50"><unientity>95ED</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 5E 51"><unientity>95F5</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 5E 52"><unientity>95F0</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 5E 53"><unientity>5F00</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 5E 54"><unientity>95F2</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 5E 55"><unientity>95F4</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 5E 57"><unientity>95F8</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 5E 58"><unientity>9602</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 5E 59"><unientity>95FA</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 5E 5A"><unientity>95FD</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 5E 5B"><unientity>9601</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 5E 5C"><unientity>9600</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 5E 5D"><unientity>5408</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 5E 5E"><unientity>9605</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 5E 5F"><unientity>95FE</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 5E 60"><unientity>960E</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 5E 61"><unientity>9614</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 5E 62"><unientity>9615</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 5E 63"><unientity>9611</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 5E 64"><unientity>95F1</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 5E 65"><unientity>677F</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 5E 67"><unientity>95EF</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 5E 68"><unientity>9617</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 5E 69"><unientity>5173</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 5E 6A"><unientity>9610</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 5E 6B"><unientity>E914</unientity><desc>Duplicate simplified ideograph</desc></character>
+<character hex="27 5E 7B"><unientity>9635</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 5F 23"><unientity>9648</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 5F 24"><unientity>9646</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 5F 2A"><unientity>9634</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 5F 2B"><unientity>961F</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 5F 2C"><unientity>9636</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 5F 2E"><unientity>9633</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 5F 37"><unientity>9645</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 5F 39"><unientity>968F</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 5F 3A"><unientity>9669</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 5F 3B"><unientity>9690</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 5F 3C"><unientity>9647</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 5F 3D"><unientity>96B6</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 5F 3E"><unientity>E915</unientity><desc>Duplicate simplified ideograph</desc></character>
+<character hex="27 5F 4A"><unientity>867D</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 5F 4B"><unientity>6742</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 5F 4C"><unientity>9E21</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 5F 4D"><unientity>96CF</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 5F 4E"><unientity>53CC</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 5F 4F"><unientity>79BB</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 5F 50"><unientity>96BE</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 5F 54"><unientity>4E91</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 5F 55"><unientity>7535</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 5F 67"><unientity>96FE</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 5F 6B"><unientity>9701</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 5F 6D"><unientity>972D</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 5F 6E"><unientity>96F3</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 5F 6F"><unientity>7075</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 5F 79"><unientity>9765</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 60 23"><unientity>5DE9</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 60 29"><unientity>9791</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 60 2C"><unientity>97E6</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 60 2D"><unientity>97E7</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 60 2E"><unientity>97E9</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 60 2F"><unientity>97EC</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 60 30"><unientity>827D</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 60 36"><unientity>54CD</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 60 37"><unientity>9875</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 60 38"><unientity>9876</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 60 39"><unientity>9877</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 60 3A"><unientity>9879</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 60 3B"><unientity>987A</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 60 3C"><unientity>987B</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 60 3D"><unientity>9884</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 60 3E"><unientity>987C</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 60 3F"><unientity>987D</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 60 40"><unientity>987F</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 60 41"><unientity>9881</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 60 42"><unientity>9882</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 60 43"><unientity>9887</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 60 44"><unientity>9886</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 60 45"><unientity>9889</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 60 46"><unientity>5934</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 60 47"><unientity>988A</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 60 48"><unientity>9888</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 60 49"><unientity>9891</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 60 4A"><unientity>9893</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 60 4B"><unientity>9894</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 60 4C"><unientity>9890</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 60 4D"><unientity>9897</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 60 4E"><unientity>989C</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 60 4F"><unientity>989D</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 60 50"><unientity>9898</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 60 51"><unientity>989A</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 60 52"><unientity>989B</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 60 53"><unientity>7C7B</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 60 54"><unientity>98A0</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 60 55"><unientity>613F</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 60 56"><unientity>987E</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 60 57"><unientity>98A4</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 60 58"><unientity>663E</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 60 59"><unientity>9885</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 60 5A"><unientity>98A6</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 60 5B"><unientity>98CE</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 60 5C"><unientity>98D2</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 60 5D"><unientity>E916</unientity><desc>Duplicate simplified ideograph</desc></character>
+<character hex="27 60 5E"><unientity>522E</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 60 5F"><unientity>98D3</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 60 61"><unientity>98D5</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 60 62"><unientity>98D8</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 60 63"><unientity>98DE</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 60 65"><unientity>9965</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 60 67"><unientity>9968</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 60 68"><unientity>996C</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 60 69"><unientity>996A</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 60 6A"><unientity>996E</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 60 6B"><unientity>996D</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 60 6C"><unientity>9972</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 60 6D"><unientity>9974</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 60 6E"><unientity>9971</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 60 6F"><unientity>9970</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 60 70"><unientity>997A</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 60 71"><unientity>517B</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 60 72"><unientity>9975</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 60 73"><unientity>9977</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 60 75"><unientity>9981</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 60 76"><unientity>4F59</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 60 77"><unientity>997F</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 60 78"><unientity>997C</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 60 79"><unientity>9986</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 60 7A"><unientity>996F</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 60 7B"><unientity>9984</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 60 7C"><unientity>9985</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 60 7E"><unientity>998F</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 61 21"><unientity>998A</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 61 23"><unientity>9992</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 61 24"><unientity>9976</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 61 26"><unientity>990D</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 61 27"><unientity>998B</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 61 2C"><unientity>9A6C</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 61 2D"><unientity>51AF</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 61 2E"><unientity>9A6D</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 61 2F"><unientity>9A70</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 61 30"><unientity>9A6E</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 61 31"><unientity>9A6F</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 61 32"><unientity>9A73</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 61 33"><unientity>9A7B</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 61 34"><unientity>9A7C</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 61 35"><unientity>9A7E</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 61 36"><unientity>9A77</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 61 37"><unientity>9A76</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 61 38"><unientity>9A79</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 61 39"><unientity>9A78</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 61 3A"><unientity>9A7D</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 61 3B"><unientity>9A87</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 61 3C"><unientity>9A86</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 61 3D"><unientity>9A8B</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 61 3E"><unientity>9A8F</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 61 3F"><unientity>9A88</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 61 40"><unientity>9A91</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 61 41"><unientity>9A97</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 61 42"><unientity>9A9B</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 61 43"><unientity>9A9E</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 61 44"><unientity>817E</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 61 45"><unientity>9A9A</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 61 46"><unientity>9AA0</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 61 47"><unientity>9A71</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 61 48"><unientity>84E6</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 61 49"><unientity>9AA1</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 61 4A"><unientity>9A84</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 61 4B"><unientity>60CA</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 61 4C"><unientity>9A7F</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 61 4D"><unientity>9A8C</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 61 4E"><unientity>9AA4</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 61 4F"><unientity>9A74</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 61 50"><unientity>9AA5</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 61 51"><unientity>9A8A</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 61 53"><unientity>80AE</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 61 58"><unientity>9AC5</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 61 5A"><unientity>4F53</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 61 5B"><unientity>810F</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 61 5F"><unientity>E917</unientity><desc>Duplicate simplified ideograph</desc></character>
+<character hex="27 61 63"><unientity>E918</unientity><desc>Duplicate simplified ideograph</desc></character>
+<character hex="27 61 64"><unientity>E919</unientity><desc>Duplicate simplified ideograph</desc></character>
+<character hex="27 61 65"><unientity>E91A</unientity><desc>Duplicate simplified ideograph</desc></character>
+<character hex="27 61 66"><unientity>9B13</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 61 67"><unientity>6597</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 61 68"><unientity>95F9</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 61 6A"><unientity>90C1</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 61 73"><unientity>9B47</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 61 74"><unientity>9C7C</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 61 75"><unientity>9C7F</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 61 76"><unientity>9C81</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 61 77"><unientity>9C8D</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 61 78"><unientity>9C9B</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 61 79"><unientity>9C9C</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 61 7A"><unientity>9C94</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 61 7B"><unientity>9CA8</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 61 7C"><unientity>9CA4</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 61 7D"><unientity>9CB8</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 61 7E"><unientity>9CB3</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 62 21"><unientity>9CC3</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 62 22"><unientity>9CC5</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 62 23"><unientity>9CAB</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 62 24"><unientity>9CCD</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 62 25"><unientity>9CCF</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 62 26"><unientity>9CA2</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 62 27"><unientity>9CD4</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 62 28"><unientity>9CD7</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 62 29"><unientity>9CDD</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 62 2A"><unientity>9CDE</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 62 2B"><unientity>9CDC</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 62 2C"><unientity>9CD6</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 62 2E"><unientity>9C88</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 62 2F"><unientity>9E1F</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 62 30"><unientity>9E20</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 62 31"><unientity>9E22</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 62 32"><unientity>9E23</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 62 33"><unientity>51E4</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 62 34"><unientity>9E29</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 62 35"><unientity>9E26</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 62 36"><unientity>9E35</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 62 37"><unientity>9E2A</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 62 38"><unientity>9E2D</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 62 39"><unientity>9E2F</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 62 3A"><unientity>9E33</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 62 3C"><unientity>9E3F</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 62 3D"><unientity>9E3D</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 62 3E"><unientity>9E49</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 62 3F"><unientity>9E43</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 62 40"><unientity>9E44</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 62 41"><unientity>9E45</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 62 42"><unientity>9E51</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 62 43"><unientity>9E4A</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 62 44"><unientity>9E4C</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 62 45"><unientity>9E4F</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 62 46"><unientity>9E64</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 62 47"><unientity>83BA</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 62 48"><unientity>9E5E</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 62 49"><unientity>9E67</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 62 4A"><unientity>9E25</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 62 4B"><unientity>9E36</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 62 4C"><unientity>9E70</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 62 4D"><unientity>9E6D</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 62 4E"><unientity>9E66</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 62 4F"><unientity>9E3E</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 62 50"><unientity>54B8</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 62 51"><unientity>76D0</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 62 52"><unientity>7877</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 62 56"><unientity>4E3D</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 62 5B"><unientity>9EA6</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 62 5C"><unientity>9EB8</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 62 5E"><unientity>9762</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 62 60"><unientity>4E48</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 62 6A"><unientity>70B9</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 62 6F"><unientity>515A</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 62 72"><unientity>9EE9</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 62 76"><unientity>51AC</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 62 7D"><unientity>9F50</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 62 7E"><unientity>658E</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 63 21"><unientity>9F7F</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 63 22"><unientity>9F83</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 63 24"><unientity>9F84</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 63 25"><unientity>9F88</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 63 26"><unientity>9F87</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 63 27"><unientity>9F89</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 63 28"><unientity>9F8A</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 63 29"><unientity>9F8C</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 63 2A"><unientity>9F8B</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 63 2B"><unientity>9F99</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 63 2C"><unientity>9F9A</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 63 2D"><unientity>9F9F</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 66 49"><unientity>4F1C</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 67 75"><unientity>4F65</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 67 7C"><unientity>4F1B</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 68 22"><unientity>507B</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 68 42"><unientity>507E</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 68 71"><unientity>4FAA</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 69 44"><unientity>50A9</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 69 48"><unientity>50A5</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 6B 3E"><unientity>522D</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 6B 5B"><unientity>5250</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 6B 5F"><unientity>672D</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 6B 79"><unientity>523F</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 6B 7A"><unientity>523D</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 6D 2E"><unientity>5326</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 6D 6D"><unientity>538D</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 6E 2A"><unientity>53A3</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 6F 69"><unientity>5459</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 70 30"><unientity>5457</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 71 69"><unientity>5522</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 72 34"><unientity>551B</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 72 39"><unientity>54D4</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 72 55"><unientity>54D3</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 72 58"><unientity>E91B</unientity><desc>Duplicate simplified ideograph</desc></character>
+<character hex="27 72 67"><unientity>5452</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 72 72"><unientity>54D2</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 72 7A"><unientity>54D5</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 72 7E"><unientity>54D9</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 73 28"><unientity>54DC</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 73 45"><unientity>556E</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 73 4C"><unientity>5456</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 73 5A"><unientity>55BE</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 73 60"><unientity>5181</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 74 2E"><unientity>56F5</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 76 38"><unientity>57AD</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 76 7A"><unientity>57DA</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 77 42"><unientity>57D8</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 77 45"><unientity>57D9</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 77 48"><unientity>57B2</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 78 5A"><unientity>5785</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 78 5E"><unientity>5786</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 79 54"><unientity>5956</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 7B 3C"><unientity>5A05</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 7C 24"><unientity>5A32</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 7C 36"><unientity>59AB</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 7D 2B"><unientity>5A06</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 7D 40"><unientity>5AF1</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 7D 48"><unientity>5AD2</unientity><desc>East Asian ideograph</desc></character>
+<character hex="27 7D 74"><unientity>5A08</unientity><desc>East Asian ideograph</desc></character>
+<character hex="28 23 2B"><unientity>5C66</unientity><desc>East Asian ideograph</desc></character>
+<character hex="28 24 41"><unientity>5C98</unientity><desc>East Asian ideograph</desc></character>
+<character hex="28 24 58"><unientity>5D03</unientity><desc>East Asian ideograph</desc></character>
+<character hex="28 25 5A"><unientity>5D5D</unientity><desc>East Asian ideograph</desc></character>
+<character hex="28 25 69"><unientity>5D02</unientity><desc>East Asian ideograph</desc></character>
+<character hex="28 25 77"><unientity>5CE4</unientity><desc>East Asian ideograph</desc></character>
+<character hex="28 26 26"><unientity>5CC4</unientity><desc>East Asian ideograph</desc></character>
+<character hex="28 26 32"><unientity>5D58</unientity><desc>East Asian ideograph</desc></character>
+<character hex="28 26 47"><unientity>5CBF</unientity><desc>East Asian ideograph</desc></character>
+<character hex="28 26 59"><unientity>5DEF</unientity><desc>East Asian ideograph</desc></character>
+<character hex="28 27 36"><unientity>5E0F</unientity><desc>East Asian ideograph</desc></character>
+<character hex="28 27 47"><unientity>5E3B</unientity><desc>East Asian ideograph</desc></character>
+<character hex="28 27 5F"><unientity>5E31</unientity><desc>East Asian ideograph</desc></character>
+<character hex="28 28 68"><unientity>5E91</unientity><desc>East Asian ideograph</desc></character>
+<character hex="28 29 51"><unientity>5F2A</unientity><desc>East Asian ideograph</desc></character>
+<character hex="28 2D 34"><unientity>607D</unientity><desc>East Asian ideograph</desc></character>
+<character hex="28 2D 5E"><unientity>607A</unientity><desc>East Asian ideograph</desc></character>
+<character hex="28 2D 74"><unientity>6004</unientity><desc>East Asian ideograph</desc></character>
+<character hex="28 2D 77"><unientity>60AD</unientity><desc>East Asian ideograph</desc></character>
+<character hex="28 2D 79"><unientity>60AB</unientity><desc>East Asian ideograph</desc></character>
+<character hex="28 2E 4C"><unientity>6126</unientity><desc>East Asian ideograph</desc></character>
+<character hex="28 2E 52"><unientity>6003</unientity><desc>East Asian ideograph</desc></character>
+<character hex="28 2E 5C"><unientity>603F</unientity><desc>East Asian ideograph</desc></character>
+<character hex="28 2E 79"><unientity>6079</unientity><desc>East Asian ideograph</desc></character>
+<character hex="28 2E 7E"><unientity>603C</unientity><desc>East Asian ideograph</desc></character>
+<character hex="28 2F 43"><unientity>6206</unientity><desc>East Asian ideograph</desc></character>
+<character hex="28 2F 47"><unientity>620B</unientity><desc>East Asian ideograph</desc></character>
+<character hex="28 2F 66"><unientity>6217</unientity><desc>East Asian ideograph</desc></character>
+<character hex="28 33 6F"><unientity>629F</unientity><desc>East Asian ideograph</desc></character>
+<character hex="28 33 7B"><unientity>62A0</unientity><desc>East Asian ideograph</desc></character>
+<character hex="28 34 2C"><unientity>63BA</unientity><desc>East Asian ideograph</desc></character>
+<character hex="28 34 2E"><unientity>63BC</unientity><desc>East Asian ideograph</desc></character>
+<character hex="28 34 57"><unientity>63B8</unientity><desc>East Asian ideograph</desc></character>
+<character hex="28 34 62"><unientity>6322</unientity><desc>East Asian ideograph</desc></character>
+<character hex="28 34 66"><unientity>63FF</unientity><desc>East Asian ideograph</desc></character>
+<character hex="28 35 2A"><unientity>6448</unientity><desc>East Asian ideograph</desc></character>
+<character hex="28 35 42"><unientity>64B7</unientity><desc>East Asian ideograph</desc></character>
+<character hex="28 35 46"><unientity>6445</unientity><desc>East Asian ideograph</desc></character>
+<character hex="28 35 5B"><unientity>6484</unientity><desc>East Asian ideograph</desc></character>
+<character hex="28 35 61"><unientity>64BA</unientity><desc>East Asian ideograph</desc></character>
+<character hex="28 35 6D"><unientity>6512</unientity><desc>East Asian ideograph</desc></character>
+<character hex="28 36 71"><unientity>6593</unientity><desc>East Asian ideograph</desc></character>
+<character hex="28 39 55"><unientity>6619</unientity><desc>East Asian ideograph</desc></character>
+<character hex="28 39 5C"><unientity>6654</unientity><desc>East Asian ideograph</desc></character>
+<character hex="28 3B 22"><unientity>4E2B</unientity><desc>East Asian ideograph</desc></character>
+<character hex="28 3B 7D"><unientity>E91C</unientity><desc>Duplicate simplified ideograph</desc></character>
+<character hex="28 3D 30"><unientity>67A7</unientity><desc>East Asian ideograph</desc></character>
+<character hex="28 3D 6E"><unientity>67A8</unientity><desc>East Asian ideograph</desc></character>
+<character hex="28 3F 30"><unientity>6966</unientity><desc>East Asian ideograph</desc></character>
+<character hex="28 3F 5C"><unientity>6769</unientity><desc>East Asian ideograph</desc></character>
+<character hex="28 40 27"><unientity>6864</unientity><desc>East Asian ideograph</desc></character>
+<character hex="28 40 56"><unientity>6920</unientity><desc>East Asian ideograph</desc></character>
+<character hex="28 40 5E"><unientity>67FD</unientity><desc>East Asian ideograph</desc></character>
+<character hex="28 41 40"><unientity>6861</unientity><desc>East Asian ideograph</desc></character>
+<character hex="28 42 2B"><unientity>6A2F</unientity><desc>East Asian ideograph</desc></character>
+<character hex="28 42 57"><unientity>68BC</unientity><desc>East Asian ideograph</desc></character>
+<character hex="28 43 33"><unientity>680E</unientity><desc>East Asian ideograph</desc></character>
+<character hex="28 43 35"><unientity>6A7C</unientity><desc>East Asian ideograph</desc></character>
+<character hex="28 43 37"><unientity>6987</unientity><desc>East Asian ideograph</desc></character>
+<character hex="28 43 39"><unientity>680A</unientity><desc>East Asian ideograph</desc></character>
+<character hex="28 43 3A"><unientity>69E0</unientity><desc>East Asian ideograph</desc></character>
+<character hex="28 43 40"><unientity>67A5</unientity><desc>East Asian ideograph</desc></character>
+<character hex="28 43 45"><unientity>680C</unientity><desc>East Asian ideograph</desc></character>
+<character hex="28 43 50"><unientity>68C2</unientity><desc>East Asian ideograph</desc></character>
+<character hex="28 43 59"><unientity>6989</unientity><desc>East Asian ideograph</desc></character>
+<character hex="28 43 66"><unientity>6924</unientity><desc>East Asian ideograph</desc></character>
+<character hex="28 45 39"><unientity>6B9A</unientity><desc>East Asian ideograph</desc></character>
+<character hex="28 46 42"><unientity>6BF5</unientity><desc>East Asian ideograph</desc></character>
+<character hex="28 46 4C"><unientity>6BE1</unientity><desc>East Asian ideograph</desc></character>
+<character hex="28 46 51"><unientity>6C07</unientity><desc>East Asian ideograph</desc></character>
+<character hex="28 46 68"><unientity>6C29</unientity><desc>East Asian ideograph</desc></character>
+<character hex="28 49 34"><unientity>6D43</unientity><desc>East Asian ideograph</desc></character>
+<character hex="28 49 71"><unientity>6D9E</unientity><desc>East Asian ideograph</desc></character>
+<character hex="28 4B 28"><unientity>6D48</unientity><desc>East Asian ideograph</desc></character>
+<character hex="28 4B 43"><unientity>8365</unientity><desc>East Asian ideograph</desc></character>
+<character hex="28 4C 2E"><unientity>6D52</unientity><desc>East Asian ideograph</desc></character>
+<character hex="28 4C 41"><unientity>6CA4</unientity><desc>East Asian ideograph</desc></character>
+<character hex="28 4C 62"><unientity>988D</unientity><desc>East Asian ideograph</desc></character>
+<character hex="28 4D 27"><unientity>6D9D</unientity><desc>East Asian ideograph</desc></character>
+<character hex="28 4D 2B"><unientity>6D54</unientity><desc>East Asian ideograph</desc></character>
+<character hex="28 4D 49"><unientity>6DA0</unientity><desc>East Asian ideograph</desc></character>
+<character hex="28 4D 58"><unientity>6CA9</unientity><desc>East Asian ideograph</desc></character>
+<character hex="28 4D 59"><unientity>6ED7</unientity><desc>East Asian ideograph</desc></character>
+<character hex="28 4E 30"><unientity>6E11</unientity><desc>East Asian ideograph</desc></character>
+<character hex="28 4E 3E"><unientity>6CF6</unientity><desc>East Asian ideograph</desc></character>
+<character hex="28 4E 41"><unientity>6F4B</unientity><desc>East Asian ideograph</desc></character>
+<character hex="28 4E 42"><unientity>6D4D</unientity><desc>East Asian ideograph</desc></character>
+<character hex="28 4E 62"><unientity>6F4D</unientity><desc>East Asian ideograph</desc></character>
+<character hex="28 4E 66"><unientity>6EE2</unientity><desc>East Asian ideograph</desc></character>
+<character hex="28 4F 26"><unientity>6CF7</unientity><desc>East Asian ideograph</desc></character>
+<character hex="28 4F 39"><unientity>6CF8</unientity><desc>East Asian ideograph</desc></character>
+<character hex="28 4F 5D"><unientity>6CA3</unientity><desc>East Asian ideograph</desc></character>
+<character hex="28 4F 61"><unientity>6EE0</unientity><desc>East Asian ideograph</desc></character>
+<character hex="28 4F 6B"><unientity>6F13</unientity><desc>East Asian ideograph</desc></character>
+<character hex="28 4F 7D"><unientity>704F</unientity><desc>East Asian ideograph</desc></character>
+<character hex="28 50 29"><unientity>6EDF</unientity><desc>East Asian ideograph</desc></character>
+<character hex="28 51 50"><unientity>70C3</unientity><desc>East Asian ideograph</desc></character>
+<character hex="28 52 52"><unientity>709C</unientity><desc>East Asian ideograph</desc></character>
+<character hex="28 53 23"><unientity>8367</unientity><desc>East Asian ideograph</desc></character>
+<character hex="28 53 3C"><unientity>709D</unientity><desc>East Asian ideograph</desc></character>
+<character hex="28 54 24"><unientity>70E8</unientity><desc>East Asian ideograph</desc></character>
+<character hex="28 54 4F"><unientity>70EC</unientity><desc>East Asian ideograph</desc></character>
+<character hex="28 57 5E"><unientity>72B8</unientity><desc>East Asian ideograph</desc></character>
+<character hex="28 57 5F"><unientity>72F2</unientity><desc>East Asian ideograph</desc></character>
+<character hex="28 58 2B"><unientity>7303</unientity><desc>East Asian ideograph</desc></character>
+<character hex="28 58 36"><unientity>7315</unientity><desc>East Asian ideograph</desc></character>
+<character hex="28 5A 47"><unientity>73AE</unientity><desc>East Asian ideograph</desc></character>
+<character hex="28 5B 21"><unientity>740F</unientity><desc>East Asian ideograph</desc></character>
+<character hex="28 5C 3A"><unientity>748E</unientity><desc>East Asian ideograph</desc></character>
+<character hex="28 5C 40"><unientity>74D2</unientity><desc>East Asian ideograph</desc></character>
+<character hex="28 5D 6B"><unientity>7572</unientity><desc>East Asian ideograph</desc></character>
+<character hex="28 5E 7A"><unientity>75D6</unientity><desc>East Asian ideograph</desc></character>
+<character hex="28 5F 48"><unientity>7617</unientity><desc>East Asian ideograph</desc></character>
+<character hex="28 5F 5E"><unientity>7618</unientity><desc>East Asian ideograph</desc></character>
+<character hex="28 5F 6F"><unientity>7605</unientity><desc>East Asian ideograph</desc></character>
+<character hex="28 60 2B"><unientity>762A</unientity><desc>East Asian ideograph</desc></character>
+<character hex="28 60 32"><unientity>75AC</unientity><desc>East Asian ideograph</desc></character>
+<character hex="28 60 37"><unientity>763F</unientity><desc>East Asian ideograph</desc></character>
+<character hex="28 60 3A"><unientity>75C8</unientity><desc>East Asian ideograph</desc></character>
+<character hex="28 62 22"><unientity>7726</unientity><desc>East Asian ideograph</desc></character>
+<character hex="28 62 72"><unientity>770D</unientity><desc>East Asian ideograph</desc></character>
+<character hex="28 63 2C"><unientity>7751</unientity><desc>East Asian ideograph</desc></character>
+<character hex="28 64 5A"><unientity>7817</unientity><desc>East Asian ideograph</desc></character>
+<character hex="28 64 60"><unientity>7856</unientity><desc>East Asian ideograph</desc></character>
+<character hex="28 65 40"><unientity>7800</unientity><desc>East Asian ideograph</desc></character>
+<character hex="28 65 6A"><unientity>789B</unientity><desc>East Asian ideograph</desc></character>
+<character hex="28 65 77"><unientity>789C</unientity><desc>East Asian ideograph</desc></character>
+<character hex="28 66 22"><unientity>7857</unientity><desc>East Asian ideograph</desc></character>
+<character hex="28 66 55"><unientity>783B</unientity><desc>East Asian ideograph</desc></character>
+<character hex="28 6A 3C"><unientity>7AAD</unientity><desc>East Asian ideograph</desc></character>
+<character hex="28 6B 7C"><unientity>7B15</unientity><desc>East Asian ideograph</desc></character>
+<character hex="28 6C 58"><unientity>7BA7</unientity><desc>East Asian ideograph</desc></character>
+<character hex="28 6D 47"><unientity>7BA6</unientity><desc>East Asian ideograph</desc></character>
+<character hex="28 6D 54"><unientity>7B5A</unientity><desc>East Asian ideograph</desc></character>
+<character hex="28 6E 56"><unientity>7BA8</unientity><desc>East Asian ideograph</desc></character>
+<character hex="28 6E 68"><unientity>7B3E</unientity><desc>East Asian ideograph</desc></character>
+<character hex="28 6E 69"><unientity>7C16</unientity><desc>East Asian ideograph</desc></character>
+<character hex="28 70 22"><unientity>7CC1</unientity><desc>East Asian ideograph</desc></character>
+<character hex="28 70 2E"><unientity>E91D</unientity><desc>Duplicate simplified ideograph</desc></character>
+<character hex="28 70 30"><unientity>7C9D</unientity><desc>East Asian ideograph</desc></character>
+<character hex="28 70 35"><unientity>7C74</unientity><desc>East Asian ideograph</desc></character>
+<character hex="28 70 42"><unientity>7EA1</unientity><desc>East Asian ideograph</desc></character>
+<character hex="28 70 45"><unientity>7EA8</unientity><desc>East Asian ideograph</desc></character>
+<character hex="28 70 4A"><unientity>7EBE</unientity><desc>East Asian ideograph</desc></character>
+<character hex="28 70 61"><unientity>7EC0</unientity><desc>East Asian ideograph</desc></character>
+<character hex="28 70 62"><unientity>7EC1</unientity><desc>East Asian ideograph</desc></character>
+<character hex="28 70 65"><unientity>7EC2</unientity><desc>East Asian ideograph</desc></character>
+<character hex="28 70 6A"><unientity>7ED0</unientity><desc>East Asian ideograph</desc></character>
+<character hex="28 71 30"><unientity>7EDB</unientity><desc>East Asian ideograph</desc></character>
+<character hex="28 71 34"><unientity>7ED7</unientity><desc>East Asian ideograph</desc></character>
+<character hex="28 71 39"><unientity>7EE8</unientity><desc>East Asian ideograph</desc></character>
+<character hex="28 71 44"><unientity>7EE0</unientity><desc>East Asian ideograph</desc></character>
+<character hex="28 71 4D"><unientity>7EE1</unientity><desc>East Asian ideograph</desc></character>
+<character hex="28 71 61"><unientity>7EFB</unientity><desc>East Asian ideograph</desc></character>
+<character hex="28 71 67"><unientity>7EEF</unientity><desc>East Asian ideograph</desc></character>
+<character hex="28 71 74"><unientity>7EF2</unientity><desc>East Asian ideograph</desc></character>
+<character hex="28 71 78"><unientity>7EF6</unientity><desc>East Asian ideograph</desc></character>
+<character hex="28 71 7D"><unientity>7EFA</unientity><desc>East Asian ideograph</desc></character>
+<character hex="28 72 29"><unientity>7F17</unientity><desc>East Asian ideograph</desc></character>
+<character hex="28 72 2A"><unientity>7F02</unientity><desc>East Asian ideograph</desc></character>
+<character hex="28 72 31"><unientity>7F03</unientity><desc>East Asian ideograph</desc></character>
+<character hex="28 72 36"><unientity>7F07</unientity><desc>East Asian ideograph</desc></character>
+<character hex="28 72 3C"><unientity>7F08</unientity><desc>East Asian ideograph</desc></character>
+<character hex="28 72 3E"><unientity>7F0C</unientity><desc>East Asian ideograph</desc></character>
+<character hex="28 72 47"><unientity>7F11</unientity><desc>East Asian ideograph</desc></character>
+<character hex="28 72 48"><unientity>7F0F</unientity><desc>East Asian ideograph</desc></character>
+<character hex="28 72 51"><unientity>7F1F</unientity><desc>East Asian ideograph</desc></character>
+<character hex="28 72 53"><unientity>7F12</unientity><desc>East Asian ideograph</desc></character>
+<character hex="28 72 5D"><unientity>7F1C</unientity><desc>East Asian ideograph</desc></character>
+<character hex="28 72 5E"><unientity>7F19</unientity><desc>East Asian ideograph</desc></character>
+<character hex="28 72 5F"><unientity>7F1B</unientity><desc>East Asian ideograph</desc></character>
+<character hex="28 72 69"><unientity>7EC9</unientity><desc>East Asian ideograph</desc></character>
+<character hex="28 72 71"><unientity>E91E</unientity><desc>Duplicate simplified ideograph</desc></character>
+<character hex="28 72 72"><unientity>7F21</unientity><desc>East Asian ideograph</desc></character>
+<character hex="28 72 75"><unientity>7D77</unientity><desc>East Asian ideograph</desc></character>
+<character hex="28 72 79"><unientity>7F25</unientity><desc>East Asian ideograph</desc></character>
+<character hex="28 73 21"><unientity>7F26</unientity><desc>East Asian ideograph</desc></character>
+<character hex="28 73 2D"><unientity>7F2F</unientity><desc>East Asian ideograph</desc></character>
+<character hex="28 73 49"><unientity>7F30</unientity><desc>East Asian ideograph</desc></character>
+<character hex="28 73 4E"><unientity>7F32</unientity><desc>East Asian ideograph</desc></character>
+<character hex="28 73 51"><unientity>7F33</unientity><desc>East Asian ideograph</desc></character>
+<character hex="28 73 52"><unientity>7F34</unientity><desc>East Asian ideograph</desc></character>
+<character hex="28 73 59"><unientity>7F31</unientity><desc>East Asian ideograph</desc></character>
+<character hex="28 73 5D"><unientity>7EA9</unientity><desc>East Asian ideograph</desc></character>
+<character hex="28 73 60"><unientity>7F2C</unientity><desc>East Asian ideograph</desc></character>
+<character hex="28 73 6D"><unientity>624D</unientity><desc>East Asian ideograph</desc></character>
+<character hex="28 73 74"><unientity>7F35</unientity><desc>East Asian ideograph</desc></character>
+<character hex="28 74 2E"><unientity>7F42</unientity><desc>East Asian ideograph</desc></character>
+<character hex="28 74 31"><unientity>E91F</unientity><desc>Duplicate simplified ideograph</desc></character>
+<character hex="28 74 72"><unientity>7F74</unientity><desc>East Asian ideograph</desc></character>
+<character hex="28 75 31"><unientity>7F9F</unientity><desc>East Asian ideograph</desc></character>
+<character hex="28 76 55"><unientity>8027</unientity><desc>East Asian ideograph</desc></character>
+<character hex="28 77 39"><unientity>8069</unientity><desc>East Asian ideograph</desc></character>
+<character hex="28 77 3F"><unientity>804D</unientity><desc>East Asian ideograph</desc></character>
+<character hex="28 78 55"><unientity>80EB</unientity><desc>East Asian ideograph</desc></character>
+<character hex="28 78 6E"><unientity>80E8</unientity><desc>East Asian ideograph</desc></character>
+<character hex="28 79 41"><unientity>8136</unientity><desc>East Asian ideograph</desc></character>
+<character hex="28 7A 56"><unientity>8114</unientity><desc>East Asian ideograph</desc></character>
+<character hex="28 7E 61"><unientity>82CC</unientity><desc>East Asian ideograph</desc></character>
+<character hex="29 23 3C"><unientity>836D</unientity><desc>East Asian ideograph</desc></character>
+<character hex="29 23 3D"><unientity>836E</unientity><desc>East Asian ideograph</desc></character>
+<character hex="29 23 75"><unientity>83B3</unientity><desc>East Asian ideograph</desc></character>
+<character hex="29 24 33"><unientity>E920</unientity><desc>Duplicate simplified ideograph</desc></character>
+<character hex="29 24 3A"><unientity>83BC</unientity><desc>East Asian ideograph</desc></character>
+<character hex="29 24 7D"><unientity>835C</unientity><desc>East Asian ideograph</desc></character>
+<character hex="29 25 24"><unientity>848C</unientity><desc>East Asian ideograph</desc></character>
+<character hex="29 25 2D"><unientity>8311</unientity><desc>East Asian ideograph</desc></character>
+<character hex="29 25 35"><unientity>82C1</unientity><desc>East Asian ideograph</desc></character>
+<character hex="29 25 46"><unientity>8368</unientity><desc>East Asian ideograph</desc></character>
+<character hex="29 25 4B"><unientity>835B</unientity><desc>East Asian ideograph</desc></character>
+<character hex="29 25 5A"><unientity>8487</unientity><desc>East Asian ideograph</desc></character>
+<character hex="29 25 64"><unientity>8489</unientity><desc>East Asian ideograph</desc></character>
+<character hex="29 25 67"><unientity>836C</unientity><desc>East Asian ideograph</desc></character>
+<character hex="29 25 71"><unientity>835E</unientity><desc>East Asian ideograph</desc></character>
+<character hex="29 25 74"><unientity>83B8</unientity><desc>East Asian ideograph</desc></character>
+<character hex="29 25 77"><unientity>8297</unientity><desc>East Asian ideograph</desc></character>
+<character hex="29 26 33"><unientity>84E3</unientity><desc>East Asian ideograph</desc></character>
+<character hex="29 26 51"><unientity>84DF</unientity><desc>East Asian ideograph</desc></character>
+<character hex="29 26 57"><unientity>835F</unientity><desc>East Asian ideograph</desc></character>
+<character hex="29 26 58"><unientity>83B6</unientity><desc>East Asian ideograph</desc></character>
+<character hex="29 26 61"><unientity>8360</unientity><desc>East Asian ideograph</desc></character>
+<character hex="29 26 68"><unientity>8369</unientity><desc>East Asian ideograph</desc></character>
+<character hex="29 27 52"><unientity>830F</unientity><desc>East Asian ideograph</desc></character>
+<character hex="29 27 65"><unientity>82C8</unientity><desc>East Asian ideograph</desc></character>
+<character hex="29 27 68"><unientity>8572</unientity><desc>East Asian ideograph</desc></character>
+<character hex="29 28 2A"><unientity>8539</unientity><desc>East Asian ideograph</desc></character>
+<character hex="29 28 40"><unientity>84E0</unientity><desc>East Asian ideograph</desc></character>
+<character hex="29 2A 2F"><unientity>86F1</unientity><desc>East Asian ideograph</desc></character>
+<character hex="29 2A 34"><unientity>86AC</unientity><desc>East Asian ideograph</desc></character>
+<character hex="29 2B 55"><unientity>86F3</unientity><desc>East Asian ideograph</desc></character>
+<character hex="29 2B 6E"><unientity>86F0</unientity><desc>East Asian ideograph</desc></character>
+<character hex="29 2C 4C"><unientity>866E</unientity><desc>East Asian ideograph</desc></character>
+<character hex="29 2C 55"><unientity>86CF</unientity><desc>East Asian ideograph</desc></character>
+<character hex="29 2C 5D"><unientity>867F</unientity><desc>East Asian ideograph</desc></character>
+<character hex="29 2C 61"><unientity>86F4</unientity><desc>East Asian ideograph</desc></character>
+<character hex="29 2C 64"><unientity>877E</unientity><desc>East Asian ideograph</desc></character>
+<character hex="29 2D 51"><unientity>8511</unientity><desc>East Asian ideograph</desc></character>
+<character hex="29 2F 60"><unientity>88E2</unientity><desc>East Asian ideograph</desc></character>
+<character hex="29 2F 72"><unientity>88E5</unientity><desc>East Asian ideograph</desc></character>
+<character hex="29 30 2D"><unientity>88E3</unientity><desc>East Asian ideograph</desc></character>
+<character hex="29 30 32"><unientity>7962</unientity><desc>East Asian ideograph</desc></character>
+<character hex="29 30 66"><unientity>89C7</unientity><desc>East Asian ideograph</desc></character>
+<character hex="29 30 6F"><unientity>89CB</unientity><desc>East Asian ideograph</desc></character>
+<character hex="29 30 7D"><unientity>89CF</unientity><desc>East Asian ideograph</desc></character>
+<character hex="29 31 2B"><unientity>89D1</unientity><desc>East Asian ideograph</desc></character>
+<character hex="29 31 32"><unientity>89CC</unientity><desc>East Asian ideograph</desc></character>
+<character hex="29 31 60"><unientity>89EF</unientity><desc>East Asian ideograph</desc></character>
+<character hex="29 32 2A"><unientity>8BB5</unientity><desc>East Asian ideograph</desc></character>
+<character hex="29 32 3B"><unientity>8BCE</unientity><desc>East Asian ideograph</desc></character>
+<character hex="29 32 3C"><unientity>8BD2</unientity><desc>East Asian ideograph</desc></character>
+<character hex="29 32 4F"><unientity>8BD6</unientity><desc>East Asian ideograph</desc></character>
+<character hex="29 32 50"><unientity>8BD3</unientity><desc>East Asian ideograph</desc></character>
+<character hex="29 32 56"><unientity>8BE9</unientity><desc>East Asian ideograph</desc></character>
+<character hex="29 32 5D"><unientity>8BD4</unientity><desc>East Asian ideograph</desc></character>
+<character hex="29 32 5E"><unientity>8BDC</unientity><desc>East Asian ideograph</desc></character>
+<character hex="29 32 71"><unientity>8BEE</unientity><desc>East Asian ideograph</desc></character>
+<character hex="29 32 7E"><unientity>8C07</unientity><desc>East Asian ideograph</desc></character>
+<character hex="29 33 25"><unientity>8BF9</unientity><desc>East Asian ideograph</desc></character>
+<character hex="29 33 2C"><unientity>8BFC</unientity><desc>East Asian ideograph</desc></character>
+<character hex="29 33 36"><unientity>8BE4</unientity><desc>East Asian ideograph</desc></character>
+<character hex="29 33 38"><unientity>8BFD</unientity><desc>East Asian ideograph</desc></character>
+<character hex="29 33 3B"><unientity>8C00</unientity><desc>East Asian ideograph</desc></character>
+<character hex="29 33 40"><unientity>8C02</unientity><desc>East Asian ideograph</desc></character>
+<character hex="29 33 44"><unientity>8C19</unientity><desc>East Asian ideograph</desc></character>
+<character hex="29 33 45"><unientity>8BE8</unientity><desc>East Asian ideograph</desc></character>
+<character hex="29 33 4E"><unientity>8C0C</unientity><desc>East Asian ideograph</desc></character>
+<character hex="29 33 57"><unientity>8C14</unientity><desc>East Asian ideograph</desc></character>
+<character hex="29 33 59"><unientity>8C11</unientity><desc>East Asian ideograph</desc></character>
+<character hex="29 33 5D"><unientity>8C16</unientity><desc>East Asian ideograph</desc></character>
+<character hex="29 33 62"><unientity>8C1D</unientity><desc>East Asian ideograph</desc></character>
+<character hex="29 33 73"><unientity>8C21</unientity><desc>East Asian ideograph</desc></character>
+<character hex="29 33 7A"><unientity>8BCC</unientity><desc>East Asian ideograph</desc></character>
+<character hex="29 33 7D"><unientity>8C27</unientity><desc>East Asian ideograph</desc></character>
+<character hex="29 34 30"><unientity>8BB4</unientity><desc>East Asian ideograph</desc></character>
+<character hex="29 34 38"><unientity>8C29</unientity><desc>East Asian ideograph</desc></character>
+<character hex="29 34 4D"><unientity>8C2E</unientity><desc>East Asian ideograph</desc></character>
+<character hex="29 34 59"><unientity>8C2F</unientity><desc>East Asian ideograph</desc></character>
+<character hex="29 34 68"><unientity>8C35</unientity><desc>East Asian ideograph</desc></character>
+<character hex="29 35 2D"><unientity>8C30</unientity><desc>East Asian ideograph</desc></character>
+<character hex="29 35 37"><unientity>8C20</unientity><desc>East Asian ideograph</desc></character>
+<character hex="29 35 39"><unientity>8C33</unientity><desc>East Asian ideograph</desc></character>
+<character hex="29 36 4E"><unientity>8D33</unientity><desc>East Asian ideograph</desc></character>
+<character hex="29 36 51"><unientity>8D36</unientity><desc>East Asian ideograph</desc></character>
+<character hex="29 36 5F"><unientity>8D47</unientity><desc>East Asian ideograph</desc></character>
+<character hex="29 36 6A"><unientity>8D53</unientity><desc>East Asian ideograph</desc></character>
+<character hex="29 36 6B"><unientity>8D55</unientity><desc>East Asian ideograph</desc></character>
+<character hex="29 36 70"><unientity>8D49</unientity><desc>East Asian ideograph</desc></character>
+<character hex="29 36 7E"><unientity>8D59</unientity><desc>East Asian ideograph</desc></character>
+<character hex="29 37 25"><unientity>8D3D</unientity><desc>East Asian ideograph</desc></character>
+<character hex="29 37 26"><unientity>8D5C</unientity><desc>East Asian ideograph</desc></character>
+<character hex="29 37 3A"><unientity>8D46</unientity><desc>East Asian ideograph</desc></character>
+<character hex="29 38 66"><unientity>8DB1</unientity><desc>East Asian ideograph</desc></character>
+<character hex="29 3A 2E"><unientity>8DC4</unientity><desc>East Asian ideograph</desc></character>
+<character hex="29 3A 40"><unientity>8DF8</unientity><desc>East Asian ideograph</desc></character>
+<character hex="29 3A 46"><unientity>8E70</unientity><desc>East Asian ideograph</desc></character>
+<character hex="29 3A 57"><unientity>8DFB</unientity><desc>East Asian ideograph</desc></character>
+<character hex="29 3A 5E"><unientity>8DF9</unientity><desc>East Asian ideograph</desc></character>
+<character hex="29 3A 5F"><unientity>8DDE</unientity><desc>East Asian ideograph</desc></character>
+<character hex="29 3A 60"><unientity>8E2C</unientity><desc>East Asian ideograph</desc></character>
+<character hex="29 3A 6B"><unientity>8E7F</unientity><desc>East Asian ideograph</desc></character>
+<character hex="29 3A 70"><unientity>8E9C</unientity><desc>East Asian ideograph</desc></character>
+<character hex="29 3B 3E"><unientity>8F71</unientity><desc>East Asian ideograph</desc></character>
+<character hex="29 3B 3F"><unientity>8F7A</unientity><desc>East Asian ideograph</desc></character>
+<character hex="29 3B 42"><unientity>8F75</unientity><desc>East Asian ideograph</desc></character>
+<character hex="29 3B 47"><unientity>8F77</unientity><desc>East Asian ideograph</desc></character>
+<character hex="29 3B 4F"><unientity>8F78</unientity><desc>East Asian ideograph</desc></character>
+<character hex="29 3B 59"><unientity>8F82</unientity><desc>East Asian ideograph</desc></character>
+<character hex="29 3B 5B"><unientity>8F81</unientity><desc>East Asian ideograph</desc></character>
+<character hex="29 3B 6B"><unientity>8F8B</unientity><desc>East Asian ideograph</desc></character>
+<character hex="29 3B 6D"><unientity>8F8A</unientity><desc>East Asian ideograph</desc></character>
+<character hex="29 3B 7A"><unientity>8F8F</unientity><desc>East Asian ideograph</desc></character>
+<character hex="29 3C 30"><unientity>8F98</unientity><desc>East Asian ideograph</desc></character>
+<character hex="29 3C 57"><unientity>8F79</unientity><desc>East Asian ideograph</desc></character>
+<character hex="29 3C 5A"><unientity>8F73</unientity><desc>East Asian ideograph</desc></character>
+<character hex="29 3D 4E"><unientity>8FF8</unientity><desc>East Asian ideograph</desc></character>
+<character hex="29 3F 23"><unientity>90CF</unientity><desc>East Asian ideograph</desc></character>
+<character hex="29 3F 4C"><unientity>90D3</unientity><desc>East Asian ideograph</desc></character>
+<character hex="29 3F 5A"><unientity>90E7</unientity><desc>East Asian ideograph</desc></character>
+<character hex="29 3F 5C"><unientity>90AC</unientity><desc>East Asian ideograph</desc></character>
+<character hex="29 40 21"><unientity>90F8</unientity><desc>East Asian ideograph</desc></character>
+<character hex="29 40 2B"><unientity>90BA</unientity><desc>East Asian ideograph</desc></character>
+<character hex="29 40 2C"><unientity>90D0</unientity><desc>East Asian ideograph</desc></character>
+<character hex="29 40 31"><unientity>909D</unientity><desc>East Asian ideograph</desc></character>
+<character hex="29 40 40"><unientity>90E6</unientity><desc>East Asian ideograph</desc></character>
+<character hex="29 41 5C"><unientity>917E</unientity><desc>East Asian ideograph</desc></character>
+<character hex="29 41 5D"><unientity>917D</unientity><desc>East Asian ideograph</desc></character>
+<character hex="29 41 61"><unientity>9487</unientity><desc>East Asian ideograph</desc></character>
+<character hex="29 41 62"><unientity>9486</unientity><desc>East Asian ideograph</desc></character>
+<character hex="29 41 63"><unientity>948C</unientity><desc>East Asian ideograph</desc></character>
+<character hex="29 41 64"><unientity>948B</unientity><desc>East Asian ideograph</desc></character>
+<character hex="29 41 6A"><unientity>948D</unientity><desc>East Asian ideograph</desc></character>
+<character hex="29 41 6B"><unientity>948E</unientity><desc>East Asian ideograph</desc></character>
+<character hex="29 41 79"><unientity>9492</unientity><desc>East Asian ideograph</desc></character>
+<character hex="29 42 21"><unientity>9495</unientity><desc>East Asian ideograph</desc></character>
+<character hex="29 42 22"><unientity>9490</unientity><desc>East Asian ideograph</desc></character>
+<character hex="29 42 23"><unientity>94AD</unientity><desc>East Asian ideograph</desc></character>
+<character hex="29 42 24"><unientity>94AA</unientity><desc>East Asian ideograph</desc></character>
+<character hex="29 42 25"><unientity>94AB</unientity><desc>East Asian ideograph</desc></character>
+<character hex="29 42 28"><unientity>94AC</unientity><desc>East Asian ideograph</desc></character>
+<character hex="29 42 31"><unientity>94AF</unientity><desc>East Asian ideograph</desc></character>
+<character hex="29 42 37"><unientity>949B</unientity><desc>East Asian ideograph</desc></character>
+<character hex="29 42 4B"><unientity>94A3</unientity><desc>East Asian ideograph</desc></character>
+<character hex="29 42 51"><unientity>94C8</unientity><desc>East Asian ideograph</desc></character>
+<character hex="29 42 52"><unientity>94C9</unientity><desc>East Asian ideograph</desc></character>
+<character hex="29 42 54"><unientity>94CB</unientity><desc>East Asian ideograph</desc></character>
+<character hex="29 42 55"><unientity>94CA</unientity><desc>East Asian ideograph</desc></character>
+<character hex="29 42 58"><unientity>94B0</unientity><desc>East Asian ideograph</desc></character>
+<character hex="29 42 5C"><unientity>94CC</unientity><desc>East Asian ideograph</desc></character>
+<character hex="29 42 5F"><unientity>94B6</unientity><desc>East Asian ideograph</desc></character>
+<character hex="29 42 60"><unientity>94B7</unientity><desc>East Asian ideograph</desc></character>
+<character hex="29 42 61"><unientity>94B2</unientity><desc>East Asian ideograph</desc></character>
+<character hex="29 42 64"><unientity>94BA</unientity><desc>East Asian ideograph</desc></character>
+<character hex="29 42 6D"><unientity>94CD</unientity><desc>East Asian ideograph</desc></character>
+<character hex="29 42 6F"><unientity>94BD</unientity><desc>East Asian ideograph</desc></character>
+<character hex="29 42 74"><unientity>94BF</unientity><desc>East Asian ideograph</desc></character>
+<character hex="29 43 2B"><unientity>94C6</unientity><desc>East Asian ideograph</desc></character>
+<character hex="29 43 2F"><unientity>94F3</unientity><desc>East Asian ideograph</desc></character>
+<character hex="29 43 31"><unientity>94F1</unientity><desc>East Asian ideograph</desc></character>
+<character hex="29 43 35"><unientity>94F5</unientity><desc>East Asian ideograph</desc></character>
+<character hex="29 43 40"><unientity>94D6</unientity><desc>East Asian ideograph</desc></character>
+<character hex="29 43 43"><unientity>94D2</unientity><desc>East Asian ideograph</desc></character>
+<character hex="29 43 46"><unientity>94D1</unientity><desc>East Asian ideograph</desc></character>
+<character hex="29 43 49"><unientity>94D5</unientity><desc>East Asian ideograph</desc></character>
+<character hex="29 43 4F"><unientity>94DE</unientity><desc>East Asian ideograph</desc></character>
+<character hex="29 43 50"><unientity>94DF</unientity><desc>East Asian ideograph</desc></character>
+<character hex="29 43 55"><unientity>94EB</unientity><desc>East Asian ideograph</desc></character>
+<character hex="29 43 58"><unientity>94EF</unientity><desc>East Asian ideograph</desc></character>
+<character hex="29 43 59"><unientity>94E5</unientity><desc>East Asian ideograph</desc></character>
+<character hex="29 43 5B"><unientity>94E3</unientity><desc>East Asian ideograph</desc></character>
+<character hex="29 43 62"><unientity>94EA</unientity><desc>East Asian ideograph</desc></character>
+<character hex="29 43 64"><unientity>94F7</unientity><desc>East Asian ideograph</desc></character>
+<character hex="29 43 6A"><unientity>9512</unientity><desc>East Asian ideograph</desc></character>
+<character hex="29 43 6C"><unientity>950D</unientity><desc>East Asian ideograph</desc></character>
+<character hex="29 43 71"><unientity>94FD</unientity><desc>East Asian ideograph</desc></character>
+<character hex="29 43 72"><unientity>9513</unientity><desc>East Asian ideograph</desc></character>
+<character hex="29 43 75"><unientity>9514</unientity><desc>East Asian ideograph</desc></character>
+<character hex="29 43 7D"><unientity>94D8</unientity><desc>East Asian ideograph</desc></character>
+<character hex="29 44 27"><unientity>94D7</unientity><desc>East Asian ideograph</desc></character>
+<character hex="29 44 2B"><unientity>9503</unientity><desc>East Asian ideograph</desc></character>
+<character hex="29 44 2D"><unientity>94A1</unientity><desc>East Asian ideograph</desc></character>
+<character hex="29 44 2E"><unientity>9502</unientity><desc>East Asian ideograph</desc></character>
+<character hex="29 44 35"><unientity>950A</unientity><desc>East Asian ideograph</desc></character>
+<character hex="29 44 3E"><unientity>94E4</unientity><desc>East Asian ideograph</desc></character>
+<character hex="29 44 40"><unientity>9506</unientity><desc>East Asian ideograph</desc></character>
+<character hex="29 44 41"><unientity>9507</unientity><desc>East Asian ideograph</desc></character>
+<character hex="29 44 4D"><unientity>952B</unientity><desc>East Asian ideograph</desc></character>
+<character hex="29 44 57"><unientity>9529</unientity><desc>East Asian ideograph</desc></character>
+<character hex="29 44 58"><unientity>952C</unientity><desc>East Asian ideograph</desc></character>
+<character hex="29 44 5B"><unientity>9516</unientity><desc>East Asian ideograph</desc></character>
+<character hex="29 44 66"><unientity>9515</unientity><desc>East Asian ideograph</desc></character>
+<character hex="29 44 69"><unientity>94FC</unientity><desc>East Asian ideograph</desc></character>
+<character hex="29 44 6D"><unientity>951B</unientity><desc>East Asian ideograph</desc></character>
+<character hex="29 44 71"><unientity>951D</unientity><desc>East Asian ideograph</desc></character>
+<character hex="29 44 72"><unientity>951E</unientity><desc>East Asian ideograph</desc></character>
+<character hex="29 44 74"><unientity>951F</unientity><desc>East Asian ideograph</desc></character>
+<character hex="29 44 75"><unientity>9494</unientity><desc>East Asian ideograph</desc></character>
+<character hex="29 44 78"><unientity>9522</unientity><desc>East Asian ideograph</desc></character>
+<character hex="29 45 31"><unientity>9528</unientity><desc>East Asian ideograph</desc></character>
+<character hex="29 45 32"><unientity>9531</unientity><desc>East Asian ideograph</desc></character>
+<character hex="29 45 4D"><unientity>9534</unientity><desc>East Asian ideograph</desc></character>
+<character hex="29 45 4E"><unientity>9545</unientity><desc>East Asian ideograph</desc></character>
+<character hex="29 45 51"><unientity>9517</unientity><desc>East Asian ideograph</desc></character>
+<character hex="29 45 5E"><unientity>94E1</unientity><desc>East Asian ideograph</desc></character>
+<character hex="29 45 64"><unientity>9536</unientity><desc>East Asian ideograph</desc></character>
+<character hex="29 45 67"><unientity>9537</unientity><desc>East Asian ideograph</desc></character>
+<character hex="29 45 68"><unientity>9518</unientity><desc>East Asian ideograph</desc></character>
+<character hex="29 45 6F"><unientity>9538</unientity><desc>East Asian ideograph</desc></character>
+<character hex="29 45 7A"><unientity>9550</unientity><desc>East Asian ideograph</desc></character>
+<character hex="29 46 21"><unientity>9553</unientity><desc>East Asian ideograph</desc></character>
+<character hex="29 46 28"><unientity>9552</unientity><desc>East Asian ideograph</desc></character>
+<character hex="29 46 29"><unientity>84E5</unientity><desc>East Asian ideograph</desc></character>
+<character hex="29 46 2D"><unientity>9549</unientity><desc>East Asian ideograph</desc></character>
+<character hex="29 46 42"><unientity>94E0</unientity><desc>East Asian ideograph</desc></character>
+<character hex="29 46 47"><unientity>954F</unientity><desc>East Asian ideograph</desc></character>
+<character hex="29 46 4A"><unientity>953C</unientity><desc>East Asian ideograph</desc></character>
+<character hex="29 46 56"><unientity>955B</unientity><desc>East Asian ideograph</desc></character>
+<character hex="29 46 5A"><unientity>955F</unientity><desc>East Asian ideograph</desc></character>
+<character hex="29 46 62"><unientity>956A</unientity><desc>East Asian ideograph</desc></character>
+<character hex="29 46 66"><unientity>933E</unientity><desc>East Asian ideograph</desc></character>
+<character hex="29 46 7C"><unientity>9546</unientity><desc>East Asian ideograph</desc></character>
+<character hex="29 47 2F"><unientity>94E9</unientity><desc>East Asian ideograph</desc></character>
+<character hex="29 47 32"><unientity>94F4</unientity><desc>East Asian ideograph</desc></character>
+<character hex="29 47 34"><unientity>9566</unientity><desc>East Asian ideograph</desc></character>
+<character hex="29 47 3C"><unientity>9568</unientity><desc>East Asian ideograph</desc></character>
+<character hex="29 47 3E"><unientity>94F9</unientity><desc>East Asian ideograph</desc></character>
+<character hex="29 47 4D"><unientity>956B</unientity><desc>East Asian ideograph</desc></character>
+<character hex="29 47 50"><unientity>950E</unientity><desc>East Asian ideograph</desc></character>
+<character hex="29 47 51"><unientity>950F</unientity><desc>East Asian ideograph</desc></character>
+<character hex="29 47 58"><unientity>9561</unientity><desc>East Asian ideograph</desc></character>
+<character hex="29 47 5E"><unientity>9562</unientity><desc>East Asian ideograph</desc></character>
+<character hex="29 47 60"><unientity>9563</unientity><desc>East Asian ideograph</desc></character>
+<character hex="29 47 67"><unientity>94E7</unientity><desc>East Asian ideograph</desc></character>
+<character hex="29 47 69"><unientity>9564</unientity><desc>East Asian ideograph</desc></character>
+<character hex="29 47 74"><unientity>9571</unientity><desc>East Asian ideograph</desc></character>
+<character hex="29 48 3E"><unientity>9554</unientity><desc>East Asian ideograph</desc></character>
+<character hex="29 48 3F"><unientity>9572</unientity><desc>East Asian ideograph</desc></character>
+<character hex="29 48 4A"><unientity>956C</unientity><desc>East Asian ideograph</desc></character>
+<character hex="29 48 5C"><unientity>9565</unientity><desc>East Asian ideograph</desc></character>
+<character hex="29 48 69"><unientity>9567</unientity><desc>East Asian ideograph</desc></character>
+<character hex="29 48 6F"><unientity>9569</unientity><desc>East Asian ideograph</desc></character>
+<character hex="29 48 71"><unientity>954A</unientity><desc>East Asian ideograph</desc></character>
+<character hex="29 49 36"><unientity>95F3</unientity><desc>East Asian ideograph</desc></character>
+<character hex="29 49 42"><unientity>9606</unientity><desc>East Asian ideograph</desc></character>
+<character hex="29 49 44"><unientity>9603</unientity><desc>East Asian ideograph</desc></character>
+<character hex="29 49 48"><unientity>960F</unientity><desc>East Asian ideograph</desc></character>
+<character hex="29 49 49"><unientity>9608</unientity><desc>East Asian ideograph</desc></character>
+<character hex="29 49 4D"><unientity>9609</unientity><desc>East Asian ideograph</desc></character>
+<character hex="29 49 4F"><unientity>960A</unientity><desc>East Asian ideograph</desc></character>
+<character hex="29 49 50"><unientity>960C</unientity><desc>East Asian ideograph</desc></character>
+<character hex="29 49 52"><unientity>960D</unientity><desc>East Asian ideograph</desc></character>
+<character hex="29 49 5A"><unientity>9612</unientity><desc>East Asian ideograph</desc></character>
+<character hex="29 49 60"><unientity>9619</unientity><desc>East Asian ideograph</desc></character>
+<character hex="29 49 69"><unientity>961A</unientity><desc>East Asian ideograph</desc></character>
+<character hex="29 49 6F"><unientity>95FC</unientity><desc>East Asian ideograph</desc></character>
+<character hex="29 4A 44"><unientity>9655</unientity><desc>East Asian ideograph</desc></character>
+<character hex="29 4A 46"><unientity>9649</unientity><desc>East Asian ideograph</desc></character>
+<character hex="29 4C 76"><unientity>9753</unientity><desc>East Asian ideograph</desc></character>
+<character hex="29 4E 43"><unientity>97AF</unientity><desc>East Asian ideograph</desc></character>
+<character hex="29 4E 54"><unientity>97EA</unientity><desc>East Asian ideograph</desc></character>
+<character hex="29 4E 5C"><unientity>97EB</unientity><desc>East Asian ideograph</desc></character>
+<character hex="29 4E 79"><unientity>9878</unientity><desc>East Asian ideograph</desc></character>
+<character hex="29 4E 7B"><unientity>9883</unientity><desc>East Asian ideograph</desc></character>
+<character hex="29 4F 23"><unientity>9880</unientity><desc>East Asian ideograph</desc></character>
+<character hex="29 4F 2C"><unientity>988F</unientity><desc>East Asian ideograph</desc></character>
+<character hex="29 4F 6B"><unientity>98A1</unientity><desc>East Asian ideograph</desc></character>
+<character hex="29 4F 77"><unientity>989F</unientity><desc>East Asian ideograph</desc></character>
+<character hex="29 50 21"><unientity>98A2</unientity><desc>East Asian ideograph</desc></character>
+<character hex="29 50 29"><unientity>98A5</unientity><desc>East Asian ideograph</desc></character>
+<character hex="29 50 30"><unientity>989E</unientity><desc>East Asian ideograph</desc></character>
+<character hex="29 50 31"><unientity>98A7</unientity><desc>East Asian ideograph</desc></character>
+<character hex="29 50 53"><unientity>98D9</unientity><desc>East Asian ideograph</desc></character>
+<character hex="29 50 6C"><unientity>996B</unientity><desc>East Asian ideograph</desc></character>
+<character hex="29 51 32"><unientity>997D</unientity><desc>East Asian ideograph</desc></character>
+<character hex="29 51 53"><unientity>9967</unientity><desc>East Asian ideograph</desc></character>
+<character hex="29 51 66"><unientity>9969</unientity><desc>East Asian ideograph</desc></character>
+<character hex="29 51 6A"><unientity>9990</unientity><desc>East Asian ideograph</desc></character>
+<character hex="29 51 6D"><unientity>9991</unientity><desc>East Asian ideograph</desc></character>
+<character hex="29 51 70"><unientity>998D</unientity><desc>East Asian ideograph</desc></character>
+<character hex="29 51 72"><unientity>9994</unientity><desc>East Asian ideograph</desc></character>
+<character hex="29 51 75"><unientity>9993</unientity><desc>East Asian ideograph</desc></character>
+<character hex="29 52 22"><unientity>98E8</unientity><desc>East Asian ideograph</desc></character>
+<character hex="29 52 63"><unientity>9A75</unientity><desc>East Asian ideograph</desc></character>
+<character hex="29 52 69"><unientity>9A80</unientity><desc>East Asian ideograph</desc></character>
+<character hex="29 53 3D"><unientity>9A90</unientity><desc>East Asian ideograph</desc></character>
+<character hex="29 53 40"><unientity>9A92</unientity><desc>East Asian ideograph</desc></character>
+<character hex="29 53 47"><unientity>9A93</unientity><desc>East Asian ideograph</desc></character>
+<character hex="29 53 5A"><unientity>9A9F</unientity><desc>East Asian ideograph</desc></character>
+<character hex="29 53 60"><unientity>9A98</unientity><desc>East Asian ideograph</desc></character>
+<character hex="29 53 69"><unientity>9A7A</unientity><desc>East Asian ideograph</desc></character>
+<character hex="29 53 6A"><unientity>9A9D</unientity><desc>East Asian ideograph</desc></character>
+<character hex="29 53 70"><unientity>9A9C</unientity><desc>East Asian ideograph</desc></character>
+<character hex="29 53 79"><unientity>9A96</unientity><desc>East Asian ideograph</desc></character>
+<character hex="29 53 7A"><unientity>9AA2</unientity><desc>East Asian ideograph</desc></character>
+<character hex="29 54 21"><unientity>9AA3</unientity><desc>East Asian ideograph</desc></character>
+<character hex="29 54 22"><unientity>9A81</unientity><desc>East Asian ideograph</desc></character>
+<character hex="29 54 27"><unientity>9A85</unientity><desc>East Asian ideograph</desc></character>
+<character hex="29 54 33"><unientity>9AA7</unientity><desc>East Asian ideograph</desc></character>
+<character hex="29 54 6D"><unientity>9ACB</unientity><desc>East Asian ideograph</desc></character>
+<character hex="29 55 6C"><unientity>960B</unientity><desc>East Asian ideograph</desc></character>
+<character hex="29 55 74"><unientity>9604</unientity><desc>East Asian ideograph</desc></character>
+<character hex="29 56 3C"><unientity>9B49</unientity><desc>East Asian ideograph</desc></character>
+<character hex="29 56 5D"><unientity>9C82</unientity><desc>East Asian ideograph</desc></character>
+<character hex="29 57 21"><unientity>9C86</unientity><desc>East Asian ideograph</desc></character>
+<character hex="29 57 29"><unientity>9C87</unientity><desc>East Asian ideograph</desc></character>
+<character hex="29 57 2B"><unientity>9C90</unientity><desc>East Asian ideograph</desc></character>
+<character hex="29 57 31"><unientity>9C8B</unientity><desc>East Asian ideograph</desc></character>
+<character hex="29 57 39"><unientity>9C9E</unientity><desc>East Asian ideograph</desc></character>
+<character hex="29 57 3C"><unientity>9C91</unientity><desc>East Asian ideograph</desc></character>
+<character hex="29 57 3D"><unientity>9C92</unientity><desc>East Asian ideograph</desc></character>
+<character hex="29 57 42"><unientity>9C95</unientity><desc>East Asian ideograph</desc></character>
+<character hex="29 57 56"><unientity>9CA9</unientity><desc>East Asian ideograph</desc></character>
+<character hex="29 57 5F"><unientity>9CA0</unientity><desc>East Asian ideograph</desc></character>
+<character hex="29 57 6E"><unientity>9CA7</unientity><desc>East Asian ideograph</desc></character>
+<character hex="29 57 7A"><unientity>9CAD</unientity><desc>East Asian ideograph</desc></character>
+<character hex="29 57 7C"><unientity>9CB0</unientity><desc>East Asian ideograph</desc></character>
+<character hex="29 58 22"><unientity>9CAE</unientity><desc>East Asian ideograph</desc></character>
+<character hex="29 58 25"><unientity>9CBA</unientity><desc>East Asian ideograph</desc></character>
+<character hex="29 58 27"><unientity>9CB2</unientity><desc>East Asian ideograph</desc></character>
+<character hex="29 58 28"><unientity>9CB4</unientity><desc>East Asian ideograph</desc></character>
+<character hex="29 58 2C"><unientity>9CB1</unientity><desc>East Asian ideograph</desc></character>
+<character hex="29 58 2D"><unientity>9CB7</unientity><desc>East Asian ideograph</desc></character>
+<character hex="29 58 2F"><unientity>9CB5</unientity><desc>East Asian ideograph</desc></character>
+<character hex="29 58 31"><unientity>9CB6</unientity><desc>East Asian ideograph</desc></character>
+<character hex="29 58 34"><unientity>9CBB</unientity><desc>East Asian ideograph</desc></character>
+<character hex="29 58 3E"><unientity>9CCA</unientity><desc>East Asian ideograph</desc></character>
+<character hex="29 58 4B"><unientity>9CBD</unientity><desc>East Asian ideograph</desc></character>
+<character hex="29 58 54"><unientity>9CC4</unientity><desc>East Asian ideograph</desc></character>
+<character hex="29 58 59"><unientity>9CC6</unientity><desc>East Asian ideograph</desc></character>
+<character hex="29 58 5C"><unientity>9CC7</unientity><desc>East Asian ideograph</desc></character>
+<character hex="29 58 6A"><unientity>9CCB</unientity><desc>East Asian ideograph</desc></character>
+<character hex="29 58 6E"><unientity>9CA5</unientity><desc>East Asian ideograph</desc></character>
+<character hex="29 58 71"><unientity>9CCE</unientity><desc>East Asian ideograph</desc></character>
+<character hex="29 59 21"><unientity>9CD9</unientity><desc>East Asian ideograph</desc></character>
+<character hex="29 59 25"><unientity>9CCC</unientity><desc>East Asian ideograph</desc></character>
+<character hex="29 59 28"><unientity>9CD5</unientity><desc>East Asian ideograph</desc></character>
+<character hex="29 59 29"><unientity>9CA3</unientity><desc>East Asian ideograph</desc></character>
+<character hex="29 59 2A"><unientity>9CD3</unientity><desc>East Asian ideograph</desc></character>
+<character hex="29 59 32"><unientity>9CD8</unientity><desc>East Asian ideograph</desc></character>
+<character hex="29 59 38"><unientity>9CDF</unientity><desc>East Asian ideograph</desc></character>
+<character hex="29 59 3A"><unientity>9C85</unientity><desc>East Asian ideograph</desc></character>
+<character hex="29 59 3B"><unientity>9C9F</unientity><desc>East Asian ideograph</desc></character>
+<character hex="29 59 40"><unientity>9CBC</unientity><desc>East Asian ideograph</desc></character>
+<character hex="29 59 4F"><unientity>9CE2</unientity><desc>East Asian ideograph</desc></character>
+<character hex="29 59 55"><unientity>9C8E</unientity><desc>East Asian ideograph</desc></character>
+<character hex="29 59 58"><unientity>9C9A</unientity><desc>East Asian ideograph</desc></character>
+<character hex="29 59 6B"><unientity>9CA1</unientity><desc>East Asian ideograph</desc></character>
+<character hex="29 5A 28"><unientity>9E28</unientity><desc>East Asian ideograph</desc></character>
+<character hex="29 5A 44"><unientity>9E32</unientity><desc>East Asian ideograph</desc></character>
+<character hex="29 5A 48"><unientity>9E31</unientity><desc>East Asian ideograph</desc></character>
+<character hex="29 5A 59"><unientity>9E38</unientity><desc>East Asian ideograph</desc></character>
+<character hex="29 5A 65"><unientity>9E39</unientity><desc>East Asian ideograph</desc></character>
+<character hex="29 5A 68"><unientity>9E3A</unientity><desc>East Asian ideograph</desc></character>
+<character hex="29 5A 70"><unientity>9E48</unientity><desc>East Asian ideograph</desc></character>
+<character hex="29 5A 75"><unientity>9E41</unientity><desc>East Asian ideograph</desc></character>
+<character hex="29 5B 2A"><unientity>9E46</unientity><desc>East Asian ideograph</desc></character>
+<character hex="29 5B 35"><unientity>9E2B</unientity><desc>East Asian ideograph</desc></character>
+<character hex="29 5B 52"><unientity>9E4E</unientity><desc>East Asian ideograph</desc></character>
+<character hex="29 5B 59"><unientity>9E5C</unientity><desc>East Asian ideograph</desc></character>
+<character hex="29 5B 5C"><unientity>9E5B</unientity><desc>East Asian ideograph</desc></character>
+<character hex="29 5B 60"><unientity>9E55</unientity><desc>East Asian ideograph</desc></character>
+<character hex="29 5B 6B"><unientity>9E57</unientity><desc>East Asian ideograph</desc></character>
+<character hex="29 5B 6C"><unientity>9E4B</unientity><desc>East Asian ideograph</desc></character>
+<character hex="29 5B 77"><unientity>9E63</unientity><desc>East Asian ideograph</desc></character>
+<character hex="29 5B 79"><unientity>9E5A</unientity><desc>East Asian ideograph</desc></character>
+<character hex="29 5C 28"><unientity>9E58</unientity><desc>East Asian ideograph</desc></character>
+<character hex="29 5C 3E"><unientity>9E37</unientity><desc>East Asian ideograph</desc></character>
+<character hex="29 5C 47"><unientity>9E68</unientity><desc>East Asian ideograph</desc></character>
+<character hex="29 5C 49"><unientity>9E47</unientity><desc>East Asian ideograph</desc></character>
+<character hex="29 5C 57"><unientity>9E6B</unientity><desc>East Asian ideograph</desc></character>
+<character hex="29 5C 5B"><unientity>9E6C</unientity><desc>East Asian ideograph</desc></character>
+<character hex="29 5C 65"><unientity>9E69</unientity><desc>East Asian ideograph</desc></character>
+<character hex="29 5C 6C"><unientity>9E6A</unientity><desc>East Asian ideograph</desc></character>
+<character hex="29 5D 29"><unientity>9E71</unientity><desc>East Asian ideograph</desc></character>
+<character hex="29 5D 36"><unientity>9E2C</unientity><desc>East Asian ideograph</desc></character>
+<character hex="29 5D 3A"><unientity>9E73</unientity><desc>East Asian ideograph</desc></character>
+<character hex="29 5D 3B"><unientity>9E42</unientity><desc>East Asian ideograph</desc></character>
+<character hex="29 5D 3C"><unientity>5364</unientity><desc>East Asian ideograph</desc></character>
+<character hex="29 5D 42"><unientity>9E7E</unientity><desc>East Asian ideograph</desc></character>
+<character hex="29 5E 6A"><unientity>9EEA</unientity><desc>East Asian ideograph</desc></character>
+<character hex="29 5E 7A"><unientity>9EFE</unientity><desc>East Asian ideograph</desc></character>
+<character hex="29 5E 7C"><unientity>9F0B</unientity><desc>East Asian ideograph</desc></character>
+<character hex="29 5F 2B"><unientity>9F0D</unientity><desc>East Asian ideograph</desc></character>
+<character hex="29 5F 7B"><unientity>9F51</unientity><desc>East Asian ideograph</desc></character>
+<character hex="29 5F 7C"><unientity>9F80</unientity><desc>East Asian ideograph</desc></character>
+<character hex="29 60 28"><unientity>9F86</unientity><desc>East Asian ideograph</desc></character>
+<character hex="29 60 2B"><unientity>9F85</unientity><desc>East Asian ideograph</desc></character>
+<character hex="29 60 62"><unientity>9F9B</unientity><desc>East Asian ideograph</desc></character>
+<character hex="2D 30 21"><unientity>5F0C</unientity><desc>East Asian ideograph</desc></character>
+<character hex="2D 30 2D"><unientity>4E17</unientity><desc>East Asian ideograph</desc></character>
+<character hex="2D 30 32"><unientity>7ADD</unientity><desc>East Asian ideograph</desc></character>
+<character hex="2D 30 45"><unientity>4E57</unientity><desc>East Asian ideograph</desc></character>
+<character hex="2D 30 51"><unientity>5F0D</unientity><desc>East Asian ideograph</desc></character>
+<character hex="2D 30 53"><unientity>4E3C</unientity><desc>East Asian ideograph</desc></character>
+<character hex="2D 30 58"><unientity>4E9C</unientity><desc>East Asian ideograph</desc></character>
+<character hex="2D 30 5B"><unientity>4EBE</unientity><desc>East Asian ideograph</desc></character>
+<character hex="2D 30 61"><unientity>4EB0</unientity><desc>East Asian ideograph</desc></character>
+<character hex="2D 30 6C"><unientity>8B8E</unientity><desc>East Asian ideograph</desc></character>
+<character hex="2D 31 32"><unientity>4ECF</unientity><desc>East Asian ideograph</desc></character>
+<character hex="2D 31 3A"><unientity>62BB</unientity><desc>East Asian ideograph</desc></character>
+<character hex="2D 31 40"><unientity>4F32</unientity><desc>East Asian ideograph</desc></character>
+<character hex="2D 31 47"><unientity>5002</unientity><desc>East Asian ideograph</desc></character>
+<character hex="2D 31 4C"><unientity>5008</unientity><desc>East Asian ideograph</desc></character>
+<character hex="2D 31 5F"><unientity>4FA3</unientity><desc>East Asian ideograph</desc></character>
+<character hex="2D 31 64"><unientity>7AE2</unientity><desc>East Asian ideograph</desc></character>
+<character hex="2D 31 65"><unientity>EA04</unientity><desc>East Asian ideography not found in unified han</desc></character>
+<character hex="2D 31 77"><unientity>5E78</unientity><desc>East Asian ideograph</desc></character>
+<character hex="2D 32 24"><unientity>7B87</unientity><desc>East Asian ideograph</desc></character>
+<character hex="2D 32 51"><unientity>510C</unientity><desc>East Asian ideograph</desc></character>
+<character hex="2D 32 53"><unientity>50E3</unientity><desc>East Asian ideograph</desc></character>
+<character hex="2D 32 5F"><unientity>E976</unientity><unientityalt>50BB</unientityalt><desc>Variant of 4B325F which maps to 50BB</desc></character>
+<character hex="2D 32 61"><unientity>5039</unientity><desc>East Asian ideograph</desc></character>
+<character hex="2D 32 63"><unientity>4FAD</unientity><desc>East Asian ideograph</desc></character>
+<character hex="2D 32 72"><unientity>706E</unientity><desc>East Asian ideograph</desc></character>
+<character hex="2D 32 79"><unientity>514E</unientity><desc>East Asian ideograph</desc></character>
+<character hex="2D 33 24"><unientity>634C</unientity><desc>East Asian ideograph</desc></character>
+<character hex="2D 33 2A"><unientity>4E0C</unientity><desc>East Asian ideograph</desc></character>
+<character hex="2D 33 32"><unientity>5190</unientity><desc>East Asian ideograph</desc></character>
+<character hex="2D 33 4F"><unientity>5202</unientity><desc>East Asian ideograph</desc></character>
+<character hex="2D 33 56"><unientity>E9F4</unientity><desc>East Asian ideograph not in Unicode</desc></character>
+<character hex="2D 33 5F"><unientity>52B5</unientity><desc>East Asian ideograph</desc></character>
+<character hex="2D 33 66"><unientity>5234</unientity><desc>East Asian ideograph</desc></character>
+<character hex="2D 33 6B"><unientity>5C05</unientity><desc>East Asian ideograph</desc></character>
+<character hex="2D 33 72"><unientity>5265</unientity><desc>East Asian ideograph</desc></character>
+<character hex="2D 33 77"><unientity>8CF8</unientity><desc>East Asian ideograph</desc></character>
+<character hex="2D 34 21"><unientity>5294</unientity><desc>East Asian ideograph</desc></character>
+<character hex="2D 34 28"><unientity>5226</unientity><desc>East Asian ideograph</desc></character>
+<character hex="2D 34 2E"><unientity>8274</unientity><desc>East Asian ideograph</desc></character>
+<character hex="2D 34 36"><unientity>52F3</unientity><desc>East Asian ideograph</desc></character>
+<character hex="2D 34 3C"><unientity>52A2</unientity><desc>East Asian ideograph</desc></character>
+<character hex="2D 34 3D"><unientity>52E7</unientity><desc>East Asian ideograph</desc></character>
+<character hex="2D 34 53"><unientity>758B</unientity><desc>East Asian ideograph</desc></character>
+<character hex="2D 34 57"><unientity>62FE</unientity><desc>East Asian ideograph</desc></character>
+<character hex="2D 34 58"><unientity>4EDF</unientity><desc>East Asian ideograph</desc></character>
+<character hex="2D 34 5B"><unientity>6607</unientity><desc>East Asian ideograph</desc></character>
+<character hex="2D 34 5D"><unientity>5349</unientity><desc>East Asian ideograph</desc></character>
+<character hex="2D 34 64"><unientity>613D</unientity><desc>East Asian ideograph</desc></character>
+<character hex="2D 34 6A"><unientity>5918</unientity><desc>East Asian ideograph</desc></character>
+<character hex="2D 34 6E"><unientity>5373</unientity><desc>East Asian ideograph</desc></character>
+<character hex="2D 34 73"><unientity>5374</unientity><desc>East Asian ideograph</desc></character>
+<character hex="2D 35 39"><unientity>52FE</unientity><desc>East Asian ideograph</desc></character>
+<character hex="2D 35 3C"><unientity>6B62</unientity><desc>East Asian ideograph</desc></character>
+<character hex="2D 35 43"><unientity>4EDD</unientity><desc>East Asian ideograph</desc></character>
+<character hex="2D 35 47"><unientity>55AB</unientity><desc>East Asian ideograph</desc></character>
+<character hex="2D 35 56"><unientity>7343</unientity><desc>East Asian ideograph</desc></character>
+<character hex="2D 35 5C"><unientity>5434</unientity><desc>East Asian ideograph</desc></character>
+<character hex="2D 35 6A"><unientity>8A36</unientity><desc>East Asian ideograph</desc></character>
+<character hex="2D 35 71"><unientity>546A</unientity><desc>East Asian ideograph</desc></character>
+<character hex="2D 36 22"><unientity>8AEE</unientity><desc>East Asian ideograph</desc></character>
+<character hex="2D 36 2A"><unientity>95A7</unientity><desc>East Asian ideograph</desc></character>
+<character hex="2D 36 32"><unientity>8A7B</unientity><desc>East Asian ideograph</desc></character>
+<character hex="2D 36 42"><unientity>6B38</unientity><desc>East Asian ideograph</desc></character>
+<character hex="2D 36 44"><unientity>5557</unientity><desc>East Asian ideograph</desc></character>
+<character hex="2D 36 61"><unientity>6199</unientity><desc>East Asian ideograph</desc></character>
+<character hex="2D 37 30"><unientity>751E</unientity><desc>East Asian ideograph</desc></character>
+<character hex="2D 37 48"><unientity>8B5F</unientity><desc>East Asian ideograph</desc></character>
+<character hex="2D 37 49"><unientity>5650</unientity><desc>East Asian ideograph</desc></character>
+<character hex="2D 37 58"><unientity>54BD</unientity><desc>East Asian ideograph</desc></character>
+<character hex="2D 37 65"><unientity>8086</unientity><desc>East Asian ideograph</desc></character>
+<character hex="2D 37 68"><unientity>56EC</unientity><desc>East Asian ideograph</desc></character>
+<character hex="2D 37 6F"><unientity>5700</unientity><desc>East Asian ideograph</desc></character>
+<character hex="2D 37 7C"><unientity>962C</unientity><desc>East Asian ideograph</desc></character>
+<character hex="2D 38 21"><unientity>962F</unientity><desc>East Asian ideograph</desc></character>
+<character hex="2D 38 30"><unientity>573B</unientity><desc>East Asian ideograph</desc></character>
+<character hex="2D 38 3F"><unientity>575A</unientity><desc>East Asian ideograph</desc></character>
+<character hex="2D 38 4A"><unientity>5872</unientity><desc>East Asian ideograph</desc></character>
+<character hex="2D 38 52"><unientity>51A2</unientity><desc>East Asian ideograph</desc></character>
+<character hex="2D 38 54"><unientity>5896</unientity><desc>East Asian ideograph</desc></character>
+<character hex="2D 38 6E"><unientity>58CA</unientity><desc>East Asian ideograph</desc></character>
+<character hex="2D 38 76"><unientity>58F7</unientity><desc>East Asian ideograph</desc></character>
+<character hex="2D 38 77"><unientity>5900</unientity><desc>East Asian ideograph</desc></character>
+<character hex="2D 39 21"><unientity>591F</unientity><desc>East Asian ideograph</desc></character>
+<character hex="2D 39 29"><unientity>6B80</unientity><desc>East Asian ideograph</desc></character>
+<character hex="2D 39 2F"><unientity>7287</unientity><desc>East Asian ideograph</desc></character>
+<character hex="2D 39 31"><unientity>67F0</unientity><desc>East Asian ideograph</desc></character>
+<character hex="2D 39 32"><unientity>7AD2</unientity><desc>East Asian ideograph</desc></character>
+<character hex="2D 39 44"><unientity>511E</unientity><desc>East Asian ideograph</desc></character>
+<character hex="2D 39 4D"><unientity>59AC</unientity><desc>East Asian ideograph</desc></character>
+<character hex="2D 39 54"><unientity>7385</unientity><desc>East Asian ideograph</desc></character>
+<character hex="2D 39 56"><unientity>59D9</unientity><desc>East Asian ideograph</desc></character>
+<character hex="2D 39 6E"><unientity>4F84</unientity><desc>East Asian ideograph</desc></character>
+<character hex="2D 39 70"><unientity>5A63</unientity><desc>East Asian ideograph</desc></character>
+<character hex="2D 39 74"><unientity>5B43</unientity><desc>East Asian ideograph</desc></character>
+<character hex="2D 39 7B"><unientity>5A31</unientity><desc>East Asian ideograph</desc></character>
+<character hex="2D 3A 26"><unientity>5A3F</unientity><desc>East Asian ideograph</desc></character>
+<character hex="2D 3A 2F"><unientity>58FB</unientity><desc>East Asian ideograph</desc></character>
+<character hex="2D 3A 41"><unientity>5AFA</unientity><desc>East Asian ideograph</desc></character>
+<character hex="2D 3A 47"><unientity>5ACB</unientity><desc>East Asian ideograph</desc></character>
+<character hex="2D 3A 60"><unientity>6588</unientity><desc>East Asian ideograph</desc></character>
+<character hex="2D 3B 27"><unientity>51A8</unientity><desc>East Asian ideograph</desc></character>
+<character hex="2D 3B 2A"><unientity>5EBD</unientity><desc>East Asian ideograph</desc></character>
+<character hex="2D 3B 33"><unientity>8A67</unientity><desc>East Asian ideograph</desc></character>
+<character hex="2D 3B 3F"><unientity>5C02</unientity><desc>East Asian ideograph</desc></character>
+<character hex="2D 3B 40"><unientity>E977</unientity><unientityalt>5C06</unientityalt><desc>Variant of 273B40 which maps to 5C06</desc></character>
+<character hex="2D 3B 52"><unientity>6EBA</unientity><desc>East Asian ideograph</desc></character>
+<character hex="2D 3B 54"><unientity>5C4A</unientity><desc>East Asian ideograph</desc></character>
+<character hex="2D 3B 6E"><unientity>5D17</unientity><desc>East Asian ideograph</desc></character>
+<character hex="2D 3B 77"><unientity>5CE9</unientity><desc>East Asian ideograph</desc></character>
+<character hex="2D 3B 78"><unientity>5CEF</unientity><desc>East Asian ideograph</desc></character>
+<character hex="2D 3B 79"><unientity>5D8B</unientity><desc>East Asian ideograph</desc></character>
+<character hex="2D 3B 7B"><unientity>5D08</unientity><desc>East Asian ideograph</desc></character>
+<character hex="2D 3C 21"><unientity>57FC</unientity><desc>East Asian ideograph</desc></character>
+<character hex="2D 3C 22"><unientity>5D10</unientity><desc>East Asian ideograph</desc></character>
+<character hex="2D 3C 26"><unientity>5D18</unientity><desc>East Asian ideograph</desc></character>
+<character hex="2D 3C 36"><unientity>5DE3</unientity><desc>East Asian ideograph</desc></character>
+<character hex="2D 3C 38"><unientity>9245</unientity><desc>East Asian ideograph</desc></character>
+<character hex="2D 3C 49"><unientity>83F7</unientity><desc>East Asian ideograph</desc></character>
+<character hex="2D 3C 5F"><unientity>6A66</unientity><desc>East Asian ideograph</desc></character>
+<character hex="2D 3C 61"><unientity>5E47</unientity><desc>East Asian ideograph</desc></character>
+<character hex="2D 3C 65"><unientity>79CA</unientity><desc>East Asian ideograph</desc></character>
+<character hex="2D 3C 6A"><unientity>51FC</unientity><desc>East Asian ideograph</desc></character>
+<character hex="2D 3C 6D"><unientity>E921</unientity><desc>Duplicate simplified ideograph</desc></character>
+<character hex="2D 3C 6E"><unientity>7240</unientity><desc>East Asian ideograph</desc></character>
+<character hex="2D 3C 70"><unientity>576B</unientity><desc>East Asian ideograph</desc></character>
+<character hex="2D 3C 7C"><unientity>83F4</unientity><desc>East Asian ideograph</desc></character>
+<character hex="2D 3C 7D"><unientity>53A2</unientity><desc>East Asian ideograph</desc></character>
+<character hex="2D 3C 7E"><unientity>53A0</unientity><desc>East Asian ideograph</desc></character>
+<character hex="2D 3D 29"><unientity>53AE</unientity><desc>East Asian ideograph</desc></character>
+<character hex="2D 3D 2B"><unientity>5EBF</unientity><desc>East Asian ideograph</desc></character>
+<character hex="2D 3D 2D"><unientity>5396</unientity><desc>East Asian ideograph</desc></character>
+<character hex="2D 3D 2F"><unientity>539B</unientity><desc>East Asian ideograph</desc></character>
+<character hex="2D 3D 34"><unientity>5EFE</unientity><desc>East Asian ideograph</desc></character>
+<character hex="2D 3D 48"><unientity>5F4A</unientity><desc>East Asian ideograph</desc></character>
+<character hex="2D 3D 4E"><unientity>7BF2</unientity><desc>East Asian ideograph</desc></character>
+<character hex="2D 3D 50"><unientity>5F5C</unientity><desc>East Asian ideograph</desc></character>
+<character hex="2D 3D 5E"><unientity>9AF4</unientity><desc>East Asian ideograph</desc></character>
+<character hex="2D 3D 67"><unientity>9015</unientity><desc>East Asian ideograph</desc></character>
+<character hex="2D 3D 6C"><unientity>5F93</unientity><desc>East Asian ideograph</desc></character>
+<character hex="2D 3D 75"><unientity>60EA</unientity><desc>East Asian ideograph</desc></character>
+<character hex="2D 3D 76"><unientity>5FB4</unientity><desc>East Asian ideograph</desc></character>
+<character hex="2D 3E 2B"><unientity>6060</unientity><desc>East Asian ideograph</desc></character>
+<character hex="2D 3E 3C"><unientity>803B</unientity><desc>East Asian ideograph</desc></character>
+<character hex="2D 3E 40"><unientity>6052</unientity><desc>East Asian ideograph</desc></character>
+<character hex="2D 3E 60"><unientity>6075</unientity><desc>East Asian ideograph</desc></character>
+<character hex="2D 3F 24"><unientity>661A</unientity><desc>East Asian ideograph</desc></character>
+<character hex="2D 3F 27"><unientity>6120</unientity><desc>East Asian ideograph</desc></character>
+<character hex="2D 3F 2A"><unientity>5ABF</unientity><desc>East Asian ideograph</desc></character>
+<character hex="2D 3F 31"><unientity>6159</unientity><desc>East Asian ideograph</desc></character>
+<character hex="2D 3F 3A"><unientity>6185</unientity><desc>East Asian ideograph</desc></character>
+<character hex="2D 3F 54"><unientity>61D0</unientity><desc>East Asian ideograph</desc></character>
+<character hex="2D 3F 67"><unientity>621E</unientity><desc>East Asian ideograph</desc></character>
+<character hex="2D 3F 6E"><unientity>6226</unientity><desc>East Asian ideograph</desc></character>
+<character hex="2D 3F 6F"><unientity>622F</unientity><desc>East Asian ideograph</desc></character>
+<character hex="2D 3F 76"><unientity>78A5</unientity><desc>East Asian ideograph</desc></character>
+<character hex="2D 40 29"><unientity>5214</unientity><desc>East Asian ideograph</desc></character>
+<character hex="2D 40 31"><unientity>64A6</unientity><desc>East Asian ideograph</desc></character>
+<character hex="2D 40 39"><unientity>67C6</unientity><desc>East Asian ideograph</desc></character>
+<character hex="2D 40 3F"><unientity>6255</unientity><desc>East Asian ideograph</desc></character>
+<character hex="2D 40 49"><unientity>67B4</unientity><desc>East Asian ideograph</desc></character>
+<character hex="2D 40 4C"><unientity>6283</unientity><desc>East Asian ideograph</desc></character>
+<character hex="2D 40 4F"><unientity>6294</unientity><desc>East Asian ideograph</desc></character>
+<character hex="2D 40 66"><unientity>63CE</unientity><desc>East Asian ideograph</desc></character>
+<character hex="2D 40 67"><unientity>62CF</unientity><desc>East Asian ideograph</desc></character>
+<character hex="2D 41 22"><unientity>6485</unientity><desc>East Asian ideograph</desc></character>
+<character hex="2D 41 32"><unientity>642F</unientity><desc>East Asian ideograph</desc></character>
+<character hex="2D 41 41"><unientity>63B2</unientity><desc>East Asian ideograph</desc></character>
+<character hex="2D 41 47"><unientity>6271</unientity><desc>East Asian ideograph</desc></character>
+<character hex="2D 41 50"><unientity>6428</unientity><desc>East Asian ideograph</desc></character>
+<character hex="2D 41 52"><unientity>6447</unientity><desc>East Asian ideograph</desc></character>
+<character hex="2D 41 53"><unientity>64E3</unientity><desc>East Asian ideograph</desc></character>
+<character hex="2D 41 54"><unientity>635C</unientity><desc>East Asian ideograph</desc></character>
+<character hex="2D 41 6E"><unientity>6534</unientity><desc>East Asian ideograph</desc></character>
+<character hex="2D 41 71"><unientity>62CA</unientity><desc>East Asian ideograph</desc></character>
+<character hex="2D 41 76"><unientity>6483</unientity><desc>East Asian ideograph</desc></character>
+<character hex="2D 42 28"><unientity>5117</unientity><desc>East Asian ideograph</desc></character>
+<character hex="2D 42 49"><unientity>53D9</unientity><desc>East Asian ideograph</desc></character>
+<character hex="2D 42 4F"><unientity>555F</unientity><desc>East Asian ideograph</desc></character>
+<character hex="2D 42 72"><unientity>65E3</unientity><desc>East Asian ideograph</desc></character>
+<character hex="2D 42 77"><unientity>65EE</unientity><desc>East Asian ideograph</desc></character>
+<character hex="2D 43 27"><unientity>6630</unientity><desc>East Asian ideograph</desc></character>
+<character hex="2D 43 29"><unientity>668E</unientity><desc>East Asian ideograph</desc></character>
+<character hex="2D 43 2E"><unientity>66EC</unientity><desc>East Asian ideograph</desc></character>
+<character hex="2D 43 3B"><unientity>6662</unientity><desc>East Asian ideograph</desc></character>
+<character hex="2D 43 3E"><unientity>667B</unientity><desc>East Asian ideograph</desc></character>
+<character hex="2D 43 43"><unientity>6636</unientity><desc>East Asian ideograph</desc></character>
+<character hex="2D 43 48"><unientity>6681</unientity><desc>East Asian ideograph</desc></character>
+<character hex="2D 43 49"><unientity>66A6</unientity><desc>East Asian ideograph</desc></character>
+<character hex="2D 43 5F"><unientity>6716</unientity><desc>East Asian ideograph</desc></character>
+<character hex="2D 43 62"><unientity>6722</unientity><desc>East Asian ideograph</desc></character>
+<character hex="2D 43 64"><unientity>671E</unientity><desc>East Asian ideograph</desc></character>
+<character hex="2D 43 70"><unientity>6736</unientity><desc>East Asian ideograph</desc></character>
+<character hex="2D 44 25"><unientity>686E</unientity><desc>East Asian ideograph</desc></character>
+<character hex="2D 44 2D"><unientity>6780</unientity><desc>East Asian ideograph</desc></character>
+<character hex="2D 44 37"><unientity>67FE</unientity><desc>East Asian ideograph</desc></character>
+<character hex="2D 44 3A"><unientity>6942</unientity><desc>East Asian ideograph</desc></character>
+<character hex="2D 44 40"><unientity>6822</unientity><desc>East Asian ideograph</desc></character>
+<character hex="2D 44 44"><unientity>69C5</unientity><desc>East Asian ideograph</desc></character>
+<character hex="2D 44 4B"><unientity>6852</unientity><desc>East Asian ideograph</desc></character>
+<character hex="2D 44 50"><unientity>8308</unientity><desc>East Asian ideograph</desc></character>
+<character hex="2D 44 61"><unientity>6746</unientity><desc>East Asian ideograph</desc></character>
+<character hex="2D 44 66"><unientity>6973</unientity><desc>East Asian ideograph</desc></character>
+<character hex="2D 44 6B"><unientity>6936</unientity><desc>East Asian ideograph</desc></character>
+<character hex="2D 44 72"><unientity>68CA</unientity><desc>East Asian ideograph</desc></character>
+<character hex="2D 44 74"><unientity>E978</unientity><unientityalt>690D</unientityalt><desc>Variant of 214474 which maps to 690D</desc></character>
+<character hex="2D 44 7D"><unientity>684C</unientity><desc>East Asian ideograph</desc></character>
+<character hex="2D 45 39"><unientity>6406</unientity><desc>East Asian ideograph</desc></character>
+<character hex="2D 45 3A"><unientity>6760</unientity><desc>East Asian ideograph</desc></character>
+<character hex="2D 45 43"><unientity>6901</unientity><desc>East Asian ideograph</desc></character>
+<character hex="2D 45 4E"><unientity>697D</unientity><desc>East Asian ideograph</desc></character>
+<character hex="2D 45 50"><unientity>58AB</unientity><desc>East Asian ideograph</desc></character>
+<character hex="2D 45 62"><unientity>681D</unientity><desc>East Asian ideograph</desc></character>
+<character hex="2D 45 64"><unientity>68B9</unientity><desc>East Asian ideograph</desc></character>
+<character hex="2D 45 69"><unientity>6AC9</unientity><desc>East Asian ideograph</desc></character>
+<character hex="2D 45 74"><unientity>5FFB</unientity><desc>East Asian ideograph</desc></character>
+<character hex="2D 46 21"><unientity>61FD</unientity><desc>East Asian ideograph</desc></character>
+<character hex="2D 46 2C"><unientity>6B7A</unientity><desc>East Asian ideograph</desc></character>
+<character hex="2D 46 47"><unientity>6BD8</unientity><desc>East Asian ideograph</desc></character>
+<character hex="2D 46 6D"><unientity>51B3</unientity><desc>East Asian ideograph</desc></character>
+<character hex="2D 46 74"><unientity>51B2</unientity><desc>East Asian ideograph</desc></character>
+<character hex="2D 46 7C"><unientity>6CB2</unientity><desc>East Asian ideograph</desc></character>
+<character hex="2D 47 29"><unientity>6D29</unientity><desc>East Asian ideograph</desc></character>
+<character hex="2D 47 30"><unientity>51B5</unientity><desc>East Asian ideograph</desc></character>
+<character hex="2D 47 35"><unientity>6C4E</unientity><desc>East Asian ideograph</desc></character>
+<character hex="2D 47 38"><unientity>6FFC</unientity><desc>East Asian ideograph</desc></character>
+<character hex="2D 47 46"><unientity>6C79</unientity><desc>East Asian ideograph</desc></character>
+<character hex="2D 47 56"><unientity>6F94</unientity><desc>East Asian ideograph</desc></character>
+<character hex="2D 47 5B"><unientity>51C9</unientity><desc>East Asian ideograph</desc></character>
+<character hex="2D 47 5F"><unientity>51C4</unientity><desc>East Asian ideograph</desc></character>
+<character hex="2D 47 68"><unientity>E979</unientity><unientityalt>6D45</unientityalt><desc>Variant of 274768 which maps to 6D45</desc></character>
+<character hex="2D 48 29"><unientity>51CF</unientity><desc>East Asian ideograph</desc></character>
+<character hex="2D 48 2F"><unientity>6E07</unientity><desc>East Asian ideograph</desc></character>
+<character hex="2D 48 44"><unientity>6FD5</unientity><desc>East Asian ideograph</desc></character>
+<character hex="2D 48 45"><unientity>6E29</unientity><desc>East Asian ideograph</desc></character>
+<character hex="2D 48 50"><unientity>6EDA</unientity><desc>East Asian ideograph</desc></character>
+<character hex="2D 48 53"><unientity>7001</unientity><desc>East Asian ideograph</desc></character>
+<character hex="2D 48 5C"><unientity>6F44</unientity><desc>East Asian ideograph</desc></character>
+<character hex="2D 48 6B"><unientity>6F82</unientity><desc>East Asian ideograph</desc></character>
+<character hex="2D 48 6E"><unientity>E9F5</unientity><desc>East Asian ideograph not in Unicode</desc></character>
+<character hex="2D 48 74"><unientity>6F5C</unientity><desc>East Asian ideograph</desc></character>
+<character hex="2D 49 3A"><unientity>702C</unientity><desc>East Asian ideograph</desc></character>
+<character hex="2D 49 47"><unientity>7AC8</unientity><desc>East Asian ideograph</desc></character>
+<character hex="2D 49 54"><unientity>70F1</unientity><desc>East Asian ideograph</desc></character>
+<character hex="2D 49 56"><unientity>70B0</unientity><desc>East Asian ideograph</desc></character>
+<character hex="2D 49 6B"><unientity>70DF</unientity><desc>East Asian ideograph</desc></character>
+<character hex="2D 49 71"><unientity>70A4</unientity><desc>East Asian ideograph</desc></character>
+<character hex="2D 4A 26"><unientity>713C</unientity><desc>East Asian ideograph</desc></character>
+<character hex="2D 4A 28"><unientity>8B8C</unientity><desc>East Asian ideograph</desc></character>
+<character hex="2D 4A 34"><unientity>718F</unientity><desc>East Asian ideograph</desc></character>
+<character hex="2D 4A 3B"><unientity>4E89</unientity><desc>East Asian ideograph</desc></character>
+<character hex="2D 4A 45"><unientity>5C12</unientity><desc>East Asian ideograph</desc></character>
+<character hex="2D 4A 46"><unientity>58BB</unientity><desc>East Asian ideograph</desc></character>
+<character hex="2D 4A 58"><unientity>7F9D</unientity><desc>East Asian ideograph</desc></character>
+<character hex="2D 4A 5B"><unientity>7282</unientity><desc>East Asian ideograph</desc></character>
+<character hex="2D 4A 60"><unientity>6C02</unientity><desc>East Asian ideograph</desc></character>
+<character hex="2D 4B 22"><unientity>736A</unientity><desc>East Asian ideograph</desc></character>
+<character hex="2D 4B 35"><unientity>73C9</unientity><desc>East Asian ideograph</desc></character>
+<character hex="2D 4B 3F"><unientity>73CE</unientity><desc>East Asian ideograph</desc></character>
+<character hex="2D 4B 43"><unientity>746F</unientity><desc>East Asian ideograph</desc></character>
+<character hex="2D 4B 45"><unientity>6BEC</unientity><desc>East Asian ideograph</desc></character>
+<character hex="2D 4B 5B"><unientity>78AF</unientity><desc>East Asian ideograph</desc></character>
+<character hex="2D 4B 71"><unientity>7F3E</unientity><desc>East Asian ideograph</desc></character>
+<character hex="2D 4B 72"><unientity>7506</unientity><desc>East Asian ideograph</desc></character>
+<character hex="2D 4C 2C"><unientity>583A</unientity><desc>East Asian ideograph</desc></character>
+<character hex="2D 4C 2D"><unientity>756E</unientity><desc>East Asian ideograph</desc></character>
+<character hex="2D 4C 35"><unientity>7567</unientity><desc>East Asian ideograph</desc></character>
+<character hex="2D 4C 3C"><unientity>53E0</unientity><desc>East Asian ideograph</desc></character>
+<character hex="2D 4C 3E"><unientity>758E</unientity><desc>East Asian ideograph</desc></character>
+<character hex="2D 4C 5D"><unientity>7661</unientity><desc>East Asian ideograph</desc></character>
+<character hex="2D 4C 7E"><unientity>4F70</unientity><desc>East Asian ideograph</desc></character>
+<character hex="2D 4D 21"><unientity>7681</unientity><desc>East Asian ideograph</desc></character>
+<character hex="2D 4D 34"><unientity>76C7</unientity><desc>East Asian ideograph</desc></character>
+<character hex="2D 4D 38"><unientity>76D7</unientity><desc>East Asian ideograph</desc></character>
+<character hex="2D 4D 4F"><unientity>771F</unientity><desc>East Asian ideograph</desc></character>
+<character hex="2D 4D 5F"><unientity>7741</unientity><desc>East Asian ideograph</desc></character>
+<character hex="2D 4D 65"><unientity>53E1</unientity><desc>East Asian ideograph</desc></character>
+<character hex="2D 4D 6D"><unientity>7792</unientity><desc>East Asian ideograph</desc></character>
+<character hex="2D 4D 71"><unientity>7719</unientity><desc>East Asian ideograph</desc></character>
+<character hex="2D 4E 24"><unientity>6998</unientity><desc>East Asian ideograph</desc></character>
+<character hex="2D 4E 33"><unientity>78AA</unientity><desc>East Asian ideograph</desc></character>
+<character hex="2D 4E 5B"><unientity>945B</unientity><desc>East Asian ideograph</desc></character>
+<character hex="2D 4E 79"><unientity>5FA1</unientity><desc>East Asian ideograph</desc></character>
+<character hex="2D 4F 29"><unientity>9F9D</unientity><desc>East Asian ideograph</desc></character>
+<character hex="2D 4F 37"><unientity>7980</unientity><desc>East Asian ideograph</desc></character>
+<character hex="2D 4F 3E"><unientity>7A3E</unientity><desc>East Asian ideograph</desc></character>
+<character hex="2D 4F 41"><unientity>4E69</unientity><desc>East Asian ideograph</desc></character>
+<character hex="2D 4F 45"><unientity>9834</unientity><desc>East Asian ideograph</desc></character>
+<character hex="2D 4F 48"><unientity>7A42</unientity><desc>East Asian ideograph</desc></character>
+<character hex="2D 4F 5E"><unientity>7AB0</unientity><desc>East Asian ideograph</desc></character>
+<character hex="2D 4F 6B"><unientity>7AF8</unientity><desc>East Asian ideograph</desc></character>
+<character hex="2D 4F 7C"><unientity>7B5E</unientity><desc>East Asian ideograph</desc></character>
+<character hex="2D 50 2B"><unientity>693E</unientity><desc>East Asian ideograph</desc></character>
+<character hex="2D 50 2D"><unientity>7B5D</unientity><desc>East Asian ideograph</desc></character>
+<character hex="2D 50 36"><unientity>84D1</unientity><desc>East Asian ideograph</desc></character>
+<character hex="2D 50 4F"><unientity>7C58</unientity><desc>East Asian ideograph</desc></character>
+<character hex="2D 50 6F"><unientity>7CFA</unientity><desc>East Asian ideograph</desc></character>
+<character hex="2D 51 24"><unientity>5E0B</unientity><desc>East Asian ideograph</desc></character>
+<character hex="2D 51 29"><unientity>7D25</unientity><desc>East Asian ideograph</desc></character>
+<character hex="2D 51 4A"><unientity>6DD6</unientity><desc>East Asian ideograph</desc></character>
+<character hex="2D 51 4D"><unientity>7D2C</unientity><desc>East Asian ideograph</desc></character>
+<character hex="2D 51 6A"><unientity>7DB3</unientity><desc>East Asian ideograph</desc></character>
+<character hex="2D 51 79"><unientity>7E62</unientity><desc>East Asian ideograph</desc></character>
+<character hex="2D 51 7D"><unientity>7D99</unientity><desc>East Asian ideograph</desc></character>
+<character hex="2D 52 28"><unientity>9262</unientity><desc>East Asian ideograph</desc></character>
+<character hex="2D 52 2B"><unientity>9475</unientity><desc>East Asian ideograph</desc></character>
+<character hex="2D 52 32"><unientity>8FA0</unientity><desc>East Asian ideograph</desc></character>
+<character hex="2D 52 33"><unientity>7F78</unientity><desc>East Asian ideograph</desc></character>
+<character hex="2D 52 38"><unientity>898A</unientity><desc>East Asian ideograph</desc></character>
+<character hex="2D 52 40"><unientity>7FA1</unientity><desc>East Asian ideograph</desc></character>
+<character hex="2D 52 41"><unientity>7FA3</unientity><desc>East Asian ideograph</desc></character>
+<character hex="2D 52 4A"><unientity>7FC4</unientity><desc>East Asian ideograph</desc></character>
+<character hex="2D 52 59"><unientity>98DC</unientity><desc>East Asian ideograph</desc></character>
+<character hex="2D 52 5D"><unientity>6537</unientity><desc>East Asian ideograph</desc></character>
+<character hex="2D 52 65"><unientity>79D0</unientity><desc>East Asian ideograph</desc></character>
+<character hex="2D 52 67"><unientity>79CF</unientity><desc>East Asian ideograph</desc></character>
+<character hex="2D 52 6B"><unientity>7085</unientity><desc>East Asian ideograph</desc></character>
+<character hex="2D 52 6C"><unientity>8EAD</unientity><desc>East Asian ideograph</desc></character>
+<character hex="2D 52 7B"><unientity>8074</unientity><desc>East Asian ideograph</desc></character>
+<character hex="2D 53 21"><unientity>7C9B</unientity><desc>East Asian ideograph</desc></character>
+<character hex="2D 53 23"><unientity>5B8D</unientity><desc>East Asian ideograph</desc></character>
+<character hex="2D 53 2C"><unientity>6BD3</unientity><desc>East Asian ideograph</desc></character>
+<character hex="2D 53 40"><unientity>812C</unientity><desc>East Asian ideograph</desc></character>
+<character hex="2D 53 44"><unientity>8107</unientity><desc>East Asian ideograph</desc></character>
+<character hex="2D 53 4B"><unientity>80F7</unientity><desc>East Asian ideograph</desc></character>
+<character hex="2D 53 5E"><unientity>8193</unientity><desc>East Asian ideograph</desc></character>
+<character hex="2D 53 61"><unientity>811A</unientity><desc>East Asian ideograph</desc></character>
+<character hex="2D 53 7E"><unientity>81C8</unientity><desc>East Asian ideograph</desc></character>
+<character hex="2D 54 21"><unientity>9AD7</unientity><desc>East Asian ideograph</desc></character>
+<character hex="2D 54 24"><unientity>5367</unientity><desc>East Asian ideograph</desc></character>
+<character hex="2D 54 34"><unientity>64E7</unientity><desc>East Asian ideograph</desc></character>
+<character hex="2D 54 40"><unientity>6841</unientity><desc>East Asian ideograph</desc></character>
+<character hex="2D 54 46"><unientity>8229</unientity><desc>East Asian ideograph</desc></character>
+<character hex="2D 54 47"><unientity>824A</unientity><desc>East Asian ideograph</desc></character>
+<character hex="2D 54 61"><unientity>8306</unientity><desc>East Asian ideograph</desc></character>
+<character hex="2D 54 68"><unientity>6959</unientity><desc>East Asian ideograph</desc></character>
+<character hex="2D 54 6F"><unientity>83C0</unientity><desc>East Asian ideograph</desc></character>
+<character hex="2D 54 76"><unientity>8318</unientity><desc>East Asian ideograph</desc></character>
+<character hex="2D 55 29"><unientity>E97A</unientity><unientityalt>830E</unientityalt><desc>Variant of 275529 which maps to 830E</desc></character>
+<character hex="2D 55 2D"><unientity>8358</unientity><desc>East Asian ideograph</desc></character>
+<character hex="2D 55 2E"><unientity>E97B</unientity><unientityalt>8393</unientityalt><desc>Variant of 21552E which maps to 8393</desc></character>
+<character hex="2D 55 47"><unientity>837D</unientity><desc>East Asian ideograph</desc></character>
+<character hex="2D 55 50"><unientity>585F</unientity><desc>East Asian ideograph</desc></character>
+<character hex="2D 55 54"><unientity>855A</unientity><desc>East Asian ideograph</desc></character>
+<character hex="2D 55 5A"><unientity>8386</unientity><desc>East Asian ideograph</desc></character>
+<character hex="2D 55 5B"><unientity>8385</unientity><desc>East Asian ideograph</desc></character>
+<character hex="2D 55 61"><unientity>76D6</unientity><desc>East Asian ideograph</desc></character>
+<character hex="2D 55 73"><unientity>83D4</unientity><desc>East Asian ideograph</desc></character>
+<character hex="2D 56 2E"><unientity>8024</unientity><desc>East Asian ideograph</desc></character>
+<character hex="2D 56 35"><unientity>846F</unientity><desc>East Asian ideograph</desc></character>
+<character hex="2D 56 3C"><unientity>8613</unientity><desc>East Asian ideograph</desc></character>
+<character hex="2D 56 3F"><unientity>6A97</unientity><desc>East Asian ideograph</desc></character>
+<character hex="2D 56 64"><unientity>9F04</unientity><desc>East Asian ideograph</desc></character>
+<character hex="2D 56 75"><unientity>9F05</unientity><desc>East Asian ideograph</desc></character>
+<character hex="2D 56 7B"><unientity>8717</unientity><desc>East Asian ideograph</desc></character>
+<character hex="2D 57 2B"><unientity>8797</unientity><desc>East Asian ideograph</desc></character>
+<character hex="2D 57 2D"><unientity>8748</unientity><desc>East Asian ideograph</desc></character>
+<character hex="2D 57 30"><unientity>87C7</unientity><desc>East Asian ideograph</desc></character>
+<character hex="2D 57 3B"><unientity>60F7</unientity><desc>East Asian ideograph</desc></character>
+<character hex="2D 57 49"><unientity>885E</unientity><desc>East Asian ideograph</desc></character>
+<character hex="2D 57 58"><unientity>890E</unientity><desc>East Asian ideograph</desc></character>
+<character hex="2D 57 5B"><unientity>886E</unientity><desc>East Asian ideograph</desc></character>
+<character hex="2D 57 60"><unientity>5E2C</unientity><desc>East Asian ideograph</desc></character>
+<character hex="2D 57 63"><unientity>88E1</unientity><desc>East Asian ideograph</desc></character>
+<character hex="2D 57 73"><unientity>7D5D</unientity><desc>East Asian ideograph</desc></character>
+<character hex="2D 58 31"><unientity>89A7</unientity><desc>East Asian ideograph</desc></character>
+<character hex="2D 58 33"><unientity>752A</unientity><desc>East Asian ideograph</desc></character>
+<character hex="2D 58 36"><unientity>89E6</unientity><desc>East Asian ideograph</desc></character>
+<character hex="2D 58 4D"><unientity>548F</unientity><desc>East Asian ideograph</desc></character>
+<character hex="2D 58 56"><unientity>612C</unientity><desc>East Asian ideograph</desc></character>
+<character hex="2D 59 27"><unientity>8ACC</unientity><desc>East Asian ideograph</desc></character>
+<character hex="2D 59 2C"><unientity>8B01</unientity><desc>East Asian ideograph</desc></character>
+<character hex="2D 59 3D"><unientity>8AE9</unientity><desc>East Asian ideograph</desc></character>
+<character hex="2D 59 41"><unientity>5629</unientity><desc>East Asian ideograph</desc></character>
+<character hex="2D 59 4C"><unientity>8B72</unientity><desc>East Asian ideograph</desc></character>
+<character hex="2D 59 4F"><unientity>8B83</unientity><desc>East Asian ideograph</desc></character>
+<character hex="2D 59 57"><unientity>7AEA</unientity><desc>East Asian ideograph</desc></character>
+<character hex="2D 59 59"><unientity>8277</unientity><desc>East Asian ideograph</desc></character>
+<character hex="2D 59 5F"><unientity>732A</unientity><desc>East Asian ideograph</desc></character>
+<character hex="2D 59 60"><unientity>72B2</unientity><desc>East Asian ideograph</desc></character>
+<character hex="2D 59 63"><unientity>8C98</unientity><desc>East Asian ideograph</desc></character>
+<character hex="2D 59 65"><unientity>72F8</unientity><desc>East Asian ideograph</desc></character>
+<character hex="2D 5A 34"><unientity>8CAD</unientity><desc>East Asian ideograph</desc></character>
+<character hex="2D 5A 3D"><unientity>8CDB</unientity><desc>East Asian ideograph</desc></character>
+<character hex="2D 5A 48"><unientity>8D71</unientity><desc>East Asian ideograph</desc></character>
+<character hex="2D 5A 4E"><unientity>8D82</unientity><desc>East Asian ideograph</desc></character>
+<character hex="2D 5A 5F"><unientity>8E5F</unientity><desc>East Asian ideograph</desc></character>
+<character hex="2D 5A 63"><unientity>8DE5</unientity><desc>East Asian ideograph</desc></character>
+<character hex="2D 5A 7E"><unientity>8E7B</unientity><desc>East Asian ideograph</desc></character>
+<character hex="2D 5B 2F"><unientity>8EB1</unientity><desc>East Asian ideograph</desc></character>
+<character hex="2D 5B 42"><unientity>8F19</unientity><desc>East Asian ideograph</desc></character>
+<character hex="2D 5B 43"><unientity>8EFD</unientity><desc>East Asian ideograph</desc></character>
+<character hex="2D 5B 5D"><unientity>8FA2</unientity><desc>East Asian ideograph</desc></character>
+<character hex="2D 5B 5E"><unientity>8FA7</unientity><desc>East Asian ideograph</desc></character>
+<character hex="2D 5B 69"><unientity>5EF5</unientity><desc>East Asian ideograph</desc></character>
+<character hex="2D 5B 7A"><unientity>8FEF</unientity><desc>East Asian ideograph</desc></character>
+<character hex="2D 5C 2F"><unientity>8FE8</unientity><desc>East Asian ideograph</desc></character>
+<character hex="2D 5C 3F"><unientity>5FA7</unientity><desc>East Asian ideograph</desc></character>
+<character hex="2D 5C 40"><unientity>5FA8</unientity><desc>East Asian ideograph</desc></character>
+<character hex="2D 5C 48"><unientity>9013</unientity><desc>East Asian ideograph</desc></character>
+<character hex="2D 5C 5A"><unientity>8FE9</unientity><desc>East Asian ideograph</desc></character>
+<character hex="2D 5C 5B"><unientity>9089</unientity><desc>East Asian ideograph</desc></character>
+<character hex="2D 5C 74"><unientity>96A3</unientity><desc>East Asian ideograph</desc></character>
+<character hex="2D 5D 23"><unientity>9167</unientity><desc>East Asian ideograph</desc></character>
+<character hex="2D 5D 2F"><unientity>9196</unientity><desc>East Asian ideograph</desc></character>
+<character hex="2D 5D 56"><unientity>920E</unientity><desc>East Asian ideograph</desc></character>
+<character hex="2D 5D 65"><unientity>8216</unientity><desc>East Asian ideograph</desc></character>
+<character hex="2D 5D 68"><unientity>8021</unientity><desc>East Asian ideograph</desc></character>
+<character hex="2D 5E 21"><unientity>9418</unientity><desc>East Asian ideograph</desc></character>
+<character hex="2D 5E 24"><unientity>7145</unientity><desc>East Asian ideograph</desc></character>
+<character hex="2D 5E 26"><unientity>7194</unientity><desc>East Asian ideograph</desc></character>
+<character hex="2D 5E 28"><unientity>93C1</unientity><desc>East Asian ideograph</desc></character>
+<character hex="2D 5E 3B"><unientity>92B9</unientity><desc>East Asian ideograph</desc></character>
+<character hex="2D 5E 43"><unientity>92F3</unientity><desc>East Asian ideograph</desc></character>
+<character hex="2D 5E 4A"><unientity>945A</unientity><desc>East Asian ideograph</desc></character>
+<character hex="2D 5E 50"><unientity>9587</unientity><desc>East Asian ideograph</desc></character>
+<character hex="2D 5E 61"><unientity>6FF6</unientity><desc>East Asian ideograph</desc></character>
+<character hex="2D 5F 28"><unientity>9665</unientity><desc>East Asian ideograph</desc></character>
+<character hex="2D 5F 2C"><unientity>5826</unientity><desc>East Asian ideograph</desc></character>
+<character hex="2D 5F 2D"><unientity>964F</unientity><desc>East Asian ideograph</desc></character>
+<character hex="2D 5F 2E"><unientity>661C</unientity><desc>East Asian ideograph</desc></character>
+<character hex="2D 5F 35"><unientity>78D2</unientity><desc>East Asian ideograph</desc></character>
+<character hex="2D 5F 3B"><unientity>96A0</unientity><desc>East Asian ideograph</desc></character>
+<character hex="2D 5F 43"><unientity>9CEB</unientity><desc>East Asian ideograph</desc></character>
+<character hex="2D 5F 46"><unientity>96BD</unientity><desc>East Asian ideograph</desc></character>
+<character hex="2D 5F 4B"><unientity>96D1</unientity><desc>East Asian ideograph</desc></character>
+<character hex="2D 5F 4C"><unientity>9DC4</unientity><desc>East Asian ideograph</desc></character>
+<character hex="2D 5F 63"><unientity>873A</unientity><desc>East Asian ideograph</desc></character>
+<character hex="2D 5F 73"><unientity>E9D2</unientity><unientityalt>975A</unientityalt><desc>Unrelated variant of EACC 234C76 which maps to 975A</desc></character>
+<character hex="2D 60 21"><unientity>978C</unientity><desc>East Asian ideograph</desc></character>
+<character hex="2D 60 2D"><unientity>976D</unientity><desc>East Asian ideograph</desc></character>
+<character hex="2D 60 30"><unientity>97EE</unientity><desc>East Asian ideograph</desc></character>
+<character hex="2D 60 56"><unientity>980B</unientity><desc>East Asian ideograph</desc></character>
+<character hex="2D 60 78"><unientity>9920</unientity><desc>East Asian ideograph</desc></character>
+<character hex="2D 60 79"><unientity>8218</unientity><desc>East Asian ideograph</desc></character>
+<character hex="2D 61 32"><unientity>99EE</unientity><desc>East Asian ideograph</desc></character>
+<character hex="2D 61 34"><unientity>99DE</unientity><desc>East Asian ideograph</desc></character>
+<character hex="2D 61 47"><unientity>99C8</unientity><desc>East Asian ideograph</desc></character>
+<character hex="2D 61 59"><unientity>9AC4</unientity><desc>East Asian ideograph</desc></character>
+<character hex="2D 61 5A"><unientity>8EC6</unientity><desc>East Asian ideograph</desc></character>
+<character hex="2D 61 62"><unientity>9A0C</unientity><desc>East Asian ideograph</desc></character>
+<character hex="2D 61 6A"><unientity>6B1D</unientity><desc>East Asian ideograph</desc></character>
+<character hex="2D 62 22"><unientity>9C0C</unientity><desc>East Asian ideograph</desc></character>
+<character hex="2D 62 29"><unientity>9C53</unientity><desc>East Asian ideograph</desc></character>
+<character hex="2D 62 2C"><unientity>9F08</unientity><desc>East Asian ideograph</desc></character>
+<character hex="2D 62 35"><unientity>9D76</unientity><desc>East Asian ideograph</desc></character>
+<character hex="2D 62 41"><unientity>9D5E</unientity><desc>East Asian ideograph</desc></character>
+<character hex="2D 62 51"><unientity>5869</unientity><desc>East Asian ideograph</desc></character>
+<character hex="2D 62 52"><unientity>78B1</unientity><desc>East Asian ideograph</desc></character>
+<character hex="2D 62 5F"><unientity>83FB</unientity><desc>East Asian ideograph</desc></character>
+<character hex="2D 62 60"><unientity>5E85</unientity><desc>East Asian ideograph</desc></character>
+<character hex="2D 62 62"><unientity>9EC4</unientity><desc>East Asian ideograph</desc></character>
+<character hex="2D 62 75"><unientity>76B7</unientity><desc>East Asian ideograph</desc></character>
+<character hex="2D 62 7E"><unientity>658B</unientity><desc>East Asian ideograph</desc></character>
+<character hex="2D 63 2B"><unientity>5C28</unientity><desc>East Asian ideograph</desc></character>
+<character hex="2D 63 2D"><unientity>4E80</unientity><desc>East Asian ideograph</desc></character>
+<character hex="2D 6B 33"><unientity>E9F6</unientity><desc>East Asian ideograph not in Unicode</desc></character>
+<character hex="2D 6B 5F"><unientity>5273</unientity><desc>East Asian ideograph</desc></character>
+<character hex="2D 6F 7D"><unientity>8123</unientity><desc>East Asian ideograph</desc></character>
+<character hex="2D 71 43"><unientity>55E2</unientity><desc>East Asian ideograph</desc></character>
+<character hex="2D 71 64"><unientity>E97C</unientity><unientityalt>55D4</unientityalt><desc>Variant of 217164 which maps to 55D4</desc></character>
+<character hex="2D 73 45"><unientity>56D3</unientity><desc>East Asian ideograph</desc></character>
+<character hex="2D 75 3A"><unientity>9654</unientity><desc>East Asian ideograph</desc></character>
+<character hex="2D 75 52"><unientity>579B</unientity><desc>East Asian ideograph</desc></character>
+<character hex="2D 7A 44"><unientity>598D</unientity><desc>East Asian ideograph</desc></character>
+<character hex="2D 7E 6A"><unientity>51A4</unientity><desc>East Asian ideograph</desc></character>
+<character hex="2E 25 7B"><unientity>5D1F</unientity><desc>East Asian ideograph</desc></character>
+<character hex="2E 28 4C"><unientity>5ECF</unientity><desc>East Asian ideograph</desc></character>
+<character hex="2E 29 68"><unientity>5F51</unientity><desc>East Asian ideograph</desc></character>
+<character hex="2E 2B 5B"><unientity>605A</unientity><desc>East Asian ideograph</desc></character>
+<character hex="2E 2B 74"><unientity>609B</unientity><desc>East Asian ideograph</desc></character>
+<character hex="2E 2D 79"><unientity>6128</unientity><desc>East Asian ideograph</desc></character>
+<character hex="2E 2F 7A"><unientity>6738</unientity><desc>East Asian ideograph</desc></character>
+<character hex="2E 2F 7C"><unientity>634D</unientity><desc>East Asian ideograph</desc></character>
+<character hex="2E 30 28"><unientity>640B</unientity><desc>East Asian ideograph</desc></character>
+<character hex="2E 31 3A"><unientity>6332</unientity><desc>East Asian ideograph</desc></character>
+<character hex="2E 31 44"><unientity>651F</unientity><desc>East Asian ideograph</desc></character>
+<character hex="2E 31 72"><unientity>5261</unientity><desc>East Asian ideograph</desc></character>
+<character hex="2E 33 28"><unientity>6528</unientity><desc>East Asian ideograph</desc></character>
+<character hex="2E 33 7B"><unientity>630E</unientity><desc>East Asian ideograph</desc></character>
+<character hex="2E 36 3F"><unientity>52C5</unientity><desc>East Asian ideograph</desc></character>
+<character hex="2E 36 45"><unientity>69E3</unientity><desc>East Asian ideograph</desc></character>
+<character hex="2E 36 54"><unientity>657F</unientity><desc>East Asian ideograph</desc></character>
+<character hex="2E 37 29"><unientity>65B5</unientity><desc>East Asian ideograph</desc></character>
+<character hex="2E 38 70"><unientity>714A</unientity><desc>East Asian ideograph</desc></character>
+<character hex="2E 39 36"><unientity>66CD</unientity><desc>East Asian ideograph</desc></character>
+<character hex="2E 3A 26"><unientity>661D</unientity><desc>East Asian ideograph</desc></character>
+<character hex="2E 3A 33"><unientity>80AD</unientity><desc>East Asian ideograph</desc></character>
+<character hex="2E 3B 22"><unientity>690F</unientity><desc>East Asian ideograph</desc></character>
+<character hex="2E 3D 62"><unientity>684A</unientity><desc>East Asian ideograph</desc></character>
+<character hex="2E 3D 73"><unientity>7A1C</unientity><desc>East Asian ideograph</desc></character>
+<character hex="2E 3E 3F"><unientity>7BA0</unientity><desc>East Asian ideograph</desc></character>
+<character hex="2E 3F 2D"><unientity>69B2</unientity><desc>East Asian ideograph</desc></character>
+<character hex="2E 40 3D"><unientity>6AC1</unientity><desc>East Asian ideograph</desc></character>
+<character hex="2E 41 74"><unientity>6AA9</unientity><desc>East Asian ideograph</desc></character>
+<character hex="2E 46 70"><unientity>6CD0</unientity><desc>East Asian ideograph</desc></character>
+<character hex="2E 47 31"><unientity>6C73</unientity><desc>East Asian ideograph</desc></character>
+<character hex="2E 47 39"><unientity>E97D</unientity><unientityalt>6C67</unientityalt><desc>Variant of 224739 which maps to 6C67</desc></character>
+<character hex="2E 47 47"><unientity>6D64</unientity><desc>East Asian ideograph</desc></character>
+<character hex="2E 48 73"><unientity>6FA3</unientity><desc>East Asian ideograph</desc></character>
+<character hex="2E 49 2F"><unientity>6CD9</unientity><desc>East Asian ideograph</desc></character>
+<character hex="2E 49 3B"><unientity>6E7C</unientity><desc>East Asian ideograph</desc></character>
+<character hex="2E 4A 6B"><unientity>6EA6</unientity><desc>East Asian ideograph</desc></character>
+<character hex="2E 4C 35"><unientity>6DE5</unientity><desc>East Asian ideograph</desc></character>
+<character hex="2E 4C 7B"><unientity>6E86</unientity><desc>East Asian ideograph</desc></character>
+<character hex="2E 4D 3D"><unientity>6D38</unientity><desc>East Asian ideograph</desc></character>
+<character hex="2E 4E 41"><unientity>7032</unientity><desc>East Asian ideograph</desc></character>
+<character hex="2E 4E 56"><unientity>9800</unientity><desc>East Asian ideograph</desc></character>
+<character hex="2E 4E 5D"><unientity>6DE0</unientity><desc>East Asian ideograph</desc></character>
+<character hex="2E 4E 72"><unientity>6F74</unientity><desc>East Asian ideograph</desc></character>
+<character hex="2E 50 6D"><unientity>70B1</unientity><desc>East Asian ideograph</desc></character>
+<character hex="2E 52 5D"><unientity>715B</unientity><desc>East Asian ideograph</desc></character>
+<character hex="2E 54 52"><unientity>71FE</unientity><desc>East Asian ideograph</desc></character>
+<character hex="2E 5A 40"><unientity>73B3</unientity><desc>East Asian ideograph</desc></character>
+<character hex="2E 5A 78"><unientity>74A2</unientity><desc>East Asian ideograph</desc></character>
+<character hex="2E 5F 6F"><unientity>75B8</unientity><desc>East Asian ideograph</desc></character>
+<character hex="2E 60 4A"><unientity>7690</unientity><desc>East Asian ideograph</desc></character>
+<character hex="2E 60 60"><unientity>76A1</unientity><desc>East Asian ideograph</desc></character>
+<character hex="2E 62 4F"><unientity>772D</unientity><desc>East Asian ideograph</desc></character>
+<character hex="2E 62 5F"><unientity>77C1</unientity><desc>East Asian ideograph</desc></character>
+<character hex="2E 68 4E"><unientity>8020</unientity><desc>East Asian ideograph</desc></character>
+<character hex="2E 68 6F"><unientity>7A19</unientity><desc>East Asian ideograph</desc></character>
+<character hex="2E 6B 54"><unientity>7B04</unientity><desc>East Asian ideograph</desc></character>
+<character hex="2E 6C 26"><unientity>7BE0</unientity><desc>East Asian ideograph</desc></character>
+<character hex="2E 6C 27"><unientity>7B2E</unientity><desc>East Asian ideograph</desc></character>
+<character hex="2E 6C 3E"><unientity>7B59</unientity><desc>East Asian ideograph</desc></character>
+<character hex="2E 6C 46"><unientity>7BE6</unientity><desc>East Asian ideograph</desc></character>
+<character hex="2E 6F 35"><unientity>6CD4</unientity><desc>East Asian ideograph</desc></character>
+<character hex="2E 6F 43"><unientity>9908</unientity><desc>East Asian ideograph</desc></character>
+<character hex="2E 70 62"><unientity>7D4F</unientity><desc>East Asian ideograph</desc></character>
+<character hex="2E 71 5A"><unientity>7E27</unientity><desc>East Asian ideograph</desc></character>
+<character hex="2E 71 7C"><unientity>7D63</unientity><desc>East Asian ideograph</desc></character>
+<character hex="2E 73 28"><unientity>5FAD</unientity><desc>East Asian ideograph</desc></character>
+<character hex="2E 73 5D"><unientity>7D56</unientity><desc>East Asian ideograph</desc></character>
+<character hex="2E 73 74"><unientity>7E89</unientity><desc>East Asian ideograph</desc></character>
+<character hex="2E 74 2E"><unientity>7516</unientity><desc>East Asian ideograph</desc></character>
+<character hex="2E 74 31"><unientity>7F48</unientity><desc>East Asian ideograph</desc></character>
+<character hex="2E 74 50"><unientity>7F82</unientity><desc>East Asian ideograph</desc></character>
+<character hex="2E 74 51"><unientity>7F58</unientity><desc>East Asian ideograph</desc></character>
+<character hex="2E 76 5F"><unientity>8037</unientity><desc>East Asian ideograph</desc></character>
+<character hex="2E 7C 2E"><unientity>831C</unientity><desc>East Asian ideograph</desc></character>
+<character hex="2E 7D 24"><unientity>83F0</unientity><desc>East Asian ideograph</desc></character>
+<character hex="2F 25 2D"><unientity>6A22</unientity><desc>East Asian ideograph</desc></character>
+<character hex="2F 25 2E"><unientity>8507</unientity><desc>East Asian ideograph</desc></character>
+<character hex="2F 2A 5A"><unientity>E9D3</unientity><unientityalt>868B</unientityalt><desc>Unrelated variant of EACC 23293D which maps to 868B</desc></character>
+<character hex="2F 2A 64"><unientity>87B5</unientity><desc>East Asian ideograph</desc></character>
+<character hex="2F 2A 73"><unientity>87CA</unientity><desc>East Asian ideograph</desc></character>
+<character hex="2F 2D 79"><unientity>88B5</unientity><desc>East Asian ideograph</desc></character>
+<character hex="2F 2F 5D"><unientity>7E48</unientity><desc>East Asian ideograph</desc></character>
+<character hex="2F 31 2B"><unientity>89BB</unientity><desc>East Asian ideograph</desc></character>
+<character hex="2F 31 43"><unientity>E9D4</unientity><unientityalt>89F5</unientityalt><desc>Unrelated variant of EACC 23315E which maps to 89F5</desc></character>
+<character hex="2F 31 7D"><unientity>8A7E</unientity><desc>East Asian ideograph</desc></character>
+<character hex="2F 33 63"><unientity>8B1A</unientity><desc>East Asian ideograph</desc></character>
+<character hex="2F 36 39"><unientity>8C7C</unientity><desc>East Asian ideograph</desc></character>
+<character hex="2F 38 33"><unientity>8D91</unientity><desc>East Asian ideograph</desc></character>
+<character hex="2F 38 6F"><unientity>8DD7</unientity><desc>East Asian ideograph</desc></character>
+<character hex="2F 3A 5E"><unientity>8E6E</unientity><desc>East Asian ideograph</desc></character>
+<character hex="2F 3B 63"><unientity>E9F7</unientity><desc>East Asian ideograph not in Unicode</desc></character>
+<character hex="2F 3C 2D"><unientity>8F3C</unientity><desc>East Asian ideograph</desc></character>
+<character hex="2F 3D 5D"><unientity>900E</unientity><desc>East Asian ideograph</desc></character>
+<character hex="2F 40 53"><unientity>914F</unientity><desc>East Asian ideograph</desc></character>
+<character hex="2F 42 31"><unientity>E9D5</unientity><unientityalt>8019</unientityalt><desc>Unrelated variant of EACC 215266 which maps to 8019</desc></character>
+<character hex="2F 44 5F"><unientity>941A</unientity><desc>East Asian ideograph</desc></character>
+<character hex="2F 4A 2E"><unientity>90B4</unientity><desc>East Asian ideograph</desc></character>
+<character hex="2F 4A 4A"><unientity>5F8F</unientity><desc>East Asian ideograph</desc></character>
+<character hex="2F 51 58"><unientity>7CC7</unientity><desc>East Asian ideograph</desc></character>
+<character hex="2F 54 76"><unientity>9AE1</unientity><desc>East Asian ideograph</desc></character>
+<character hex="2F 57 5F"><unientity>9ABE</unientity><desc>East Asian ideograph</desc></character>
+<character hex="2F 58 5C"><unientity>E9D6</unientity><unientityalt>9C51</unientityalt><desc>Unrelated variant of EACC 235945 which maps to 9C51</desc></character>
+<character hex="2F 58 70"><unientity>9C1B</unientity><desc>East Asian ideograph</desc></character>
+<character hex="2F 59 73"><unientity>9CEC</unientity><desc>East Asian ideograph</desc></character>
+<character hex="2F 5A 48"><unientity>9D44</unientity><desc>East Asian ideograph</desc></character>
+<character hex="2F 5D 3C"><unientity>6EF7</unientity><desc>East Asian ideograph</desc></character>
+<character hex="2F 5D 49"><unientity>9EA4</unientity><desc>East Asian ideograph</desc></character>
+<character hex="2F 5D 5C"><unientity>730A</unientity><desc>East Asian ideograph</desc></character>
+<character hex="2F 5E 42"><unientity>9EC9</unientity><desc>East Asian ideograph</desc></character>
+<character hex="2F 5E 66"><unientity>9B12</unientity><desc>East Asian ideograph</desc></character>
+<character hex="2F 5E 7D"><unientity>6641</unientity><desc>East Asian ideograph</desc></character>
+<character hex="2F 5F 45"><unientity>86A1</unientity><desc>East Asian ideograph</desc></character>
+<character hex="33 30 21"><unientity>58F9</unientity><desc>East Asian ideograph</desc></character>
+<character hex="33 30 3A"><unientity>8FFA</unientity><desc>East Asian ideograph</desc></character>
+<character hex="33 30 4C"><unientity>4E79</unientity><desc>East Asian ideograph</desc></character>
+<character hex="33 30 51"><unientity>8CB3</unientity><desc>East Asian ideograph</desc></character>
+<character hex="33 30 60"><unientity>4EAF</unientity><desc>East Asian ideograph</desc></character>
+<character hex="33 30 66"><unientity>5FC8</unientity><desc>East Asian ideograph</desc></character>
+<character hex="33 30 6C"><unientity>8B90</unientity><desc>East Asian ideograph</desc></character>
+<character hex="33 30 78"><unientity>5F77</unientity><desc>East Asian ideograph</desc></character>
+<character hex="33 31 4C"><unientity>5FA0</unientity><desc>East Asian ideograph</desc></character>
+<character hex="33 32 40"><unientity>4FFB</unientity><desc>East Asian ideograph</desc></character>
+<character hex="33 32 51"><unientity>5FBA</unientity><desc>East Asian ideograph</desc></character>
+<character hex="33 32 5D"><unientity>4FA1</unientity><desc>East Asian ideograph</desc></character>
+<character hex="33 32 7A"><unientity>5150</unientity><desc>East Asian ideograph</desc></character>
+<character hex="33 33 23"><unientity>4E21</unientity><desc>East Asian ideograph</desc></character>
+<character hex="33 33 2A"><unientity>4E93</unientity><desc>East Asian ideograph</desc></character>
+<character hex="33 33 30"><unientity>518A</unientity><desc>East Asian ideograph</desc></character>
+<character hex="33 33 3C"><unientity>6C37</unientity><desc>East Asian ideograph</desc></character>
+<character hex="33 33 44"><unientity>51DB</unientity><desc>East Asian ideograph</desc></character>
+<character hex="33 33 4E"><unientity>51FE</unientity><desc>East Asian ideograph</desc></character>
+<character hex="33 33 77"><unientity>5270</unientity><desc>East Asian ideograph</desc></character>
+<character hex="33 33 7B"><unientity>52E6</unientity><desc>East Asian ideograph</desc></character>
+<character hex="33 34 21"><unientity>91FC</unientity><desc>East Asian ideograph</desc></character>
+<character hex="33 34 23"><unientity>5264</unientity><desc>East Asian ideograph</desc></character>
+<character hex="33 34 28"><unientity>523C</unientity><desc>East Asian ideograph</desc></character>
+<character hex="33 34 75"><unientity>9628</unientity><desc>East Asian ideograph</desc></character>
+<character hex="33 34 7D"><unientity>53C1</unientity><desc>East Asian ideograph</desc></character>
+<character hex="33 35 29"><unientity>53DC</unientity><desc>East Asian ideograph</desc></character>
+<character hex="33 35 4E"><unientity>608B</unientity><desc>East Asian ideograph</desc></character>
+<character hex="33 35 56"><unientity>9A03</unientity><desc>East Asian ideograph</desc></character>
+<character hex="33 35 5C"><unientity>5449</unientity><desc>East Asian ideograph</desc></character>
+<character hex="33 35 64"><unientity>5415</unientity><desc>East Asian ideograph</desc></character>
+<character hex="33 35 73"><unientity>8656</unientity><desc>East Asian ideograph</desc></character>
+<character hex="33 36 23"><unientity>9F69</unientity><desc>East Asian ideograph</desc></character>
+<character hex="33 36 2A"><unientity>9B28</unientity><desc>East Asian ideograph</desc></character>
+<character hex="33 36 42"><unientity>8A92</unientity><desc>East Asian ideograph</desc></character>
+<character hex="33 36 5A"><unientity>5405</unientity><desc>East Asian ideograph</desc></character>
+<character hex="33 37 68"><unientity>8FF4</unientity><desc>East Asian ideograph</desc></character>
+<character hex="33 38 6E"><unientity>576F</unientity><desc>East Asian ideograph</desc></character>
+<character hex="33 39 2F"><unientity>9029</unientity><desc>East Asian ideograph</desc></character>
+<character hex="33 39 44"><unientity>5B2D</unientity><desc>East Asian ideograph</desc></character>
+<character hex="33 39 63"><unientity>59C9</unientity><desc>East Asian ideograph</desc></character>
+<character hex="33 3C 21"><unientity>7895</unientity><desc>East Asian ideograph</desc></character>
+<character hex="33 3C 52"><unientity>8CEC</unientity><desc>East Asian ideograph</desc></character>
+<character hex="33 3D 28"><unientity>53A8</unientity><desc>East Asian ideograph</desc></character>
+<character hex="33 3D 2A"><unientity>5E83</unientity><desc>East Asian ideograph</desc></character>
+<character hex="33 3D 2F"><unientity>5E81</unientity><desc>East Asian ideograph</desc></character>
+<character hex="33 3D 42"><unientity>7D43</unientity><desc>East Asian ideograph</desc></character>
+<character hex="33 3D 48"><unientity>5F3A</unientity><desc>East Asian ideograph</desc></character>
+<character hex="33 3D 4C"><unientity>7030</unientity><desc>East Asian ideograph</desc></character>
+<character hex="33 3D 54"><unientity>4EFD</unientity><desc>East Asian ideograph</desc></character>
+<character hex="33 3D 75"><unientity>5FB3</unientity><desc>East Asian ideograph</desc></character>
+<character hex="33 3E 7D"><unientity>7652</unientity><desc>East Asian ideograph</desc></character>
+<character hex="33 3F 22"><unientity>E97E</unientity><unientityalt>6168</unientityalt><desc>Variant of 213F22 which maps to 6168</desc></character>
+<character hex="33 3F 24"><unientity>7718</unientity><desc>East Asian ideograph</desc></character>
+<character hex="33 3F 3F"><unientity>51F4</unientity><desc>East Asian ideograph</desc></character>
+<character hex="33 3F 55"><unientity>5B3E</unientity><desc>East Asian ideograph</desc></character>
+<character hex="33 3F 58"><unientity>61F4</unientity><desc>East Asian ideograph</desc></character>
+<character hex="33 3F 5B"><unientity>6133</unientity><desc>East Asian ideograph</desc></character>
+<character hex="33 40 45"><unientity>629B</unientity><desc>East Asian ideograph</desc></character>
+<character hex="33 40 50"><unientity>62D5</unientity><desc>East Asian ideograph</desc></character>
+<character hex="33 41 31"><unientity>6425</unientity><desc>East Asian ideograph</desc></character>
+<character hex="33 41 7E"><unientity>629E</unientity><desc>East Asian ideograph</desc></character>
+<character hex="33 42 2A"><unientity>62E1</unientity><desc>East Asian ideograph</desc></character>
+<character hex="33 42 3D"><unientity>53CE</unientity><desc>East Asian ideograph</desc></character>
+<character hex="33 42 43"><unientity>52B9</unientity><desc>East Asian ideograph</desc></character>
+<character hex="33 42 44"><unientity>6559</unientity><desc>East Asian ideograph</desc></character>
+<character hex="33 42 56"><unientity>6B5B</unientity><desc>East Asian ideograph</desc></character>
+<character hex="33 42 60"><unientity>89D4</unientity><desc>East Asian ideograph</desc></character>
+<character hex="33 42 77"><unientity>65EF</unientity><desc>East Asian ideograph</desc></character>
+<character hex="33 43 2F"><unientity>664B</unientity><desc>East Asian ideograph</desc></character>
+<character hex="33 43 3E"><unientity>95C7</unientity><desc>East Asian ideograph</desc></character>
+<character hex="33 43 42"><unientity>7156</unientity><desc>East Asian ideograph</desc></character>
+<character hex="33 43 57"><unientity>6702</unientity><desc>East Asian ideograph</desc></character>
+<character hex="33 43 69"><unientity>5932</unientity><desc>East Asian ideograph</desc></character>
+<character hex="33 44 25"><unientity>76C3</unientity><desc>East Asian ideograph</desc></character>
+<character hex="33 44 49"><unientity>6144</unientity><desc>East Asian ideograph</desc></character>
+<character hex="33 45 27"><unientity>6918</unientity><desc>East Asian ideograph</desc></character>
+<character hex="33 45 50"><unientity>7F47</unientity><desc>East Asian ideograph</desc></character>
+<character hex="33 45 6D"><unientity>826A</unientity><desc>East Asian ideograph</desc></character>
+<character hex="33 46 21"><unientity>8B99</unientity><desc>East Asian ideograph</desc></character>
+<character hex="33 46 33"><unientity>E97F</unientity><unientityalt>6B8B</unientityalt><desc>Variant of 274633 which maps to 6B8B</desc></character>
+<character hex="33 46 3C"><unientity>6BBB</unientity><desc>East Asian ideograph</desc></character>
+<character hex="33 46 65"><unientity>6C61</unientity><desc>East Asian ideograph</desc></character>
+<character hex="33 46 74"><unientity>76C5</unientity><desc>East Asian ideograph</desc></character>
+<character hex="33 46 7A"><unientity>6CA1</unientity><desc>East Asian ideograph</desc></character>
+<character hex="33 47 29"><unientity>6E2B</unientity><desc>East Asian ideograph</desc></character>
+<character hex="33 47 30"><unientity>6E5F</unientity><desc>East Asian ideograph</desc></character>
+<character hex="33 47 40"><unientity>6D1A</unientity><desc>East Asian ideograph</desc></character>
+<character hex="33 47 4A"><unientity>6D1F</unientity><desc>East Asian ideograph</desc></character>
+<character hex="33 47 55"><unientity>6FEC</unientity><desc>East Asian ideograph</desc></character>
+<character hex="33 47 5E"><unientity>6FB9</unientity><desc>East Asian ideograph</desc></character>
+<character hex="33 47 5F"><unientity>60BD</unientity><desc>East Asian ideograph</desc></character>
+<character hex="33 47 6F"><unientity>6D44</unientity><desc>East Asian ideograph</desc></character>
+<character hex="33 47 70"><unientity>5A6C</unientity><desc>East Asian ideograph</desc></character>
+<character hex="33 47 7B"><unientity>904A</unientity><desc>East Asian ideograph</desc></character>
+<character hex="33 48 3B"><unientity>6CDD</unientity><desc>East Asian ideograph</desc></character>
+<character hex="33 48 5E"><unientity>67D2</unientity><desc>East Asian ideograph</desc></character>
+<character hex="33 49 2E"><unientity>6F81</unientity><desc>East Asian ideograph</desc></character>
+<character hex="33 49 4A"><unientity>70D6</unientity><desc>East Asian ideograph</desc></character>
+<character hex="33 49 68"><unientity>7133</unientity><desc>East Asian ideograph</desc></character>
+<character hex="33 49 6A"><unientity>934A</unientity><desc>East Asian ideograph</desc></character>
+<character hex="33 4A 28"><unientity>91BC</unientity><desc>East Asian ideograph</desc></character>
+<character hex="33 4A 58"><unientity>89DD</unientity><desc>East Asian ideograph</desc></character>
+<character hex="33 4C 2C"><unientity>754D</unientity><desc>East Asian ideograph</desc></character>
+<character hex="33 4C 36"><unientity>E980</unientity><unientityalt>753B</unientityalt><desc>Variant of 274C36 which maps to 753B</desc></character>
+<character hex="33 4C 37"><unientity>8E6F</unientity><desc>East Asian ideograph</desc></character>
+<character hex="33 4C 3E"><unientity>8E08</unientity><desc>East Asian ideograph</desc></character>
+<character hex="33 4C 7B"><unientity>767A</unientity><desc>East Asian ideograph</desc></character>
+<character hex="33 4E 37"><unientity>784E</unientity><desc>East Asian ideograph</desc></character>
+<character hex="33 4E 73"><unientity>79A5</unientity><desc>East Asian ideograph</desc></character>
+<character hex="33 4F 37"><unientity>5EE9</unientity><desc>East Asian ideograph</desc></character>
+<character hex="33 4F 3A"><unientity>7A49</unientity><desc>East Asian ideograph</desc></character>
+<character hex="33 4F 59"><unientity>7A93</unientity><desc>East Asian ideograph</desc></character>
+<character hex="33 4F 5E"><unientity>7A91</unientity><desc>East Asian ideograph</desc></character>
+<character hex="33 4F 71"><unientity>54B2</unientity><desc>East Asian ideograph</desc></character>
+<character hex="33 50 2A"><unientity>9257</unientity><desc>East Asian ideograph</desc></character>
+<character hex="33 50 2B"><unientity>724B</unientity><desc>East Asian ideograph</desc></character>
+<character hex="33 50 65"><unientity>7A45</unientity><desc>East Asian ideograph</desc></character>
+<character hex="33 51 2E"><unientity>7E8D</unientity><desc>East Asian ideograph</desc></character>
+<character hex="33 51 3C"><unientity>7D4C</unientity><desc>East Asian ideograph</desc></character>
+<character hex="33 51 47"><unientity>7EEE</unientity><desc>East Asian ideograph</desc></character>
+<character hex="33 51 4C"><unientity>7DD1</unientity><desc>East Asian ideograph</desc></character>
+<character hex="33 51 5C"><unientity>7DAB</unientity><desc>East Asian ideograph</desc></character>
+<character hex="33 51 6B"><unientity>7DD0</unientity><desc>East Asian ideograph</desc></character>
+<character hex="33 51 6D"><unientity>6374</unientity><desc>East Asian ideograph</desc></character>
+<character hex="33 51 72"><unientity>7D89</unientity><desc>East Asian ideograph</desc></character>
+<character hex="33 52 23"><unientity>7E8E</unientity><desc>East Asian ideograph</desc></character>
+<character hex="33 52 28"><unientity>94B5</unientity><desc>East Asian ideograph</desc></character>
+<character hex="33 52 30"><unientity>E981</unientity><unientityalt>7F6E</unientityalt><desc>Variant of 215230 which maps to 7F6E</desc></character>
+<character hex="33 52 34"><unientity>99E1</unientity><desc>East Asian ideograph</desc></character>
+<character hex="33 52 38"><unientity>8989</unientity><desc>East Asian ideograph</desc></character>
+<character hex="33 52 3F"><unientity>8B71</unientity><desc>East Asian ideograph</desc></character>
+<character hex="33 52 59"><unientity>7E59</unientity><desc>East Asian ideograph</desc></character>
+<character hex="33 52 5B"><unientity>71FF</unientity><desc>East Asian ideograph</desc></character>
+<character hex="33 52 76"><unientity>8061</unientity><desc>East Asian ideograph</desc></character>
+<character hex="33 53 33"><unientity>80BB</unientity><desc>East Asian ideograph</desc></character>
+<character hex="33 53 47"><unientity>81D9</unientity><desc>East Asian ideograph</desc></character>
+<character hex="33 53 7D"><unientity>9AD5</unientity><desc>East Asian ideograph</desc></character>
+<character hex="33 54 45"><unientity>67C1</unientity><desc>East Asian ideograph</desc></character>
+<character hex="33 54 46"><unientity>8221</unientity><desc>East Asian ideograph</desc></character>
+<character hex="33 54 61"><unientity>6CD6</unientity><desc>East Asian ideograph</desc></character>
+<character hex="33 55 61"><unientity>8462</unientity><desc>East Asian ideograph</desc></character>
+<character hex="33 55 68"><unientity>8406</unientity><desc>East Asian ideograph</desc></character>
+<character hex="33 55 77"><unientity>8602</unientity><desc>East Asian ideograph</desc></character>
+<character hex="33 56 35"><unientity>85AC</unientity><desc>East Asian ideograph</desc></character>
+<character hex="33 56 52"><unientity>87C1</unientity><desc>East Asian ideograph</desc></character>
+<character hex="33 56 7C"><unientity>8671</unientity><desc>East Asian ideograph</desc></character>
+<character hex="33 57 2E"><unientity>880E</unientity><desc>East Asian ideograph</desc></character>
+<character hex="33 57 38"><unientity>880F</unientity><desc>East Asian ideograph</desc></character>
+<character hex="33 57 60"><unientity>88E0</unientity><desc>East Asian ideograph</desc></character>
+<character hex="33 57 72"><unientity>8943</unientity><desc>East Asian ideograph</desc></character>
+<character hex="33 57 73"><unientity>88B4</unientity><desc>East Asian ideograph</desc></character>
+<character hex="33 58 21"><unientity>97C8</unientity><desc>East Asian ideograph</desc></character>
+<character hex="33 58 30"><unientity>658D</unientity><desc>East Asian ideograph</desc></character>
+<character hex="33 58 34"><unientity>89E7</unientity><desc>East Asian ideograph</desc></character>
+<character hex="33 59 41"><unientity>54D7</unientity><desc>East Asian ideograph</desc></character>
+<character hex="33 59 58"><unientity>8C4A</unientity><desc>East Asian ideograph</desc></character>
+<character hex="33 5A 7B"><unientity>8E28</unientity><desc>East Asian ideograph</desc></character>
+<character hex="33 5B 70"><unientity>5EF8</unientity><desc>East Asian ideograph</desc></character>
+<character hex="33 5D 23"><unientity>8A76</unientity><desc>East Asian ideograph</desc></character>
+<character hex="33 5D 3B"><unientity>57DC</unientity><desc>East Asian ideograph</desc></character>
+<character hex="33 5E 21"><unientity>9221</unientity><desc>East Asian ideograph</desc></character>
+<character hex="33 5E 2F"><unientity>5257</unientity><desc>East Asian ideograph</desc></character>
+<character hex="33 5E 3D"><unientity>9244</unientity><desc>East Asian ideograph</desc></character>
+<character hex="33 5E 42"><unientity>9452</unientity><desc>East Asian ideograph</desc></character>
+<character hex="33 5F 34"><unientity>90C4</unientity><desc>East Asian ideograph</desc></character>
+<character hex="33 5F 3D"><unientity>96B7</unientity><desc>East Asian ideograph</desc></character>
+<character hex="33 5F 43"><unientity>9D08</unientity><desc>East Asian ideograph</desc></character>
+<character hex="33 5F 49"><unientity>9D70</unientity><desc>East Asian ideograph</desc></character>
+<character hex="33 5F 73"><unientity>9759</unientity><desc>East Asian ideograph</desc></character>
+<character hex="33 60 54"><unientity>985B</unientity><desc>East Asian ideograph</desc></character>
+<character hex="33 60 58"><unientity>9855</unientity><desc>East Asian ideograph</desc></character>
+<character hex="33 60 62"><unientity>98C3</unientity><desc>East Asian ideograph</desc></character>
+<character hex="33 61 5A"><unientity>8EB0</unientity><desc>East Asian ideograph</desc></character>
+<character hex="33 61 62"><unientity>9A23</unientity><desc>East Asian ideograph</desc></character>
+<character hex="33 61 79"><unientity>9C7B</unientity><desc>East Asian ideograph</desc></character>
+<character hex="33 62 5E"><unientity>9EAA</unientity><desc>East Asian ideograph</desc></character>
+<character hex="33 62 5F"><unientity>8534</unientity><desc>East Asian ideograph</desc></character>
+<character hex="33 62 75"><unientity>76BC</unientity><desc>East Asian ideograph</desc></character>
+<character hex="33 62 7D"><unientity>6589</unientity><desc>East Asian ideograph</desc></character>
+<character hex="33 63 21"><unientity>6B6F</unientity><desc>East Asian ideograph</desc></character>
+<character hex="33 63 2B"><unientity>7ADC</unientity><desc>East Asian ideograph</desc></character>
+<character hex="33 6B 33"><unientity>524F</unientity><desc>East Asian ideograph</desc></character>
+<character hex="33 6C 6B"><unientity>6031</unientity><desc>East Asian ideograph</desc></character>
+<character hex="33 73 45"><unientity>9F67</unientity><desc>East Asian ideograph</desc></character>
+<character hex="34 24 53"><unientity>5CBD</unientity><desc>East Asian ideograph</desc></character>
+<character hex="34 38 75"><unientity>5FDE</unientity><desc>East Asian ideograph</desc></character>
+<character hex="34 3A 5B"><unientity>572C</unientity><desc>East Asian ideograph</desc></character>
+<character hex="34 3E 38"><unientity>7BDA</unientity><desc>East Asian ideograph</desc></character>
+<character hex="34 41 38"><unientity>8022</unientity><desc>East Asian ideograph</desc></character>
+<character hex="34 41 77"><unientity>8264</unientity><desc>East Asian ideograph</desc></character>
+<character hex="34 49 2F"><unientity>6D34</unientity><desc>East Asian ideograph</desc></character>
+<character hex="34 51 75"><unientity>7162</unientity><desc>East Asian ideograph</desc></character>
+<character hex="34 54 52"><unientity>7118</unientity><desc>East Asian ideograph</desc></character>
+<character hex="34 5D 6B"><unientity>756D</unientity><desc>East Asian ideograph</desc></character>
+<character hex="34 5E 3B"><unientity>80AC</unientity><desc>East Asian ideograph</desc></character>
+<character hex="34 5E 47"><unientity>75FE</unientity><desc>East Asian ideograph</desc></character>
+<character hex="34 61 26"><unientity>6900</unientity><desc>East Asian ideograph</desc></character>
+<character hex="34 66 22"><unientity>589D</unientity><desc>East Asian ideograph</desc></character>
+<character hex="34 68 2A"><unientity>7C7C</unientity><desc>East Asian ideograph</desc></character>
+<character hex="34 71 5A"><unientity>7E1A</unientity><desc>East Asian ideograph</desc></character>
+<character hex="34 74 31"><unientity>58DC</unientity><desc>East Asian ideograph</desc></character>
+<character hex="34 78 2A"><unientity>90C5</unientity><desc>East Asian ideograph</desc></character>
+<character hex="34 7D 24"><unientity>83C7</unientity><desc>East Asian ideograph</desc></character>
+<character hex="35 34 4D"><unientity>8B5B</unientity><desc>East Asian ideograph</desc></character>
+<character hex="35 34 7B"><unientity>8B2D</unientity><desc>East Asian ideograph</desc></character>
+<character hex="35 41 56"><unientity>91BE</unientity><desc>East Asian ideograph</desc></character>
+<character hex="35 50 53"><unientity>98C8</unientity><desc>East Asian ideograph</desc></character>
+<character hex="35 57 39"><unientity>9C76</unientity><desc>East Asian ideograph</desc></character>
+<character hex="35 5D 5C"><unientity>8C8E</unientity><desc>East Asian ideograph</desc></character>
+<character hex="35 5E 76"><unientity>82BE</unientity><desc>East Asian ideograph</desc></character>
+<character hex="39 30 2D"><unientity>534B</unientity><desc>East Asian ideograph</desc></character>
+<character hex="39 30 3A"><unientity>5EFC</unientity><desc>East Asian ideograph</desc></character>
+<character hex="39 30 4C"><unientity>4E81</unientity><desc>East Asian ideograph</desc></character>
+<character hex="39 30 52"><unientity>65BC</unientity><desc>East Asian ideograph</desc></character>
+<character hex="39 30 54"><unientity>4F0D</unientity><desc>East Asian ideograph</desc></character>
+<character hex="39 30 78"><unientity>9AE3</unientity><desc>East Asian ideograph</desc></character>
+<character hex="39 32 46"><unientity>4F1D</unientity><desc>East Asian ideograph</desc></character>
+<character hex="39 34 28"><unientity>5227</unientity><desc>East Asian ideograph</desc></character>
+<character hex="39 34 39"><unientity>61C3</unientity><desc>East Asian ideograph</desc></character>
+<character hex="39 34 5B"><unientity>965E</unientity><desc>East Asian ideograph</desc></character>
+<character hex="39 34 60"><unientity>604A</unientity><desc>East Asian ideograph</desc></character>
+<character hex="39 35 73"><unientity>5611</unientity><desc>East Asian ideograph</desc></character>
+<character hex="39 35 77"><unientity>9FA2</unientity><desc>East Asian ideograph</desc></character>
+<character hex="39 36 5A"><unientity>8AE0</unientity><desc>East Asian ideograph</desc></character>
+<character hex="39 36 5E"><unientity>559E</unientity><desc>East Asian ideograph</desc></character>
+<character hex="39 37 70"><unientity>56F2</unientity><desc>East Asian ideograph</desc></character>
+<character hex="39 39 44"><unientity>59B3</unientity><desc>East Asian ideograph</desc></character>
+<character hex="39 3B 39"><unientity>5BF3</unientity><desc>East Asian ideograph</desc></character>
+<character hex="39 3B 6E"><unientity>5C97</unientity><desc>East Asian ideograph</desc></character>
+<character hex="39 3B 78"><unientity>E922</unientity><desc>Duplicate simplified ideograph</desc></character>
+<character hex="39 3C 52"><unientity>8D26</unientity><desc>East Asian ideograph</desc></character>
+<character hex="39 3D 6F"><unientity>8907</unientity><desc>East Asian ideograph</desc></character>
+<character hex="39 3E 47"><unientity>8CC9</unientity><desc>East Asian ideograph</desc></character>
+<character hex="39 3E 4C"><unientity>6142</unientity><desc>East Asian ideograph</desc></character>
+<character hex="39 3E 61"><unientity>60AA</unientity><desc>East Asian ideograph</desc></character>
+<character hex="39 3E 7D"><unientity>7609</unientity><desc>East Asian ideograph</desc></character>
+<character hex="39 40 22"><unientity>6443</unientity><desc>East Asian ideograph</desc></character>
+<character hex="39 40 42"><unientity>646D</unientity><desc>East Asian ideograph</desc></character>
+<character hex="39 41 7C"><unientity>62E0</unientity><desc>East Asian ideograph</desc></character>
+<character hex="39 42 43"><unientity>4FF2</unientity><desc>East Asian ideograph</desc></character>
+<character hex="39 42 4F"><unientity>5554</unientity><desc>East Asian ideograph</desc></character>
+<character hex="39 43 30"><unientity>6644</unientity><desc>East Asian ideograph</desc></character>
+<character hex="39 44 44"><unientity>8988</unientity><desc>East Asian ideograph</desc></character>
+<character hex="39 44 7D"><unientity>6AC2</unientity><desc>East Asian ideograph</desc></character>
+<character hex="39 45 6D"><unientity>826B</unientity><desc>East Asian ideograph</desc></character>
+<character hex="39 46 34"><unientity>E982</unientity><unientityalt>6B96</unientityalt><desc>Variant of 214634 which maps to 6B96</desc></character>
+<character hex="39 47 35"><unientity>6C3E</unientity><desc>East Asian ideograph</desc></character>
+<character hex="39 47 6F"><unientity>51C0</unientity><desc>East Asian ideograph</desc></character>
+<character hex="39 48 3B"><unientity>9061</unientity><desc>East Asian ideograph</desc></character>
+<character hex="39 49 28"><unientity>6D5C</unientity><desc>East Asian ideograph</desc></character>
+<character hex="39 49 44"><unientity>6B12</unientity><desc>East Asian ideograph</desc></character>
+<character hex="39 49 56"><unientity>792E</unientity><desc>East Asian ideograph</desc></character>
+<character hex="39 4A 60"><unientity>9AE6</unientity><desc>East Asian ideograph</desc></character>
+<character hex="39 4C 2D"><unientity>7546</unientity><desc>East Asian ideograph</desc></character>
+<character hex="39 50 50"><unientity>7BED</unientity><desc>East Asian ideograph</desc></character>
+<character hex="39 50 5B"><unientity>9B3B</unientity><desc>East Asian ideograph</desc></character>
+<character hex="39 50 63"><unientity>9939</unientity><desc>East Asian ideograph</desc></character>
+<character hex="39 51 79"><unientity>7D75</unientity><desc>East Asian ideograph</desc></character>
+<character hex="39 52 30"><unientity>5BD8</unientity><desc>East Asian ideograph</desc></character>
+<character hex="39 52 5B"><unientity>66DC</unientity><desc>East Asian ideograph</desc></character>
+<character hex="39 52 6B"><unientity>7094</unientity><desc>East Asian ideograph</desc></character>
+<character hex="39 54 77"><unientity>85A6</unientity><desc>East Asian ideograph</desc></character>
+<character hex="39 55 3C"><unientity>5D0B</unientity><desc>East Asian ideograph</desc></character>
+<character hex="39 55 64"><unientity>6726</unientity><desc>East Asian ideograph</desc></character>
+<character hex="39 55 68"><unientity>83DD</unientity><desc>East Asian ideograph</desc></character>
+<character hex="39 55 77"><unientity>854B</unientity><desc>East Asian ideograph</desc></character>
+<character hex="39 56 3C"><unientity>56CC</unientity><desc>East Asian ideograph</desc></character>
+<character hex="39 56 43"><unientity>4E55</unientity><desc>East Asian ideograph</desc></character>
+<character hex="39 56 52"><unientity>87A1</unientity><desc>East Asian ideograph</desc></character>
+<character hex="39 57 73"><unientity>7DAF</unientity><desc>East Asian ideograph</desc></character>
+<character hex="39 58 21"><unientity>97E4</unientity><desc>East Asian ideograph</desc></character>
+<character hex="39 58 29"><unientity>69FB</unientity><desc>East Asian ideograph</desc></character>
+<character hex="39 59 3F"><unientity>8A3C</unientity><desc>East Asian ideograph</desc></character>
+<character hex="39 5A 2F"><unientity>58F2</unientity><desc>East Asian ideograph</desc></character>
+<character hex="39 5A 36"><unientity>983C</unientity><desc>East Asian ideograph</desc></character>
+<character hex="39 5D 23"><unientity>91BB</unientity><desc>East Asian ideograph</desc></character>
+<character hex="39 5E 2F"><unientity>5277</unientity><desc>East Asian ideograph</desc></character>
+<character hex="39 5E 3D"><unientity>9295</unientity><desc>East Asian ideograph</desc></character>
+<character hex="39 5E 42"><unientity>9274</unientity><desc>East Asian ideograph</desc></character>
+<character hex="39 5E 6F"><unientity>7A7D</unientity><desc>East Asian ideograph</desc></character>
+<character hex="39 5E 71"><unientity>5742</unientity><desc>East Asian ideograph</desc></character>
+<character hex="39 5F 49"><unientity>5F6B</unientity><desc>East Asian ideograph</desc></character>
+<character hex="39 5F 68"><unientity>8987</unientity><desc>East Asian ideograph</desc></character>
+<character hex="39 60 74"><unientity>55B0</unientity><desc>East Asian ideograph</desc></character>
+<character hex="39 61 67"><unientity>9B2A</unientity><desc>East Asian ideograph</desc></character>
+<character hex="39 61 79"><unientity>5C20</unientity><desc>East Asian ideograph</desc></character>
+<character hex="39 62 23"><unientity>E983</unientity><unientityalt>9BFD</unientityalt><desc>Variant of 216223 which maps to 9BFD</desc></character>
+<character hex="39 6B 2F"><unientity>521F</unientity><desc>East Asian ideograph</desc></character>
+<character hex="39 6B 33"><unientity>E9F8</unientity><desc>East Asian ideograph not in Unicode</desc></character>
+<character hex="39 6C 6B"><unientity>60A4</unientity><desc>East Asian ideograph</desc></character>
+<character hex="3A 28 4C"><unientity>E984</unientity><unientityalt>53A9</unientityalt><desc>Variant of 4C284C which maps to 53A9</desc></character>
+<character hex="3A 2F 7C"><unientity>64C0</unientity><desc>East Asian ideograph</desc></character>
+<character hex="3A 3B 7D"><unientity>67B1</unientity><desc>East Asian ideograph</desc></character>
+<character hex="3A 40 34"><unientity>6855</unientity><desc>East Asian ideograph</desc></character>
+<character hex="3A 6A 7C"><unientity>7BEA</unientity><desc>East Asian ideograph</desc></character>
+<character hex="3A 78 7D"><unientity>80FC</unientity><desc>East Asian ideograph</desc></character>
+<character hex="3A 79 70"><unientity>81D5</unientity><desc>East Asian ideograph</desc></character>
+<character hex="3B 2D 44"><unientity>8842</unientity><desc>East Asian ideograph</desc></character>
+<character hex="3B 39 22"><unientity>8DB5</unientity><desc>East Asian ideograph</desc></character>
+<character hex="3F 30 4C"><unientity>5E79</unientity><desc>East Asian ideograph</desc></character>
+<character hex="3F 30 78"><unientity>5023</unientity><desc>East Asian ideograph</desc></character>
+<character hex="3F 34 7D"><unientity>84E1</unientity><desc>East Asian ideograph</desc></character>
+<character hex="3F 35 73"><unientity>8B3C</unientity><desc>East Asian ideograph</desc></character>
+<character hex="3F 3D 6F"><unientity>8986</unientity><desc>East Asian ideograph</desc></character>
+<character hex="3F 3E 47"><unientity>5379</unientity><desc>East Asian ideograph</desc></character>
+<character hex="3F 3F 24"><unientity>614E</unientity><desc>East Asian ideograph</desc></character>
+<character hex="3F 40 4F"><unientity>638A</unientity><desc>East Asian ideograph</desc></character>
+<character hex="3F 42 4F"><unientity>E985</unientity><unientityalt>542F</unientityalt><desc>Variant of 27424F which maps to 542F</desc></character>
+<character hex="3F 44 72"><unientity>7881</unientity><desc>East Asian ideograph</desc></character>
+<character hex="3F 45 6D"><unientity>8263</unientity><desc>East Asian ideograph</desc></character>
+<character hex="3F 46 21"><unientity>9A69</unientity><desc>East Asian ideograph</desc></character>
+<character hex="3F 46 29"><unientity>4E97</unientity><desc>East Asian ideograph</desc></character>
+<character hex="3F 46 2B"><unientity>5E30</unientity><desc>East Asian ideograph</desc></character>
+<character hex="3F 47 6F"><unientity>51C8</unientity><desc>East Asian ideograph</desc></character>
+<character hex="3F 49 26"><unientity>6E08</unientity><desc>East Asian ideograph</desc></character>
+<character hex="3F 49 56"><unientity>7832</unientity><desc>East Asian ideograph</desc></character>
+<character hex="3F 4A 28"><unientity>9DF0</unientity><desc>East Asian ideograph</desc></character>
+<character hex="3F 4A 60"><unientity>7266</unientity><desc>East Asian ideograph</desc></character>
+<character hex="3F 4C 3C"><unientity>7582</unientity><desc>East Asian ideograph</desc></character>
+<character hex="3F 51 6D"><unientity>6403</unientity><desc>East Asian ideograph</desc></character>
+<character hex="3F 55 64"><unientity>61DE</unientity><desc>East Asian ideograph</desc></character>
+<character hex="3F 56 31"><unientity>517F</unientity><desc>East Asian ideograph</desc></character>
+<character hex="3F 59 59"><unientity>8276</unientity><desc>East Asian ideograph</desc></character>
+<character hex="3F 5E 60"><unientity>9586</unientity><desc>East Asian ideograph</desc></character>
+<character hex="3F 5F 34"><unientity>E9F9</unientity><desc>East Asian ideograph not in Unicode</desc></character>
+<character hex="3F 5F 35"><unientity>6B9E</unientity><desc>East Asian ideograph</desc></character>
+<character hex="3F 5F 49"><unientity>7431</unientity><desc>East Asian ideograph</desc></character>
+<character hex="3F 61 4C"><unientity>99C5</unientity><desc>East Asian ideograph</desc></character>
+<character hex="3F 61 79"><unientity>5C1F</unientity><desc>East Asian ideograph</desc></character>
+<character hex="45 30 4C"><unientity>69A6</unientity><desc>East Asian ideograph</desc></character>
+<character hex="45 30 51"><unientity>8D30</unientity><desc>East Asian ideograph</desc></character>
+<character hex="45 33 36"><unientity>5B82</unientity><desc>East Asian ideograph</desc></character>
+<character hex="45 34 21"><unientity>5271</unientity><desc>East Asian ideograph</desc></character>
+<character hex="45 36 66"><unientity>5AD0</unientity><desc>East Asian ideograph</desc></character>
+<character hex="45 37 55"><unientity>56AE</unientity><desc>East Asian ideograph</desc></character>
+<character hex="45 37 68"><unientity>5EFB</unientity><desc>East Asian ideograph</desc></character>
+<character hex="45 3D 53"><unientity>5F66</unientity><desc>East Asian ideograph</desc></character>
+<character hex="45 3F 6D"><unientity>52E0</unientity><desc>East Asian ideograph</desc></character>
+<character hex="45 41 46"><unientity>63DB</unientity><desc>East Asian ideograph</desc></character>
+<character hex="45 45 6D"><unientity>6A10</unientity><desc>East Asian ideograph</desc></character>
+<character hex="45 46 2B"><unientity>7688</unientity><desc>East Asian ideograph</desc></character>
+<character hex="45 46 5B"><unientity>6C2F</unientity><desc>East Asian ideograph</desc></character>
+<character hex="45 47 38"><unientity>6CFA</unientity><desc>East Asian ideograph</desc></character>
+<character hex="45 47 74"><unientity>6E15</unientity><desc>East Asian ideograph</desc></character>
+<character hex="45 4B 7A"><unientity>7523</unientity><desc>East Asian ideograph</desc></character>
+<character hex="45 4C 3C"><unientity>7589</unientity><desc>East Asian ideograph</desc></character>
+<character hex="45 4E 43"><unientity>E986</unientity><unientityalt>788C</unientityalt><desc>Variant of 214E43 which maps to 788C</desc></character>
+<character hex="45 4E 75"><unientity>7984</unientity><desc>East Asian ideograph</desc></character>
+<character hex="45 4F 45"><unientity>9896</unientity><desc>East Asian ideograph</desc></character>
+<character hex="45 51 22"><unientity>7D0D</unientity><desc>East Asian ideograph</desc></character>
+<character hex="45 51 64"><unientity>53BF</unientity><desc>East Asian ideograph</desc></character>
+<character hex="45 56 4B"><unientity>E987</unientity><unientityalt>865E</unientityalt><desc>Variant of 21564B which maps to 865E</desc></character>
+<character hex="45 57 46"><unientity>672F</unientity><desc>East Asian ideograph</desc></character>
+<character hex="45 58 37"><unientity>8BA0</unientity><desc>East Asian ideograph</desc></character>
+<character hex="45 58 47"><unientity>E988</unientity><unientityalt>8A25</unientityalt><desc>Variant of 215847 which maps to 8A25</desc></character>
+<character hex="45 5D 3E"><unientity>9485</unientity><desc>East Asian ideograph</desc></character>
+<character hex="45 5E 21"><unientity>953A</unientity><desc>East Asian ideograph</desc></character>
+<character hex="45 60 36"><unientity>97FF</unientity><desc>East Asian ideograph</desc></character>
+<character hex="45 60 4E"><unientity>984F</unientity><desc>East Asian ideograph</desc></character>
+<character hex="45 60 64"><unientity>9963</unientity><desc>East Asian ideograph</desc></character>
+<character hex="45 60 6B"><unientity>98F0</unientity><desc>East Asian ideograph</desc></character>
+<character hex="45 60 76"><unientity>9980</unientity><desc>East Asian ideograph</desc></character>
+<character hex="45 62 60"><unientity>5E7A</unientity><desc>East Asian ideograph</desc></character>
+<character hex="45 63 24"><unientity>9F61</unientity><desc>East Asian ideograph</desc></character>
+<character hex="46 28 4C"><unientity>5ED0</unientity><desc>East Asian ideograph</desc></character>
+<character hex="46 60 74"><unientity>76B2</unientity><desc>East Asian ideograph</desc></character>
+<character hex="47 2C 4D"><unientity>E989</unientity><unientityalt>8801</unientityalt><desc>Variant of 232C4D which maps to 8801</desc></character>
+<character hex="47 34 22"><unientity>8C2A</unientity><desc>East Asian ideograph</desc></character>
+<character hex="47 34 7B"><unientity>8C2B</unientity><desc>East Asian ideograph</desc></character>
+<character hex="47 35 39"><unientity>8B9E</unientity><desc>East Asian ideograph</desc></character>
+<character hex="47 36 6F"><unientity>8D4D</unientity><desc>East Asian ideograph</desc></character>
+<character hex="47 42 36"><unientity>949A</unientity><desc>East Asian ideograph</desc></character>
+<character hex="47 42 70"><unientity>94BC</unientity><desc>East Asian ideograph</desc></character>
+<character hex="47 49 31"><unientity>95F6</unientity><desc>East Asian ideograph</desc></character>
+<character hex="47 4E 5C"><unientity>E98A</unientity><unientityalt>97DE</unientityalt><desc>Variant of 234E5C which maps to 97DE</desc></character>
+<character hex="47 52 22"><unientity>9957</unientity><desc>East Asian ideograph</desc></character>
+<character hex="47 57 7A"><unientity>E98B</unientity><unientityalt>9BD6</unientityalt><desc>Variant of 23577A which maps to 9BD6</desc></character>
+<character hex="47 59 4E"><unientity>9C3A</unientity><desc>East Asian ideograph</desc></character>
+<character hex="4B 30 21"><unientity>58F1</unientity><desc>East Asian ideograph</desc></character>
+<character hex="4B 30 50"><unientity>4E8A</unientity><desc>East Asian ideograph</desc></character>
+<character hex="4B 30 51"><unientity>5F10</unientity><desc>East Asian ideograph</desc></character>
+<character hex="4B 30 52"><unientity>6275</unientity><desc>East Asian ideograph</desc></character>
+<character hex="4B 30 57"><unientity>4E99</unientity><desc>East Asian ideograph</desc></character>
+<character hex="4B 30 6C"><unientity>96E0</unientity><desc>East Asian ideograph</desc></character>
+<character hex="4B 30 6E"><unientity>E98C</unientity><unientityalt>4EE4</unientityalt><desc>Variant of 21306E which maps to 4EE4</desc></character>
+<character hex="4B 30 72"><unientity>4EED</unientity><desc>East Asian ideograph</desc></character>
+<character hex="4B 31 2D"><unientity>4F2B</unientity><desc>East Asian ideograph</desc></character>
+<character hex="4B 31 30"><unientity>4FAB</unientity><desc>East Asian ideograph</desc></character>
+<character hex="4B 31 44"><unientity>E98D</unientity><unientityalt>4F36</unientityalt><desc>Variant of 213144 which maps to 4F36</desc></character>
+<character hex="4B 31 4C"><unientity>5F95</unientity><desc>East Asian ideograph</desc></character>
+<character hex="4B 31 6A"><unientity>723C</unientity><desc>East Asian ideograph</desc></character>
+<character hex="4B 31 78"><unientity>E98E</unientity><unientityalt>5029</unientityalt><desc>Variant of 213178 which maps to 5029</desc></character>
+<character hex="4B 31 7C"><unientity>5024</unientity><desc>East Asian ideograph</desc></character>
+<character hex="4B 32 31"><unientity>4EEE</unientity><desc>East Asian ideograph</desc></character>
+<character hex="4B 32 48"><unientity>E9FA</unientity><desc>East Asian ideograph not in Unicode</desc></character>
+<character hex="4B 32 4E"><unientity>E98F</unientity><unientityalt>50E7</unientityalt><desc>Variant of 21324E which maps to 50E7</desc></character>
+<character hex="4B 32 5F"><unientity>50BB</unientity><desc>East Asian ideograph</desc></character>
+<character hex="4B 33 21"><unientity>5185</unientity><desc>East Asian ideograph</desc></character>
+<character hex="4B 33 22"><unientity>E990</unientity><unientityalt>5168</unientityalt><desc>Variant of 213322 which maps to 5168</desc></character>
+<character hex="4B 33 24"><unientity>E991</unientity><unientityalt>634C</unientityalt><desc>Variant of 2D3324 which maps to 634C</desc></character>
+<character hex="4B 33 3E"><unientity>F92E</unientity><desc>East Asian ideograph</desc></character>
+<character hex="4B 33 51"><unientity>5204</unientity><desc>East Asian ideograph</desc></character>
+<character hex="4B 33 54"><unientity>82C5</unientity><desc>East Asian ideograph</desc></character>
+<character hex="4B 33 55"><unientity>520B</unientity><desc>East Asian ideograph</desc></character>
+<character hex="4B 33 5B"><unientity>522B</unientity><desc>East Asian ideograph</desc></character>
+<character hex="4B 34 21"><unientity>5263</unientity><desc>East Asian ideograph</desc></character>
+<character hex="4B 34 35"><unientity>52B4</unientity><desc>East Asian ideograph</desc></character>
+<character hex="4B 34 36"><unientity>52F2</unientity><desc>East Asian ideograph</desc></character>
+<character hex="4B 34 6B"><unientity>5DF5</unientity><desc>East Asian ideograph</desc></character>
+<character hex="4B 34 74"><unientity>E992</unientity><unientityalt>537F</unientityalt><desc>Variant of 213474 which maps to 537F</desc></character>
+<character hex="4B 35 6A"><unientity>55EC</unientity><desc>East Asian ideograph</desc></character>
+<character hex="4B 35 7B"><unientity>54CC</unientity><desc>East Asian ideograph</desc></character>
+<character hex="4B 36 22"><unientity>8C18</unientity><desc>East Asian ideograph</desc></character>
+<character hex="4B 36 42"><unientity>8BF6</unientity><desc>East Asian ideograph</desc></character>
+<character hex="4B 36 66"><unientity>5A1A</unientity><desc>East Asian ideograph</desc></character>
+<character hex="4B 36 68"><unientity>5358</unientity><desc>East Asian ideograph</desc></character>
+<character hex="4B 37 2C"><unientity>5606</unientity><desc>East Asian ideograph</desc></character>
+<character hex="4B 37 2F"><unientity>5C1C</unientity><desc>East Asian ideograph</desc></character>
+<character hex="4B 37 49"><unientity>E993</unientity><unientityalt>5668</unientityalt><desc>Variant of 213749 which maps to 5668</desc></character>
+<character hex="4B 37 4C"><unientity>5662</unientity><desc>East Asian ideograph</desc></character>
+<character hex="4B 37 58"><unientity>E994</unientity><unientityalt>56A5</unientityalt><desc>Variant of 213758 which maps to 56A5</desc></character>
+<character hex="4B 37 5A"><unientity>53B3</unientity><desc>East Asian ideograph</desc></character>
+<character hex="4B 37 68"><unientity>56D8</unientity><desc>East Asian ideograph</desc></character>
+<character hex="4B 37 6F"><unientity>56FD</unientity><desc>East Asian ideograph</desc></character>
+<character hex="4B 37 72"><unientity>5186</unientity><desc>East Asian ideograph</desc></character>
+<character hex="4B 37 73"><unientity>56E3</unientity><desc>East Asian ideograph</desc></character>
+<character hex="4B 37 74"><unientity>56F3</unientity><desc>East Asian ideograph</desc></character>
+<character hex="4B 38 2E"><unientity>57C0</unientity><desc>East Asian ideograph</desc></character>
+<character hex="4B 38 50"><unientity>E995</unientity><unientityalt>586B</unientityalt><desc>Variant of 213850 which maps to 586B</desc></character>
+<character hex="4B 38 53"><unientity>E9FB</unientity><desc>East Asian ideograph not in Unicode</desc></character>
+<character hex="4B 38 5E"><unientity>5897</unientity><desc>East Asian ideograph</desc></character>
+<character hex="4B 38 64"><unientity>58C7</unientity><desc>East Asian ideograph</desc></character>
+<character hex="4B 38 69"><unientity>5727</unientity><desc>East Asian ideograph</desc></character>
+<character hex="4B 38 6C"><unientity>5841</unientity><desc>East Asian ideograph</desc></character>
+<character hex="4B 38 70"><unientity>58CC</unientity><desc>East Asian ideograph</desc></character>
+<character hex="4B 38 71"><unientity>57BB</unientity><desc>East Asian ideograph</desc></character>
+<character hex="4B 38 7D"><unientity>591B</unientity><desc>East Asian ideograph</desc></character>
+<character hex="4B 39 38"><unientity>5942</unientity><desc>East Asian ideograph</desc></character>
+<character hex="4B 39 3A"><unientity>5F09</unientity><desc>East Asian ideograph</desc></character>
+<character hex="4B 39 3E"><unientity>5965</unientity><desc>East Asian ideograph</desc></character>
+<character hex="4B 39 3F"><unientity>5333</unientity><desc>East Asian ideograph</desc></character>
+<character hex="4B 39 74"><unientity>5B22</unientity><desc>East Asian ideograph</desc></character>
+<character hex="4B 39 7B"><unientity>5A2F</unientity><desc>East Asian ideograph</desc></character>
+<character hex="4B 3A 2F"><unientity>805F</unientity><desc>East Asian ideograph</desc></character>
+<character hex="4B 3A 47"><unientity>88CA</unientity><desc>East Asian ideograph</desc></character>
+<character hex="4B 3A 49"><unientity>5B37</unientity><desc>East Asian ideograph</desc></character>
+<character hex="4B 3B 22"><unientity>51A6</unientity><desc>East Asian ideograph</desc></character>
+<character hex="4B 3B 31"><unientity>5B9F</unientity><desc>East Asian ideograph</desc></character>
+<character hex="4B 3B 37"><unientity>51A9</unientity><desc>East Asian ideograph</desc></character>
+<character hex="4B 3B 43"><unientity>5BFE</unientity><desc>East Asian ideograph</desc></character>
+<character hex="4B 3B 52"><unientity>8132</unientity><desc>East Asian ideograph</desc></character>
+<character hex="4B 3B 61"><unientity>5C64</unientity><desc>East Asian ideograph</desc></character>
+<character hex="4B 3B 67"><unientity>6B67</unientity><desc>East Asian ideograph</desc></character>
+<character hex="4B 3B 79"><unientity>5D8C</unientity><desc>East Asian ideograph</desc></character>
+<character hex="4B 3B 7E"><unientity>5D15</unientity><desc>East Asian ideograph</desc></character>
+<character hex="4B 3C 21"><unientity>5D5C</unientity><desc>East Asian ideograph</desc></character>
+<character hex="4B 3C 23"><unientity>5CE5</unientity><desc>East Asian ideograph</desc></character>
+<character hex="4B 3C 2F"><unientity>5DBA</unientity><desc>East Asian ideograph</desc></character>
+<character hex="4B 3C 32"><unientity>5DD3</unientity><desc>East Asian ideograph</desc></character>
+<character hex="4B 3C 33"><unientity>5DCC</unientity><desc>East Asian ideograph</desc></character>
+<character hex="4B 3C 38"><unientity>949C</unientity><desc>East Asian ideograph</desc></character>
+<character hex="4B 3C 53"><unientity>5E2F</unientity><desc>East Asian ideograph</desc></character>
+<character hex="4B 3C 5E"><unientity>5E64</unientity><desc>East Asian ideograph</desc></character>
+<character hex="4B 3D 24"><unientity>53A6</unientity><desc>East Asian ideograph</desc></character>
+<character hex="4B 3D 27"><unientity>5EC3</unientity><desc>East Asian ideograph</desc></character>
+<character hex="4B 3D 2A"><unientity>5EE3</unientity><desc>East Asian ideograph</desc></character>
+<character hex="4B 3D 2C"><unientity>53B0</unientity><desc>East Asian ideograph</desc></character>
+<character hex="4B 3D 2F"><unientity>5EF0</unientity><desc>East Asian ideograph</desc></character>
+<character hex="4B 3D 4B"><unientity>5F3E</unientity><desc>East Asian ideograph</desc></character>
+<character hex="4B 3D 4C"><unientity>E996</unientity><unientityalt>5F25</unientityalt><desc>Variant of 273D4C which maps to 5F25</desc></character>
+<character hex="4B 3D 5C"><unientity>5F83</unientity><desc>East Asian ideograph</desc></character>
+<character hex="4B 3D 67"><unientity>E997</unientity><unientityalt>5F84</unientityalt><desc>Variant of 273D67 which maps to 5F84</desc></character>
+<character hex="4B 3E 2A"><unientity>6035</unientity><desc>East Asian ideograph</desc></character>
+<character hex="4B 3E 40"><unientity>6046</unientity><desc>East Asian ideograph</desc></character>
+<character hex="4B 3E 5B"><unientity>60C5</unientity><desc>East Asian ideograph</desc></character>
+<character hex="4B 3E 7E"><unientity>60A9</unientity><desc>East Asian ideograph</desc></character>
+<character hex="4B 3F 40"><unientity>E998</unientity><unientityalt>618E</unientityalt><desc>Variant of 213F40 which maps to 618E</desc></character>
+<character hex="4B 3F 4A"><unientity>5FDC</unientity><desc>East Asian ideograph</desc></character>
+<character hex="4B 3F 4B"><unientity>E999</unientity><unientityalt>601C</unientityalt><desc>Variant of 273F4B which maps to 601C</desc></character>
+<character hex="4B 3F 50"><unientity>E99A</unientity><unientityalt>61CA</unientityalt><desc>Variant of 213F50 which maps to 61CA</desc></character>
+<character hex="4B 3F 51"><unientity>61D1</unientity><desc>East Asian ideograph</desc></character>
+<character hex="4B 3F 53"><unientity>61F2</unientity><desc>East Asian ideograph</desc></character>
+<character hex="4B 3F 74"><unientity>623B</unientity><desc>East Asian ideograph</desc></character>
+<character hex="4B 40 3D"><unientity>62DD</unientity><desc>East Asian ideograph</desc></character>
+<character hex="4B 40 46"><unientity>629C</unientity><desc>East Asian ideograph</desc></character>
+<character hex="4B 40 49"><unientity>62D0</unientity><desc>East Asian ideograph</desc></character>
+<character hex="4B 40 53"><unientity>627A</unientity><desc>East Asian ideograph</desc></character>
+<character hex="4B 40 66"><unientity>62F4</unientity><desc>East Asian ideograph</desc></character>
+<character hex="4B 41 2A"><unientity>6323</unientity><desc>East Asian ideograph</desc></character>
+<character hex="4B 41 35"><unientity>6368</unientity><desc>East Asian ideograph</desc></character>
+<character hex="4B 41 46"><unientity>6362</unientity><desc>East Asian ideograph</desc></character>
+<character hex="4B 41 47"><unientity>633F</unientity><desc>East Asian ideograph</desc></character>
+<character hex="4B 42 35"><unientity>6442</unientity><desc>East Asian ideograph</desc></character>
+<character hex="4B 42 36"><unientity>643A</unientity><desc>East Asian ideograph</desc></character>
+<character hex="4B 42 3A"><unientity>64B9</unientity><desc>East Asian ideograph</desc></character>
+<character hex="4B 43 39"><unientity>6674</unientity><desc>East Asian ideograph</desc></character>
+<character hex="4B 43 47"><unientity>66A8</unientity><desc>East Asian ideograph</desc></character>
+<character hex="4B 43 4D"><unientity>663F</unientity><desc>East Asian ideograph</desc></character>
+<character hex="4B 43 52"><unientity>66F5</unientity><desc>East Asian ideograph</desc></character>
+<character hex="4B 43 58"><unientity>66FD</unientity><desc>East Asian ideograph</desc></character>
+<character hex="4B 44 2D"><unientity>67A9</unientity><desc>East Asian ideograph</desc></character>
+<character hex="4B 44 56"><unientity>6813</unientity><desc>East Asian ideograph</desc></character>
+<character hex="4B 44 76"><unientity>685F</unientity><desc>East Asian ideograph</desc></character>
+<character hex="4B 45 34"><unientity>E99B</unientity><unientityalt>6994</unientityalt><desc>Variant of 214534 which maps to 6994</desc></character>
+<character hex="4B 45 37"><unientity>6804</unientity><desc>East Asian ideograph</desc></character>
+<character hex="4B 45 44"><unientity>69D8</unientity><desc>East Asian ideograph</desc></character>
+<character hex="4B 45 45"><unientity>6982</unientity><desc>East Asian ideograph</desc></character>
+<character hex="4B 45 53"><unientity>6955</unientity><desc>East Asian ideograph</desc></character>
+<character hex="4B 45 56"><unientity>6A2A</unientity><desc>East Asian ideograph</desc></character>
+<character hex="4B 45 59"><unientity>9792</unientity><desc>East Asian ideograph</desc></character>
+<character hex="4B 45 61"><unientity>691C</unientity><desc>East Asian ideograph</desc></character>
+<character hex="4B 45 69"><unientity>6A71</unientity><desc>East Asian ideograph</desc></character>
+<character hex="4B 45 6C"><unientity>E99C</unientity><unientityalt>6ADB</unientityalt><desc>Variant of 21456C which maps to 6ADB</desc></character>
+<character hex="4B 45 6D"><unientity>823B</unientity><desc>East Asian ideograph</desc></character>
+<character hex="4B 45 6F"><unientity>685C</unientity><desc>East Asian ideograph</desc></character>
+<character hex="4B 45 70"><unientity>6A29</unientity><desc>East Asian ideograph</desc></character>
+<character hex="4B 46 21"><unientity>6B53</unientity><desc>East Asian ideograph</desc></character>
+<character hex="4B 46 2A"><unientity>6B74</unientity><desc>East Asian ideograph</desc></character>
+<character hex="4B 46 2E"><unientity>6B81</unientity><desc>East Asian ideograph</desc></character>
+<character hex="4B 46 38"><unientity>6BB1</unientity><desc>East Asian ideograph</desc></character>
+<character hex="4B 46 55"><unientity>6C17</unientity><desc>East Asian ideograph</desc></character>
+<character hex="4B 46 5A"><unientity>6C32</unientity><desc>East Asian ideograph</desc></character>
+<character hex="4B 46 76"><unientity>6C89</unientity><desc>East Asian ideograph</desc></character>
+<character hex="4B 47 41"><unientity>51BD</unientity><desc>East Asian ideograph</desc></character>
+<character hex="4B 47 59"><unientity>6D99</unientity><desc>East Asian ideograph</desc></character>
+<character hex="4B 47 61"><unientity>6E05</unientity><desc>East Asian ideograph</desc></character>
+<character hex="4B 47 67"><unientity>E99D</unientity><unientityalt>6DB5</unientityalt><desc>Variant of 214767 which maps to 6DB5</desc></character>
+<character hex="4B 47 6C"><unientity>51C5</unientity><desc>East Asian ideograph</desc></character>
+<character hex="4B 48 35"><unientity>6DA3</unientity><desc>East Asian ideograph</desc></character>
+<character hex="4B 48 46"><unientity>78C6</unientity><desc>East Asian ideograph</desc></character>
+<character hex="4B 48 4A"><unientity>6E13</unientity><desc>East Asian ideograph</desc></character>
+<character hex="4B 48 4B"><unientity>51D6</unientity><desc>East Asian ideograph</desc></character>
+<character hex="4B 48 4C"><unientity>6F91</unientity><desc>East Asian ideograph</desc></character>
+<character hex="4B 48 57"><unientity>6F22</unientity><desc>East Asian ideograph</desc></character>
+<character hex="4B 48 58"><unientity>6E80</unientity><desc>East Asian ideograph</desc></character>
+<character hex="4B 48 5F"><unientity>E99E</unientity><unientityalt>6EDE</unientityalt><desc>Variant of 27485F which maps to 6EDE</desc></character>
+<character hex="4B 48 66"><unientity>6E89</unientity><desc>East Asian ideograph</desc></character>
+<character hex="4B 48 74"><unientity>6FF3</unientity><desc>East Asian ideograph</desc></character>
+<character hex="4B 49 21"><unientity>6CA2</unientity><desc>East Asian ideograph</desc></character>
+<character hex="4B 49 25"><unientity>E99F</unientity><unientityalt>6FB3</unientityalt><desc>Variant of 214925 which maps to 6FB3</desc></character>
+<character hex="4B 49 2B"><unientity>6FEB</unientity><desc>East Asian ideograph</desc></character>
+<character hex="4B 49 2E"><unientity>6E0B</unientity><desc>East Asian ideograph</desc></character>
+<character hex="4B 49 31"><unientity>6E16</unientity><desc>East Asian ideograph</desc></character>
+<character hex="4B 49 37"><unientity>56A0</unientity><desc>East Asian ideograph</desc></character>
+<character hex="4B 49 40"><unientity>6F45</unientity><desc>East Asian ideograph</desc></character>
+<character hex="4B 49 47"><unientity>7AC3</unientity><desc>East Asian ideograph</desc></character>
+<character hex="4B 49 6A"><unientity>932C</unientity><desc>East Asian ideograph</desc></character>
+<character hex="4B 49 6B"><unientity>83F8</unientity><desc>East Asian ideograph</desc></character>
+<character hex="4B 49 73"><unientity>7115</unientity><desc>East Asian ideograph</desc></character>
+<character hex="4B 49 75"><unientity>6427</unientity><desc>East Asian ideograph</desc></character>
+<character hex="4B 49 77"><unientity>7188</unientity><desc>East Asian ideograph</desc></character>
+<character hex="4B 4A 2E"><unientity>55B6</unientity><desc>East Asian ideograph</desc></character>
+<character hex="4B 4A 38"><unientity>71D7</unientity><desc>East Asian ideograph</desc></character>
+<character hex="4B 4A 3E"><unientity>7235</unientity><desc>East Asian ideograph</desc></character>
+<character hex="4B 4A 45"><unientity>5C13</unientity><desc>East Asian ideograph</desc></character>
+<character hex="4B 4A 62"><unientity>72A0</unientity><desc>East Asian ideograph</desc></character>
+<character hex="4B 4A 74"><unientity>E9A0</unientity><unientityalt>731C</unientityalt><desc>Variant of 214A74 which maps to 731C</desc></character>
+<character hex="4B 4A 78"><unientity>72F0</unientity><desc>East Asian ideograph</desc></character>
+<character hex="4B 4B 2B"><unientity>7363</unientity><desc>East Asian ideograph</desc></character>
+<character hex="4B 4B 2C"><unientity>731F</unientity><desc>East Asian ideograph</desc></character>
+<character hex="4B 4B 3E"><unientity>F9AD</unientity><desc>East Asian ideograph</desc></character>
+<character hex="4B 4B 63"><unientity>749C</unientity><desc>East Asian ideograph</desc></character>
+<character hex="4B 4B 71"><unientity>E9A1</unientity><unientityalt>7F3E</unientityalt><desc>Variant of 2D4B71 which maps to 7F3E</desc></character>
+<character hex="4B 4B 77"><unientity>4EC0</unientity><desc>East Asian ideograph</desc></character>
+<character hex="4B 4C 36"><unientity>7575</unientity><desc>East Asian ideograph</desc></character>
+<character hex="4B 4C 3C"><unientity>7573</unientity><desc>East Asian ideograph</desc></character>
+<character hex="4B 4C 51"><unientity>75CA</unientity><desc>East Asian ideograph</desc></character>
+<character hex="4B 4C 5B"><unientity>75F3</unientity><desc>East Asian ideograph</desc></character>
+<character hex="4B 4C 67"><unientity>E9A2</unientity><unientityalt>761F</unientityalt><desc>Variant of 214C67 which maps to 761F</desc></character>
+<character hex="4B 4C 79"><unientity>7672</unientity><desc>East Asian ideograph</desc></character>
+<character hex="4B 4D 41"><unientity>862F</unientity><desc>East Asian ideograph</desc></character>
+<character hex="4B 4D 45"><unientity>E9A3</unientity><unientityalt>76F4</unientityalt><desc>Variant of 214D45 which maps to 76F4</desc></character>
+<character hex="4B 4D 56"><unientity>8846</unientity><desc>East Asian ideograph</desc></character>
+<character hex="4B 4D 59"><unientity>E9A4</unientity><unientityalt>775B</unientityalt><desc>Variant of 214D59 which maps to 775B</desc></character>
+<character hex="4B 4D 73"><unientity>66B8</unientity><desc>East Asian ideograph</desc></character>
+<character hex="4B 4D 7B"><unientity>E9A5</unientity><unientityalt>77D7</unientityalt><desc>Variant of 214D7B which maps to 77D7</desc></character>
+<character hex="4B 4E 21"><unientity>7B36</unientity><desc>East Asian ideograph</desc></character>
+<character hex="4B 4E 37"><unientity>7814</unientity><desc>East Asian ideograph</desc></character>
+<character hex="4B 4E 39"><unientity>5CFA</unientity><desc>East Asian ideograph</desc></character>
+<character hex="4B 4E 56"><unientity>78FA</unientity><desc>East Asian ideograph</desc></character>
+<character hex="4B 4E 5B"><unientity>783F</unientity><desc>East Asian ideograph</desc></character>
+<character hex="4B 4E 67"><unientity>79D8</unientity><desc>East Asian ideograph</desc></character>
+<character hex="4B 4E 7B"><unientity>E9A6</unientity><unientityalt>7985</unientityalt><desc>Variant of 274E7B which maps to 7985</desc></character>
+<character hex="4B 4F 29"><unientity>7A50</unientity><desc>East Asian ideograph</desc></character>
+<character hex="4B 4F 3C"><unientity>E9A7</unientity><unientityalt>79F0</unientityalt><desc>Variant of 274F3C which maps to 79F0</desc></character>
+<character hex="4B 4F 43"><unientity>7A32</unientity><desc>East Asian ideograph</desc></character>
+<character hex="4B 4F 4C"><unientity>7A4F</unientity><desc>East Asian ideograph</desc></character>
+<character hex="4B 4F 7B"><unientity>7B7A</unientity><desc>East Asian ideograph</desc></character>
+<character hex="4B 50 36"><unientity>7C14</unientity><desc>East Asian ideograph</desc></character>
+<character hex="4B 50 3B"><unientity>7C12</unientity><desc>East Asian ideograph</desc></character>
+<character hex="4B 50 44"><unientity>E9A8</unientity><unientityalt>7C27</unientityalt><desc>Variant of 215044 which maps to 7C27</desc></character>
+<character hex="4B 50 52"><unientity>7C56</unientity><desc>East Asian ideograph</desc></character>
+<character hex="4B 50 61"><unientity>7CBE</unientity><desc>East Asian ideograph</desc></character>
+<character hex="4B 50 6C"><unientity>7CAB</unientity><desc>East Asian ideograph</desc></character>
+<character hex="4B 51 3B"><unientity>7CF8</unientity><desc>East Asian ideograph</desc></character>
+<character hex="4B 51 54"><unientity>7DF4</unientity><desc>East Asian ideograph</desc></character>
+<character hex="4B 51 5A"><unientity>7E01</unientity><desc>East Asian ideograph</desc></character>
+<character hex="4B 51 64"><unientity>770C</unientity><desc>East Asian ideograph</desc></character>
+<character hex="4B 51 6A"><unientity>7EF7</unientity><desc>East Asian ideograph</desc></character>
+<character hex="4B 51 6D"><unientity>7DCF</unientity><desc>East Asian ideograph</desc></character>
+<character hex="4B 51 6E"><unientity>7E26</unientity><desc>East Asian ideograph</desc></character>
+<character hex="4B 51 76"><unientity>7E04</unientity><desc>East Asian ideograph</desc></character>
+<character hex="4B 51 79"><unientity>7F0B</unientity><desc>East Asian ideograph</desc></character>
+<character hex="4B 51 7E"><unientity>7E92</unientity><desc>East Asian ideograph</desc></character>
+<character hex="4B 52 21"><unientity>7D9A</unientity><desc>East Asian ideograph</desc></character>
+<character hex="4B 52 23"><unientity>7E4A</unientity><desc>East Asian ideograph</desc></character>
+<character hex="4B 52 27"><unientity>6B20</unientity><desc>East Asian ideograph</desc></character>
+<character hex="4B 52 2B"><unientity>7F36</unientity><desc>East Asian ideograph</desc></character>
+<character hex="4B 52 38"><unientity>7F87</unientity><desc>East Asian ideograph</desc></character>
+<character hex="4B 52 3E"><unientity>E9A9</unientity><unientityalt>7F9A</unientityalt><desc>Variant of 21523E which maps to 7F9A</desc></character>
+<character hex="4B 52 47"><unientity>7FAE</unientity><desc>East Asian ideograph</desc></character>
+<character hex="4B 52 4E"><unientity>7FCE</unientity><desc>East Asian ideograph</desc></character>
+<character hex="4B 52 5A"><unientity>7FFA</unientity><desc>East Asian ideograph</desc></character>
+<character hex="4B 52 5B"><unientity>E9AA</unientity><unientityalt>66DC</unientityalt><desc>Variant of 39525B which maps to 66DC</desc></character>
+<character hex="4B 52 5C"><unientity>8002</unientity><desc>East Asian ideograph</desc></character>
+<character hex="4B 52 6E"><unientity>E9AB</unientity><unientityalt>8046</unientityalt><desc>Variant of 21526E which maps to 8046</desc></character>
+<character hex="4B 52 77"><unientity>8068</unientity><desc>East Asian ideograph</desc></character>
+<character hex="4B 52 7C"><unientity>8080</unientity><desc>East Asian ideograph</desc></character>
+<character hex="4B 53 3B"><unientity>695C</unientity><desc>East Asian ideograph</desc></character>
+<character hex="4B 53 61"><unientity>E923</unientity><desc>Duplicate simplified ideograph</desc></character>
+<character hex="4B 53 65"><unientity>8133</unientity><desc>East Asian ideograph</desc></character>
+<character hex="4B 53 7D"><unientity>9ACC</unientity><desc>East Asian ideograph</desc></character>
+<character hex="4B 54 22"><unientity>81D3</unientity><desc>East Asian ideograph</desc></character>
+<character hex="4B 54 28"><unientity>E9AC</unientity><unientityalt>81ED</unientityalt><desc>Variant of 215428 which maps to 81ED</desc></character>
+<character hex="4B 54 34"><unientity>6319</unientity><desc>East Asian ideograph</desc></character>
+<character hex="4B 54 37"><unientity>820E</unientity><desc>East Asian ideograph</desc></character>
+<character hex="4B 54 6D"><unientity>E9AD</unientity><unientityalt>82D3</unientityalt><desc>Variant of 21546D which maps to 82D3</desc></character>
+<character hex="4B 55 21"><unientity>8332</unientity><desc>East Asian ideograph</desc></character>
+<character hex="4B 55 2C"><unientity>8392</unientity><desc>East Asian ideograph</desc></character>
+<character hex="4B 55 3A"><unientity>E9AE</unientity><unientityalt>83C1</unientityalt><desc>Variant of 21553A which maps to 83C1</desc></character>
+<character hex="4B 55 3F"><unientity>E9AF</unientity><unientityalt>83BD</unientityalt><desc>Variant of 21553F which maps to 83BD</desc></character>
+<character hex="4B 55 42"><unientity>8420</unientity><desc>East Asian ideograph</desc></character>
+<character hex="4B 55 64"><unientity>77C7</unientity><desc>East Asian ideograph</desc></character>
+<character hex="4B 56 29"><unientity>85CD</unientity><desc>East Asian ideograph</desc></character>
+<character hex="4B 56 2B"><unientity>8535</unientity><desc>East Asian ideograph</desc></character>
+<character hex="4B 56 31"><unientity>82B8</unientity><desc>East Asian ideograph</desc></character>
+<character hex="4B 56 32"><unientity>7C54</unientity><desc>East Asian ideograph</desc></character>
+<character hex="4B 56 3A"><unientity>E9B0</unientity><unientityalt>82A6</unientityalt><desc>Variant of 27563A which maps to 82A6</desc></character>
+<character hex="4B 56 3F"><unientity>6A98</unientity><desc>East Asian ideograph</desc></character>
+<character hex="4B 56 47"><unientity>51E6</unientity><desc>East Asian ideograph</desc></character>
+<character hex="4B 56 6A"><unientity>E9B1</unientity><unientityalt>8708</unientityalt><desc>Variant of 21566A which maps to 8708</desc></character>
+<character hex="4B 56 71"><unientity>E9B2</unientity><unientityalt>873B</unientityalt><desc>Variant of 215671 which maps to 873B</desc></character>
+<character hex="4B 57 24"><unientity>86CD</unientity><desc>East Asian ideograph</desc></character>
+<character hex="4B 57 36"><unientity>877F</unientity><desc>East Asian ideograph</desc></character>
+<character hex="4B 57 40"><unientity>8827</unientity><desc>East Asian ideograph</desc></character>
+<character hex="4B 57 46"><unientity>8853</unientity><desc>East Asian ideograph</desc></character>
+<character hex="4B 57 6C"><unientity>523E</unientity><desc>East Asian ideograph</desc></character>
+<character hex="4B 57 6F"><unientity>E9B3</unientity><unientityalt>8910</unientityalt><desc>Variant of 21576F which maps to 8910</desc></character>
+<character hex="4B 57 73"><unientity>7ED4</unientity><desc>East Asian ideograph</desc></character>
+<character hex="4B 57 7E"><unientity>7E7F</unientity><desc>East Asian ideograph</desc></character>
+<character hex="4B 58 24"><unientity>897E</unientity><desc>East Asian ideograph</desc></character>
+<character hex="4B 58 26"><unientity>E9B4</unientity><unientityalt>8983</unientityalt><desc>Variant of 215826 which maps to 8983</desc></character>
+<character hex="4B 58 30"><unientity>899A</unientity><desc>East Asian ideograph</desc></character>
+<character hex="4B 58 32"><unientity>89B3</unientity><desc>East Asian ideograph</desc></character>
+<character hex="4B 58 61"><unientity>4F89</unientity><desc>East Asian ideograph</desc></character>
+<character hex="4B 58 71"><unientity>8AA4</unientity><desc>East Asian ideograph</desc></character>
+<character hex="4B 58 7A"><unientity>8ACB</unientity><desc>East Asian ideograph</desc></character>
+<character hex="4B 59 36"><unientity>8B20</unientity><desc>East Asian ideograph</desc></character>
+<character hex="4B 59 46"><unientity>8A33</unientity><desc>East Asian ideograph</desc></character>
+<character hex="4B 59 4A"><unientity>8AAD</unientity><desc>East Asian ideograph</desc></character>
+<character hex="4B 59 4B"><unientity>5909</unientity><desc>East Asian ideograph</desc></character>
+<character hex="4B 59 59"><unientity>8273</unientity><desc>East Asian ideograph</desc></character>
+<character hex="4B 59 63"><unientity>734F</unientity><desc>East Asian ideograph</desc></character>
+<character hex="4B 59 64"><unientity>72E2</unientity><desc>East Asian ideograph</desc></character>
+<character hex="4B 59 73"><unientity>8D2E</unientity><desc>East Asian ideograph</desc></character>
+<character hex="4B 5A 23"><unientity>621D</unientity><desc>East Asian ideograph</desc></character>
+<character hex="4B 5A 31"><unientity>8CCE</unientity><desc>East Asian ideograph</desc></character>
+<character hex="4B 5A 3B"><unientity>8D08</unientity><desc>East Asian ideograph</desc></character>
+<character hex="4B 5A 68"><unientity>E9B5</unientity><unientityalt>8DF5</unientityalt><desc>Variant of 275A68 which maps to 8DF5</desc></character>
+<character hex="4B 5A 7E"><unientity>5C69</unientity><desc>East Asian ideograph</desc></character>
+<character hex="4B 5B 29"><unientity>8E8D</unientity><desc>East Asian ideograph</desc></character>
+<character hex="4B 5B 46"><unientity>8F0C</unientity><desc>East Asian ideograph</desc></character>
+<character hex="4B 5B 52"><unientity>8F42</unientity><desc>East Asian ideograph</desc></character>
+<character hex="4B 5B 55"><unientity>8EE2</unientity><desc>East Asian ideograph</desc></character>
+<character hex="4B 5B 58"><unientity>8EE3</unientity><desc>East Asian ideograph</desc></character>
+<character hex="4B 5B 5E"><unientity>5F01</unientity><desc>East Asian ideograph</desc></character>
+<character hex="4B 5C 32"><unientity>9038</unientity><desc>East Asian ideograph</desc></character>
+<character hex="4B 5C 39"><unientity>9039</unientity><desc>East Asian ideograph</desc></character>
+<character hex="4B 5C 47"><unientity>9059</unientity><desc>East Asian ideograph</desc></character>
+<character hex="4B 5C 50"><unientity>9045</unientity><desc>East Asian ideograph</desc></character>
+<character hex="4B 5C 54"><unientity>E924</unientity><desc>Duplicate simplified ideograph</desc></character>
+<character hex="4B 5C 5B"><unientity>8FBA</unientity><desc>East Asian ideograph</desc></character>
+<character hex="4B 5C 5E"><unientity>961D</unientity><desc>East Asian ideograph</desc></character>
+<character hex="4B 5C 72"><unientity>E9B6</unientity><unientityalt>9119</unientityalt><desc>Variant of 215C72 which maps to 9119</desc></character>
+<character hex="4B 5C 77"><unientity>9139</unientity><desc>East Asian ideograph</desc></character>
+<character hex="4B 5D 2B"><unientity>9162</unientity><desc>East Asian ideograph</desc></character>
+<character hex="4B 5D 34"><unientity>91B8</unientity><desc>East Asian ideograph</desc></character>
+<character hex="4B 5D 36"><unientity>91C6</unientity><desc>East Asian ideograph</desc></character>
+<character hex="4B 5D 38"><unientity>91C8</unientity><desc>East Asian ideograph</desc></character>
+<character hex="4B 5D 42"><unientity>91E1</unientity><desc>East Asian ideograph</desc></character>
+<character hex="4B 5D 58"><unientity>9234</unientity><desc>East Asian ideograph</desc></character>
+<character hex="4B 5D 65"><unientity>8217</unientity><desc>East Asian ideograph</desc></character>
+<character hex="4B 5D 70"><unientity>92AD</unientity><desc>East Asian ideograph</desc></character>
+<character hex="4B 5E 27"><unientity>93AD</unientity><desc>East Asian ideograph</desc></character>
+<character hex="4B 5E 3D"><unientity>9421</unientity><desc>East Asian ideograph</desc></character>
+<character hex="4B 5E 3F"><unientity>922C</unientity><desc>East Asian ideograph</desc></character>
+<character hex="4B 5E 5D"><unientity>95D4</unientity><desc>East Asian ideograph</desc></character>
+<character hex="4B 5E 69"><unientity>95A2</unientity><desc>East Asian ideograph</desc></character>
+<character hex="4B 5E 6C"><unientity>E925</unientity><desc>Duplicate simplified ideograph</desc></character>
+<character hex="4B 5F 30"><unientity>E9B7</unientity><unientityalt>9686</unientityalt><desc>Variant of 215F30 which maps to 9686</desc></character>
+<character hex="4B 5F 35"><unientity>6B92</unientity><desc>East Asian ideograph</desc></character>
+<character hex="4B 5F 3A"><unientity>967A</unientity><desc>East Asian ideograph</desc></character>
+<character hex="4B 5F 49"><unientity>51CB</unientity><desc>East Asian ideograph</desc></character>
+<character hex="4B 5F 4C"><unientity>9D8F</unientity><desc>East Asian ideograph</desc></character>
+<character hex="4B 5F 50"><unientity>96E3</unientity><desc>East Asian ideograph</desc></character>
+<character hex="4B 5F 58"><unientity>F9B2</unientity><desc>East Asian ideograph</desc></character>
+<character hex="4B 5F 62"><unientity>7668</unientity><desc>East Asian ideograph</desc></character>
+<character hex="4B 5F 6F"><unientity>970A</unientity><desc>East Asian ideograph</desc></character>
+<character hex="4B 5F 70"><unientity>9752</unientity><desc>East Asian ideograph</desc></character>
+<character hex="4B 5F 71"><unientity>9756</unientity><desc>East Asian ideograph</desc></character>
+<character hex="4B 5F 72"><unientity>975B</unientity><desc>East Asian ideograph</desc></character>
+<character hex="4B 5F 73"><unientity>E9B8</unientity><unientityalt>975C</unientityalt><desc>Variant of 215F73 which maps to 975C</desc></character>
+<character hex="4B 60 2D"><unientity>9771</unientity><desc>East Asian ideograph</desc></character>
+<character hex="4B 60 44"><unientity>9818</unientity><desc>East Asian ideograph</desc></character>
+<character hex="4B 60 48"><unientity>981A</unientity><desc>East Asian ideograph</desc></character>
+<character hex="4B 60 53"><unientity>985E</unientity><desc>East Asian ideograph</desc></character>
+<character hex="4B 60 6F"><unientity>991D</unientity><desc>East Asian ideograph</desc></character>
+<character hex="4B 61 22"><unientity>994B</unientity><desc>East Asian ideograph</desc></character>
+<character hex="4B 61 30"><unientity>99C4</unientity><desc>East Asian ideograph</desc></character>
+<character hex="4B 61 3F"><unientity>9A08</unientity><desc>East Asian ideograph</desc></character>
+<character hex="4B 61 45"><unientity>9A12</unientity><desc>East Asian ideograph</desc></character>
+<character hex="4B 61 47"><unientity>99C6</unientity><desc>East Asian ideograph</desc></character>
+<character hex="4B 61 4D"><unientity>9A13</unientity><desc>East Asian ideograph</desc></character>
+<character hex="4B 61 59"><unientity>81B8</unientity><desc>East Asian ideograph</desc></character>
+<character hex="4B 61 5F"><unientity>9AEA</unientity><desc>East Asian ideograph</desc></character>
+<character hex="4B 61 67"><unientity>95D8</unientity><desc>East Asian ideograph</desc></character>
+<character hex="4B 61 68"><unientity>9599</unientity><desc>East Asian ideograph</desc></character>
+<character hex="4B 62 3B"><unientity>9D12</unientity><desc>East Asian ideograph</desc></character>
+<character hex="4B 62 47"><unientity>9D2C</unientity><desc>East Asian ideograph</desc></character>
+<character hex="4B 62 4F"><unientity>9D49</unientity><desc>East Asian ideograph</desc></character>
+<character hex="4B 62 58"><unientity>68BA</unientity><desc>East Asian ideograph</desc></character>
+<character hex="4B 62 5C"><unientity>E9B9</unientity><unientityalt>9EB8</unientityalt><desc>Variant of 27625C which maps to 9EB8</desc></character>
+<character hex="4B 62 60"><unientity>9EBD</unientity><desc>East Asian ideograph</desc></character>
+<character hex="4B 62 66"><unientity>9ED2</unientity><desc>East Asian ideograph</desc></character>
+<character hex="4B 62 68"><unientity>9ED9</unientity><desc>East Asian ideograph</desc></character>
+<character hex="4B 62 78"><unientity>9F21</unientity><desc>East Asian ideograph</desc></character>
+<character hex="4B 63 24"><unientity>9F62</unientity><desc>East Asian ideograph</desc></character>
+<character hex="4B 64 55"><unientity>4EB6</unientity><desc>East Asian ideography</desc></character>
+<character hex="4B 66 37"><unientity>4FE3</unientity><desc>East Asian ideograph</desc></character>
+<character hex="4B 68 2E"><unientity>4EC2</unientity><desc>East Asian ideograph</desc></character>
+<character hex="4B 6A 22"><unientity>7F83</unientity><desc>East Asian ideograph</desc></character>
+<character hex="4B 6A 26"><unientity>6C8D</unientity><desc>East Asian ideograph</desc></character>
+<character hex="4B 74 21"><unientity>F9A9</unientity><desc>East Asian ideograph</desc></character>
+<character hex="4B 75 77"><unientity>57D3</unientity><desc>East Asian ideograph</desc></character>
+<character hex="4B 76 3D"><unientity>E9BA</unientity><unientityalt>57F4</unientityalt><desc>Variant of 21763D which maps to 57F4</desc></character>
+<character hex="4B 78 74"><unientity>590A</unientity><desc>East Asian ideograph</desc></character>
+<character hex="4B 79 54"><unientity>5968</unientity><desc>East Asian ideograph</desc></character>
+<character hex="4B 7E 6A"><unientity>E9BB</unientity><unientityalt>5BC3</unientityalt><desc>Variant of 217E6A which maps to 5BC3</desc></character>
+<character hex="4C 23 30"><unientity>5C53</unientity><desc>East Asian ideograph</desc></character>
+<character hex="4C 23 3F"><unientity>5C76</unientity><desc>East Asian ideograph</desc></character>
+<character hex="4C 25 32"><unientity>5D5B</unientity><desc>East Asian ideograph</desc></character>
+<character hex="4C 25 39"><unientity>5D73</unientity><desc>East Asian ideograph</desc></character>
+<character hex="4C 28 4C"><unientity>53A9</unientity><desc>East Asian ideograph</desc></character>
+<character hex="4C 28 67"><unientity>5EDB</unientity><desc>East Asian ideograph</desc></character>
+<character hex="4C 29 62"><unientity>E9BC</unientity><unientityalt>5F4D</unientityalt><desc>Variant of 222962 which maps to 5F4D</desc></character>
+<character hex="4C 2F 61"><unientity>622C</unientity><desc>East Asian ideograph</desc></character>
+<character hex="4C 34 74"><unientity>631D</unientity><desc>East Asian ideograph</desc></character>
+<character hex="4C 35 4A"><unientity>64B8</unientity><desc>East Asian ideograph</desc></character>
+<character hex="4C 37 44"><unientity>65D9</unientity><desc>East Asian ideograph</desc></character>
+<character hex="4C 3A 33"><unientity>E9BD</unientity><unientityalt>80AD</unientityalt><desc>Variant of 2E3A33 which maps to 80AD</desc></character>
+<character hex="4C 3A 55"><unientity>6741</unientity><desc>East Asian ideograph</desc></character>
+<character hex="4C 3A 5B"><unientity>6859</unientity><desc>East Asian ideograph</desc></character>
+<character hex="4C 3B 22"><unientity>6860</unientity><desc>East Asian ideograph</desc></character>
+<character hex="4C 3B 31"><unientity>6798</unientity><desc>East Asian ideograph</desc></character>
+<character hex="4C 3B 60"><unientity>6764</unientity><desc>East Asian ideograph</desc></character>
+<character hex="4C 3F 68"><unientity>69C7</unientity><desc>East Asian ideograph</desc></character>
+<character hex="4C 3F 7A"><unientity>6922</unientity><desc>East Asian ideograph</desc></character>
+<character hex="4C 41 46"><unientity>8538</unientity><desc>East Asian ideograph</desc></character>
+<character hex="4C 41 77"><unientity>8223</unientity><desc>East Asian ideograph</desc></character>
+<character hex="4C 43 33"><unientity>6AAA</unientity><desc>East Asian ideograph</desc></character>
+<character hex="4C 43 39"><unientity>69DE</unientity><desc>East Asian ideograph</desc></character>
+<character hex="4C 43 3F"><unientity>6A65</unientity><desc>East Asian ideograph</desc></character>
+<character hex="4C 43 45"><unientity>67A6</unientity><desc>East Asian ideograph</desc></character>
+<character hex="4C 43 59"><unientity>6B05</unientity><desc>East Asian ideograph</desc></character>
+<character hex="4C 44 46"><unientity>6B4E</unientity><desc>East Asian ideograph</desc></character>
+<character hex="4C 47 6E"><unientity>6CAD</unientity><desc>East Asian ideograph</desc></character>
+<character hex="4C 4C 35"><unientity>6E0C</unientity><desc>East Asian ideograph</desc></character>
+<character hex="4C 4D 3D"><unientity>6F62</unientity><desc>East Asian ideograph</desc></character>
+<character hex="4C 4D 63"><unientity>6F99</unientity><desc>East Asian ideograph</desc></character>
+<character hex="4C 4F 24"><unientity>6F46</unientity><desc>East Asian ideograph</desc></character>
+<character hex="4C 4F 26"><unientity>6EDD</unientity><desc>East Asian ideograph</desc></character>
+<character hex="4C 4F 2B"><unientity>701E</unientity><desc>East Asian ideograph</desc></character>
+<character hex="4C 51 75"><unientity>8315</unientity><desc>East Asian ideograph</desc></character>
+<character hex="4C 52 3A"><unientity>717A</unientity><desc>East Asian ideograph</desc></character>
+<character hex="4C 54 47"><unientity>E9BE</unientity><unientityalt>71E0</unientityalt><desc>Variant of 225447 which maps to 71E0</desc></character>
+<character hex="4C 55 41"><unientity>4E2C</unientity><desc>East Asian ideograph</desc></character>
+<character hex="4C 56 38"><unientity>729F</unientity><desc>East Asian ideograph</desc></character>
+<character hex="4C 5C 3A"><unientity>73F1</unientity><desc>East Asian ideograph</desc></character>
+<character hex="4C 5C 61"><unientity>E9BF</unientity><unientityalt>74F4</unientityalt><desc>Variant of 225C61 which maps to 74F4</desc></character>
+<character hex="4C 5F 58"><unientity>7640</unientity><desc>East Asian ideograph</desc></character>
+<character hex="4C 5F 69"><unientity>75EB</unientity><desc>East Asian ideograph</desc></character>
+<character hex="4C 60 22"><unientity>7596</unientity><desc>East Asian ideograph</desc></character>
+<character hex="4C 60 74"><unientity>76B9</unientity><desc>East Asian ideograph</desc></character>
+<character hex="4C 62 66"><unientity>778B</unientity><desc>East Asian ideograph</desc></character>
+<character hex="4C 63 76"><unientity>7839</unientity><desc>East Asian ideograph</desc></character>
+<character hex="4C 65 64"><unientity>78D9</unientity><desc>East Asian ideograph</desc></character>
+<character hex="4C 65 65"><unientity>78B9</unientity><desc>East Asian ideograph</desc></character>
+<character hex="4C 67 75"><unientity>E9D7</unientity><unientityalt>7962</unientityalt><desc>Unrelated variant of EACC 293032 which maps to 7962</desc></character>
+<character hex="4C 68 3E"><unientity>79EB</unientity><desc>East Asian ideograph</desc></character>
+<character hex="4C 69 5C"><unientity>7A06</unientity><desc>East Asian ideograph</desc></character>
+<character hex="4C 69 5F"><unientity>7A63</unientity><desc>East Asian ideograph</desc></character>
+<character hex="4C 6B 62"><unientity>E9C0</unientity><unientityalt>7B4C</unientityalt><desc>Variant of 226B62 which maps to 7B4C</desc></character>
+<character hex="4C 6C 46"><unientity>7B9F</unientity><desc>East Asian ideograph</desc></character>
+<character hex="4C 6E 42"><unientity>7C31</unientity><desc>East Asian ideograph</desc></character>
+<character hex="4C 6F 43"><unientity>7CCD</unientity><desc>East Asian ideograph</desc></character>
+<character hex="4C 6F 7B"><unientity>7CE8</unientity><desc>East Asian ideograph</desc></character>
+<character hex="4C 71 5A"><unientity>7EE6</unientity><desc>East Asian ideograph</desc></character>
+<character hex="4C 72 5D"><unientity>7A39</unientity><desc>East Asian ideograph</desc></character>
+<character hex="4C 72 65"><unientity>7DFC</unientity><desc>East Asian ideograph</desc></character>
+<character hex="4C 73 28"><unientity>E9C1</unientity><unientityalt>5FAD</unientityalt><desc>Variant of 2E7328 which maps to 5FAD</desc></character>
+<character hex="4C 73 5D"><unientity>7D4B</unientity><desc>East Asian ideograph</desc></character>
+<character hex="4C 79 4E"><unientity>80B7</unientity><desc>East Asian ideograph</desc></character>
+<character hex="4C 79 59"><unientity>817D</unientity><desc>East Asian ideograph</desc></character>
+<character hex="4C 79 6B"><unientity>815F</unientity><desc>East Asian ideograph</desc></character>
+<character hex="4C 7C 45"><unientity>82AE</unientity><desc>East Asian ideograph</desc></character>
+<character hex="4C 7D 4D"><unientity>8343</unientity><desc>East Asian ideograph</desc></character>
+<character hex="4C 7D 6A"><unientity>8323</unientity><desc>East Asian ideograph</desc></character>
+<character hex="4D 22 2A"><unientity>83B5</unientity><desc>East Asian ideograph</desc></character>
+<character hex="4D 29 25"><unientity>8770</unientity><desc>East Asian ideograph</desc></character>
+<character hex="4D 29 62"><unientity>E9C2</unientity><unientityalt>86C9</unientityalt><desc>Variant of 232962 which maps to 86C9</desc></character>
+<character hex="4D 2C 3C"><unientity>87E5</unientity><desc>East Asian ideograph</desc></character>
+<character hex="4D 2D 75"><unientity>E9C3</unientity><unientityalt>8872</unientityalt><desc>Variant of 232D75 which maps to 8872</desc></character>
+<character hex="4D 2F 5D"><unientity>E9C4</unientity><unientityalt>8941</unientityalt><desc>Variant of 232F5D which maps to 8941</desc></character>
+<character hex="4D 2F 73"><unientity>7E5D</unientity><desc>East Asian ideograph</desc></character>
+<character hex="4D 2F 7A"><unientity>891D</unientity><desc>East Asian ideograph</desc></character>
+<character hex="4D 30 32"><unientity>88AE</unientity><desc>East Asian ideograph</desc></character>
+<character hex="4D 33 59"><unientity>56AF</unientity><desc>East Asian ideograph</desc></character>
+<character hex="4D 33 63"><unientity>8C25</unientity><desc>East Asian ideograph</desc></character>
+<character hex="4D 38 6F"><unientity>544B</unientity><desc>East Asian ideograph</desc></character>
+<character hex="4D 3C 6C"><unientity>8FB6</unientity><desc>East Asian ideograph</desc></character>
+<character hex="4D 41 34"><unientity>919B</unientity><desc>East Asian ideograph</desc></character>
+<character hex="4D 41 76"><unientity>91DB</unientity><desc>East Asian ideograph</desc></character>
+<character hex="4D 44 5B"><unientity>E9C5</unientity><unientityalt>9306</unientityalt><desc>Variant of 23445B which maps to 9306</desc></character>
+<character hex="4D 44 6B"><unientity>954E</unientity><desc>East Asian ideograph</desc></character>
+<character hex="4D 47 2C"><unientity>952A</unientity><desc>East Asian ideograph</desc></character>
+<character hex="4D 47 54"><unientity>9544</unientity><desc>East Asian ideograph</desc></character>
+<character hex="4D 47 7B"><unientity>943E</unientity><desc>East Asian ideograph</desc></character>
+<character hex="4D 48 32"><unientity>953F</unientity><desc>East Asian ideograph</desc></character>
+<character hex="4D 48 35"><unientity>954C</unientity><desc>East Asian ideograph</desc></character>
+<character hex="4D 48 62"><unientity>9229</unientity><desc>East Asian ideograph</desc></character>
+<character hex="4D 4A 6C"><unientity>9667</unientity><desc>East Asian ideograph</desc></character>
+<character hex="4D 4D 61"><unientity>7EF1</unientity><desc>East Asian ideograph</desc></character>
+<character hex="4D 4F 39"><unientity>988C</unientity><desc>East Asian ideograph</desc></character>
+<character hex="4D 50 3A"><unientity>98D1</unientity><desc>East Asian ideograph</desc></character>
+<character hex="4D 50 53"><unientity>98DA</unientity><desc>East Asian ideograph</desc></character>
+<character hex="4D 51 54"><unientity>9942</unientity><desc>East Asian ideograph</desc></character>
+<character hex="4D 55 74"><unientity>9B2E</unientity><desc>East Asian ideograph</desc></character>
+<character hex="4D 58 58"><unientity>9BE3</unientity><desc>East Asian ideograph</desc></character>
+<character hex="4D 58 75"><unientity>9CD0</unientity><desc>East Asian ideograph</desc></character>
+<character hex="4D 59 34"><unientity>9CA6</unientity><desc>East Asian ideograph</desc></character>
+<character hex="4D 59 4E"><unientity>9BF5</unientity><desc>East Asian ideograph</desc></character>
+<character hex="4D 59 73"><unientity>51EB</unientity><desc>East Asian ideograph</desc></character>
+<character hex="4D 5A 6C"><unientity>9D46</unientity><desc>East Asian ideograph</desc></character>
+<character hex="4D 5B 35"><unientity>9DAB</unientity><desc>East Asian ideograph</desc></character>
+<character hex="4D 5B 7E"><unientity>9DC6</unientity><desc>East Asian ideograph</desc></character>
+<character hex="4D 5C 6B"><unientity>9D50</unientity><desc>East Asian ideograph</desc></character>
+<character hex="4D 5D 49"><unientity>9E81</unientity><desc>East Asian ideograph</desc></character>
+<character hex="4D 5F 70"><unientity>9F44</unientity><desc>East Asian ideograph</desc></character>
+<character hex="4D 5F 7B"><unientity>97F2</unientity><desc>East Asian ideograph</desc></character>
+<character hex="4D 60 47"><unientity>816D</unientity><desc>East Asian ideograph</desc></character>
+<character hex="51 30 51"><unientity>8CAE</unientity><desc>East Asian ideograph</desc></character>
+<character hex="51 30 57"><unientity>4E98</unientity><desc>East Asian ideograph</desc></character>
+<character hex="51 34 21"><unientity>91D6</unientity><desc>East Asian ideograph</desc></character>
+<character hex="51 35 6A"><unientity>8BC3</unientity><desc>East Asian ideograph</desc></character>
+<character hex="51 38 4D"><unientity>51C3</unientity><desc>East Asian ideograph</desc></character>
+<character hex="51 3A 47"><unientity>8885</unientity><desc>East Asian ideograph</desc></character>
+<character hex="51 3B 52"><unientity>6C3D</unientity><desc>East Asian ideograph</desc></character>
+<character hex="51 3D 67"><unientity>8FF3</unientity><desc>East Asian ideograph</desc></character>
+<character hex="51 45 6D"><unientity>822E</unientity><desc>East Asian ideograph</desc></character>
+<character hex="51 49 6B"><unientity>852B</unientity><desc>East Asian ideograph</desc></character>
+<character hex="51 4E 5B"><unientity>9271</unientity><desc>East Asian ideograph</desc></character>
+<character hex="51 51 3B"><unientity>7E9F</unientity><desc>East Asian ideograph</desc></character>
+<character hex="51 56 3F"><unientity>8616</unientity><desc>East Asian ideograph</desc></character>
+<character hex="51 5E 5D"><unientity>9616</unientity><desc>East Asian ideograph</desc></character>
+<character hex="51 61 22"><unientity>9988</unientity><desc>East Asian ideograph</desc></character>
+<character hex="51 6A 26"><unientity>51B4</unientity><desc>East Asian ideograph</desc></character>
+<character hex="51 79 54"><unientity>734E</unientity><desc>East Asian ideograph</desc></character>
+<character hex="52 73 5D"><unientity>E9C6</unientity><unientityalt>7E8A</unientityalt><desc>Variant of 22735D which maps to 7E8A</desc></character>
+<character hex="69 21 26"><unientity>30FB</unientity><desc>Ideographic centered point</desc></character>
+<character hex="69 21 39"><unientity>3005</unientity><desc>Ideographic iteration mark</desc></character>
+<character hex="69 21 3C"><unientity>30FC</unientity><desc>Vowel elongation mark for kana</desc></character>
+<character hex="69 21 52"><unientity>3008</unientity><desc>Ideographic less than sign</desc></character>
+<character hex="69 21 53"><unientity>3009</unientity><desc>Ideographic greater than sign</desc></character>
+<character hex="69 21 54"><unientity>300A</unientity><desc>Ideographic left double angle bracket</desc></character>
+<character hex="69 21 55"><unientity>300B</unientity><desc>Ideographic right double angle bracket</desc></character>
+<character hex="69 24 21"><unientity>3041</unientity><desc>Hiragana letter small A</desc></character>
+<character hex="69 24 22"><unientity>3042</unientity><desc>Hiragana letter A</desc></character>
+<character hex="69 24 23"><unientity>3043</unientity><desc>Hiragana letter small I</desc></character>
+<character hex="69 24 24"><unientity>3044</unientity><desc>Hiragana letter I</desc></character>
+<character hex="69 24 25"><unientity>3045</unientity><desc>Hiragana letter small U</desc></character>
+<character hex="69 24 26"><unientity>3046</unientity><desc>Hiragana letter U</desc></character>
+<character hex="69 24 27"><unientity>3047</unientity><desc>Hiragana letter small E</desc></character>
+<character hex="69 24 28"><unientity>3048</unientity><desc>Hiragana letter E</desc></character>
+<character hex="69 24 29"><unientity>3049</unientity><desc>Hiragana letter small O</desc></character>
+<character hex="69 24 2A"><unientity>304A</unientity><desc>Hiragana letter O</desc></character>
+<character hex="69 24 2B"><unientity>304B</unientity><desc>Hiragana letter KA</desc></character>
+<character hex="69 24 2C"><unientity>304C</unientity><desc>Hiragana letter GA</desc></character>
+<character hex="69 24 2D"><unientity>304D</unientity><desc>Hiragana letter KI</desc></character>
+<character hex="69 24 2E"><unientity>304E</unientity><desc>Hiragana letter GI</desc></character>
+<character hex="69 24 2F"><unientity>304F</unientity><desc>Hiragana letter KU</desc></character>
+<character hex="69 24 30"><unientity>3050</unientity><desc>Hiragana letter GU</desc></character>
+<character hex="69 24 31"><unientity>3051</unientity><desc>Hiragana letter KE</desc></character>
+<character hex="69 24 32"><unientity>3052</unientity><desc>Hiragana letter GE</desc></character>
+<character hex="69 24 33"><unientity>3053</unientity><desc>Hiragana letter KO</desc></character>
+<character hex="69 24 34"><unientity>3054</unientity><desc>Hiragana letter GO</desc></character>
+<character hex="69 24 35"><unientity>3055</unientity><desc>Hiragana letter SA</desc></character>
+<character hex="69 24 36"><unientity>3056</unientity><desc>Hiragana letter ZA</desc></character>
+<character hex="69 24 37"><unientity>3057</unientity><desc>Hiragana letter SI</desc></character>
+<character hex="69 24 38"><unientity>3058</unientity><desc>Hiragana letter ZI</desc></character>
+<character hex="69 24 39"><unientity>3059</unientity><desc>Hiragana letter SU</desc></character>
+<character hex="69 24 3A"><unientity>305A</unientity><desc>Hiragana letter ZU</desc></character>
+<character hex="69 24 3B"><unientity>305B</unientity><desc>Hiragana letter SE</desc></character>
+<character hex="69 24 3C"><unientity>305C</unientity><desc>Hiragana letter ZE</desc></character>
+<character hex="69 24 3D"><unientity>305D</unientity><desc>Hiragana letter SO</desc></character>
+<character hex="69 24 3E"><unientity>305E</unientity><desc>Hiragana letter ZO</desc></character>
+<character hex="69 24 3F"><unientity>305F</unientity><desc>Hiragana letter TA</desc></character>
+<character hex="69 24 40"><unientity>3060</unientity><desc>Hiragana letter DA</desc></character>
+<character hex="69 24 41"><unientity>3061</unientity><desc>Hiragana letter TI</desc></character>
+<character hex="69 24 42"><unientity>3062</unientity><desc>Hiragana letter DI</desc></character>
+<character hex="69 24 43"><unientity>3063</unientity><desc>Hiragana letter small TU</desc></character>
+<character hex="69 24 44"><unientity>3064</unientity><desc>Hiragana letter TU</desc></character>
+<character hex="69 24 45"><unientity>3065</unientity><desc>Hiragana letter DU</desc></character>
+<character hex="69 24 46"><unientity>3066</unientity><desc>Hiragana letter TE</desc></character>
+<character hex="69 24 47"><unientity>3067</unientity><desc>Hiragana letter DE</desc></character>
+<character hex="69 24 48"><unientity>3068</unientity><desc>Hiragana letter TO</desc></character>
+<character hex="69 24 49"><unientity>3069</unientity><desc>Hiragana letter DO</desc></character>
+<character hex="69 24 4A"><unientity>306A</unientity><desc>Hiragana letter NA</desc></character>
+<character hex="69 24 4B"><unientity>306B</unientity><desc>Hiragana letter NI</desc></character>
+<character hex="69 24 4C"><unientity>306C</unientity><desc>Hiragana letter NU</desc></character>
+<character hex="69 24 4D"><unientity>306D</unientity><desc>Hiragana letter NE</desc></character>
+<character hex="69 24 4E"><unientity>306E</unientity><desc>Hiragana letter NO</desc></character>
+<character hex="69 24 4F"><unientity>306F</unientity><desc>Hiragana letter HA</desc></character>
+<character hex="69 24 50"><unientity>3070</unientity><desc>Hiragana letter BA</desc></character>
+<character hex="69 24 51"><unientity>3071</unientity><desc>Hiragana letter PA</desc></character>
+<character hex="69 24 52"><unientity>3072</unientity><desc>Hiragana letter HI</desc></character>
+<character hex="69 24 53"><unientity>3073</unientity><desc>Hiragana letter BI</desc></character>
+<character hex="69 24 54"><unientity>3074</unientity><desc>Hiragana letter PI</desc></character>
+<character hex="69 24 55"><unientity>3075</unientity><desc>Hiragana letter HU</desc></character>
+<character hex="69 24 56"><unientity>3076</unientity><desc>Hiragana letter BU</desc></character>
+<character hex="69 24 57"><unientity>3077</unientity><desc>Hiragana letter PU</desc></character>
+<character hex="69 24 58"><unientity>3078</unientity><desc>Hiragana letter HE</desc></character>
+<character hex="69 24 59"><unientity>3079</unientity><desc>Hiragana letter BE</desc></character>
+<character hex="69 24 5A"><unientity>307A</unientity><desc>Hiragana letter PE</desc></character>
+<character hex="69 24 5B"><unientity>307B</unientity><desc>Hiragana letter HO</desc></character>
+<character hex="69 24 5C"><unientity>307C</unientity><desc>Hiragana letter BO</desc></character>
+<character hex="69 24 5D"><unientity>307D</unientity><desc>Hiragana letter PO</desc></character>
+<character hex="69 24 5E"><unientity>307E</unientity><desc>Hiragana letter MA</desc></character>
+<character hex="69 24 5F"><unientity>307F</unientity><desc>Hiragana letter MI</desc></character>
+<character hex="69 24 60"><unientity>3080</unientity><desc>Hiragana letter MU</desc></character>
+<character hex="69 24 61"><unientity>3081</unientity><desc>Hiragana letter ME</desc></character>
+<character hex="69 24 62"><unientity>3082</unientity><desc>Hiragana letter MO</desc></character>
+<character hex="69 24 63"><unientity>3083</unientity><desc>Hiragana letter small YA</desc></character>
+<character hex="69 24 64"><unientity>3084</unientity><desc>Hiragana letter YA</desc></character>
+<character hex="69 24 65"><unientity>3085</unientity><desc>Hiragana letter small YU</desc></character>
+<character hex="69 24 66"><unientity>3086</unientity><desc>Hiragana letter YU</desc></character>
+<character hex="69 24 67"><unientity>3087</unientity><desc>Hiragana letter small YO</desc></character>
+<character hex="69 24 68"><unientity>3088</unientity><desc>Hiragana letter YO</desc></character>
+<character hex="69 24 69"><unientity>3089</unientity><desc>Hiragana letter RA</desc></character>
+<character hex="69 24 6A"><unientity>308A</unientity><desc>Hiragana letter RI</desc></character>
+<character hex="69 24 6B"><unientity>308B</unientity><desc>Hiragana letter RU</desc></character>
+<character hex="69 24 6C"><unientity>308C</unientity><desc>Hiragana letter RE</desc></character>
+<character hex="69 24 6D"><unientity>308D</unientity><desc>Hiragana letter RO</desc></character>
+<character hex="69 24 6E"><unientity>308E</unientity><desc>Hiragana letter small WA</desc></character>
+<character hex="69 24 6F"><unientity>308F</unientity><desc>Hiragana letter WA</desc></character>
+<character hex="69 24 70"><unientity>3090</unientity><desc>Hiragana letter WI</desc></character>
+<character hex="69 24 71"><unientity>3091</unientity><desc>Hiragana letter WE</desc></character>
+<character hex="69 24 72"><unientity>3092</unientity><desc>Hiragana letter WO</desc></character>
+<character hex="69 24 73"><unientity>3093</unientity><desc>Hiragana letter N</desc></character>
+<character hex="69 25 21"><unientity>30A1</unientity><desc>Katakana letter small A</desc></character>
+<character hex="69 25 22"><unientity>30A2</unientity><desc>Katakana letter A</desc></character>
+<character hex="69 25 23"><unientity>30A3</unientity><desc>Katakana letter small I</desc></character>
+<character hex="69 25 24"><unientity>30A4</unientity><desc>Katakana letter I</desc></character>
+<character hex="69 25 25"><unientity>30A5</unientity><desc>Katakana letter small U</desc></character>
+<character hex="69 25 26"><unientity>30A6</unientity><desc>Katakana letter U</desc></character>
+<character hex="69 25 27"><unientity>30A7</unientity><desc>Katakana letter small E</desc></character>
+<character hex="69 25 28"><unientity>30A8</unientity><desc>Katakana letter E</desc></character>
+<character hex="69 25 29"><unientity>30A9</unientity><desc>Katakana letter small O</desc></character>
+<character hex="69 25 2A"><unientity>30AA</unientity><desc>Katakana letter O</desc></character>
+<character hex="69 25 2B"><unientity>30AB</unientity><desc>Katakana letter KA</desc></character>
+<character hex="69 25 2C"><unientity>30AC</unientity><desc>Katakana letter GA</desc></character>
+<character hex="69 25 2D"><unientity>30AD</unientity><desc>Katakana letter KI</desc></character>
+<character hex="69 25 2E"><unientity>30AE</unientity><desc>Katakana letter GI</desc></character>
+<character hex="69 25 2F"><unientity>30AF</unientity><desc>Katakana letter KU</desc></character>
+<character hex="69 25 30"><unientity>30B0</unientity><desc>Katakana letter GU</desc></character>
+<character hex="69 25 31"><unientity>30B1</unientity><desc>Katakana letter KE</desc></character>
+<character hex="69 25 32"><unientity>30B2</unientity><desc>Katakana letter GE</desc></character>
+<character hex="69 25 33"><unientity>30B3</unientity><desc>Katakana letter KO</desc></character>
+<character hex="69 25 34"><unientity>30B4</unientity><desc>Katakana letter GO</desc></character>
+<character hex="69 25 35"><unientity>30B5</unientity><desc>Katakana letter SA</desc></character>
+<character hex="69 25 36"><unientity>30B6</unientity><desc>Katakana letter ZA</desc></character>
+<character hex="69 25 37"><unientity>30B7</unientity><desc>Katakana letter SI</desc></character>
+<character hex="69 25 38"><unientity>30B8</unientity><desc>Katakana letter ZI</desc></character>
+<character hex="69 25 39"><unientity>30B9</unientity><desc>Katakana letter SU</desc></character>
+<character hex="69 25 3A"><unientity>30BA</unientity><desc>Katakana letter ZU</desc></character>
+<character hex="69 25 3B"><unientity>30BB</unientity><desc>Katakana letter SE</desc></character>
+<character hex="69 25 3C"><unientity>30BC</unientity><desc>Katakana letter ZE</desc></character>
+<character hex="69 25 3D"><unientity>30BD</unientity><desc>Katakana letter SO</desc></character>
+<character hex="69 25 3F"><unientity>30BF</unientity><desc>Katakana letter TA</desc></character>
+<character hex="69 25 40"><unientity>30C0</unientity><desc>Katakana letter DA</desc></character>
+<character hex="69 25 41"><unientity>30C1</unientity><desc>Katakana letter TI</desc></character>
+<character hex="69 25 42"><unientity>30C2</unientity><desc>Katakana letter DI</desc></character>
+<character hex="69 25 43"><unientity>30C3</unientity><desc>Katakana letter small TU</desc></character>
+<character hex="69 25 44"><unientity>30C4</unientity><desc>Katakana letter TU</desc></character>
+<character hex="69 25 45"><unientity>30C5</unientity><desc>Katakana letter DU</desc></character>
+<character hex="69 25 46"><unientity>30C6</unientity><desc>Katakana letter TE</desc></character>
+<character hex="69 25 47"><unientity>30C7</unientity><desc>Katakana letter DE</desc></character>
+<character hex="69 25 48"><unientity>30C8</unientity><desc>Katakana letter TO</desc></character>
+<character hex="69 25 49"><unientity>30C9</unientity><desc>Katakana letter DO</desc></character>
+<character hex="69 25 4A"><unientity>30CA</unientity><desc>Katakana letter NA</desc></character>
+<character hex="69 25 4B"><unientity>30CB</unientity><desc>Katakana letter NI</desc></character>
+<character hex="69 25 4C"><unientity>30CC</unientity><desc>Katakana letter NU</desc></character>
+<character hex="69 25 4D"><unientity>30CD</unientity><desc>Katakana letter NE</desc></character>
+<character hex="69 25 4E"><unientity>30CE</unientity><desc>Katakana letter NO</desc></character>
+<character hex="69 25 4F"><unientity>30CF</unientity><desc>Katakana letter HA</desc></character>
+<character hex="69 25 50"><unientity>30D0</unientity><desc>Katakana letter BA</desc></character>
+<character hex="69 25 51"><unientity>30D1</unientity><desc>Katakana letter PA</desc></character>
+<character hex="69 25 52"><unientity>30D2</unientity><desc>Katakana letter HI</desc></character>
+<character hex="69 25 53"><unientity>30D3</unientity><desc>Katakana letter BI</desc></character>
+<character hex="69 25 54"><unientity>30D4</unientity><desc>Katakana letter PI</desc></character>
+<character hex="69 25 55"><unientity>30D5</unientity><desc>Katakana letter HU</desc></character>
+<character hex="69 25 56"><unientity>30D6</unientity><desc>Katakana letter BU</desc></character>
+<character hex="69 25 57"><unientity>30D7</unientity><desc>Katakana letter PU</desc></character>
+<character hex="69 25 58"><unientity>30D8</unientity><desc>Katakana letter HE</desc></character>
+<character hex="69 25 59"><unientity>30D9</unientity><desc>Katakana letter BE</desc></character>
+<character hex="69 25 5A"><unientity>30DA</unientity><desc>Katakana letter PE</desc></character>
+<character hex="69 25 5B"><unientity>30DB</unientity><desc>Katakana letter HO</desc></character>
+<character hex="69 25 5C"><unientity>30DC</unientity><desc>Katakana letter BO</desc></character>
+<character hex="69 25 5D"><unientity>30DD</unientity><desc>Katakana letter PO</desc></character>
+<character hex="69 25 5E"><unientity>30DE</unientity><desc>Katakana letter MA</desc></character>
+<character hex="69 25 5F"><unientity>30DF</unientity><desc>Katakana letter MI</desc></character>
+<character hex="69 25 60"><unientity>30E0</unientity><desc>Katakana letter MU</desc></character>
+<character hex="69 25 61"><unientity>30E1</unientity><desc>Katakana letter ME</desc></character>
+<character hex="69 25 62"><unientity>30E2</unientity><desc>Katakana letter MO</desc></character>
+<character hex="69 25 63"><unientity>30E3</unientity><desc>Katakana letter small YA</desc></character>
+<character hex="69 25 64"><unientity>30E4</unientity><desc>Katakana letter YA</desc></character>
+<character hex="69 25 65"><unientity>30E5</unientity><desc>Katakana letter small YU</desc></character>
+<character hex="69 25 66"><unientity>30E6</unientity><desc>Katakana letter YU</desc></character>
+<character hex="69 25 67"><unientity>30E7</unientity><desc>Katakana letter small YO</desc></character>
+<character hex="69 25 68"><unientity>30E8</unientity><desc>Katakana letter YO</desc></character>
+<character hex="69 25 69"><unientity>30E9</unientity><desc>Katakana letter RA</desc></character>
+<character hex="69 25 6A"><unientity>30EA</unientity><desc>Katakana letter RI</desc></character>
+<character hex="69 25 6B"><unientity>30EB</unientity><desc>Katakana letter RU</desc></character>
+<character hex="69 25 6C"><unientity>30EC</unientity><desc>Katakana letter RE</desc></character>
+<character hex="69 25 6D"><unientity>30ED</unientity><desc>Katakana letter RO</desc></character>
+<character hex="69 25 6E"><unientity>30EE</unientity><desc>Katakana letter small WA</desc></character>
+<character hex="69 25 6F"><unientity>30EF</unientity><desc>Katakana letter WA</desc></character>
+<character hex="69 25 70"><unientity>30F0</unientity><desc>Katakana letter WI</desc></character>
+<character hex="69 25 71"><unientity>30F1</unientity><desc>Katakana letter WE</desc></character>
+<character hex="69 25 72"><unientity>30F2</unientity><desc>Katakana letter WO</desc></character>
+<character hex="69 25 73"><unientity>30F3</unientity><desc>Katakana letter N</desc></character>
+<character hex="69 25 74"><unientity>30F4</unientity><desc>Katakana letter VU</desc></character>
+<character hex="69 25 75"><unientity>30F5</unientity><desc>Katakana letter small KA</desc></character>
+<character hex="69 25 76"><unientity>30F6</unientity><desc>Katakana letter small KE</desc></character>
+<character hex="69 25 77"><unientity>309B</unientity><desc>Katakana-hiragana voiced sound mark</desc></character>
+<character hex="69 25 78"><unientity>309C</unientity><desc>Katakana-hiragana semi-voiced sound mark</desc></character>
+<character hex="69 37 29"><unientity>7C82</unientity><desc>East Asian ideograph</desc></character>
+<character hex="69 3C 32"><unientity>9D2B</unientity><desc>East Asian ideograph</desc></character>
+<character hex="69 3C 36"><unientity>96EB</unientity><desc>East Asian ideograph</desc></character>
+<character hex="69 46 64"><unientity>51EA</unientity><desc>East Asian ideograph</desc></character>
+<character hex="69 46 77"><unientity>5302</unientity><desc>East Asian ideograph</desc></character>
+<character hex="69 48 23"><unientity>7872</unientity><desc>East Asian ideograph</desc></character>
+<character hex="69 48 2B"><unientity>7560</unientity><desc>East Asian ideograph</desc></character>
+<character hex="69 48 38"><unientity>567A</unientity><desc>East Asian ideograph</desc></character>
+<character hex="69 4B 7B"><unientity>9EBF</unientity><desc>East Asian ideograph</desc></character>
+<character hex="69 4C 5D"><unientity>6762</unientity><desc>East Asian ideograph</desc></character>
+<character hex="69 4C 68"><unientity>5301</unientity><desc>East Asian ideograph</desc></character>
+<character hex="69 4C 7A"><unientity>9453</unientity><desc>East Asian ideograph</desc></character>
+<character hex="69 51 30"><unientity>5116</unientity><desc>East Asian ideograph</desc></character>
+<character hex="69 51 5E"><unientity>51E9</unientity><desc>East Asian ideograph</desc></character>
+<character hex="69 52 5D"><unientity>53FA</unientity><desc>East Asian ideograph</desc></character>
+<character hex="69 53 26"><unientity>54D8</unientity><desc>East Asian ideograph</desc></character>
+<character hex="69 53 3B"><unientity>555D</unientity><desc>East Asian ideograph</desc></character>
+<character hex="69 53 75"><unientity>56CE</unientity><desc>East Asian ideograph</desc></character>
+<character hex="69 54 29"><unientity>5726</unientity><desc>East Asian ideograph</desc></character>
+<character hex="69 54 2A"><unientity>5737</unientity><desc>East Asian ideograph</desc></character>
+<character hex="69 54 38"><unientity>57B3</unientity><desc>East Asian ideograph</desc></character>
+<character hex="69 54 3A"><unientity>57AA</unientity><desc>East Asian ideograph</desc></character>
+<character hex="69 54 3B"><unientity>57B0</unientity><desc>East Asian ideograph</desc></character>
+<character hex="69 54 42"><unientity>57D6</unientity><desc>East Asian ideograph</desc></character>
+<character hex="69 54 4B"><unientity>5870</unientity><desc>East Asian ideograph</desc></character>
+<character hex="69 54 51"><unientity>58B9</unientity><desc>East Asian ideograph</desc></character>
+<character hex="69 54 57"><unientity>58B8</unientity><desc>East Asian ideograph</desc></character>
+<character hex="69 54 5C"><unientity>58D7</unientity><desc>East Asian ideograph</desc></character>
+<character hex="69 54 5F"><unientity>58E5</unientity><desc>East Asian ideograph</desc></character>
+<character hex="69 55 4E"><unientity>5B36</unientity><desc>East Asian ideograph</desc></character>
+<character hex="69 56 26"><unientity>4E62</unientity><desc>East Asian ideograph</desc></character>
+<character hex="69 56 2C"><unientity>599B</unientity><desc>East Asian ideograph</desc></character>
+<character hex="69 56 2E"><unientity>5CBB</unientity><desc>East Asian ideograph</desc></character>
+<character hex="69 56 30"><unientity>5CBC</unientity><desc>East Asian ideograph</desc></character>
+<character hex="69 56 32"><unientity>5CC5</unientity><desc>East Asian ideograph</desc></character>
+<character hex="69 56 33"><unientity>5CBE</unientity><desc>East Asian ideograph</desc></character>
+<character hex="69 56 4E"><unientity>5D76</unientity><desc>East Asian ideograph</desc></character>
+<character hex="69 56 57"><unientity>5D90</unientity><desc>East Asian ideograph</desc></character>
+<character hex="69 57 37"><unientity>5F16</unientity><desc>East Asian ideograph</desc></character>
+<character hex="69 57 3B"><unientity>5F41</unientity><desc>East Asian ideograph</desc></character>
+<character hex="69 57 6A"><unientity>603A</unientity><desc>East Asian ideograph</desc></character>
+<character hex="69 59 4B"><unientity>6327</unientity><desc>East Asian ideograph</desc></character>
+<character hex="69 59 5E"><unientity>63B5</unientity><desc>East Asian ideograph</desc></character>
+<character hex="69 5A 31"><unientity>64F6</unientity><desc>East Asian ideograph</desc></character>
+<character hex="69 5A 73"><unientity>6683</unientity><desc>East Asian ideograph</desc></character>
+<character hex="69 5A 7E"><unientity>66BC</unientity><desc>East Asian ideograph</desc></character>
+<character hex="69 5B 37"><unientity>6737</unientity><desc>East Asian ideograph</desc></character>
+<character hex="69 5B 7B"><unientity>6926</unientity><desc>East Asian ideograph</desc></character>
+<character hex="69 5C 29"><unientity>6925</unientity><desc>East Asian ideograph</desc></character>
+<character hex="69 5C 2D"><unientity>6928</unientity><desc>East Asian ideograph</desc></character>
+<character hex="69 5C 30"><unientity>6923</unientity><desc>East Asian ideograph</desc></character>
+<character hex="69 5C 31"><unientity>6921</unientity><desc>East Asian ideograph</desc></character>
+<character hex="69 5C 39"><unientity>697E</unientity><desc>East Asian ideograph</desc></character>
+<character hex="69 5C 43"><unientity>6981</unientity><desc>East Asian ideograph</desc></character>
+<character hex="69 5C 4F"><unientity>69DD</unientity><desc>East Asian ideograph</desc></character>
+<character hex="69 5C 53"><unientity>6A2E</unientity><desc>East Asian ideograph</desc></character>
+<character hex="69 5C 71"><unientity>6A78</unientity><desc>East Asian ideograph</desc></character>
+<character hex="69 5D 36"><unientity>6B1F</unientity><desc>East Asian ideograph</desc></character>
+<character hex="69 5E 63"><unientity>6E82</unientity><desc>East Asian ideograph</desc></character>
+<character hex="69 5F 70"><unientity>7195</unientity><desc>East Asian ideograph</desc></character>
+<character hex="69 61 26"><unientity>74F2</unientity><desc>East Asian ideograph</desc></character>
+<character hex="69 61 36"><unientity>753C</unientity><desc>East Asian ideograph</desc></character>
+<character hex="69 61 3A"><unientity>7549</unientity><desc>East Asian ideograph</desc></character>
+<character hex="69 61 3E"><unientity>7569</unientity><desc>East Asian ideograph</desc></character>
+<character hex="69 62 6D"><unientity>7874</unientity><desc>East Asian ideograph</desc></character>
+<character hex="69 62 73"><unientity>78B5</unientity><desc>East Asian ideograph</desc></character>
+<character hex="69 63 25"><unientity>7907</unientity><desc>East Asian ideograph</desc></character>
+<character hex="69 63 4E"><unientity>7A43</unientity><desc>East Asian ideograph</desc></character>
+<character hex="69 63 73"><unientity>7B02</unientity><desc>East Asian ideograph</desc></character>
+<character hex="69 64 49"><unientity>7C13</unientity><desc>East Asian ideograph</desc></character>
+<character hex="69 64 4C"><unientity>7C17</unientity><desc>East Asian ideograph</desc></character>
+<character hex="69 64 4E"><unientity>7BF6</unientity><desc>East Asian ideograph</desc></character>
+<character hex="69 64 64"><unientity>7C90</unientity><desc>East Asian ideograph</desc></character>
+<character hex="69 64 66"><unientity>7CAD</unientity><desc>East Asian ideograph</desc></character>
+<character hex="69 64 71"><unientity>7CC0</unientity><desc>East Asian ideograph</desc></character>
+<character hex="69 64 74"><unientity>7CD8</unientity><desc>East Asian ideograph</desc></character>
+<character hex="69 65 4F"><unientity>7E05</unientity><desc>East Asian ideograph</desc></character>
+<character hex="69 65 6D"><unientity>7E83</unientity><desc>East Asian ideograph</desc></character>
+<character hex="69 65 6E"><unientity>7DD5</unientity><desc>East Asian ideograph</desc></character>
+<character hex="69 65 76"><unientity>7E90</unientity><desc>East Asian ideograph</desc></character>
+<character hex="69 67 33"><unientity>81A4</unientity><desc>East Asian ideograph</desc></character>
+<character hex="69 67 5C"><unientity>825D</unientity><desc>East Asian ideograph</desc></character>
+<character hex="69 68 4D"><unientity>8422</unientity><desc>East Asian ideograph</desc></character>
+<character hex="69 68 68"><unientity>84D9</unientity><desc>East Asian ideograph</desc></character>
+<character hex="69 69 46"><unientity>8630</unientity><desc>East Asian ideograph</desc></character>
+<character hex="69 69 5B"><unientity>86AB</unientity><desc>East Asian ideograph</desc></character>
+<character hex="69 69 62"><unientity>86EF</unientity><desc>East Asian ideograph</desc></character>
+<character hex="69 6A 2C"><unientity>87D0</unientity><desc>East Asian ideograph</desc></character>
+<character hex="69 6A 5E"><unientity>88B0</unientity><desc>East Asian ideograph</desc></character>
+<character hex="69 6A 61"><unientity>88C3</unientity><desc>East Asian ideograph</desc></character>
+<character hex="69 6A 6D"><unientity>8904</unientity><desc>East Asian ideograph</desc></character>
+<character hex="69 6B 27"><unientity>8977</unientity><desc>East Asian ideograph</desc></character>
+<character hex="69 6B 5C"><unientity>8ADA</unientity><desc>East Asian ideograph</desc></character>
+<character hex="69 6D 3F"><unientity>8EBE</unientity><desc>East Asian ideograph</desc></character>
+<character hex="69 6D 40"><unientity>8EC5</unientity><desc>East Asian ideograph</desc></character>
+<character hex="69 6D 41"><unientity>8EC8</unientity><desc>East Asian ideograph</desc></character>
+<character hex="69 6D 5A"><unientity>8F4C</unientity><desc>East Asian ideograph</desc></character>
+<character hex="69 6D 7A"><unientity>9027</unientity><desc>East Asian ideograph</desc></character>
+<character hex="69 6E 28"><unientity>9056</unientity><desc>East Asian ideograph</desc></character>
+<character hex="69 6E 5C"><unientity>91DF</unientity><desc>East Asian ideograph</desc></character>
+<character hex="69 6F 27"><unientity>933B</unientity><desc>East Asian ideograph</desc></character>
+<character hex="69 6F 5B"><unientity>958A</unientity><desc>East Asian ideograph</desc></character>
+<character hex="69 6F 5D"><unientity>9596</unientity><desc>East Asian ideograph</desc></character>
+<character hex="69 70 23"><unientity>9666</unientity><desc>East Asian ideograph</desc></character>
+<character hex="69 70 58"><unientity>9779</unientity><desc>East Asian ideograph</desc></character>
+<character hex="69 70 5D"><unientity>9786</unientity><desc>East Asian ideograph</desc></character>
+<character hex="69 70 60"><unientity>9790</unientity><desc>East Asian ideograph</desc></character>
+<character hex="69 71 24"><unientity>98AA</unientity><desc>East Asian ideograph</desc></character>
+<character hex="69 71 52"><unientity>99F2</unientity><desc>East Asian ideograph</desc></character>
+<character hex="69 71 74"><unientity>9ADE</unientity><desc>East Asian ideograph</desc></character>
+<character hex="69 71 7D"><unientity>9AF1</unientity><desc>East Asian ideograph</desc></character>
+<character hex="69 71 7E"><unientity>9AF7</unientity><desc>East Asian ideograph</desc></character>
+<character hex="69 72 3B"><unientity>9B96</unientity><desc>East Asian ideograph</desc></character>
+<character hex="69 72 40"><unientity>9BB4</unientity><desc>East Asian ideograph</desc></character>
+<character hex="69 72 45"><unientity>9BCF</unientity><desc>East Asian ideograph</desc></character>
+<character hex="69 72 46"><unientity>9BD1</unientity><desc>East Asian ideograph</desc></character>
+<character hex="69 72 4E"><unientity>9BF2</unientity><desc>East Asian ideograph</desc></character>
+<character hex="69 72 60"><unientity>9C30</unientity><desc>East Asian ideograph</desc></character>
+<character hex="69 72 65"><unientity>9C5A</unientity><desc>East Asian ideograph</desc></character>
+<character hex="69 72 7E"><unientity>9D48</unientity><desc>East Asian ideograph</desc></character>
+<character hex="69 73 23"><unientity>9D64</unientity><desc>East Asian ideograph</desc></character>
+<character hex="6F 24 57"><unientity>3131</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 24 58"><unientity>3134</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 24 59"><unientity>3137</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 24 5A"><unientity>3139</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 24 5B"><unientity>3141</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 24 5C"><unientity>3142</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 24 5D"><unientity>3145</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 24 5E"><unientity>3147</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 24 5F"><unientity>3148</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 24 60"><unientity>314A</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 24 61"><unientity>314B</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 24 62"><unientity>314C</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 24 63"><unientity>314D</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 24 64"><unientity>314E</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 24 65"><unientity>3132</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 24 69"><unientity>3138</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 24 6E"><unientity>3143</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 24 70"><unientity>3146</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 24 71"><unientity>3149</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 24 72"><unientity>314F</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 24 73"><unientity>3150</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 24 74"><unientity>3151</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 24 76"><unientity>3153</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 24 77"><unientity>3154</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 24 78"><unientity>3155</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 24 7A"><unientity>3157</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 24 7B"><unientity>3158</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 24 7E"><unientity>315B</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 25 21"><unientity>315C</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 25 25"><unientity>3160</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 25 26"><unientity>3161</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 25 27"><unientity>3162</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 25 28"><unientity>3163</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 48 5F"><unientity>AC00</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 48 60"><unientity>AC01</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 48 61"><unientity>AC02</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 48 62"><unientity>AC04</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 48 63"><unientity>AC07</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 48 64"><unientity>AC08</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 48 65"><unientity>AC09</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 48 66"><unientity>AC10</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 48 67"><unientity>AC11</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 48 68"><unientity>AC12</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 48 69"><unientity>AC13</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 48 6A"><unientity>AC14</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 48 6B"><unientity>AC15</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 48 6C"><unientity>AC16</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 48 6D"><unientity>AC17</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 48 6E"><unientity>AC19</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 48 6F"><unientity>AC1A</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 48 70"><unientity>AC1B</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 48 71"><unientity>AC1C</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 48 72"><unientity>AC1D</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 48 73"><unientity>AC20</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 48 75"><unientity>AC24</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 48 76"><unientity>AC2C</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 48 77"><unientity>AC2D</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 48 78"><unientity>AC2F</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 48 79"><unientity>AC30</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 48 7A"><unientity>AC31</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 48 7B"><unientity>AC38</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 48 7C"><unientity>AC39</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 48 7D"><unientity>AC40</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 48 7E"><unientity>AC54</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 49 21"><unientity>AC70</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 49 22"><unientity>AC71</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 49 24"><unientity>AC74</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 49 25"><unientity>AC77</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 49 26"><unientity>AC78</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 49 27"><unientity>AC79</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 49 29"><unientity>AC80</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 49 2A"><unientity>AC81</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 49 2B"><unientity>AC83</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 49 2C"><unientity>AC84</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 49 2D"><unientity>AC85</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 49 2E"><unientity>AC86</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 49 30"><unientity>AC89</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 49 31"><unientity>AC8A</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 49 32"><unientity>AC8B</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 49 33"><unientity>AC8C</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 49 34"><unientity>AC90</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 49 35"><unientity>AC94</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 49 36"><unientity>AC9C</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 49 37"><unientity>AC9F</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 49 38"><unientity>ACA0</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 49 39"><unientity>ACA1</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 49 3A"><unientity>ACA8</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 49 3B"><unientity>ACA9</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 49 3C"><unientity>ACAA</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 49 3D"><unientity>ACAC</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 49 3E"><unientity>ACAF</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 49 3F"><unientity>ACB0</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 49 40"><unientity>ACB8</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 49 41"><unientity>ACB9</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 49 43"><unientity>ACBC</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 49 44"><unientity>ACBD</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 49 45"><unientity>ACC1</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 49 47"><unientity>ACC4</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 49 49"><unientity>ACD7</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 49 4A"><unientity>ACE0</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 49 4B"><unientity>ACE1</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 49 4C"><unientity>ACE4</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 49 4D"><unientity>ACE7</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 49 4E"><unientity>ACE8</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 49 4F"><unientity>ACEA</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 49 50"><unientity>ACEC</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 49 51"><unientity>ACEF</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 49 52"><unientity>ACF0</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 49 53"><unientity>ACF1</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 49 54"><unientity>ACF3</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 49 55"><unientity>ACF5</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 49 56"><unientity>ACF6</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 49 57"><unientity>ACFA</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 49 58"><unientity>ACFC</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 49 59"><unientity>ACFD</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 49 5A"><unientity>AD00</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 49 5B"><unientity>AD04</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 49 5C"><unientity>AD0C</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 49 5D"><unientity>AD0D</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 49 5E"><unientity>AD0F</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 49 5F"><unientity>AD11</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 49 60"><unientity>AD18</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 49 61"><unientity>AD19</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 49 62"><unientity>AD1C</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 49 63"><unientity>AD20</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 49 64"><unientity>AD28</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 49 65"><unientity>AD29</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 49 66"><unientity>AD2D</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 49 67"><unientity>AD34</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 49 68"><unientity>AD38</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 49 69"><unientity>AD3C</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 49 6A"><unientity>AD44</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 49 6C"><unientity>AD49</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 49 6D"><unientity>AD50</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 49 6E"><unientity>AD6C</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 49 6F"><unientity>AD6D</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 49 70"><unientity>AD70</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 49 71"><unientity>AD73</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 49 72"><unientity>AD74</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 49 73"><unientity>AD75</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 49 74"><unientity>AD76</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 49 75"><unientity>AD7C</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 49 76"><unientity>AD7D</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 49 77"><unientity>AD7F</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 49 78"><unientity>AD81</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 49 79"><unientity>AD82</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 49 7A"><unientity>AD88</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 49 7B"><unientity>AD8C</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 49 7C"><unientity>AD90</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 49 7E"><unientity>ADA4</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 4A 22"><unientity>ADC0</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 4A 23"><unientity>ADC4</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 4A 24"><unientity>ADC8</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 4A 25"><unientity>ADD0</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 4A 26"><unientity>ADD1</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 4A 27"><unientity>ADD3</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 4A 28"><unientity>ADDC</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 4A 29"><unientity>ADE0</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 4A 2A"><unientity>ADE4</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 4A 2B"><unientity>ADEC</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 4A 2C"><unientity>ADF8</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 4A 2D"><unientity>ADF9</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 4A 2E"><unientity>ADFC</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 4A 2F"><unientity>ADFF</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 4A 30"><unientity>AE00</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 4A 31"><unientity>AE01</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 4A 32"><unientity>AE08</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 4A 33"><unientity>AE09</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 4A 34"><unientity>AE0B</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 4A 35"><unientity>AE0D</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 4A 36"><unientity>AE30</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 4A 37"><unientity>AE31</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 4A 38"><unientity>AE34</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 4A 39"><unientity>AE37</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 4A 3A"><unientity>AE38</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 4A 3B"><unientity>AE40</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 4A 3C"><unientity>AE41</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 4A 3D"><unientity>AE43</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 4A 3E"><unientity>AE44</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 4A 3F"><unientity>AE45</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 4A 40"><unientity>AE4A</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 4A 43"><unientity>AE4C</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 4A 44"><unientity>AE4D</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 4A 45"><unientity>AE4E</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 4A 46"><unientity>AE50</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 4A 47"><unientity>AE54</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 4A 48"><unientity>AE5C</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 4A 49"><unientity>AE5D</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 4A 4A"><unientity>AE60</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 4A 4B"><unientity>AE61</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 4A 4C"><unientity>AE62</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 4A 4D"><unientity>AE65</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 4A 4E"><unientity>AE68</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 4A 4F"><unientity>AE69</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 4A 50"><unientity>AE6C</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 4A 51"><unientity>AE70</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 4A 52"><unientity>AE78</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 4A 53"><unientity>AE79</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 4A 54"><unientity>AE7B</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 4A 55"><unientity>AE7C</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 4A 56"><unientity>AE7D</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 4A 57"><unientity>AE84</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 4A 58"><unientity>AE85</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 4A 59"><unientity>AEBC</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 4A 5A"><unientity>AEBD</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 4A 5B"><unientity>AEBE</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 4A 5C"><unientity>AEC0</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 4A 5D"><unientity>AEC4</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 4A 5E"><unientity>AECC</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 4A 5F"><unientity>AECD</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 4A 60"><unientity>AECF</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 4A 61"><unientity>AED0</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 4A 62"><unientity>AED1</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 4A 63"><unientity>AED8</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 4A 64"><unientity>AEDC</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 4A 65"><unientity>AEF4</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 4A 66"><unientity>AF0D</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 4A 67"><unientity>AF2C</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 4A 68"><unientity>AF2D</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 4A 69"><unientity>AF30</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 4A 6A"><unientity>AF34</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 4A 6B"><unientity>AF3C</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 4A 6C"><unientity>AF3D</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 4A 6D"><unientity>AF3F</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 4A 6E"><unientity>AF41</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 4A 6F"><unientity>AF42</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 4A 70"><unientity>AF43</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 4A 71"><unientity>AF48</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 4A 72"><unientity>AF49</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 4A 73"><unientity>AF4C</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 4A 74"><unientity>AF58</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 4A 75"><unientity>AF5C</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 4A 76"><unientity>AF5D</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 4A 77"><unientity>AF64</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 4A 78"><unientity>AF65</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 4A 79"><unientity>AF79</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 4A 7A"><unientity>AF80</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 4A 7B"><unientity>AF84</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 4A 7C"><unientity>AF88</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 4A 7D"><unientity>AF90</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 4A 7E"><unientity>AF95</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 4B 21"><unientity>AF9C</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 4B 22"><unientity>AFB8</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 4B 23"><unientity>AFB9</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 4B 24"><unientity>AFBC</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 4B 25"><unientity>AFC0</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 4B 26"><unientity>AFC7</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 4B 27"><unientity>AFC8</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 4B 28"><unientity>AFC9</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 4B 29"><unientity>AFCB</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 4B 2A"><unientity>AFCD</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 4B 2B"><unientity>AFCE</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 4B 2C"><unientity>AFD4</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 4B 2D"><unientity>AFD8</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 4B 2E"><unientity>AFE9</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 4B 2F"><unientity>AFF0</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 4B 30"><unientity>B000</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 4B 32"><unientity>B00C</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 4B 33"><unientity>B00D</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 4B 34"><unientity>B010</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 4B 35"><unientity>B014</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 4B 36"><unientity>B01C</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 4B 37"><unientity>B01D</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 4B 38"><unientity>B028</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 4B 39"><unientity>B044</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 4B 3A"><unientity>B045</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 4B 3B"><unientity>B048</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 4B 3C"><unientity>B04A</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 4B 3D"><unientity>B04C</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 4B 3E"><unientity>B053</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 4B 3F"><unientity>B054</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 4B 40"><unientity>B055</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 4B 41"><unientity>B057</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 4B 42"><unientity>B059</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 4B 43"><unientity>B05D</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 4B 44"><unientity>B07C</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 4B 45"><unientity>B07D</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 4B 46"><unientity>B080</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 4B 47"><unientity>B084</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 4B 48"><unientity>B08C</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 4B 49"><unientity>B08D</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 4B 4A"><unientity>B08F</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 4B 4B"><unientity>B090</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 4B 4C"><unientity>B091</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 4B 4F"><unientity>B098</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 4B 50"><unientity>B099</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 4B 51"><unientity>B09A</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 4B 52"><unientity>B09C</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 4B 53"><unientity>B09F</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 4B 54"><unientity>B0A0</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 4B 55"><unientity>B0A1</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 4B 56"><unientity>B0A8</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 4B 57"><unientity>B0A9</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 4B 58"><unientity>B0AB</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 4B 59"><unientity>B0AC</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 4B 5A"><unientity>B0AD</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 4B 5B"><unientity>B0AE</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 4B 5C"><unientity>B0AF</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 4B 5D"><unientity>B0B1</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 4B 5E"><unientity>B0B3</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 4B 5F"><unientity>B0B4</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 4B 60"><unientity>B0B5</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 4B 61"><unientity>B0B8</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 4B 62"><unientity>B0BB</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 4B 63"><unientity>B0BC</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 4B 64"><unientity>B0C4</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 4B 65"><unientity>B0C5</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 4B 66"><unientity>B0C7</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 4B 67"><unientity>B0C8</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 4B 68"><unientity>B0C9</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 4B 69"><unientity>B0D0</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 4B 6A"><unientity>B0D1</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 4B 6B"><unientity>B0E0</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 4B 6C"><unientity>B0E5</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 4B 6D"><unientity>B0EC</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 4B 6E"><unientity>B108</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 4B 6F"><unientity>B109</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 4B 71"><unientity>B10B</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 4B 72"><unientity>B10C</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 4B 73"><unientity>B10F</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 4B 74"><unientity>B110</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 4B 75"><unientity>B113</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 4B 76"><unientity>B118</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 4B 77"><unientity>B119</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 4B 78"><unientity>B11B</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 4B 79"><unientity>B11C</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 4B 7A"><unientity>B11D</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 4B 7B"><unientity>B11E</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 4B 7C"><unientity>B123</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 4B 7D"><unientity>B124</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 4B 7E"><unientity>B125</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 4C 21"><unientity>B128</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 4C 22"><unientity>B12C</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 4C 23"><unientity>B134</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 4C 24"><unientity>B135</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 4C 25"><unientity>B137</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 4C 26"><unientity>B140</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 4C 27"><unientity>B141</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 4C 28"><unientity>B144</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 4C 29"><unientity>B150</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 4C 2A"><unientity>B151</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 4C 2B"><unientity>B153</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 4C 2C"><unientity>B154</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 4C 2D"><unientity>B155</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 4C 2E"><unientity>B158</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 4C 2F"><unientity>B15C</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 4C 30"><unientity>B178</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 4C 31"><unientity>B179</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 4C 32"><unientity>B17A</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 4C 33"><unientity>B17C</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 4C 34"><unientity>B180</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 4C 35"><unientity>B188</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 4C 36"><unientity>B189</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 4C 37"><unientity>B18B</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 4C 38"><unientity>B18D</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 4C 39"><unientity>B192</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 4C 3A"><unientity>B193</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 4C 3B"><unientity>B194</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 4C 3C"><unientity>B1A8</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 4C 3D"><unientity>B1CC</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 4C 3E"><unientity>B1D0</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 4C 3F"><unientity>B1D4</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 4C 40"><unientity>B1DC</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 4C 41"><unientity>B1E8</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 4C 42"><unientity>B1FD</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 4C 43"><unientity>B204</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 4C 44"><unientity>B205</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 4C 45"><unientity>B208</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 4C 46"><unientity>B20B</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 4C 47"><unientity>B20C</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 4C 48"><unientity>B213</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 4C 49"><unientity>B214</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 4C 4A"><unientity>B215</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 4C 4B"><unientity>B217</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 4C 4C"><unientity>B220</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 4C 4D"><unientity>B233</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 4C 4E"><unientity>B234</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 4C 4F"><unientity>B258</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 4C 50"><unientity>B25C</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 4C 51"><unientity>B260</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 4C 52"><unientity>B268</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 4C 53"><unientity>B269</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 4C 54"><unientity>B274</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 4C 55"><unientity>B284</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 4C 56"><unientity>B289</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 4C 57"><unientity>B290</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 4C 58"><unientity>B291</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 4C 59"><unientity>B294</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 4C 5A"><unientity>B298</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 4C 5B"><unientity>B299</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 4C 5C"><unientity>B2A0</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 4C 5D"><unientity>B2A1</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 4C 5E"><unientity>B2A5</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 4C 5F"><unientity>B2A6</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 4C 60"><unientity>B2AA</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 4C 61"><unientity>B2AC</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 4C 62"><unientity>B2C8</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 4C 63"><unientity>B2C9</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 4C 64"><unientity>B2CC</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 4C 65"><unientity>B2D0</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 4C 66"><unientity>B2D8</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 4C 67"><unientity>B2D9</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 4C 68"><unientity>B2DB</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 4C 69"><unientity>B2DD</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 4C 6A"><unientity>B2E2</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 4C 6D"><unientity>B2E4</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 4C 6E"><unientity>B2E5</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 4C 6F"><unientity>B2E6</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 4C 70"><unientity>B2E8</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 4C 71"><unientity>B2EB</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 4C 72"><unientity>B2EC</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 4C 73"><unientity>B2ED</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 4C 74"><unientity>B2EE</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 4C 75"><unientity>B2F3</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 4C 76"><unientity>B2F4</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 4C 77"><unientity>B2F5</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 4C 78"><unientity>B2F7</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 4C 79"><unientity>B2F9</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 4C 7A"><unientity>B2FA</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 4C 7B"><unientity>B2FB</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 4C 7C"><unientity>B2FF</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 4C 7D"><unientity>B300</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 4C 7E"><unientity>B301</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 4D 21"><unientity>B304</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 4D 22"><unientity>B308</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 4D 23"><unientity>B310</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 4D 24"><unientity>B311</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 4D 25"><unientity>B313</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 4D 26"><unientity>B314</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 4D 27"><unientity>B315</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 4D 28"><unientity>B354</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 4D 29"><unientity>B355</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 4D 2A"><unientity>B358</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 4D 2B"><unientity>B35B</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 4D 2C"><unientity>B35C</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 4D 2D"><unientity>B35F</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 4D 2E"><unientity>B364</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 4D 2F"><unientity>B365</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 4D 30"><unientity>B367</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 4D 31"><unientity>B368</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 4D 32"><unientity>B369</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 4D 33"><unientity>B36A</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 4D 34"><unientity>B36B</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 4D 35"><unientity>B36E</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 4D 36"><unientity>B370</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 4D 37"><unientity>B371</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 4D 38"><unientity>B374</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 4D 39"><unientity>B378</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 4D 3A"><unientity>B380</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 4D 3B"><unientity>B383</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 4D 3C"><unientity>B385</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 4D 3D"><unientity>B38C</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 4D 3E"><unientity>B3C4</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 4D 3F"><unientity>B3C5</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 4D 40"><unientity>B3C8</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 4D 41"><unientity>B3CB</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 4D 42"><unientity>B3CC</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 4D 43"><unientity>B3D0</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 4D 44"><unientity>B3D4</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 4D 45"><unientity>B3D5</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 4D 46"><unientity>B3D7</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 4D 47"><unientity>B3D9</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 4D 48"><unientity>B3DB</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 4D 49"><unientity>B3FC</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 4D 4A"><unientity>B400</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 4D 4B"><unientity>B410</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 4D 4C"><unientity>B418</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 4D 4D"><unientity>B41C</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 4D 4E"><unientity>B420</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 4D 4F"><unientity>B428</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 4D 50"><unientity>B429</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 4D 51"><unientity>B42B</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 4D 52"><unientity>B42C</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 4D 53"><unientity>B450</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 4D 54"><unientity>B451</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 4D 55"><unientity>B454</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 4D 56"><unientity>B458</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 4D 57"><unientity>B460</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 4D 58"><unientity>B461</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 4D 59"><unientity>B463</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 4D 5A"><unientity>B465</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 4D 5B"><unientity>B46C</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 4D 5C"><unientity>B480</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 4D 5D"><unientity>B488</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 4D 5E"><unientity>B4A4</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 4D 5F"><unientity>B4B7</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 4D 60"><unientity>B4C0</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 4D 61"><unientity>B4D0</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 4D 62"><unientity>B4DC</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 4D 63"><unientity>B4DD</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 4D 64"><unientity>B4E0</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 4D 65"><unientity>B4E3</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 4D 66"><unientity>B4E4</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 4D 67"><unientity>B4EC</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 4D 68"><unientity>B4ED</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 4D 69"><unientity>B4EF</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 4D 6A"><unientity>B4F1</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 4D 6B"><unientity>B514</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 4D 6C"><unientity>B515</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 4D 6D"><unientity>B518</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 4D 6E"><unientity>B51B</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 4D 6F"><unientity>B51C</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 4D 70"><unientity>B524</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 4D 71"><unientity>B525</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 4D 72"><unientity>B527</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 4D 73"><unientity>B528</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 4D 74"><unientity>B529</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 4D 75"><unientity>B52A</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 4D 78"><unientity>B530</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 4D 79"><unientity>B531</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 4D 7A"><unientity>B532</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 4D 7B"><unientity>B534</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 4D 7C"><unientity>B537</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 4D 7D"><unientity>B538</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 4E 21"><unientity>B540</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 4E 22"><unientity>B541</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 4E 23"><unientity>B543</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 4E 24"><unientity>B544</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 4E 25"><unientity>B545</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 4E 26"><unientity>B54B</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 4E 27"><unientity>B54C</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 4E 28"><unientity>B54D</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 4E 29"><unientity>B550</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 4E 2A"><unientity>B554</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 4E 2B"><unientity>B55C</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 4E 2C"><unientity>B55D</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 4E 2D"><unientity>B55F</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 4E 2E"><unientity>B560</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 4E 2F"><unientity>B561</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 4E 30"><unientity>B5A0</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 4E 31"><unientity>B5A1</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 4E 32"><unientity>B5A4</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 4E 33"><unientity>B5A8</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 4E 34"><unientity>B5AB</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 4E 35"><unientity>B5B0</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 4E 36"><unientity>B5B1</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 4E 37"><unientity>B5B3</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 4E 38"><unientity>B5B4</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 4E 39"><unientity>B5B5</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 4E 3A"><unientity>B5BB</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 4E 3B"><unientity>B5BC</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 4E 3C"><unientity>B5C0</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 4E 3D"><unientity>B5C4</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 4E 3E"><unientity>B5CC</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 4E 3F"><unientity>B5CF</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 4E 40"><unientity>B5D1</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 4E 41"><unientity>B610</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 4E 42"><unientity>B611</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 4E 43"><unientity>B614</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 4E 44"><unientity>B618</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 4E 45"><unientity>B625</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 4E 46"><unientity>B664</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 4E 47"><unientity>B69C</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 4E 48"><unientity>B69D</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 4E 49"><unientity>B6A4</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 4E 4A"><unientity>B6AB</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 4E 4B"><unientity>B6AC</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 4E 4C"><unientity>B6B1</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 4E 4D"><unientity>B6F0</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 4E 4E"><unientity>B6F4</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 4E 4F"><unientity>B6F8</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 4E 50"><unientity>B700</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 4E 51"><unientity>B701</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 4E 52"><unientity>B728</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 4E 53"><unientity>B729</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 4E 54"><unientity>B72C</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 4E 55"><unientity>B72F</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 4E 56"><unientity>B730</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 4E 57"><unientity>B738</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 4E 58"><unientity>B739</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 4E 59"><unientity>B73B</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 4E 5A"><unientity>B744</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 4E 5B"><unientity>B748</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 4E 5C"><unientity>B760</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 4E 5D"><unientity>B764</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 4E 5E"><unientity>B768</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 4E 5F"><unientity>B770</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 4E 60"><unientity>B771</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 4E 61"><unientity>B775</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 4E 64"><unientity>B77C</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 4E 65"><unientity>B77D</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 4E 66"><unientity>B780</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 4E 67"><unientity>B784</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 4E 68"><unientity>B78C</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 4E 69"><unientity>B78D</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 4E 6A"><unientity>B78F</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 4E 6B"><unientity>B790</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 4E 6C"><unientity>B791</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 4E 6D"><unientity>B797</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 4E 6E"><unientity>B798</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 4E 6F"><unientity>B799</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 4E 70"><unientity>B79C</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 4E 71"><unientity>B7A0</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 4E 72"><unientity>B7A8</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 4E 73"><unientity>B7A9</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 4E 74"><unientity>B7AB</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 4E 75"><unientity>B7AC</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 4E 76"><unientity>B7AD</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 4E 77"><unientity>B7B4</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 4E 78"><unientity>B7B5</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 4E 79"><unientity>B7C9</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 4E 7A"><unientity>B7EC</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 4E 7B"><unientity>B7ED</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 4E 7C"><unientity>B7F0</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 4E 7D"><unientity>B7F4</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 4E 7E"><unientity>B7FC</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 4F 21"><unientity>B7FD</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 4F 22"><unientity>B7FF</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 4F 23"><unientity>B800</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 4F 24"><unientity>B801</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 4F 25"><unientity>B807</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 4F 26"><unientity>B808</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 4F 27"><unientity>B809</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 4F 28"><unientity>B80C</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 4F 29"><unientity>B810</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 4F 2A"><unientity>B818</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 4F 2B"><unientity>B819</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 4F 2C"><unientity>B81B</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 4F 2D"><unientity>B81D</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 4F 2E"><unientity>B824</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 4F 2F"><unientity>B825</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 4F 30"><unientity>B828</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 4F 31"><unientity>B82C</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 4F 32"><unientity>B834</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 4F 33"><unientity>B835</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 4F 34"><unientity>B837</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 4F 35"><unientity>B838</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 4F 36"><unientity>B839</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 4F 37"><unientity>B840</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 4F 38"><unientity>B85C</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 4F 39"><unientity>B85D</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 4F 3A"><unientity>B860</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 4F 3B"><unientity>B864</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 4F 3C"><unientity>B86C</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 4F 3D"><unientity>B86D</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 4F 3E"><unientity>B86F</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 4F 3F"><unientity>B871</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 4F 40"><unientity>B8B0</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 4F 41"><unientity>B8CC</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 4F 42"><unientity>B8E1</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 4F 43"><unientity>B8E8</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 4F 44"><unientity>B8E9</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 4F 45"><unientity>B8EC</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 4F 46"><unientity>B8F0</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 4F 47"><unientity>B8F8</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 4F 48"><unientity>B8F9</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 4F 49"><unientity>B8FB</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 4F 4A"><unientity>B8FD</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 4F 4B"><unientity>B904</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 4F 4C"><unientity>B93C</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 4F 4D"><unientity>B958</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 4F 4E"><unientity>B959</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 4F 4F"><unientity>B95C</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 4F 50"><unientity>B960</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 4F 51"><unientity>B968</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 4F 52"><unientity>B96D</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 4F 53"><unientity>B974</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 4F 54"><unientity>B975</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 4F 55"><unientity>B978</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 4F 56"><unientity>B97C</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 4F 57"><unientity>B984</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 4F 58"><unientity>B985</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 4F 59"><unientity>B987</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 4F 5A"><unientity>B989</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 4F 5B"><unientity>B98E</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 4F 5C"><unientity>B9AC</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 4F 5D"><unientity>B9AD</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 4F 5E"><unientity>B9B0</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 4F 5F"><unientity>B9B4</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 4F 60"><unientity>B9BC</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 4F 61"><unientity>B9BD</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 4F 62"><unientity>B9BF</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 4F 63"><unientity>B9C1</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 4F 66"><unientity>B9C8</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 4F 67"><unientity>B9C9</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 4F 68"><unientity>B9CC</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 4F 69"><unientity>B9CE</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 4F 6A"><unientity>B9CF</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 4F 6B"><unientity>B9D0</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 4F 6C"><unientity>B9D1</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 4F 6D"><unientity>B9D8</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 4F 6E"><unientity>B9D9</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 4F 6F"><unientity>B9DB</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 4F 70"><unientity>B9DD</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 4F 71"><unientity>B9DE</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 4F 72"><unientity>B9E1</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 4F 73"><unientity>B9E3</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 4F 74"><unientity>B9E4</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 4F 75"><unientity>B9E5</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 4F 76"><unientity>B9E8</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 4F 77"><unientity>B9EC</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 4F 78"><unientity>B9F4</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 4F 79"><unientity>B9F5</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 4F 7A"><unientity>B9F7</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 4F 7B"><unientity>B9F8</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 4F 7C"><unientity>B9F9</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 4F 7D"><unientity>B9FA</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 4F 7E"><unientity>BA00</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 50 21"><unientity>BA38</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 50 22"><unientity>BA39</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 50 23"><unientity>BA3C</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 50 24"><unientity>BA40</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 50 25"><unientity>BA48</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 50 26"><unientity>BA49</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 50 27"><unientity>BA4B</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 50 28"><unientity>BA4D</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 50 29"><unientity>BA4E</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 50 2A"><unientity>BA53</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 50 2B"><unientity>BA54</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 50 2C"><unientity>BA55</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 50 2D"><unientity>BA58</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 50 2E"><unientity>BA5C</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 50 2F"><unientity>BA64</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 50 30"><unientity>BA65</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 50 31"><unientity>BA67</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 50 32"><unientity>BA70</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 50 33"><unientity>BA71</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 50 34"><unientity>BA74</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 50 35"><unientity>BA78</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 50 36"><unientity>BA83</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 50 37"><unientity>BA84</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 50 38"><unientity>BA85</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 50 39"><unientity>BA87</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 50 3A"><unientity>BAA8</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 50 3B"><unientity>BAA9</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 50 3C"><unientity>BAAB</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 50 3D"><unientity>BAAC</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 50 3E"><unientity>BAB0</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 50 3F"><unientity>BAB8</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 50 40"><unientity>BAB9</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 50 41"><unientity>BABB</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 50 42"><unientity>BABD</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 50 43"><unientity>BAC3</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 50 44"><unientity>BAFC</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 50 45"><unientity>BB0F</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 50 46"><unientity>BB18</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 50 47"><unientity>BB34</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 50 48"><unientity>BB35</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 50 49"><unientity>BB36</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 50 4A"><unientity>BB38</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 50 4B"><unientity>BB3B</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 50 4C"><unientity>BB3C</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 50 4D"><unientity>BB3D</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 50 4E"><unientity>BB44</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 50 4F"><unientity>BB47</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 50 50"><unientity>BB49</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 50 51"><unientity>BB4D</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 50 52"><unientity>BB4F</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 50 53"><unientity>BB50</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 50 54"><unientity>BB54</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 50 55"><unientity>BB58</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 50 56"><unientity>BB61</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 50 57"><unientity>BB63</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 50 58"><unientity>BB88</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 50 59"><unientity>BB8C</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 50 5A"><unientity>BBA4</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 50 5B"><unientity>BBC0</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 50 5C"><unientity>BBC4</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 50 5D"><unientity>BBC8</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 50 5E"><unientity>BBD0</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 50 5F"><unientity>BBF8</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 50 60"><unientity>BBF9</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 50 61"><unientity>BBFC</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 50 62"><unientity>BBFF</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 50 63"><unientity>BC00</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 50 64"><unientity>BC08</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 50 65"><unientity>BC09</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 50 66"><unientity>BC0B</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 50 68"><unientity>BC0D</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 50 69"><unientity>BC0F</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 50 6A"><unientity>BC11</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 50 6B"><unientity>BBB4</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 50 6D"><unientity>BC14</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 50 6E"><unientity>BC15</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 50 6F"><unientity>BC16</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 50 70"><unientity>BC18</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 50 71"><unientity>BC1B</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 50 72"><unientity>BC1C</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 50 73"><unientity>BC1D</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 50 74"><unientity>BC1F</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 50 75"><unientity>BC24</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 50 76"><unientity>BC25</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 50 77"><unientity>BC27</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 50 78"><unientity>BC29</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 50 79"><unientity>BC2D</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 50 7A"><unientity>BC30</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 50 7B"><unientity>BC31</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 50 7C"><unientity>BC34</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 50 7D"><unientity>BC37</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 50 7E"><unientity>BC38</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 51 21"><unientity>BC40</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 51 22"><unientity>BC41</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 51 23"><unientity>BC43</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 51 24"><unientity>BC44</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 51 25"><unientity>BC45</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 51 26"><unientity>BC84</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 51 27"><unientity>BC85</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 51 28"><unientity>BC88</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 51 29"><unientity>BC8B</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 51 2A"><unientity>BC8C</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 51 2B"><unientity>BC94</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 51 2C"><unientity>BC95</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 51 2D"><unientity>BC97</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 51 2E"><unientity>BC98</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 51 2F"><unientity>BC99</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 51 30"><unientity>BC9A</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 51 31"><unientity>BCA0</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 51 32"><unientity>BCA1</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 51 33"><unientity>BCA4</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 51 34"><unientity>BCA7</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 51 35"><unientity>BCA8</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 51 36"><unientity>BCB0</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 51 37"><unientity>BCB1</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 51 38"><unientity>BCB3</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 51 39"><unientity>BCB5</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 51 3A"><unientity>BCBC</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 51 3B"><unientity>BCBD</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 51 3C"><unientity>BCC0</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 51 3D"><unientity>BCC4</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 51 3E"><unientity>BCCC</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 51 3F"><unientity>BCCD</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 51 40"><unientity>BCCF</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 51 41"><unientity>BCD0</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 51 42"><unientity>BCD1</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 51 43"><unientity>BCD2</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 51 44"><unientity>BCD5</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 51 45"><unientity>BCF4</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 51 46"><unientity>BCF5</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 51 47"><unientity>BCF6</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 51 48"><unientity>BCF8</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 51 49"><unientity>BCFC</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 51 4A"><unientity>BD04</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 51 4B"><unientity>BD05</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 51 4C"><unientity>BD07</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 51 4D"><unientity>BD09</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 51 4E"><unientity>BD10</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 51 4F"><unientity>BD14</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 51 50"><unientity>BD24</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 51 51"><unientity>BD48</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 51 52"><unientity>BD49</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 51 53"><unientity>BD4C</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 51 54"><unientity>BD50</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 51 55"><unientity>BD58</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 51 56"><unientity>BD59</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 51 57"><unientity>BD64</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 51 58"><unientity>BD80</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 51 59"><unientity>BD81</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 51 5A"><unientity>BD84</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 51 5B"><unientity>BD87</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 51 5C"><unientity>BD88</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 51 5D"><unientity>BD89</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 51 5E"><unientity>BD90</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 51 5F"><unientity>BD91</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 51 60"><unientity>BD93</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 51 61"><unientity>BD95</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 51 62"><unientity>BD99</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 51 63"><unientity>BD9C</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 51 64"><unientity>BDD4</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 51 65"><unientity>BDF0</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 51 66"><unientity>BE0C</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 51 67"><unientity>BE0D</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 51 68"><unientity>BE10</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 51 69"><unientity>BE14</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 51 6A"><unientity>BE1C</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 51 6B"><unientity>BE1D</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 51 6C"><unientity>BE1F</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 51 6D"><unientity>BE44</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 51 6E"><unientity>BE45</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 51 6F"><unientity>BE48</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 51 70"><unientity>BE4B</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 51 71"><unientity>BE4C</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 51 72"><unientity>BE4E</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 51 73"><unientity>BE54</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 51 74"><unientity>BE55</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 51 75"><unientity>BE57</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 51 76"><unientity>BE59</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 51 77"><unientity>BE5A</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 51 78"><unientity>BE5B</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 51 7B"><unientity>BE60</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 51 7C"><unientity>BE61</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 51 7D"><unientity>BE64</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 51 7E"><unientity>BE68</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 52 21"><unientity>BE70</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 52 22"><unientity>BE71</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 52 23"><unientity>BE73</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 52 24"><unientity>BE74</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 52 25"><unientity>BE75</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 52 26"><unientity>BE7B</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 52 27"><unientity>BE7C</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 52 28"><unientity>BE7D</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 52 29"><unientity>BE80</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 52 2A"><unientity>BE84</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 52 2B"><unientity>BE8C</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 52 2C"><unientity>BE8F</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 52 2D"><unientity>BE90</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 52 2E"><unientity>BE91</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 52 2F"><unientity>BE98</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 52 30"><unientity>BEA8</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 52 31"><unientity>BED0</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 52 32"><unientity>BED1</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 52 33"><unientity>BED4</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 52 34"><unientity>BED7</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 52 35"><unientity>BED8</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 52 36"><unientity>BEE0</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 52 37"><unientity>BEE3</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 52 38"><unientity>BEE4</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 52 39"><unientity>BEE5</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 52 3A"><unientity>BEEC</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 52 3B"><unientity>BF08</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 52 3C"><unientity>BF09</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 52 3D"><unientity>BF18</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 52 3E"><unientity>BF1D</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 52 3F"><unientity>BF40</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 52 40"><unientity>BF41</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 52 41"><unientity>BF44</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 52 42"><unientity>BF48</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 52 43"><unientity>BF50</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 52 44"><unientity>BF51</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 52 45"><unientity>BF55</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 52 46"><unientity>BFB0</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 52 47"><unientity>BFC0</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 52 48"><unientity>BFC5</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 52 49"><unientity>BFCC</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 52 4A"><unientity>BFCD</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 52 4B"><unientity>BFD0</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 52 4C"><unientity>BFD4</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 52 4D"><unientity>BFDC</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 52 4E"><unientity>BFDD</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 52 4F"><unientity>BFE1</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 52 50"><unientity>C058</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 52 51"><unientity>C059</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 52 52"><unientity>C05C</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 52 53"><unientity>C060</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 52 54"><unientity>C068</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 52 55"><unientity>C069</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 52 56"><unientity>C090</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 52 57"><unientity>C091</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 52 58"><unientity>C094</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 52 59"><unientity>C098</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 52 5A"><unientity>C0A0</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 52 5B"><unientity>C0A3</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 52 5C"><unientity>C0A5</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 52 5F"><unientity>C0AC</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 52 60"><unientity>C0AD</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 52 61"><unientity>C0AE</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 52 62"><unientity>C0AF</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 52 63"><unientity>C0B0</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 52 64"><unientity>C0B3</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 52 65"><unientity>C0B4</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 52 66"><unientity>C0B5</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 52 67"><unientity>C0B6</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 52 68"><unientity>C0BC</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 52 69"><unientity>C0BD</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 52 6A"><unientity>C0BF</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 52 6B"><unientity>C0C0</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 52 6C"><unientity>C0C1</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 52 6D"><unientity>C0C5</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 52 6E"><unientity>C0C8</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 52 6F"><unientity>C0C9</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 52 70"><unientity>C0CC</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 52 71"><unientity>C0CF</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 52 72"><unientity>C0D0</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 52 73"><unientity>C0D8</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 52 74"><unientity>C0D9</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 52 75"><unientity>C0DB</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 52 76"><unientity>C0DC</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 52 77"><unientity>C0DD</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 52 78"><unientity>C0E4</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 52 79"><unientity>C0E5</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 52 7A"><unientity>C0E8</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 52 7B"><unientity>C0EC</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 52 7C"><unientity>C0F4</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 52 7D"><unientity>C0F7</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 52 7E"><unientity>C0F9</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 53 21"><unientity>C11C</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 53 22"><unientity>C11D</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 53 23"><unientity>C11E</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 53 24"><unientity>C120</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 53 25"><unientity>C123</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 53 26"><unientity>C124</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 53 27"><unientity>C125</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 53 28"><unientity>C126</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 53 29"><unientity>C127</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 53 2A"><unientity>C12A</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 53 2B"><unientity>C12C</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 53 2C"><unientity>C12D</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 53 2D"><unientity>C12F</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 53 2E"><unientity>C130</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 53 2F"><unientity>C131</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 53 30"><unientity>C136</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 53 31"><unientity>C138</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 53 32"><unientity>C139</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 53 33"><unientity>C13C</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 53 34"><unientity>C140</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 53 35"><unientity>C148</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 53 36"><unientity>C149</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 53 37"><unientity>C14B</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 53 38"><unientity>C14D</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 53 39"><unientity>C151</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 53 3A"><unientity>C154</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 53 3B"><unientity>C158</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 53 3C"><unientity>C167</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 53 3D"><unientity>C168</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 53 3E"><unientity>C170</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 53 3F"><unientity>C18C</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 53 40"><unientity>C18D</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 53 41"><unientity>C18E</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 53 42"><unientity>C190</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 53 43"><unientity>C194</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 53 44"><unientity>C19C</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 53 45"><unientity>C19D</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 53 46"><unientity>C19F</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 53 47"><unientity>C1A1</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 53 48"><unientity>C1A5</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 53 49"><unientity>C1A8</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 53 4A"><unientity>C1A9</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 53 4B"><unientity>C1B0</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 53 4C"><unientity>C1C4</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 53 4D"><unientity>C1C8</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 53 4E"><unientity>C1D7</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 53 4F"><unientity>C1E0</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 53 50"><unientity>C1E4</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 53 51"><unientity>C1E8</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 53 52"><unientity>C1F0</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 53 53"><unientity>C1F1</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 53 54"><unientity>C1F3</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 53 55"><unientity>C1FC</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 53 56"><unientity>C1FD</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 53 57"><unientity>C200</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 53 58"><unientity>C204</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 53 59"><unientity>C20D</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 53 5B"><unientity>C218</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 53 5C"><unientity>C219</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 53 5D"><unientity>C21C</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 53 5E"><unientity>C21F</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 53 5F"><unientity>C220</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 53 60"><unientity>C228</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 53 61"><unientity>C229</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 53 62"><unientity>C22B</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 53 63"><unientity>C22D</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 53 64"><unientity>C22F</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 53 65"><unientity>C231</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 53 66"><unientity>C232</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 53 67"><unientity>C234</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 53 68"><unientity>C250</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 53 69"><unientity>C258</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 53 6A"><unientity>C26C</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 53 6B"><unientity>C270</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 53 6C"><unientity>C274</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 53 6D"><unientity>C27C</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 53 6E"><unientity>C27D</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 53 6F"><unientity>C27F</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 53 70"><unientity>C281</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 53 71"><unientity>C288</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 53 72"><unientity>C289</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 53 73"><unientity>C290</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 53 74"><unientity>C298</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 53 75"><unientity>C29B</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 53 76"><unientity>C29D</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 53 77"><unientity>C2A4</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 53 78"><unientity>C2A5</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 53 79"><unientity>C2A8</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 53 7A"><unientity>C2AC</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 53 7B"><unientity>C2AD</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 53 7D"><unientity>C2B4</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 53 7E"><unientity>C2B5</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 54 21"><unientity>C2B7</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 54 22"><unientity>C2B9</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 54 23"><unientity>C2DC</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 54 24"><unientity>C2DD</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 54 25"><unientity>C2E0</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 54 26"><unientity>C2E3</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 54 27"><unientity>C2E4</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 54 28"><unientity>C2EB</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 54 29"><unientity>C2EC</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 54 2A"><unientity>C2ED</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 54 2B"><unientity>C2EF</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 54 2C"><unientity>C2F1</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 54 2D"><unientity>C2F6</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 54 30"><unientity>C2F8</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 54 31"><unientity>C2F9</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 54 32"><unientity>C2FC</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 54 33"><unientity>C300</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 54 34"><unientity>C308</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 54 35"><unientity>C309</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 54 36"><unientity>C30B</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 54 37"><unientity>C30C</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 54 38"><unientity>C30D</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 54 39"><unientity>C313</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 54 3A"><unientity>C314</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 54 3B"><unientity>C315</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 54 3C"><unientity>C318</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 54 3D"><unientity>C31C</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 54 3E"><unientity>C324</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 54 3F"><unientity>C327</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 54 40"><unientity>C328</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 54 41"><unientity>C329</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 54 42"><unientity>C330</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 54 43"><unientity>C343</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 54 44"><unientity>C345</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 54 45"><unientity>C368</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 54 46"><unientity>C369</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 54 47"><unientity>C36C</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 54 48"><unientity>C370</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 54 49"><unientity>C372</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 54 4A"><unientity>C378</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 54 4B"><unientity>C379</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 54 4C"><unientity>C37C</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 54 4D"><unientity>C37D</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 54 4E"><unientity>C384</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 54 4F"><unientity>C388</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 54 50"><unientity>C399</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 54 51"><unientity>C3D8</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 54 52"><unientity>C3D9</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 54 53"><unientity>C3DC</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 54 54"><unientity>C3DF</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 54 55"><unientity>C3E0</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 54 56"><unientity>C3E8</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 54 57"><unientity>C3ED</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 54 58"><unientity>C3F4</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 54 59"><unientity>C3F5</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 54 5A"><unientity>C410</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 54 5B"><unientity>C42C</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 54 5C"><unientity>C430</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 54 5D"><unientity>C434</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 54 5E"><unientity>C43C</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 54 5F"><unientity>C43F</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 54 60"><unientity>C464</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 54 61"><unientity>C465</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 54 62"><unientity>C468</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 54 63"><unientity>C46C</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 54 64"><unientity>C474</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 54 65"><unientity>C479</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 54 66"><unientity>C480</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 54 67"><unientity>C494</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 54 68"><unientity>C4D4</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 54 69"><unientity>C4D5</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 54 6A"><unientity>C4F0</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 54 6B"><unientity>C4F1</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 54 6C"><unientity>C4F4</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 54 6D"><unientity>C4F8</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 54 6E"><unientity>C500</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 54 6F"><unientity>C501</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 54 70"><unientity>C50C</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 54 71"><unientity>C510</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 54 72"><unientity>C528</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 54 73"><unientity>C529</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 54 74"><unientity>C52C</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 54 75"><unientity>C530</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 54 76"><unientity>C538</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 54 77"><unientity>C539</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 54 78"><unientity>C53B</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 54 79"><unientity>C53D</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 54 7C"><unientity>C544</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 54 7D"><unientity>C545</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 54 7E"><unientity>C548</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 55 21"><unientity>C549</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 55 22"><unientity>C54A</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 55 23"><unientity>C54C</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 55 24"><unientity>C54E</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 55 25"><unientity>C553</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 55 26"><unientity>C554</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 55 27"><unientity>C555</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 55 28"><unientity>C557</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 55 29"><unientity>C558</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 55 2A"><unientity>C559</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 55 2B"><unientity>C55E</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 55 2C"><unientity>C55F</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 55 2D"><unientity>C560</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 55 2E"><unientity>C561</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 55 2F"><unientity>C564</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 55 30"><unientity>C568</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 55 31"><unientity>C570</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 55 32"><unientity>C571</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 55 33"><unientity>C573</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 55 34"><unientity>C574</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 55 35"><unientity>C575</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 55 36"><unientity>C57C</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 55 37"><unientity>C57D</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 55 38"><unientity>C580</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 55 39"><unientity>C584</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 55 3A"><unientity>C587</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 55 3B"><unientity>C58C</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 55 3C"><unientity>C58D</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 55 3D"><unientity>C58F</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 55 3E"><unientity>C590</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 55 3F"><unientity>C591</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 55 40"><unientity>C595</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 55 41"><unientity>C597</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 55 42"><unientity>C598</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 55 43"><unientity>C59C</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 55 44"><unientity>C5B4</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 55 45"><unientity>C5B5</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 55 46"><unientity>C5B6</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 55 47"><unientity>C5B8</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 55 48"><unientity>C5B9</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 55 49"><unientity>C5BA</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 55 4A"><unientity>C5BB</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 55 4B"><unientity>C5BC</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 55 4C"><unientity>C5BD</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 55 4D"><unientity>C5C4</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 55 4E"><unientity>C5C5</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 55 4F"><unientity>C5C6</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 55 50"><unientity>C5C7</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 55 51"><unientity>C5C8</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 55 52"><unientity>C5C9</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 55 53"><unientity>C5CA</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 55 54"><unientity>C5CC</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 55 55"><unientity>C5CE</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 55 56"><unientity>C5D0</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 55 57"><unientity>C5D1</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 55 58"><unientity>C5D4</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 55 59"><unientity>C5D8</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 55 5A"><unientity>C5E0</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 55 5B"><unientity>C5E1</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 55 5C"><unientity>C5E3</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 55 5D"><unientity>C5E5</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 55 5E"><unientity>C5EC</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 55 5F"><unientity>C5ED</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 55 60"><unientity>C5EE</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 55 61"><unientity>C5F0</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 55 62"><unientity>C5F4</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 55 63"><unientity>C5F6</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 55 64"><unientity>C5F7</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 55 65"><unientity>C5FC</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 55 66"><unientity>C5FD</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 55 67"><unientity>C5FE</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 55 68"><unientity>C5FF</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 55 69"><unientity>C600</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 55 6A"><unientity>C601</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 55 6B"><unientity>C606</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 55 6C"><unientity>C607</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 55 6D"><unientity>C608</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 55 6E"><unientity>C60C</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 55 6F"><unientity>C610</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 55 70"><unientity>C61B</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 55 71"><unientity>C624</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 55 72"><unientity>C625</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 55 73"><unientity>C628</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 55 74"><unientity>C62C</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 55 75"><unientity>C62D</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 55 76"><unientity>C62E</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 55 77"><unientity>C633</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 55 78"><unientity>C634</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 55 79"><unientity>C635</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 55 7A"><unientity>C637</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 55 7B"><unientity>C639</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 55 7C"><unientity>C63A</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 55 7D"><unientity>C63B</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 55 7E"><unientity>C640</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 56 21"><unientity>C641</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 56 22"><unientity>C644</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 56 23"><unientity>C648</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 56 24"><unientity>C650</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 56 25"><unientity>C651</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 56 26"><unientity>C653</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 56 27"><unientity>C654</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 56 29"><unientity>C65C</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 56 2A"><unientity>C65D</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 56 2B"><unientity>C660</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 56 2C"><unientity>C671</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 56 2D"><unientity>C678</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 56 2E"><unientity>C679</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 56 2F"><unientity>C67C</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 56 30"><unientity>C680</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 56 31"><unientity>C688</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 56 32"><unientity>C68B</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 56 33"><unientity>C68D</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 56 34"><unientity>C694</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 56 35"><unientity>C695</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 56 36"><unientity>C698</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 56 37"><unientity>C6A5</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 56 38"><unientity>C6A7</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 56 39"><unientity>C6A9</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 56 3A"><unientity>C6B0</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 56 3B"><unientity>C6B1</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 56 3C"><unientity>C6B4</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 56 3D"><unientity>C6B7</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 56 3E"><unientity>C6B8</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 56 3F"><unientity>C6B9</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 56 40"><unientity>C6BA</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 56 41"><unientity>C6C0</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 56 42"><unientity>C6C1</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 56 43"><unientity>C6C3</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 56 44"><unientity>C6C5</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 56 45"><unientity>C6CC</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 56 46"><unientity>C6CD</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 56 47"><unientity>C6D0</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 56 48"><unientity>C6D4</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 56 49"><unientity>C6DC</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 56 4A"><unientity>C6DD</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 56 4B"><unientity>C6DF</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 56 4C"><unientity>C6E0</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 56 4D"><unientity>C6E1</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 56 4E"><unientity>C6E8</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 56 4F"><unientity>C6E9</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 56 50"><unientity>C6EC</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 56 51"><unientity>C6F0</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 56 52"><unientity>C6F8</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 56 53"><unientity>C704</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 56 54"><unientity>C705</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 56 55"><unientity>C708</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 56 56"><unientity>C70C</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 56 57"><unientity>C714</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 56 58"><unientity>C717</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 56 59"><unientity>C719</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 56 5A"><unientity>C720</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 56 5B"><unientity>C721</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 56 5C"><unientity>C724</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 56 5D"><unientity>C728</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 56 5E"><unientity>C730</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 56 5F"><unientity>C735</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 56 60"><unientity>C737</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 56 61"><unientity>C73C</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 56 62"><unientity>C73D</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 56 63"><unientity>C740</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 56 64"><unientity>C744</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 56 65"><unientity>C74A</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 56 66"><unientity>C74C</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 56 67"><unientity>C74D</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 56 68"><unientity>C751</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 56 69"><unientity>C758</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 56 6A"><unientity>C774</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 56 6B"><unientity>C775</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 56 6C"><unientity>C778</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 56 6D"><unientity>C77C</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 56 6E"><unientity>C77D</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 56 6F"><unientity>C783</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 56 70"><unientity>C784</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 56 71"><unientity>C785</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 56 72"><unientity>C787</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 56 73"><unientity>C788</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 56 74"><unientity>C789</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 56 75"><unientity>C78A</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 56 76"><unientity>C78E</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 56 77"><unientity>C655</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 56 79"><unientity>C790</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 56 7A"><unientity>C791</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 56 7B"><unientity>C794</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 56 7C"><unientity>C796</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 56 7D"><unientity>C798</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 56 7E"><unientity>C7A0</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 57 21"><unientity>C7A1</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 57 22"><unientity>C7A3</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 57 23"><unientity>C7A4</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 57 24"><unientity>C7A5</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 57 25"><unientity>C7A6</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 57 26"><unientity>C7A7</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 57 27"><unientity>C7AC</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 57 28"><unientity>C7AD</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 57 29"><unientity>C7B0</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 57 2A"><unientity>C7B4</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 57 2B"><unientity>C7BC</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 57 2C"><unientity>C7BD</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 57 2D"><unientity>C7BF</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 57 2E"><unientity>C7C0</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 57 2F"><unientity>C7C1</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 57 30"><unientity>C7C8</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 57 31"><unientity>C7C9</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 57 32"><unientity>C7CC</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 57 33"><unientity>C7D8</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 57 34"><unientity>C800</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 57 35"><unientity>C801</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 57 36"><unientity>C804</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 57 37"><unientity>C808</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 57 38"><unientity>C80A</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 57 39"><unientity>C810</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 57 3A"><unientity>C811</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 57 3B"><unientity>C813</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 57 3C"><unientity>C814</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 57 3D"><unientity>C815</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 57 3E"><unientity>C816</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 57 3F"><unientity>C81C</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 57 40"><unientity>C81D</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 57 41"><unientity>C820</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 57 42"><unientity>C824</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 57 43"><unientity>C82C</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 57 44"><unientity>C82D</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 57 45"><unientity>C82F</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 57 46"><unientity>C838</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 57 47"><unientity>C83C</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 57 48"><unientity>C84C</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 57 49"><unientity>C870</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 57 4A"><unientity>C871</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 57 4B"><unientity>C874</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 57 4C"><unientity>C878</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 57 4D"><unientity>C87A</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 57 4E"><unientity>C880</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 57 4F"><unientity>C881</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 57 50"><unientity>C885</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 57 51"><unientity>C886</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 57 52"><unientity>C887</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 57 53"><unientity>C88B</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 57 54"><unientity>C88C</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 57 55"><unientity>C88D</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 57 56"><unientity>C890</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 57 57"><unientity>C894</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 57 58"><unientity>C89C</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 57 59"><unientity>C89D</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 57 5A"><unientity>C89F</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 57 5B"><unientity>C8A0</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 57 5D"><unientity>C8A8</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 57 5E"><unientity>C8AC</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 57 5F"><unientity>C8B0</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 57 60"><unientity>C8B8</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 57 61"><unientity>C8C4</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 57 62"><unientity>C8C8</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 57 63"><unientity>C8CC</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 57 64"><unientity>C8D4</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 57 65"><unientity>C8D5</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 57 66"><unientity>C8D7</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 57 67"><unientity>C8E0</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 57 68"><unientity>C8E4</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 57 69"><unientity>C8F0</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 57 6A"><unientity>C8F1</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 57 6B"><unientity>C8F5</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 57 6C"><unientity>C8FC</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 57 6D"><unientity>C8FD</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 57 6E"><unientity>C900</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 57 6F"><unientity>C904</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 57 70"><unientity>C906</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 57 71"><unientity>C90C</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 57 72"><unientity>C90D</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 57 73"><unientity>C90F</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 57 74"><unientity>C911</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 57 75"><unientity>C918</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 57 76"><unientity>C92C</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 57 77"><unientity>C950</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 57 79"><unientity>C954</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 57 7A"><unientity>C958</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 57 7B"><unientity>C960</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 57 7C"><unientity>C961</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 57 7D"><unientity>C96C</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 57 7E"><unientity>C970</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 58 21"><unientity>C974</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 58 22"><unientity>C988</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 58 23"><unientity>C989</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 58 24"><unientity>C98C</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 58 25"><unientity>C990</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 58 26"><unientity>C998</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 58 27"><unientity>C999</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 58 28"><unientity>C99D</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 58 29"><unientity>C9C0</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 58 2A"><unientity>C9C1</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 58 2B"><unientity>C9C4</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 58 2C"><unientity>C9C7</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 58 2D"><unientity>C9C8</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 58 2E"><unientity>C9CA</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 58 2F"><unientity>C9D0</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 58 30"><unientity>C9D1</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 58 31"><unientity>C9D3</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 58 32"><unientity>C9D5</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 58 33"><unientity>C9D6</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 58 34"><unientity>C9D9</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 58 35"><unientity>C9DA</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 58 38"><unientity>C9DC</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 58 39"><unientity>C9DD</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 58 3A"><unientity>C9E0</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 58 3B"><unientity>C9E2</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 58 3C"><unientity>C9E4</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 58 3E"><unientity>C9E7</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 58 3F"><unientity>C9EC</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 58 40"><unientity>C9ED</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 58 41"><unientity>C9EF</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 58 42"><unientity>C9F0</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 58 43"><unientity>C9F1</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 58 44"><unientity>C9F8</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 58 45"><unientity>C9F9</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 58 46"><unientity>C9FC</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 58 47"><unientity>CA00</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 58 48"><unientity>CA08</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 58 49"><unientity>CA09</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 58 4A"><unientity>CA0B</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 58 4B"><unientity>CA0C</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 58 4C"><unientity>CA0D</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 58 4D"><unientity>CA18</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 58 4E"><unientity>CA4C</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 58 4F"><unientity>CA4D</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 58 50"><unientity>CA50</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 58 51"><unientity>CA54</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 58 52"><unientity>CA5C</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 58 53"><unientity>CA5D</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 58 54"><unientity>CA61</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 58 55"><unientity>CA84</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 58 56"><unientity>CA98</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 58 57"><unientity>CABC</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 58 58"><unientity>CABD</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 58 59"><unientity>CAC0</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 58 5A"><unientity>CAC4</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 58 5B"><unientity>CACC</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 58 5C"><unientity>CACD</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 58 5D"><unientity>CAD1</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 58 5E"><unientity>CAD2</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 58 5F"><unientity>CAD3</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 58 60"><unientity>CAD8</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 58 61"><unientity>CAD9</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 58 62"><unientity>CB10</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 58 63"><unientity>CB14</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 58 64"><unientity>CB18</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 58 65"><unientity>CB20</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 58 66"><unientity>CB21</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 58 67"><unientity>CB41</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 58 68"><unientity>CB48</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 58 69"><unientity>CB49</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 58 6A"><unientity>CB50</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 58 6B"><unientity>CB58</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 58 6C"><unientity>CB59</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 58 6D"><unientity>CB5D</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 58 6E"><unientity>CB64</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 58 6F"><unientity>CBB8</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 58 70"><unientity>CBD4</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 58 71"><unientity>CBE4</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 58 72"><unientity>CBE7</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 58 73"><unientity>CC0C</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 58 74"><unientity>CC0D</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 58 75"><unientity>CC10</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 58 76"><unientity>CC14</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 58 77"><unientity>CC1C</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 58 78"><unientity>CC1D</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 58 79"><unientity>CC21</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 58 7A"><unientity>CC22</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 58 7B"><unientity>CC27</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 58 7E"><unientity>CC28</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 59 21"><unientity>CC29</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 59 22"><unientity>CC2C</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 59 23"><unientity>CC2E</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 59 24"><unientity>CC2F</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 59 25"><unientity>CC30</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 59 26"><unientity>CC38</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 59 27"><unientity>CC39</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 59 28"><unientity>CC3B</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 59 29"><unientity>CC3C</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 59 2A"><unientity>CC3D</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 59 2B"><unientity>CC3E</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 59 2C"><unientity>CC3F</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 59 2D"><unientity>CC44</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 59 2E"><unientity>CC45</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 59 2F"><unientity>CC48</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 59 30"><unientity>CC4C</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 59 31"><unientity>CC54</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 59 32"><unientity>CC55</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 59 33"><unientity>CC58</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 59 34"><unientity>CC59</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 59 35"><unientity>CC60</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 59 36"><unientity>CC64</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 59 37"><unientity>CC70</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 59 38"><unientity>CC71</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 59 39"><unientity>CC98</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 59 3A"><unientity>CC99</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 59 3B"><unientity>CC9C</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 59 3C"><unientity>CCA0</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 59 3D"><unientity>CCA8</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 59 3E"><unientity>CCA9</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 59 3F"><unientity>CCAB</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 59 40"><unientity>CCAD</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 59 41"><unientity>CCB4</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 59 42"><unientity>CCB5</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 59 43"><unientity>CCB8</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 59 44"><unientity>CCBC</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 59 45"><unientity>CCC7</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 59 46"><unientity>CCD0</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 59 47"><unientity>CCE4</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 59 48"><unientity>CD08</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 59 49"><unientity>CD09</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 59 4A"><unientity>CD0C</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 59 4B"><unientity>CD10</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 59 4C"><unientity>CD18</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 59 4D"><unientity>CD19</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 59 4E"><unientity>CD1B</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 59 4F"><unientity>CD1D</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 59 50"><unientity>CD2C</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 59 51"><unientity>CD5C</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 59 52"><unientity>CD78</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 59 53"><unientity>CD94</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 59 54"><unientity>CD95</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 59 55"><unientity>CD98</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 59 56"><unientity>CD9C</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 59 57"><unientity>CDA4</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 59 58"><unientity>CDA5</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 59 59"><unientity>CDA7</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 59 5A"><unientity>CDA9</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 59 5B"><unientity>CDB0</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 59 5C"><unientity>CDC4</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 59 5D"><unientity>CDCC</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 59 5E"><unientity>CDE8</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 59 5F"><unientity>CE04</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 59 60"><unientity>CE20</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 59 61"><unientity>CE21</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 59 62"><unientity>CE30</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 59 63"><unientity>CE35</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 59 64"><unientity>CE58</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 59 65"><unientity>CE59</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 59 66"><unientity>CE5C</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 59 67"><unientity>CE60</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 59 68"><unientity>CE61</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 59 69"><unientity>CE68</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 59 6A"><unientity>CE69</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 59 6B"><unientity>CE6B</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 59 6C"><unientity>CE6D</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 59 6F"><unientity>CE74</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 59 70"><unientity>CE75</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 59 71"><unientity>CE78</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 59 72"><unientity>CE7C</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 59 73"><unientity>CE84</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 59 74"><unientity>CE85</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 59 75"><unientity>CE87</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 59 76"><unientity>CE89</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 59 77"><unientity>CE90</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 59 78"><unientity>CE91</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 59 79"><unientity>CE94</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 59 7A"><unientity>CE98</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 59 7B"><unientity>CEA0</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 59 7C"><unientity>CEA1</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 59 7D"><unientity>CEA3</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 5A 21"><unientity>CEA5</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 5A 22"><unientity>CEAC</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 5A 23"><unientity>CEAD</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 5A 24"><unientity>CEE4</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 5A 26"><unientity>CEE8</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 5A 27"><unientity>CEEC</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 5A 28"><unientity>CEF4</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 5A 29"><unientity>CEF5</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 5A 2A"><unientity>CEF7</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 5A 2C"><unientity>CEF9</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 5A 2E"><unientity>CF00</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 5A 2F"><unientity>CF01</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 5A 30"><unientity>CF04</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 5A 31"><unientity>CF08</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 5A 32"><unientity>CF10</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 5A 33"><unientity>CF11</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 5A 34"><unientity>CF13</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 5A 35"><unientity>CF15</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 5A 36"><unientity>CF1C</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 5A 37"><unientity>CF20</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 5A 38"><unientity>CF24</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 5A 39"><unientity>CF2C</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 5A 3A"><unientity>CF2D</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 5A 3B"><unientity>CF2F</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 5A 3C"><unientity>CF30</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 5A 3D"><unientity>CF54</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 5A 3E"><unientity>CF55</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 5A 3F"><unientity>CF58</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 5A 40"><unientity>CF5C</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 5A 41"><unientity>CF64</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 5A 42"><unientity>CF65</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 5A 43"><unientity>CF67</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 5A 44"><unientity>CF69</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 5A 45"><unientity>CF70</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 5A 46"><unientity>CF71</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 5A 47"><unientity>CF74</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 5A 48"><unientity>CF78</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 5A 49"><unientity>CF80</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 5A 4A"><unientity>CF85</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 5A 4B"><unientity>CF8C</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 5A 4C"><unientity>CF8D</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 5A 4D"><unientity>CFA1</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 5A 4F"><unientity>CFB0</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 5A 50"><unientity>CFC4</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 5A 51"><unientity>CFE0</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 5A 52"><unientity>CFE1</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 5A 53"><unientity>CFE4</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 5A 54"><unientity>CFE8</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 5A 55"><unientity>CFF0</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 5A 56"><unientity>CFF3</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 5A 57"><unientity>CFF5</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 5A 58"><unientity>CFFC</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 5A 5A"><unientity>D018</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 5A 5B"><unientity>D02D</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 5A 5C"><unientity>D034</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 5A 5D"><unientity>D035</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 5A 5E"><unientity>D038</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 5A 5F"><unientity>D050</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 5A 60"><unientity>D06C</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 5A 61"><unientity>D070</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 5A 62"><unientity>D074</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 5A 63"><unientity>D07C</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 5A 64"><unientity>D07D</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 5A 65"><unientity>D081</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 5A 66"><unientity>D0A4</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 5A 67"><unientity>D0A5</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 5A 68"><unientity>D0A8</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 5A 69"><unientity>D0AC</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 5A 6A"><unientity>D0B4</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 5A 6B"><unientity>D0B5</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 5A 6C"><unientity>D0B7</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 5A 6D"><unientity>D0B9</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 5A 70"><unientity>D0C0</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 5A 71"><unientity>D0C1</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 5A 72"><unientity>D0C4</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 5A 73"><unientity>D0C8</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 5A 74"><unientity>D0C9</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 5A 75"><unientity>D0D0</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 5A 76"><unientity>D0D1</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 5A 77"><unientity>D0D3</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 5A 78"><unientity>D0D4</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 5A 79"><unientity>D0D5</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 5A 7A"><unientity>D0DC</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 5A 7B"><unientity>D0DD</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 5A 7C"><unientity>D0E0</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 5A 7D"><unientity>D0E4</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 5A 7E"><unientity>D0EC</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 5B 21"><unientity>D0ED</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 5B 22"><unientity>D0EF</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 5B 23"><unientity>D0F0</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 5B 24"><unientity>D0F1</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 5B 25"><unientity>D130</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 5B 26"><unientity>D131</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 5B 27"><unientity>D134</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 5B 28"><unientity>D138</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 5B 29"><unientity>D140</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 5B 2A"><unientity>D141</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 5B 2B"><unientity>D143</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 5B 2C"><unientity>D144</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 5B 2D"><unientity>D145</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 5B 2E"><unientity>D14C</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 5B 2F"><unientity>D14D</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 5B 30"><unientity>D150</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 5B 31"><unientity>D154</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 5B 32"><unientity>D15C</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 5B 33"><unientity>D15D</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 5B 34"><unientity>D15F</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 5B 35"><unientity>D160</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 5B 36"><unientity>D161</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 5B 37"><unientity>D168</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 5B 38"><unientity>D1A0</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 5B 39"><unientity>D1A1</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 5B 3A"><unientity>D1A4</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 5B 3B"><unientity>D1A8</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 5B 3C"><unientity>D1B0</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 5B 3D"><unientity>D1B1</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 5B 3E"><unientity>D1B3</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 5B 3F"><unientity>D1B5</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 5B 40"><unientity>D1D8</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 5B 41"><unientity>D1F4</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 5B 43"><unientity>D22C</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 5B 44"><unientity>D22D</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 5B 45"><unientity>D230</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 5B 46"><unientity>D234</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 5B 47"><unientity>D23C</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 5B 48"><unientity>D23D</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 5B 49"><unientity>D23F</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 5B 4A"><unientity>D241</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 5B 4B"><unientity>D264</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 5B 4C"><unientity>D277</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 5B 4D"><unientity>D280</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 5B 4E"><unientity>D284</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 5B 4F"><unientity>D288</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 5B 50"><unientity>D290</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 5B 51"><unientity>D291</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 5B 52"><unientity>D293</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 5B 53"><unientity>D295</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 5B 54"><unientity>D29C</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 5B 57"><unientity>D2AC</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 5B 59"><unientity>D2B8</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 5B 5A"><unientity>D2B9</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 5B 5B"><unientity>D2BC</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 5B 5C"><unientity>D2BF</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 5B 5D"><unientity>D2C0</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 5B 5E"><unientity>D2C8</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 5B 5F"><unientity>D2C9</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 5B 60"><unientity>D2CB</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 5B 61"><unientity>D2D4</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 5B 62"><unientity>D1F8</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 5B 63"><unientity>D2F0</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 5B 64"><unientity>D2F1</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 5B 65"><unientity>D2F4</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 5B 66"><unientity>D2F8</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 5B 67"><unientity>D300</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 5B 68"><unientity>D301</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 5B 69"><unientity>D305</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 5B 6C"><unientity>D30C</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 5B 6D"><unientity>D30D</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 5B 6E"><unientity>D30E</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 5B 6F"><unientity>D310</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 5B 70"><unientity>D314</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 5B 71"><unientity>D31C</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 5B 72"><unientity>D31D</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 5B 73"><unientity>D31F</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 5B 74"><unientity>D320</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 5B 75"><unientity>D321</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 5B 76"><unientity>D325</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 5B 77"><unientity>D328</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 5B 78"><unientity>D329</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 5B 79"><unientity>D32C</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 5B 7A"><unientity>D330</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 5B 7B"><unientity>D338</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 5B 7C"><unientity>D339</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 5B 7D"><unientity>D33B</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 5B 7E"><unientity>D33C</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 5C 21"><unientity>D33D</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 5C 23"><unientity>D37C</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 5C 24"><unientity>D37D</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 5C 25"><unientity>D380</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 5C 26"><unientity>D384</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 5C 27"><unientity>D38C</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 5C 28"><unientity>D38D</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 5C 29"><unientity>D38F</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 5C 2A"><unientity>D390</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 5C 2B"><unientity>D391</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 5C 2C"><unientity>D398</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 5C 2D"><unientity>D399</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 5C 2E"><unientity>D39C</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 5C 2F"><unientity>D3A0</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 5C 30"><unientity>D3A8</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 5C 31"><unientity>D3A9</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 5C 32"><unientity>D3AB</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 5C 33"><unientity>D3AD</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 5C 34"><unientity>D3B4</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 5C 35"><unientity>D3B5</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 5C 36"><unientity>D3B8</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 5C 37"><unientity>D3BC</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 5C 38"><unientity>D3C4</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 5C 39"><unientity>D3C5</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 5C 3A"><unientity>D3C8</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 5C 3B"><unientity>D3C9</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 5C 3C"><unientity>D3D0</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 5C 3D"><unientity>D3EC</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 5C 3E"><unientity>D3ED</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 5C 3F"><unientity>D3F0</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 5C 40"><unientity>D3F4</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 5C 41"><unientity>D3FC</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 5C 42"><unientity>D3FD</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 5C 43"><unientity>D3FF</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 5C 44"><unientity>D401</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 5C 45"><unientity>D440</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 5C 46"><unientity>D444</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 5C 47"><unientity>D45C</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 5C 48"><unientity>D46F</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 5C 49"><unientity>D478</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 5C 4A"><unientity>D479</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 5C 4B"><unientity>D47C</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 5C 4C"><unientity>D480</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 5C 4D"><unientity>D488</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 5C 4E"><unientity>D489</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 5C 4F"><unientity>D48B</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 5C 50"><unientity>D48D</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 5C 51"><unientity>D4CC</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 5C 52"><unientity>D4E8</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 5C 53"><unientity>D504</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 5C 55"><unientity>D508</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 5C 56"><unientity>D50C</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 5C 57"><unientity>D514</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 5C 58"><unientity>D515</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 5C 59"><unientity>D53C</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 5C 5A"><unientity>D53D</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 5C 5B"><unientity>D540</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 5C 5C"><unientity>D544</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 5C 5D"><unientity>D54C</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 5C 5E"><unientity>D54D</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 5C 5F"><unientity>D54F</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 5C 60"><unientity>D551</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 5C 63"><unientity>D558</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 5C 64"><unientity>D559</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 5C 65"><unientity>D55C</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 5C 66"><unientity>D560</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 5C 67"><unientity>D565</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 5C 68"><unientity>D568</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 5C 69"><unientity>D569</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 5C 6A"><unientity>D56B</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 5C 6B"><unientity>D56C</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 5C 6C"><unientity>D56D</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 5C 6D"><unientity>D571</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 5C 6E"><unientity>D574</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 5C 6F"><unientity>D575</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 5C 70"><unientity>D578</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 5C 71"><unientity>D57C</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 5C 72"><unientity>D584</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 5C 73"><unientity>D585</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 5C 74"><unientity>D587</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 5C 75"><unientity>D588</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 5C 76"><unientity>D589</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 5C 77"><unientity>D590</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 5C 78"><unientity>D5A5</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 5C 79"><unientity>D5C8</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 5C 7A"><unientity>D5C9</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 5C 7B"><unientity>D5CC</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 5C 7C"><unientity>D5D0</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 5C 7D"><unientity>D5D2</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 5C 7E"><unientity>D5D8</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 5D 21"><unientity>D5D9</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 5D 22"><unientity>D5DB</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 5D 23"><unientity>D5DD</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 5D 24"><unientity>D5E4</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 5D 25"><unientity>D5E5</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 5D 26"><unientity>D5E8</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 5D 27"><unientity>D5EC</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 5D 28"><unientity>D5F4</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 5D 29"><unientity>D5F5</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 5D 2A"><unientity>D5F7</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 5D 2B"><unientity>D5F9</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 5D 2C"><unientity>D600</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 5D 2D"><unientity>D601</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 5D 2E"><unientity>D604</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 5D 2F"><unientity>D608</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 5D 30"><unientity>D610</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 5D 31"><unientity>D611</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 5D 32"><unientity>D613</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 5D 33"><unientity>D614</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 5D 34"><unientity>D615</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 5D 35"><unientity>D61C</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 5D 36"><unientity>D638</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 5D 37"><unientity>D639</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 5D 38"><unientity>D63C</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 5D 39"><unientity>D640</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 5D 3A"><unientity>D648</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 5D 3B"><unientity>D649</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 5D 3C"><unientity>D64B</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 5D 3D"><unientity>D64D</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 5D 3F"><unientity>D654</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 5D 40"><unientity>D655</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 5D 41"><unientity>D658</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 5D 42"><unientity>D65C</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 5D 44"><unientity>D667</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 5D 45"><unientity>D669</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 5D 46"><unientity>D670</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 5D 47"><unientity>D671</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 5D 48"><unientity>D683</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 5D 4A"><unientity>D68C</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 5D 4B"><unientity>D68D</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 5D 4C"><unientity>D69F</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 5D 4D"><unientity>D6A1</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 5D 4E"><unientity>D6A8</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 5D 4F"><unientity>D6C4</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 5D 50"><unientity>D6C5</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 5D 51"><unientity>D6C8</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 5D 52"><unientity>D6CC</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 5D 53"><unientity>D6D1</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 5D 54"><unientity>D6D4</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 5D 55"><unientity>D6D7</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 5D 56"><unientity>D6E0</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 5D 57"><unientity>D6E4</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 5D 58"><unientity>D6E8</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 5D 59"><unientity>D6F0</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 5D 5A"><unientity>D6FC</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 5D 5C"><unientity>D700</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 5D 5D"><unientity>D711</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 5D 5E"><unientity>D718</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 5D 5F"><unientity>D719</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 5D 60"><unientity>D71C</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 5D 61"><unientity>D720</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 5D 62"><unientity>D728</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 5D 63"><unientity>D729</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 5D 65"><unientity>D72D</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 5D 66"><unientity>D734</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 5D 67"><unientity>D73C</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 5D 68"><unientity>D744</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 5D 69"><unientity>D749</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 5D 6A"><unientity>D750</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 5D 6B"><unientity>D751</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 5D 6C"><unientity>D754</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 5D 6D"><unientity>D757</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 5D 6E"><unientity>D758</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 5D 6F"><unientity>D759</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 5D 70"><unientity>D760</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 5D 71"><unientity>D761</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 5D 72"><unientity>D763</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 5D 73"><unientity>D765</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 5D 74"><unientity>D769</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 5D 75"><unientity>D76C</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 5D 76"><unientity>D770</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 5D 77"><unientity>D774</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 5D 78"><unientity>D788</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 5D 79"><unientity>D789</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 5D 7A"><unientity>D78C</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 5D 7B"><unientity>D790</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 5D 7C"><unientity>D798</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 5D 7D"><unientity>D799</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 5D 7E"><unientity>D79B</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 5E 21"><unientity>D79D</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 76 21"><unientity>3181</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 76 22"><unientity>3186</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 76 23"><unientity>317F</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 76 24"><unientity>E8B0</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 76 25"><unientity>E8B1</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 76 40"><unientity>E8B2</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 76 41"><unientity>E8B3</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 76 42"><unientity>E8B4</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 76 43"><unientity>E8B5</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 76 44"><unientity>E8B6</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 76 45"><unientity>E8B7</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 76 46"><unientity>E8B8</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 76 47"><unientity>E8B9</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 76 48"><unientity>E8BA</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 76 49"><unientity>E8BB</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 76 4A"><unientity>E8BC</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 76 4B"><unientity>E8BD</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 76 4C"><unientity>E8BE</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 76 4D"><unientity>E8BF</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 76 4E"><unientity>E8C0</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 76 4F"><unientity>E8C1</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 76 50"><unientity>E8C2</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 76 51"><unientity>E8C3</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 76 52"><unientity>E8C4</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 76 53"><unientity>E8C5</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 76 54"><unientity>E8C6</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 76 55"><unientity>E8C7</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 76 56"><unientity>E8C8</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 76 57"><unientity>E8C9</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 77 21"><unientity>AD35</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 77 22"><unientity>AD7B</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 77 23"><unientity>E8CA</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 77 24"><unientity>AD89</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 77 25"><unientity>AD9D</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 77 26"><unientity>ADB9</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 77 27"><unientity>ADD5</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 77 28"><unientity>AE07</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 77 29"><unientity>AE0E</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 77 2A"><unientity>AE0F</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 77 2B"><unientity>AE11</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 77 2C"><unientity>AE14</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 77 2D"><unientity>AE5F</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 77 2E"><unientity>AEED</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 77 2F"><unientity>AF09</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 77 30"><unientity>AF50</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 77 31"><unientity>AFBF</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 77 32"><unientity>B060</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 77 33"><unientity>B9C4</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 77 34"><unientity>C54D</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 77 35"><unientity>C54F</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 77 36"><unientity>C552</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 77 37"><unientity>C5AB</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 77 38"><unientity>C5B1</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 77 39"><unientity>C61C</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 77 3A"><unientity>C61D</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 77 3B"><unientity>C6FD</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 77 3C"><unientity>E8CB</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 77 3D"><unientity>C733</unientity><desc>Korean hangul</desc></character>
+<character hex="6F 77 3E"><unientity>CB4C</unientity><desc>Korean hangul</desc></character>
+<character hex="70 4C 2A"><unientity>915E</unientity><desc>East Asian ideograph</desc></character>
+<character hex="70 58 6F"><unientity>4EEB</unientity><desc>East Asian ideograph</desc></character>
+<character hex="70 5B 71"><unientity>57B4</unientity><desc>East Asian ideograph</desc></character>
+<character hex="70 5C 43"><unientity>82CA</unientity><desc>East Asian ideograph</desc></character>
+<character hex="70 5C 50"><unientity>82C4</unientity><desc>East Asian ideograph</desc></character>
+<character hex="70 5D 46"><unientity>841C</unientity><desc>East Asian ideograph</desc></character>
+<character hex="70 5D 5C"><unientity>8488</unientity><desc>East Asian ideograph</desc></character>
+<character hex="70 5F 30"><unientity>7519</unientity><desc>East Asian ideograph</desc></character>
+<character hex="70 5F 39"><unientity>5416</unientity><desc>East Asian ideograph</desc></character>
+<character hex="70 5F 50"><unientity>549D</unientity><desc>East Asian ideograph</desc></character>
+<character hex="70 5F 51"><unientity>54D0</unientity><desc>East Asian ideograph</desc></character>
+<character hex="70 5F 54"><unientity>54B4</unientity><desc>East Asian ideograph</desc></character>
+<character hex="70 5F 5B"><unientity>54A3</unientity><desc>East Asian ideograph</desc></character>
+<character hex="70 5F 61"><unientity>54DA</unientity><desc>East Asian ideograph</desc></character>
+<character hex="70 60 2D"><unientity>55B9</unientity><desc>East Asian ideograph</desc></character>
+<character hex="70 60 3A"><unientity>55EA</unientity><desc>East Asian ideograph</desc></character>
+<character hex="70 60 4C"><unientity>55F5</unientity><desc>East Asian ideograph</desc></character>
+<character hex="70 60 54"><unientity>5623</unientity><desc>East Asian ideograph</desc></character>
+<character hex="70 60 58"><unientity>562D</unientity><desc>East Asian ideograph</desc></character>
+<character hex="70 60 67"><unientity>567B</unientity><desc>East Asian ideograph</desc></character>
+<character hex="70 61 31"><unientity>5C9C</unientity><desc>East Asian ideograph</desc></character>
+<character hex="70 62 2A"><unientity>7339</unientity><desc>East Asian ideograph</desc></character>
+<character hex="70 62 47"><unientity>9987</unientity><desc>East Asian ideograph</desc></character>
+<character hex="70 62 4E"><unientity>9995</unientity><desc>East Asian ideograph</desc></character>
+<character hex="70 63 40"><unientity>61B7</unientity><desc>East Asian ideograph</desc></character>
+<character hex="70 66 40"><unientity>80EC</unientity><desc>East Asian ideograph</desc></character>
+<character hex="70 6B 42"><unientity>80BC</unientity><desc>East Asian ideograph</desc></character>
+<character hex="70 6B 44"><unientity>80BD</unientity><desc>East Asian ideograph</desc></character>
+<character hex="70 6B 4C"><unientity>80E9</unientity><desc>East Asian ideograph</desc></character>
+<character hex="70 6B 5B"><unientity>810E</unientity><desc>East Asian ideograph</desc></character>
+<character hex="70 6B 5F"><unientity>8112</unientity><desc>East Asian ideograph</desc></character>
+<character hex="70 6B 6A"><unientity>8159</unientity><desc>East Asian ideograph</desc></character>
+<character hex="70 6C 42"><unientity>70BB</unientity><desc>East Asian ideograph</desc></character>
+<character hex="70 6C 43"><unientity>70C0</unientity><desc>East Asian ideograph</desc></character>
+<character hex="70 6D 3B"><unientity>7818</unientity><desc>East Asian ideograph</desc></character>
+<character hex="70 6D 3F"><unientity>781C</unientity><desc>East Asian ideograph</desc></character>
+<character hex="70 6D 45"><unientity>783C</unientity><desc>East Asian ideograph</desc></character>
+<character hex="70 72 7D"><unientity>87A8</unientity><desc>East Asian ideograph</desc></character>
+<character hex="70 73 60"><unientity>7B7B</unientity><desc>East Asian ideograph</desc></character>
+<character hex="70 73 6E"><unientity>7BA2</unientity><desc>East Asian ideograph</desc></character>
+<character hex="70 74 38"><unientity>823E</unientity><desc>East Asian ideograph</desc></character>
+<character hex="70 75 23"><unientity>9170</unientity><desc>East Asian ideograph</desc></character>
+<character hex="70 75 5D"><unientity>8E3A</unientity><desc>East Asian ideograph</desc></character>
+<character hex="70 77 5D"><unientity>9B0F</unientity><desc>East Asian ideograph</desc></character>
+</entitymap>
\ No newline at end of file
diff --git a/src/charneg-3.asn b/src/charneg-3.asn
new file mode 100644 (file)
index 0000000..d178e3a
--- /dev/null
@@ -0,0 +1,212 @@
+NegotiationRecordDefinition-charSetandLanguageNegotiation-3
+{Z39-50-negotiationRecordDefinition CharSetandLanguageNegotiation-3 (3)}
+DEFINITIONS ::= BEGIN
+IMPORTS LanguageCode FROM RecordSyntax-explain;
+
+CharSetandLanguageNegotiation ::= CHOICE{
+   proposal [1]   IMPLICIT OriginProposal,
+   response [2]   IMPLICIT TargetResponse}
+--
+-- For character sets:
+--  Origin proposes one, two, or all three of the following, in order of
+--  preference:
+--       (a) 2022 character sets.
+--       (b) 10646 character set.
+--       (c) Private character set.
+--
+--    The target responds with one of (a), (b), or (c), indicating the
+--    character set(s) to be supported for all name and message strings.
+--
+--    If the origin includes (a),
+--     the origin proposes:
+--        (1)  A proposed environment: 7-bit, 8-bit, or no-preference.
+--        (2)  A set of iso 2022 registration numbers.
+--        (3)  One or more proposed initial sets of registration numbers,
+--             for c0, c1, g0, g1, g2 and g3. These must come from (2).
+--        (4)  The proposed encoding level.
+--      And if the target selects (a), it responds with:
+--        (1)  A selected environment: 7-bit or 8-bit.
+--        (2)  A subset of the set of iso 2022 registration numbers proposed
+--             by the origin.
+--        (3)  The initial set of registrations, which must come from (2)
+--             but need not be from the set of initial registrations proposed
+--             by the origin.
+--        (4)  The encoding level; less than or equal to that proposed.
+--
+--    If the origin includes (b),
+--     The origin proposes:
+--        (1)  (optionally) A list of collections (i.e. subsets of characters from the
+--             complete 10646 definition).
+--        (2)  An implementation level.
+--        (3) Syntax/form: e.g. ucs-2, ucs-4, utf-8, utf-16.
+--    And if the target selects (b), it responds by choosing a subset of the
+--    collections proposed by the origin in (1) and an implementation level less
+--    than or equal to that proposed by the origin in (2).
+--
+--    If the origin includes (c), the origin proposes one of the following:
+--        (1)  A list of private character sets, by one or more object
+--             identifiers.
+--        (2)  A list of private character sets, by an EXTERNAL.
+--        (3)  An indication to use a private, previously agreed upon
+--             character set.
+--    And if the target selects (c):
+--    -  If the origin proposed (1), the target should respond with (1), and
+--       the list of object identifiers should be a subset of the list that
+--       the origin included.
+--    -  If the origin proposed (2), the target should respond with (2), using
+--       the same EXTERNAL definition (but not necessarily the same content)
+--       used by the origin.
+--    -  If the origin proposed (3), the target should respond with (3).
+--
+--    For Languages:
+--     The origin optionally proposes one or more language codes. The target
+--     response may include a single language code, which indicates the
+--     language to be used for all message strings. The target may include or
+--     omit this, whether or not the origin included a proposed set, and the
+--     language code indicated need not be from among those proposed.
+--
+--
+
+OriginProposal ::= SEQUENCE {
+  proposedCharSets           [1] IMPLICIT SEQUENCE OF CHOICE{
+               -- Each should occur at most once, and in order of preference
+               -- (the "order of preference" is the reason why this is
+               -- "SEQUENCE OF CHOICE" rather than just "SEQUENCE")
+                                iso2022        [1] Iso2022,
+                                iso10646       [2] IMPLICIT Iso10646,
+                                private        [3] PrivateCharacterSet} OPTIONAL,
+                                   -- proposedCharSets must be omitted
+                                   -- if origin proposes version 2
+  proposedlanguages          [2] IMPLICIT SEQUENCE OF LanguageCode OPTIONAL,
+  recordsInSelectedCharSets  [3] IMPLICIT BOOLEAN OPTIONAL
+                       -- default 'false'. See rule 6 above.
+                       }
+
+TargetResponse ::= SEQUENCE{
+  selectedCharSets           [1] CHOICE{
+                                   iso2022        [1] Iso2022,
+                                   iso10646       [2] IMPLICIT Iso10646,
+                                   private        [3] PrivateCharacterSet,
+                                   none           [4] IMPLICIT NULL
+                                            -- If selected, no negotiation
+                                            -- is assumed to be in force
+                                            -- for character sets.
+                                                     } OPTIONAL,
+                                   -- Omitted if and only if proposedCharSets
+                                   -- was Omitted in the request.
+  selectedLanguage           [2] IMPLICIT LanguageCode OPTIONAL,
+  recordsInSelectedCharSets  [3] IMPLICIT BOOLEAN OPTIONAL
+                  -- Omitted if and only if 'recordsInSelectedCharSets' was omitted
+                  -- in the request.  See rule 6 above.
+                       }
+
+
+PrivateCharacterSet ::= CHOICE{
+   viaOid                 [1] IMPLICIT SEQUENCE OF OBJECT IDENTIFIER,
+   externallySpecified    [2] IMPLICIT EXTERNAL,
+   previouslyAgreedUpon   [3] IMPLICIT NULL}
+
+-- IMPORTED
+-- LanguageCode ::= GeneralString -- from ANSI Z39.53-1994
+
+-- Definition of ISO2022
+-- For ISO 2022, the following is negotiated:
+--   1)   The environment: 7-bit or 8-bit;
+--   2)   a set of registration numbers (from the ISO Register of coded
+--        character sets) for graphical and  control character sets;
+--   3)   g0, g1, g2, g3, c0, c1, the registration numbers of the graphical and
+--        control character sets that are  initially designated to g0, g1, etc.
+--       The origin submits one or more sequences of values for
+--        g0, g1, g2, g3, c0, c1 (for each sequence: at least one of
+--        g0 and g1 must be included; g2 and g3 are optional and
+--         may be included only if g1 is included;
+--        c0 should be included; and c1 is optional); the target
+--        selects one of the proposed sequences.
+--   4)   gleft: which of g0, g1, g2 or g3, initially has GL shift status in
+--        an 8-bit environment or has shift status in a 7-bit environment; and
+--   5)   gright: which of g1, g2 or g3 initially has GR shift status in an
+--        8-bit environment.
+
+Iso2022 ::= CHOICE{
+ originProposal   [1] IMPLICIT SEQUENCE{
+            proposedEnvironment    [0] Environment OPTIONAL,
+                                         -- omitted means no preference
+            proposedSets           [1] IMPLICIT SEQUENCE OF INTEGER,
+            proposedInitialSets    [2] IMPLICIT SEQUENCE OF
+                                             InitialSet,
+            proposedLeftAndRight   [3] IMPLICIT LeftAndRight},
+ targetResponse   [2] IMPLICIT SEQUENCE{
+            selectedEnvironment    [0] Environment,
+            selectedSets           [1] IMPLICIT SEQUENCE OF INTEGER,
+            selectedinitialSet     [2] IMPLICIT InitialSet,
+            selectedLeftAndRight   [3] IMPLICIT LeftAndRight}}
+
+Environment ::= CHOICE{
+   sevenBit    [1] IMPLICIT NULL,
+   eightBit    [2] IMPLICIT NULL}
+
+InitialSet::= SEQUENCE{
+      g0    [0] IMPLICIT INTEGER OPTIONAL,
+      g1    [1] IMPLICIT INTEGER OPTIONAL,
+                           -- one of g0 and g1 must be included
+      g2    [2] IMPLICIT INTEGER OPTIONAL,
+      g3    [3] IMPLICIT INTEGER OPTIONAL,
+                           --g2 and/or g3 may be included
+                           -- only if g1 was included
+      c0    [4] IMPLICIT INTEGER,
+      c1    [5] IMPLICIT INTEGER OPTIONAL}
+
+LeftAndRight ::= SEQUENCE{
+            gLeft         [3] IMPLICIT INTEGER{
+                                   g0 (0),
+                                   g1 (1),
+                                   g2 (2),
+                                   g3 (3)},
+            gRight        [4] IMPLICIT INTEGER{
+                                   g1 (1),
+                                   g2 (2),
+                                   g3 (3)} OPTIONAL}
+
+-- Definition of Iso10646
+--
+-- The 10646 object identifier looks like:
+--        1.0.10646.1.implementationLevel.repertoireSubset.arc1.arc2. ....
+--
+-- (The second '1' is for "part 1" of 10646.)
+--
+-- ImplementationLevel is 1-3
+--
+-- repertoireSubset is 0 or 1, for 'all' or 'collections'.
+-- The arcs are present only if repertoireSubset is 'collections',
+-- in which case  arc1, arc2, etc., are the
+-- identifiers of collections of character repertoires.
+--
+-- There is a second 10646 oid, for specifying syntax/form:
+--        1.0.10646.1.0.form
+--
+-- (The second '0' represents "transfer syntax".)
+--
+--  where values of form include:
+--  2: ucs-2
+--  4: ucs-4
+--  5: utf-16
+--  8: utf-8
+
+Iso10646 ::= SEQUENCE{
+   collections    [1] IMPLICIT OBJECT IDENTIFIER OPTIONAL,
+                       --oid of form 1.0.10646.1.implementationLevel
+                       -- .repertoireSubset.arc1.arc2. ....
+                       -- Target to choose a subset of the collections
+                       -- proposed by the origin, and an implementation level
+                       -- less than or equal to that proposed.
+                       --
+                       -- when 'collections' is omitted,
+                       -- 'implementationLevel' defaults to 3.
+                       --
+   encodingLevel  [2] IMPLICIT OBJECT IDENTIFIER
+                       -- oid of form 1.0.10646.1.0.form
+                    -- where value of 'form' is 2, 4, 5, or 8
+                      -- for ucs-2, ucs-4, utf-16, utf-8
+                                   }
+END
+
diff --git a/src/charneg.c b/src/charneg.c
new file mode 100644 (file)
index 0000000..ebd10fc
--- /dev/null
@@ -0,0 +1,376 @@
+/* 
+ $ $Id: charneg.c,v 1.1 2003-10-27 12:21:30 adam Exp $
+ * Helper functions for Character Set and Language Negotiation - 3
+ */
+
+#include <stdio.h>
+#include <yaz/otherinfo.h>
+#include <yaz/z-charneg.h>
+#include <yaz/charneg.h>
+#include <yaz/yaz-util.h>
+
+static Z_External* z_ext_record2(ODR o, int oid_class, int oid_value,
+                                 const char *buf)
+{
+    Z_External *p;
+    oident oid;
+    int len = strlen(buf);
+    
+    if (!(p = (Z_External *)odr_malloc(o, sizeof(*p)))) return 0;
+    
+    p->descriptor = 0;
+    p->indirect_reference = 0;
+    
+    oid.proto = PROTO_Z3950;
+    oid.oclass = (enum oid_class) oid_class;
+    oid.value = (enum oid_value) oid_value;
+    p->direct_reference = odr_oiddup(o, oid_getoidbyent(&oid));
+    
+    p->which = Z_External_octet;
+    if (!(p->u.octet_aligned = (Odr_oct *)odr_malloc(o, sizeof(Odr_oct)))) {
+        return 0;
+    }
+    if (!(p->u.octet_aligned->buf = (unsigned char *)odr_malloc(o, len))) {
+        return 0;
+    }
+    p->u.octet_aligned->len = p->u.octet_aligned->size = len;
+    memcpy(p->u.octet_aligned->buf, buf, len);
+       
+    return p;
+}
+
+static int get_form(const char *charset)
+{
+    int form = -1;
+
+
+    if (!yaz_matchstr(charset, "UCS-2"))
+        form = 2;
+    if (!yaz_matchstr(charset, "UCS-4"))
+        form = 4;
+    if (!yaz_matchstr(charset, "UTF-16"))
+        form = 5;
+    if (!yaz_matchstr(charset, "UTF-8"))
+        form = 8;
+
+    return form;
+}
+
+static char *set_form (Odr_oid *encoding)
+{
+    static char *charset = 0;
+    if ( oid_oidlen(encoding) != 6)
+        return 0;
+    if (encoding[5] == 2)
+        charset = "UCS-2";
+    if (encoding[5] == 4)
+        charset = "UCS-4";
+    if (encoding[5] == 5)
+        charset = "UTF-16";
+    if (encoding[5] == 8)
+        charset = "UTF-8";
+    return charset;
+}
+
+static Z_OriginProposal_0 *z_get_OriginProposal_0(ODR o, const char *charset)
+{
+    int form = get_form (charset);
+    Z_OriginProposal_0 *p0 =
+        (Z_OriginProposal_0*)odr_malloc(o, sizeof(*p0));
+
+    memset(p0, 0, sizeof(*p0));
+
+    if (form > 0)
+    {   /* ISO 10646 (UNICODE) */
+        char oidname[20];
+
+        Z_Iso10646 *is = (Z_Iso10646 *) odr_malloc (o, sizeof(*is));
+        p0->which = Z_OriginProposal_0_iso10646;
+        p0->u.iso10646 = is;
+        is->collections = 0;
+        sprintf (oidname, "1.0.10646.1.0.%d", form);
+        is->encodingLevel = odr_getoidbystr (o, oidname);
+    }
+    else
+    {   /* private ones */
+        Z_PrivateCharacterSet *pc =
+            (Z_PrivateCharacterSet *)odr_malloc(o, sizeof(*pc));
+
+        memset(pc, 0, sizeof(*pc));
+        
+        p0->which = Z_OriginProposal_0_private;
+        p0->u.zprivate = pc;
+       
+        pc->which = Z_PrivateCharacterSet_externallySpecified;
+        pc->u.externallySpecified =
+            z_ext_record2(o, CLASS_NEGOT, VAL_ID_CHARSET, charset);
+    }
+    return p0;
+}
+
+static Z_OriginProposal *z_get_OriginProposal(
+    ODR o, const char **charsets, int num_charsets,
+    const char **langs, int num_langs, int selected)
+{      
+    int i;
+    Z_OriginProposal *p = (Z_OriginProposal *) odr_malloc(o, sizeof(*p));
+               
+    memset(p, 0, sizeof(*p));
+
+    p->recordsInSelectedCharSets = (bool_t *)odr_malloc(o, sizeof(bool_t));
+    *p->recordsInSelectedCharSets = (selected) ? 1:0;
+
+    if (charsets && num_charsets) {            
+       
+        p->num_proposedCharSets = num_charsets;
+        p->proposedCharSets = 
+            (Z_OriginProposal_0**)
+            odr_malloc(o, num_charsets*sizeof(Z_OriginProposal_0*));
+
+        for (i = 0; i<num_charsets; i++)
+            p->proposedCharSets[i] =
+                z_get_OriginProposal_0(o, charsets[i]);
+    }
+    if (langs && num_langs) {
+       
+        p->num_proposedlanguages = num_langs;
+
+        p->proposedlanguages = 
+            (char **) odr_malloc(o, num_langs*sizeof(char *));
+
+        for (i = 0; i<num_langs; i++) {
+
+            p->proposedlanguages[i] = (char *)langs[i];
+                       
+        }
+    }
+    return p;
+}
+
+static Z_CharSetandLanguageNegotiation *z_get_CharSetandLanguageNegotiation(
+    ODR o)
+{
+    Z_CharSetandLanguageNegotiation *p =
+        (Z_CharSetandLanguageNegotiation *) odr_malloc(o, sizeof(*p));
+    
+    memset(p, 0, sizeof(*p));
+       
+    return p;
+}
+
+/* Create EXTERNAL for negotation proposal. Client side */
+Z_External *yaz_set_proposal_charneg(ODR o,
+                                     const char **charsets, int num_charsets,
+                                     const char **langs, int num_langs,
+                                     int selected)
+{
+    Z_External *p = (Z_External *)odr_malloc(o, sizeof(*p));
+    oident oid;
+       
+    p->descriptor = 0;
+    p->indirect_reference = 0; 
+
+    oid.proto = PROTO_Z3950;
+    oid.oclass = CLASS_NEGOT;
+    oid.value = VAL_CHARNEG3;
+    p->direct_reference = odr_oiddup(o, oid_getoidbyent(&oid));
+
+    p->which = Z_External_charSetandLanguageNegotiation;
+    p->u.charNeg3 = z_get_CharSetandLanguageNegotiation(o);
+    p->u.charNeg3->which = Z_CharSetandLanguageNegotiation_proposal;
+    p->u.charNeg3->u.proposal =
+        z_get_OriginProposal(o, charsets, num_charsets,
+                             langs, num_langs, selected);
+
+    return p;
+}
+
+/* used by yaz_set_response_charneg */
+static Z_TargetResponse *z_get_TargetResponse(ODR o, const char *charset,
+                                              const char *lang, int selected)
+{      
+    Z_TargetResponse *p = (Z_TargetResponse *) odr_malloc(o, sizeof(*p));
+    int form = get_form(charset);
+
+    memset(p, 0, sizeof(*p));
+
+    if (form > 0)
+    {
+        char oidname[20];
+
+        Z_Iso10646 *is = (Z_Iso10646 *) odr_malloc (o, sizeof(*is));
+        p->which = Z_TargetResponse_iso10646;
+        p->u.iso10646 = is;
+        is->collections = 0;
+        sprintf (oidname, "1.0.10646.1.0.%d", form);
+        is->encodingLevel = odr_getoidbystr (o, oidname);
+    }
+    else
+    {
+        Z_PrivateCharacterSet *pc =
+            (Z_PrivateCharacterSet *)odr_malloc(o, sizeof(*pc));
+        
+        memset(pc, 0, sizeof(*pc));
+       
+        p->which = Z_TargetResponse_private;
+        p->u.zprivate = pc;
+       
+        pc->which = Z_PrivateCharacterSet_externallySpecified;
+        pc->u.externallySpecified =
+           z_ext_record2(o, CLASS_NEGOT, VAL_ID_CHARSET, charset);
+    }
+    p->recordsInSelectedCharSets = (bool_t *)odr_malloc(o, sizeof(bool_t));
+    *p->recordsInSelectedCharSets = (selected) ? 1:0;
+    
+    p->selectedLanguage = lang ? (char *)odr_strdup(o, lang) : 0;
+    return p;
+}
+
+/* Create charset response. Server side */
+Z_External *yaz_set_response_charneg(ODR o, const char *charset,
+                                     const char *lang, int selected)
+{
+    Z_External *p = (Z_External *)odr_malloc(o, sizeof(*p));
+    oident oid;
+       
+    p->descriptor = 0;
+    p->indirect_reference = 0; 
+
+    oid.proto = PROTO_Z3950;
+    oid.oclass = CLASS_NEGOT;
+    oid.value = VAL_CHARNEG3;
+    p->direct_reference = odr_oiddup(o, oid_getoidbyent(&oid));
+
+    p->which = Z_External_charSetandLanguageNegotiation;
+    p->u.charNeg3 = z_get_CharSetandLanguageNegotiation(o);
+    p->u.charNeg3->which = Z_CharSetandLanguageNegotiation_response;
+    p->u.charNeg3->u.response = z_get_TargetResponse(o, charset, lang, selected);
+
+    return p;
+}
+
+/* Get negotiation from OtherInformation. Client&Server side */
+Z_CharSetandLanguageNegotiation *yaz_get_charneg_record(Z_OtherInformation *p)
+{
+    Z_External *pext;
+    int i;
+       
+    if(!p)
+        return 0;
+       
+    for (i=0; i<p->num_elements; i++) {
+       
+        if ((p->list[i]->which == Z_OtherInfo_externallyDefinedInfo) &&
+            (pext = p->list[i]->information.externallyDefinedInfo)) {
+                                       
+            oident *ent = oid_getentbyoid(pext->direct_reference);
+                       
+            if (ent && ent->value == VAL_CHARNEG3 && ent->oclass == CLASS_NEGOT &&
+                pext->which == Z_External_charSetandLanguageNegotiation) {
+                               
+                return pext->u.charNeg3;
+            }
+        }
+    }
+    return 0;
+}
+
+/* Get charsets, langs, selected from negotiation.. Server side */
+void yaz_get_proposal_charneg(NMEM mem, Z_CharSetandLanguageNegotiation *p,
+                              char ***charsets, int *num_charsets,
+                              char ***langs, int *num_langs, int *selected)
+{
+    int i;
+    Z_OriginProposal *pro = p->u.proposal;
+    
+    if (num_charsets && charsets)
+    {
+        if (pro->num_proposedCharSets)
+        {
+            *num_charsets = pro->num_proposedCharSets;
+            
+            (*charsets) = (char **)
+                nmem_malloc(mem, pro->num_proposedCharSets * sizeof(char *));
+            
+            for (i=0; i<pro->num_proposedCharSets; i++) 
+            {
+                (*charsets)[i] = 0;
+                
+                if (pro->proposedCharSets[i]->which ==
+                    Z_OriginProposal_0_private &&
+                    pro->proposedCharSets[i]->u.zprivate->which ==
+                    Z_PrivateCharacterSet_externallySpecified) {
+                    
+                    Z_External *pext =
+                        pro->proposedCharSets[i]->u.zprivate->u.externallySpecified;
+                    
+                    if (pext->which == Z_External_octet) {
+                        
+                        (*charsets)[i] = (char *)
+                            nmem_malloc(mem, (1+pext->u.octet_aligned->len) *
+                                        sizeof(char));
+                        
+                        memcpy ((*charsets)[i], pext->u.octet_aligned->buf,
+                                pext->u.octet_aligned->len);
+                        (*charsets)[i][pext->u.octet_aligned->len] = 0;
+                        
+                    }
+                }
+                else if (pro->proposedCharSets[i]->which ==
+                         Z_OriginProposal_0_iso10646)
+                    (*charsets)[i] = set_form (
+                        pro->proposedCharSets[i]->u.iso10646->encodingLevel);
+            }
+        }
+        else
+            *num_charsets = 0;
+    }
+    
+    if (langs && num_langs)
+    {
+        if (pro->num_proposedlanguages)
+        {
+            *num_langs = pro->num_proposedlanguages;
+            
+            (*langs) = (char **)
+                nmem_malloc(mem, pro->num_proposedlanguages * sizeof(char *));
+            
+            for (i=0; i<pro->num_proposedlanguages; i++)
+                (*langs)[i] = nmem_strdup(mem, pro->proposedlanguages[i]);
+        }
+        else
+            *num_langs = 0;
+    }
+    
+    if(pro->recordsInSelectedCharSets && selected)
+        *selected = *pro->recordsInSelectedCharSets;
+}
+
+/* Return charset, lang, selected from negotiation.. Client side */
+void yaz_get_response_charneg(NMEM mem, Z_CharSetandLanguageNegotiation *p,
+                              char **charset, char **lang, int *selected)
+{
+    Z_TargetResponse *res = p->u.response;
+       
+    if (charset && res->which == Z_TargetResponse_private &&
+        res->u.zprivate->which == Z_PrivateCharacterSet_externallySpecified) {
+
+        Z_External *pext = res->u.zprivate->u.externallySpecified;
+        
+        if (pext->which == Z_External_octet) {
+            
+            *charset = (char *)
+                nmem_malloc(mem, (1+pext->u.octet_aligned->len)*sizeof(char));
+            memcpy (*charset, pext->u.octet_aligned->buf,
+                    pext->u.octet_aligned->len);
+            (*charset)[pext->u.octet_aligned->len] = 0;
+        }      
+    }
+    if (charset && res->which == Z_TargetResponse_iso10646)
+        *charset = set_form (res->u.iso10646->encodingLevel);
+    if (lang && res->selectedLanguage)
+        *lang = nmem_strdup (mem, res->selectedLanguage);
+
+    if(selected && res->recordsInSelectedCharSets)
+        *selected = *res->recordsInSelectedCharSets;
+}
diff --git a/src/comstack.c b/src/comstack.c
new file mode 100644 (file)
index 0000000..4d842f7
--- /dev/null
@@ -0,0 +1,247 @@
+/*
+ * Copyright (c) 1995-2003, Index Data
+ * See the file LICENSE for details.
+ *
+ * $Id: comstack.c,v 1.1 2003-10-27 12:21:30 adam Exp $
+ */
+
+#include <string.h>
+#include <ctype.h>
+
+#include <yaz/comstack.h>
+#include <yaz/tcpip.h>
+#include <yaz/unix.h>
+#include <yaz/odr.h>
+
+static const char *cs_errlist[] =
+{
+    "No error or unspecified error",
+    "System (lower-layer) error",
+    "Operation out of state",
+    "No data (operation would block)",
+    "New data while half of old buffer is on the line (flow control)",
+    "Permission denied",
+    "SSL error"
+};
+
+const char *cs_errmsg(int n)
+{
+    if (n < 0 || n > 6)
+       n = 0;
+    return cs_errlist[n];
+}
+
+const char *cs_strerror(COMSTACK h)
+{
+    return cs_errmsg(h->cerrno);
+}
+
+void cs_get_host_args(const char *type_and_host, const char **args)
+{
+    
+    *args = "";
+    if (*type_and_host && strncmp(type_and_host, "unix:", 5))
+    {
+        const char *cp;
+        cp = strstr(type_and_host, "://");
+        if (cp)
+            cp = cp+3;
+        else
+            cp = type_and_host;
+        cp = strchr(cp, '/');
+        if (cp)
+            *args = cp+1;
+    }
+}
+
+COMSTACK cs_create_host(const char *type_and_host, int blocking, void **vp)
+{
+    enum oid_proto proto = PROTO_Z3950;
+    const char *host = 0;
+    COMSTACK cs;
+    CS_TYPE t;
+
+    if (strncmp (type_and_host, "tcp:", 4) == 0)
+    {
+       t = tcpip_type;
+        host = type_and_host + 4;
+    }
+    else if (strncmp (type_and_host, "ssl:", 4) == 0)
+    {
+#if HAVE_OPENSSL_SSL_H
+       t = ssl_type;
+        host = type_and_host + 4;
+#else
+       return 0;
+#endif
+    }
+    else if (strncmp (type_and_host, "unix:", 5) == 0)
+    {
+#ifndef WIN32
+       t = unix_type;
+        host = type_and_host + 5;
+#else
+       return 0;
+#endif
+    }
+    else if (strncmp(type_and_host, "http:", 5) == 0)
+    {
+       t = tcpip_type;
+        host = type_and_host + 5;
+        if (host[0] == '/' && host[1] == '/')
+            host = host + 2;
+        proto = PROTO_HTTP;
+    }
+    else if (strncmp(type_and_host, "https:", 6) == 0)
+    {
+#if HAVE_OPENSSL_SSL_H
+       t = ssl_type;
+        host = type_and_host + 6;
+        if (host[0] == '/' && host[1] == '/')
+            host = host + 2;
+        proto = PROTO_HTTP;
+#else
+       return 0;
+#endif
+    }
+    else
+    {
+       t = tcpip_type;
+       host = type_and_host;
+        
+    }
+    cs = cs_create (t, blocking, proto);
+    if (!cs)
+       return 0;
+
+    if (!(*vp = cs_straddr(cs, host)))
+    {
+       cs_close (cs);
+       return 0;
+    }    
+    return cs;
+}
+
+int cs_look (COMSTACK cs)
+{
+    return cs->event;
+}
+
+int cs_complete_auto(const unsigned char *buf, int len)
+{
+    if (len > 5 && buf[0] >= 0x20 && buf[0] < 0x7f
+               && buf[1] >= 0x20 && buf[1] < 0x7f
+               && buf[2] >= 0x20 && buf[2] < 0x7f)
+    {
+        /* deal with HTTP request/response */
+       int i = 2, content_len = 0, chunked = 0;
+
+        while (i <= len-4)
+        {
+           if (i > 8192)
+               return i;  /* do not allow more than 8K HTTP header */
+            if (buf[i] == '\r' && buf[i+1] == '\n')
+            {
+                i += 2;
+                if (buf[i] == '\r' && buf[i+1] == '\n')
+                {
+                    if (chunked)
+                    { 
+                        while(1)
+                        {
+                            int chunk_len = 0;
+                            i += 2;
+#if 0
+/* debugging */
+                            if (i <len-2)
+                            {
+                                printf ("\n>>>");
+                                for (j = i; j <= i+4; j++)
+                                    printf ("%c", buf[j]);
+                                printf ("<<<\n");
+                            }
+#endif
+                            while (1)
+                                if (i >= len-2) {
+#if 0
+/* debugging */                                    
+                                    printf ("XXXXXXXX not there yet 1\n");
+                                    printf ("i=%d len=%d\n", i, len);
+#endif
+                                    return 0;
+                                } else if (isdigit(buf[i]))
+                                    chunk_len = chunk_len * 16 + 
+                                        (buf[i++] - '0');
+                                else if (isupper(buf[i]))
+                                    chunk_len = chunk_len * 16 + 
+                                        (buf[i++] - ('A'-10));
+                                else if (islower(buf[i]))
+                                    chunk_len = chunk_len * 16 + 
+                                        (buf[i++] - ('a'-10));
+                                else
+                                    break;
+                            if (buf[i] != '\r' || buf[i+1] != '\n' ||
+                                chunk_len < 0)
+                                return i+2;    /* bad. stop now */
+                            if (chunk_len == 0)
+                            {
+                                /* consider trailing headers .. */
+                                while(i <= len-4)
+                                {
+                                    if (buf[i] == '\r' &&  buf[i+1] == '\n' &&
+                                        buf[i+2] == '\r' && buf[i+3] == '\n')
+                                        if (len >= i+4)
+                                            return i+4;
+                                    i++;
+                                }
+#if 0
+/* debugging */
+                                printf ("XXXXXXXXX not there yet 2\n");
+                                printf ("i=%d len=%d\n", i, len);
+#endif
+                                return 0;
+                            }
+                            i += chunk_len+2;
+                        }
+                    }
+                    else
+                    {   /* not chunked ; inside body */
+                        /* i += 2 seems not to work with GCC -O2 .. 
+                           so i+2 is used instead .. */
+                        if (len >= (i+2)+ content_len)
+                            return (i+2)+ content_len;
+                    }
+                    break;
+                }
+                else if (i < len - 21 &&
+                         !memcmp(buf+i, "Transfer-Encoding: ", 18))
+                {
+                    i+=18;
+                    if (buf[i] == ' ')
+                        i++;
+                    if (i < len - 8)
+                        if (!memcmp(buf+i, "chunked", 7))
+                            chunked = 1;
+                }
+                else if (i < len - 18 &&
+                         !memcmp(buf+i, "Content-Length: ", 15))
+                {
+                    i+= 15;
+                    if (buf[i] == ' ')
+                        i++;
+                    content_len = 0;
+                    while (i <= len-4 && isdigit(buf[i]))
+                        content_len = content_len*10 + (buf[i++] - '0');
+                    if (content_len < 0) /* prevent negative offsets */
+                        content_len = 0;
+                }
+                else
+                    i++;
+            }
+            else
+                i++;
+        }
+        return 0;
+    }
+    return completeBER(buf, len);
+}
diff --git a/src/cql.y b/src/cql.y
new file mode 100644 (file)
index 0000000..c98696d
--- /dev/null
+++ b/src/cql.y
@@ -0,0 +1,275 @@
+/* $Id: cql.y,v 1.1 2003-10-27 12:21:30 adam Exp $
+   Copyright (C) 2002-2003
+   Index Data Aps
+
+This file is part of the YAZ toolkit.
+
+See the file LICENSE.
+
+ bison parser for CQL grammar.
+*/
+%{
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <ctype.h>
+#include <yaz/nmem.h>
+#include <yaz/cql.h>
+    
+    typedef struct {
+        struct cql_node *rel;
+        struct cql_node *cql;
+        char *buf;
+        size_t len;
+        size_t size;
+    } token;        
+
+    struct cql_parser {
+        int (*getbyte)(void *client_data);
+        void (*ungetbyte)(int b, void *client_data);
+        void *client_data;
+        int last_error;
+        int last_pos;
+        struct cql_node *top;
+        NMEM nmem;
+    };
+
+#define YYSTYPE token
+    
+#define YYPARSE_PARAM parm
+#define YYLEX_PARAM parm
+    
+    int yylex(YYSTYPE *lval, void *vp);
+    int yyerror(char *s);
+%}
+
+%pure_parser
+%token TERM AND OR NOT PROX GE LE NE
+%expect 8
+
+%%
+
+top: { 
+    $$.rel = cql_node_mk_sc("srw.serverChoice", "scr", 0);
+    ((CQL_parser) parm)->top = 0;
+} cqlQuery1 {
+    cql_node_destroy($$.rel);
+    ((CQL_parser) parm)->top = $2.cql; 
+}
+;
+
+cqlQuery1: cqlQuery
+| cqlQuery error {
+    cql_node_destroy($1.cql);
+    $$.cql = 0;
+}
+;
+
+cqlQuery: 
+  searchClause
+|
+  cqlQuery boolean { 
+      $$.rel = $0.rel; 
+  } searchClause {
+      struct cql_node *cn = cql_node_mk_boolean($2.buf);
+      
+      cn->u.boolean.modifiers = $2.rel;
+      cn->u.boolean.left = $1.cql;
+      cn->u.boolean.right = $4.cql;
+
+      $$.cql = cn;
+  }
+;
+
+searchClause: 
+  '(' { 
+      $$.rel = $0.rel;
+      
+  } cqlQuery ')' {
+      $$.cql = $3.cql;
+  }
+|
+  searchTerm {
+      struct cql_node *st = cql_node_dup ($0.rel);
+      st->u.st.term = strdup($1.buf);
+      $$.cql = st;
+  }
+| 
+  index relation {
+      $$.rel = $2.rel;
+      $$.rel->u.st.index = strdup($1.buf);
+  } searchClause {
+      $$.cql = $4.cql;
+      cql_node_destroy($2.rel);
+  }
+| '>' searchTerm '=' searchTerm {
+      $$.rel = $0.rel;
+  } cqlQuery {
+    $$.cql = cql_node_prefix($6.cql, $2.buf, $4.buf);
+  }
+| '>' searchTerm {
+      $$.rel = $0.rel;
+  } cqlQuery {
+    $$.cql = cql_node_prefix($4.cql, 0, $2.buf);
+   }
+;
+
+/* unary NOT search TERM here .. */
+
+boolean: 
+  AND | OR | NOT | PROX proxqualifiers {
+      $$ = $1;
+      $$.rel = $2.rel;
+  }
+  ;
+
+proxqualifiers: 
+  Prelation { 
+      $$.rel = cql_node_mk_proxargs ($1.buf, 0, 0, 0);
+  }
+|
+  PrelationO Pdistance {
+      $$.rel = cql_node_mk_proxargs ($1.buf, $2.buf, 0, 0);
+  }
+|
+  PrelationO PdistanceO Punit {
+      $$.rel = cql_node_mk_proxargs ($1.buf, $2.buf, $3.buf, 0);
+  }
+|
+  PrelationO PdistanceO PunitO Pordering {
+      $$.rel = cql_node_mk_proxargs ($1.buf, $2.buf, $3.buf, $4.buf);
+  }
+|
+{ $$.rel = 0; }
+;
+
+Punit: '/' searchTerm { 
+      $$ = $2;
+   }
+;
+
+PunitO: '/' searchTerm {
+      $$ = $2;
+   } 
+| 
+'/' { $$.buf[0] = 0; }
+;
+Prelation: '/' baseRelation {
+    $$ = $2;
+}
+;
+PrelationO: '/' baseRelation {
+    $$ = $2;
+}
+| '/' { $$.buf[0] = 0; }
+;
+Pdistance: '/' searchTerm { 
+    $$ = $2;
+}
+;
+
+PdistanceO: '/' searchTerm {
+    $$ = $2;
+}
+| '/' { $$.buf[0] = 0; }
+;
+Pordering: '/' searchTerm { 
+    $$ = $2;
+}
+;
+
+relation: baseRelation modifiers {
+    struct cql_node *st = cql_node_mk_sc(/* index */ 0, 
+                                         /* relation */ $1.buf, 
+                                         /* term */ 0);
+
+    st->u.st.modifiers = $2.cql;
+    $$.rel = st;
+}
+;
+
+modifiers: '/' searchTerm modifiers
+{ 
+    struct cql_node *mod = cql_node_mk_mod(0, $2.buf);
+
+    mod->u.mod.next = $3.cql;
+    $$.cql = mod;
+}
+|  
+{ 
+    $$.cql = 0;
+}
+;
+
+baseRelation: 
+  '=' 
+| '>' 
+| '<'
+| GE
+| LE
+| NE
+| TERM
+;
+
+index: 
+  searchTerm;
+
+searchTerm:
+  TERM
+| AND
+| OR
+| NOT
+| PROX
+;
+
+%%
+
+int yyerror(char *s)
+{
+    return 0;
+}
+
+#include "lexer.h"
+
+
+int cql_parser_stream(CQL_parser cp,
+                      int (*getbyte)(void *client_data),
+                      void (*ungetbyte)(int b, void *client_data),
+                      void *client_data)
+{
+    cp->getbyte = getbyte;
+    cp->ungetbyte = ungetbyte;
+    cp->client_data = client_data;
+    if (cp->top)
+        cql_node_destroy(cp->top);
+    cql_parse(cp);
+    if (cp->top)
+        return 0;
+    return -1;
+}
+
+CQL_parser cql_parser_create(void)
+{
+    CQL_parser cp = (CQL_parser) malloc (sizeof(*cp));
+
+    cp->top = 0;
+    cp->getbyte = 0;
+    cp->ungetbyte = 0;
+    cp->client_data = 0;
+    cp->last_error = 0;
+    cp->last_pos = 0;
+    cp->nmem = nmem_create();
+    return cp;
+}
+
+void cql_parser_destroy(CQL_parser cp)
+{
+    cql_node_destroy(cp->top);
+    nmem_destroy(cp->nmem);
+    free (cp);
+}
+
+struct cql_node *cql_parser_result(CQL_parser cp)
+{
+    return cp->top;
+}
diff --git a/src/cqlstdio.c b/src/cqlstdio.c
new file mode 100644 (file)
index 0000000..c9d50ff
--- /dev/null
@@ -0,0 +1,36 @@
+/* $Id: cqlstdio.c,v 1.1 2003-10-27 12:21:30 adam Exp $
+   Copyright (C) 2002-2003
+   Index Data Aps
+
+This file is part of the YAZ toolkit.
+
+See the file LICENSE.
+*/
+
+#include <yaz/cql.h>
+
+int getbyte_stream(void *client_data)
+{
+    FILE *f = (FILE*) client_data;
+
+    int c = fgetc(f);
+    if (c == EOF)
+        return 0;
+    return c;
+}
+
+void ungetbyte_stream (int c, void *client_data)
+{
+    FILE *f = (FILE*) client_data;
+
+    if (c == 0)
+        c = EOF;
+    ungetc(c, f);
+}
+
+int cql_parser_stdio(CQL_parser cp, FILE *f)
+{
+    return cql_parser_stream(cp, getbyte_stream, ungetbyte_stream, f);
+}
+
+
diff --git a/src/cqlstrer.c b/src/cqlstrer.c
new file mode 100644 (file)
index 0000000..f8b29ce
--- /dev/null
@@ -0,0 +1,61 @@
+/* $Id: cqlstrer.c,v 1.1 2003-10-27 12:21:30 adam Exp $
+   Copyright (C) 2002-2003
+   Index Data Aps
+
+This file is part of the YAZ toolkit.
+
+See the file LICENSE.
+*/
+
+#include <yaz/cql.h>
+
+/*
+ * The error-messages associated with these codes are taken from
+ * the SRW diagnostic specifications at
+ *     http://www.loc.gov/srw/diagnostic-list.html
+ */
+const char *cql_strerror(int code) {
+    static char buf[80];
+    switch (code) {
+    case 10: return "Illegal query";
+    case 11: return "Unsupported query type (XCQL vs CQL)";
+    case 12: return "Too many characters in query";
+    case 13: return "Unbalanced or illegal use of parentheses";
+    case 14: return "Unbalanced or illegal use of quotes";
+    case 15: return "Illegal or unsupported index set";
+    case 16: return "Illegal or unsupported index";
+    case 17: return "Illegal or unsupported combination of index and index set";
+    case 18: return "Illegal or unsupported combination of indexes";
+    case 19: return "Illegal or unsupported relation";
+    case 20: return "Illegal or unsupported relation modifier";
+    case 21: return "Illegal or unsupported combination of relation modifers";
+    case 22: return "Illegal or unsupported combination of relation and index";
+    case 23: return "Too many characters in term";
+    case 24: return "Illegal combination of relation and term";
+    case 25: return "Special characters not quoted in term";
+    case 26: return "Non special character escaped in term";
+    case 27: return "Empty term unsupported";
+    case 28: return "Masking character not supported";
+    case 29: return "Masked words too short";
+    case 30: return "Too many masking characters in term";
+    case 31: return "Anchoring character not supported";
+    case 32: return "Anchoring character in illegal or unsupported position";
+    case 33: return "Combination of proximity/adjacency and masking characters not supported";
+    case 34: return "Combination of proximity/adjacency and anchoring characters not supported";
+    case 35: return "Terms only exclusion (stop) words";
+    case 36: return "Term in invalid format for index or relation";
+    case 37: return "Illegal or unsupported boolean operator";
+    case 38: return "Too many boolean operators in query";
+    case 39: return "Proximity not supported";
+    case 40: return "Illegal or unsupported proximity relation";
+    case 41: return "Illegal or unsupported proximity distance";
+    case 42: return "Illegal or unsupported proximity unit";
+    case 43: return "Illegal or unsupported proximity ordering";
+    case 44: return "Illegal or unsupported combination of proximity modifiers";
+    case 45: return "Index set name (prefix) assigned to multiple identifiers";
+    default: break;
+    }
+
+    sprintf(buf, "Unknown CQL error #%d", code);
+    return buf;
+}
diff --git a/src/cqlstring.c b/src/cqlstring.c
new file mode 100644 (file)
index 0000000..bf18b07
--- /dev/null
@@ -0,0 +1,40 @@
+/* $Id: cqlstring.c,v 1.1 2003-10-27 12:21:30 adam Exp $
+   Copyright (C) 2002-2003
+   Index Data Aps
+
+This file is part of the YAZ toolkit.
+
+See the file LICENSE for details.
+*/
+#include <yaz/cql.h>
+
+struct cql_buf_info {
+    const char *str;
+    int off;
+};
+
+int getbuf(void *vp)
+{
+    struct cql_buf_info *bi = (struct cql_buf_info *) vp;
+    if (bi->str[bi->off] == 0)
+        return 0;
+    return bi->str[bi->off++];
+}
+
+void ungetbuf(int b, void *vp)
+{
+    struct cql_buf_info *bi = (struct cql_buf_info *) vp;
+    if (b)
+        (bi->off--);
+}
+
+int cql_parser_string(CQL_parser cp, const char *str)
+{
+    struct cql_buf_info b;
+
+    b.str = str;
+    b.off = 0;
+    
+    return cql_parser_stream(cp, getbuf, ungetbuf, &b);
+}
+
diff --git a/src/cqltransform.c b/src/cqltransform.c
new file mode 100644 (file)
index 0000000..3f6586a
--- /dev/null
@@ -0,0 +1,469 @@
+/* $Id: cqltransform.c,v 1.1 2003-10-27 12:21:30 adam Exp $
+   Copyright (C) 2002-2003
+   Index Data Aps
+
+This file is part of the YAZ toolkit.
+
+See the file LICENSE.
+*/
+
+#include <stdlib.h>
+#include <string.h>
+#include <yaz/cql.h>
+
+struct cql_prop_entry {
+    char *pattern;
+    char *value;
+    struct cql_prop_entry *next;
+};
+
+struct cql_transform_t_ {
+    struct cql_prop_entry *entry;
+    int error;
+    char *addinfo;
+};
+
+cql_transform_t cql_transform_open_FILE(FILE *f)
+{
+    char line[1024];
+    cql_transform_t ct = (cql_transform_t) malloc (sizeof(*ct));
+    struct cql_prop_entry **pp = &ct->entry;
+
+    ct->error = 0;
+    ct->addinfo = 0;
+    while (fgets(line, sizeof(line)-1, f))
+    {
+        const char *cp_value_start;
+        const char *cp_value_end;
+        const char *cp_pattern_end;
+        const char *cp = line;
+        while (*cp && !strchr(" \t=\r\n#", *cp))
+            cp++;
+        cp_pattern_end = cp;
+        if (cp == line)
+            continue;
+        while (*cp && strchr(" \t\r\n", *cp))
+            cp++;
+        if (*cp != '=')
+            continue;
+        cp++;
+        while (*cp && strchr(" \t\r\n", *cp))
+            cp++;
+        cp_value_start = cp;
+        if (!(cp_value_end = strchr(cp, '#')))
+            cp_value_end = strlen(line) + line;
+
+        if (cp_value_end != cp_value_start &&
+            strchr(" \t\r\n", cp_value_end[-1]))
+            cp_value_end--;
+        *pp = (struct cql_prop_entry *) malloc (sizeof(**pp));
+        (*pp)->pattern = (char *) malloc (cp_pattern_end - line + 1);
+        memcpy ((*pp)->pattern, line, cp_pattern_end - line);
+        (*pp)->pattern[cp_pattern_end-line] = 0;
+
+        (*pp)->value = (char *) malloc (cp_value_end - cp_value_start + 1);
+        if (cp_value_start != cp_value_end)
+            memcpy ((*pp)->value, cp_value_start, cp_value_end-cp_value_start);
+        (*pp)->value[cp_value_end - cp_value_start] = 0;
+        pp = &(*pp)->next;
+    }
+    *pp = 0;
+    return ct;
+}
+
+void cql_transform_close(cql_transform_t ct)
+{
+    struct cql_prop_entry *pe;
+    if (!ct)
+        return;
+    pe = ct->entry;
+    while (pe)
+    {
+        struct cql_prop_entry *pe_next = pe->next;
+        free (pe->pattern);
+        free (pe->value);
+        free (pe);
+        pe = pe_next;
+    }
+    if (ct->addinfo)
+        free (ct->addinfo);
+    free (ct);
+}
+
+cql_transform_t cql_transform_open_fname(const char *fname)
+{
+    cql_transform_t ct;
+    FILE *f = fopen(fname, "r");
+    if (!f)
+        return 0;
+    ct = cql_transform_open_FILE(f);
+    fclose(f);
+    return ct;
+}
+
+static const char *cql_lookup_property(cql_transform_t ct,
+                                       const char *pat1, const char *pat2)
+{
+    char pattern[80];
+    struct cql_prop_entry *e;
+
+    if (pat2)
+        sprintf (pattern, "%.39s%.39s", pat1, pat2);
+    else
+        sprintf (pattern, "%.39s", pat1);
+    for (e = ct->entry; e; e = e->next)
+    {
+        if (!strcmp(e->pattern, pattern))
+            return e->value;
+    }
+    return 0;
+}
+
+static const char *cql_lookup_value(cql_transform_t ct,
+                                    const char *prefix,
+                                    const char *value)
+{
+    struct cql_prop_entry *e;
+    int len = strlen(prefix);
+
+    for (e = ct->entry; e; e = e->next)
+    {
+        if (!memcmp(e->pattern, prefix, len) && !strcmp(e->value, value))
+            return e->pattern + len;
+    }
+    return 0;
+}
+
+
+int cql_pr_attr(cql_transform_t ct, const char *category,
+                const char *val,
+                const char *default_val,
+                void (*pr)(const char *buf, void *client_data),
+                void *client_data,
+                int errcode)
+{
+    const char *res;
+    res = cql_lookup_property(ct, category, val ? val : default_val);
+    if (!res)
+        res = cql_lookup_property(ct, category, "*");
+    if (res)
+    {
+        char buf[64];
+
+        const char *cp0 = res, *cp1;
+        while ((cp1 = strchr(cp0, '=')))
+        {
+            while (*cp1 && *cp1 != ' ')
+                cp1++;
+            if (cp1 - cp0 >= sizeof(buf))
+                break;
+            memcpy (buf, cp0, cp1 - cp0);
+            buf[cp1-cp0] = 0;
+            (*pr)("@attr ", client_data);
+            (*pr)(buf, client_data);
+            (*pr)(" ", client_data);
+            cp0 = cp1;
+            while (*cp0 == ' ')
+                cp0++;
+        }
+        return 1;
+    }
+    /* error ... */
+    if (errcode && !ct->error)
+    {
+        ct->error = errcode;
+        ct->addinfo = strdup(val);
+    }
+    return 0;
+}
+
+void emit_term(cql_transform_t ct,
+               const char *term, int length,
+               void (*pr)(const char *buf, void *client_data),
+               void *client_data)
+{
+    int i;
+    if (length > 0)
+    {
+        if (length > 1 && term[0] == '^' && term[length-1] == '^')
+        {
+            cql_pr_attr(ct, "position.", "firstAndLast", 0,
+                        pr, client_data, 32);
+            term++;
+            length -= 2;
+        }
+        else if (term[0] == '^')
+        {
+            cql_pr_attr(ct, "position.", "first", 0,
+                        pr, client_data, 32);
+            term++;
+        }
+        else if (term[length-1] == '^')
+        {
+            cql_pr_attr(ct, "position.", "last", 0,
+                        pr, client_data, 32);
+            length--;
+        }
+        else
+        {
+            cql_pr_attr(ct, "position.", "any", 0,
+                        pr, client_data, 32);
+        }
+    }
+    (*pr)("\"", client_data);
+    for (i = 0; i<length; i++)
+    {
+        char buf[2];
+        buf[0] = term[i];
+        buf[1] = 0;
+        (*pr)(buf, client_data);
+    }
+    (*pr)("\" ", client_data);
+}
+
+void emit_wordlist(cql_transform_t ct,
+                   struct cql_node *cn,
+                   void (*pr)(const char *buf, void *client_data),
+                   void *client_data,
+                   const char *op)
+{
+    const char *cp0 = cn->u.st.term;
+    const char *cp1;
+    const char *last_term = 0;
+    int last_length = 0;
+    while(cp0)
+    {
+        while (*cp0 == ' ')
+            cp0++;
+        cp1 = strchr(cp0, ' ');
+        if (last_term)
+        {
+            (*pr)("@", client_data);
+            (*pr)(op, client_data);
+            (*pr)(" ", client_data);
+            emit_term(ct, last_term, last_length, pr, client_data);
+        }
+        last_term = cp0;
+        if (cp1)
+            last_length = cp1 - cp0;
+        else
+            last_length = strlen(cp0);
+        cp0 = cp1;
+    }
+    if (last_term)
+        emit_term(ct, last_term, last_length, pr, client_data);
+}
+
+
+static const char *cql_get_ns(cql_transform_t ct,
+                              struct cql_node *cn,
+                              struct cql_node **prefix_ar, int prefix_level,
+                              const char **n_prefix,
+                              const char **n_suffix)
+{
+    int i;
+    const char *ns = 0;
+    char prefix[32];
+    const char *cp = cn->u.st.index;
+    const char *cp_dot = strchr(cp, '.');
+
+    /* strz current prefix (empty if not given) */
+    if (cp_dot && cp_dot-cp < sizeof(prefix))
+    {
+        memcpy (prefix, cp, cp_dot - cp);
+        prefix[cp_dot - cp] = 0;
+    }
+    else
+        *prefix = 0;
+
+    /* 2. lookup in prefix_ar. and return NS */
+    for (i = prefix_level; !ns && --i >= 0; )
+    {
+        struct cql_node *cn_prefix = prefix_ar[i];
+        for (; cn_prefix; cn_prefix = cn_prefix->u.mod.next)
+        {
+            if (*prefix && cn_prefix->u.mod.name &&
+                !strcmp(prefix, cn_prefix->u.mod.name))
+            {
+                ns = cn_prefix->u.mod.value;
+                break;
+            }
+            else if (!*prefix && !cn_prefix->u.mod.name)
+            {
+                ns = cn_prefix->u.mod.value;
+                break;
+            }
+        }
+    }
+    if (!ns)
+    {
+        if (!ct->error)
+        {
+            ct->error = 15;
+            ct->addinfo = strdup(prefix);
+        }
+        return 0;
+    }
+    /* 3. lookup in set.NS for new prefix */
+    *n_prefix = cql_lookup_value(ct, "set.", ns);
+    if (!*n_prefix)
+    {
+        if (!ct->error)
+        {
+            ct->error = 15;
+            ct->addinfo = strdup(ns);
+        }
+        return 0;
+    }
+    /* 4. lookup qualifier.prefix. */
+    
+    cp = cn->u.st.index;
+    cp_dot = strchr(cp, '.');
+    
+    *n_suffix = cp_dot ? cp_dot+1 : cp;
+    return ns;
+}
+
+void cql_transform_r(cql_transform_t ct,
+                     struct cql_node *cn,
+                     void (*pr)(const char *buf, void *client_data),
+                     void *client_data,
+                     struct cql_node **prefix_ar, int prefix_level)
+{
+    const char *ns, *n_prefix, *n_suffix;
+
+    if (!cn)
+        return;
+    switch (cn->which)
+    {
+    case CQL_NODE_ST:
+        if (cn->u.st.prefixes && prefix_level < 20)
+            prefix_ar[prefix_level++] = cn->u.st.prefixes;
+        ns = cql_get_ns(ct, cn, prefix_ar, prefix_level, &n_prefix, &n_suffix);
+        if (ns)
+        {
+            char n_full[64];
+            sprintf (n_full, "%.20s.%.40s", n_prefix, n_suffix);
+        
+            if (!strcmp(ns, "http://www.loc.gov/zing/cql/srw-indexes/v1.0/")
+                && !strcmp(n_suffix, "resultSet"))
+            {
+                (*pr)("@set \"", client_data);
+                (*pr)(cn->u.st.term, client_data);
+                (*pr)("\" ", client_data);
+                return ;
+            }
+            cql_pr_attr(ct, "qualifier.", n_full, "srw.serverChoice",
+                        pr, client_data, 16);
+        }
+
+        if (cn->u.st.relation && !strcmp(cn->u.st.relation, "="))
+            cql_pr_attr(ct, "relation.", "eq", "scr",
+                        pr, client_data, 19);
+        else if (cn->u.st.relation && !strcmp(cn->u.st.relation, "<="))
+            cql_pr_attr(ct, "relation.", "le", "scr",
+                        pr, client_data, 19);
+        else if (cn->u.st.relation && !strcmp(cn->u.st.relation, ">="))
+            cql_pr_attr(ct, "relation.", "ge", "scr",
+                        pr, client_data, 19);
+        else
+            cql_pr_attr(ct, "relation.", cn->u.st.relation, "eq",
+                        pr, client_data, 19);
+        if (cn->u.st.modifiers)
+        {
+            struct cql_node *mod = cn->u.st.modifiers;
+            for (; mod; mod = mod->u.mod.next)
+            {
+                cql_pr_attr(ct, "relationModifier.", mod->u.mod.value, 0,
+                            pr, client_data, 20);
+            }
+        }
+        cql_pr_attr(ct, "structure.", cn->u.st.relation, 0,
+                    pr, client_data, 24);
+        if (cn->u.st.relation && !strcmp(cn->u.st.relation, "all"))
+        {
+            emit_wordlist(ct, cn, pr, client_data, "and");
+        }
+        else if (cn->u.st.relation && !strcmp(cn->u.st.relation, "any"))
+        {
+            emit_wordlist(ct, cn, pr, client_data, "or");
+        }
+        else
+        {
+            emit_term(ct, cn->u.st.term, strlen(cn->u.st.term),
+                      pr, client_data);
+        }
+        break;
+    case CQL_NODE_BOOL:
+        if (cn->u.boolean.prefixes && prefix_level < 20)
+            prefix_ar[prefix_level++] = cn->u.boolean.prefixes;
+        (*pr)("@", client_data);
+        (*pr)(cn->u.boolean.value, client_data);
+        (*pr)(" ", client_data);
+
+        cql_transform_r(ct, cn->u.boolean.left, pr, client_data,
+                        prefix_ar, prefix_level);
+        cql_transform_r(ct, cn->u.boolean.right, pr, client_data,
+                        prefix_ar, prefix_level);
+    }
+}
+
+int cql_transform(cql_transform_t ct,
+                  struct cql_node *cn,
+                  void (*pr)(const char *buf, void *client_data),
+                  void *client_data)
+{
+    struct cql_node *prefix_ar[20], **pp;
+    struct cql_prop_entry *e;
+
+    ct->error = 0;
+    if (ct->addinfo)
+        free (ct->addinfo);
+    ct->addinfo = 0;
+
+    prefix_ar[0] = 0;
+    pp = &prefix_ar[0];
+    for (e = ct->entry; e ; e = e->next)
+    {
+        if (!memcmp(e->pattern, "set.", 4))
+        {
+            *pp = cql_node_mk_mod(e->pattern+4, e->value);
+            pp = &(*pp)->u.mod.next;
+        }
+        else if (!strcmp(e->pattern, "set"))
+        {
+            *pp = cql_node_mk_mod(0, e->value);
+            pp = &(*pp)->u.mod.next;
+        }
+    }
+    cql_transform_r (ct, cn, pr, client_data, prefix_ar, 1);
+    cql_node_destroy(prefix_ar[0]);
+    return ct->error;
+}
+
+
+int cql_transform_FILE(cql_transform_t ct, struct cql_node *cn, FILE *f)
+{
+    return cql_transform(ct, cn, cql_fputs, f);
+}
+
+int cql_transform_buf(cql_transform_t ct, struct cql_node *cn,
+                      char *out, int max)
+{
+    struct cql_buf_write_info info;
+    int r;
+
+    info.off = 0;
+    info.max = max;
+    info.buf = out;
+    r = cql_transform(ct, cn, cql_buf_write_handler, &info);
+    if (info.off >= 0)
+        info.buf[info.off] = '\0';
+    return r;
+}
+
+int cql_transform_error(cql_transform_t ct, const char **addinfo)
+{
+    *addinfo = ct->addinfo;
+    return ct->error;
+}
diff --git a/src/cqlutil.c b/src/cqlutil.c
new file mode 100644 (file)
index 0000000..baa54ad
--- /dev/null
@@ -0,0 +1,177 @@
+/* $Id: cqlutil.c,v 1.1 2003-10-27 12:21:30 adam Exp $
+   Copyright (C) 2002-2003
+   Index Data Aps
+
+This file is part of the YAZ toolkit.
+
+See the file LICENSE.
+*/
+
+#include <stdlib.h>
+#include <string.h>
+
+#include <yaz/cql.h>
+
+void cql_fputs(const char *buf, void *client_data)
+{
+    FILE *f = (FILE *) client_data;
+    fputs(buf, f);
+}
+
+struct cql_node *cql_node_dup (struct cql_node *cp)
+{
+    struct cql_node *cn = 0;
+
+    if (!cp)
+        return 0;
+    switch (cp->which)
+    {
+    case CQL_NODE_ST:
+        cn = cql_node_mk_sc(cp->u.st.index,
+                            cp->u.st.relation,
+                            cp->u.st.term);
+        cn->u.st.modifiers = cql_node_dup(cp->u.st.modifiers);
+        cn->u.st.prefixes = cql_node_dup(cp->u.st.prefixes);
+        break;
+    case CQL_NODE_MOD:
+        cn = cql_node_mk_mod(cp->u.mod.name,
+                             cp->u.mod.value);
+        cn->u.mod.next = cql_node_dup(cp->u.mod.next);
+        break;
+    case CQL_NODE_BOOL:
+        cn = cql_node_mk_boolean(cp->u.boolean.value);
+        cn->u.boolean.left = cql_node_dup(cp->u.boolean.left);
+        cn->u.boolean.right = cql_node_dup(cp->u.boolean.right);
+        cn->u.boolean.prefixes = cql_node_dup(cp->u.boolean.prefixes);
+    }
+    return cn;
+}
+
+struct cql_node *cql_node_mk_sc(const char *index,
+                                const char *relation,
+                                const char *term)
+{
+    struct cql_node *p = (struct cql_node *) malloc(sizeof(*p));
+    p->which = CQL_NODE_ST;
+    p->u.st.index = 0;
+    if (index)
+        p->u.st.index = strdup(index);
+    p->u.st.term = 0;
+    if (term)
+        p->u.st.term = strdup(term);
+    p->u.st.relation = 0;
+    if (relation)
+        p->u.st.relation = strdup(relation);
+    p->u.st.modifiers = 0;
+    p->u.st.prefixes = 0;
+    return p;
+}
+
+struct cql_node *cql_node_mk_mod(const char *name,
+                                 const char *value)
+{
+    struct cql_node *p = (struct cql_node *) malloc(sizeof(*p));
+    p->which = CQL_NODE_MOD;
+
+    p->u.mod.name = 0;
+    if (name)
+        p->u.mod.name = strdup(name);
+    p->u.mod.value = 0;
+    if (value)
+        p->u.mod.value = strdup(value);
+    p->u.mod.next = 0;
+    return p;
+}
+
+struct cql_node *cql_node_mk_boolean(const char *op)
+{
+    struct cql_node *p = (struct cql_node *) malloc(sizeof(*p));
+    p->which = CQL_NODE_BOOL;
+    p->u.boolean.value = 0;
+    if (op)
+        p->u.boolean.value = strdup(op);
+    p->u.boolean.left = 0;
+    p->u.boolean.right = 0;
+    p->u.boolean.modifiers = 0;
+    p->u.boolean.prefixes = 0;
+    return p;
+}
+
+struct cql_node *cql_node_prefix(struct cql_node *n, const char *prefix,
+                                 const char *uri)
+{
+    struct cql_node **cpp = 0;
+    if (n->which == CQL_NODE_ST)
+    {
+        cpp = &n->u.st.prefixes;
+    }
+    else if (n->which == CQL_NODE_BOOL)
+    {
+        cpp = &n->u.boolean.prefixes;
+    }
+    if (cpp)
+    {
+        struct cql_node *cp = cql_node_mk_mod(prefix, uri);
+        cp->u.mod.next = *cpp;
+        *cpp = cp;
+    }
+    return n;
+}
+
+struct cql_node *cql_node_mk_proxargs(const char *relation,
+                                      const char *distance,
+                                      const char *unit,
+                                      const char *ordering)
+{
+    struct cql_node *m = 0, *m1;
+
+    if (ordering && *ordering)
+        m = cql_node_mk_mod("ordering", ordering);
+    if (unit && *unit)
+    {
+        m1 = cql_node_mk_mod("unit", unit);
+        m1->u.mod.next = m;
+        m = m1;
+    }
+    if (distance && *distance)
+    {
+        m1 = cql_node_mk_mod("distance", distance);
+        m1->u.mod.next = m;
+        m = m1;
+    }
+    if (relation && *relation)
+    {
+        m1 = cql_node_mk_mod("relation", relation);
+        m1->u.mod.next = m;
+        m = m1;
+    }
+    return m;
+}
+
+void cql_node_destroy(struct cql_node *cn)
+{
+    if (!cn)
+        return;
+    switch (cn->which)
+    {
+    case CQL_NODE_ST:
+        free (cn->u.st.index);
+        free (cn->u.st.relation);
+        free (cn->u.st.term);
+        cql_node_destroy(cn->u.st.modifiers);
+        cql_node_destroy(cn->u.st.prefixes);
+        break;
+    case CQL_NODE_MOD:
+        free (cn->u.mod.name);
+        free (cn->u.mod.value);
+        cql_node_destroy(cn->u.mod.next);
+        break;
+    case CQL_NODE_BOOL:
+        free (cn->u.boolean.value);
+        cql_node_destroy(cn->u.boolean.left);
+        cql_node_destroy(cn->u.boolean.right);
+        cql_node_destroy(cn->u.boolean.prefixes);
+    }
+    free (cn);
+}
+
diff --git a/src/datetime.asn b/src/datetime.asn
new file mode 100644 (file)
index 0000000..cab9eb0
--- /dev/null
@@ -0,0 +1,81 @@
+UserInfoFormat-dateTime
+{Z39-50-userInfoFormat dateTime (6)} DEFINITIONS ::=
+BEGIN
+IMPORTS IntUnit FROM Z39-50-APDU-1995;
+
+DateTime ::= SEQUENCE{
+     date [1]  Z3950Date OPTIONAL,
+     time [2]  Z3950Time OPTIONAL
+                    -- one or the other, or both
+          }
+
+Z3950Date ::= SEQUENCE{
+ year         [1] IMPLICIT INTEGER,
+                    -- For "positive" years, i.e. 1 AD or later, supply
+                    -- the absolute year, e.g. If the year is 1995, supply
+                    -- the integer 1995; the value 95 would indicate the
+                    -- year 0095.
+                    -- For "negative" years, e.g. 1 BC or earlier, -1
+                    -- represents 1 BC, -2 represents 2 BC, etc. Zero is
+                    -- invalid, because there was no year zero.
+ partOfYear   [2] CHOICE{ -- may be omitted if only year is significant
+        monthAndDay [1]   IMPLICIT SEQUENCE{
+                       month [2]  IMPLICIT INTEGER, 
+                                   -- value 1-12
+                       day   [3]  IMPLICIT INTEGER OPTIONAL
+                                   -- may be omitted if only year and month
+                                   -- are significant. Value 1-31.
+                                           },
+        julianDay   [2]   IMPLICIT INTEGER, -- Value 1 - 366.
+        weekNumber  [3]   IMPLICIT INTEGER, -- Value 1 - 53. 
+        quarter     [4] CHOICE{
+                       first    [1] IMPLICIT NULL,
+                       second   [2] IMPLICIT NULL,
+                       third    [3] IMPLICIT NULL,
+                       fourth   [4] IMPLICIT NULL},
+        season      [5] CHOICE{
+                       winter   [1] IMPLICIT NULL,
+                       spring   [2] IMPLICIT NULL,
+                       summer   [3] IMPLICIT NULL,
+                       autumn   [4] IMPLICIT NULL}
+                                              } OPTIONAL, 
+ flags        [3] IMPLICIT SEQUENCE{
+     circa          [1]   IMPLICIT NULL OPTIONAL,
+                          -- if this flag is set then the date is "approximate".
+     era            [2]   CHOICE{
+                          -- If era occurs, partOfYear should not occur.
+                          decade         [1] IMPLICIT NULL,
+                                              -- year must be multiple of 10.
+                                              -- For example, 1900 refers to
+                                              -- the decade covering the years
+                                              -- 1900 through 1909.
+                          century        [2] IMPLICIT NULL,
+                                              -- year must be multiple of 100.
+                          millennium     [3] IMPLICIT NULL
+                                              -- year must be multiple of 1000.
+                                                    } OPTIONAL
+                                              } OPTIONAL
+                                }
+
+
+Z3950Time ::= SEQUENCE{
+     hour           [1] IMPLICIT INTEGER,
+                             -- Value 0-23. 
+     minute         [2]  IMPLICIT INTEGER OPTIONAL,
+                             -- value 0-59. May be omitted when hour only is
+                             -- significant (in which case second and
+                             -- partOfSecond must also be omitted). 
+     second         [3]  IMPLICIT INTEGER OPTIONAL,
+                             -- value 0-59. May be omitted when only hour, or
+                             -- hour and minute, is significant (in which case
+                             -- partOfSecond must also be omitted).
+     partOfSecond   [4]  IMPLICIT IntUnit OPTIONAL,
+                             -- Use Unit System = 'si', Unit type = 'time'; 
+                             -- Unit = 'second', with appropriate value and
+                             -- scale factor.
+     zone           [5]  CHOICE{
+                              local      [1]  IMPLICIT NULL,
+                              utc        [2]  IMPLICIT NULL,
+                              utcOffset  [3]  IMPLICIT INTEGER  -- in minutes
+                                                    }}             
+END                              
diff --git a/src/diagbib1.c b/src/diagbib1.c
new file mode 100644 (file)
index 0000000..0842c41
--- /dev/null
@@ -0,0 +1,233 @@
+/*
+ * Copyright (c) 1995-2003, Index Data
+ * See the file LICENSE for details.
+ * Sebastian Hammer, Adam Dickmeiss
+ *
+ * $Id: diagbib1.c,v 1.1 2003-10-27 12:21:30 adam Exp $
+ */
+
+#include <stdio.h>
+
+#include <yaz/diagbib1.h>
+
+static struct {
+    int code;
+    char *msg;
+} msg_tab[] = {
+{ 1, "Permanent system error" },
+{ 2, "Temporary system error" },
+{ 3, "Unsupported search" },
+{ 4, "Terms only exclusion (stop) words" },
+{ 5, "Too many argument words" },
+{ 6, "Too many boolean operators" },
+{ 7, "Too many truncated words" },
+{ 8, "Too many incomplete subfields" },
+{ 9, "Truncated words too short" },
+{ 10, "Invalid format for record number (search term)" },
+{ 11, "Too many characters in search statement" },
+{ 12, "Too many records retrieved" },
+{ 13, "Present request out of range" },
+{ 14, "System error in presenting records" },
+{ 15, "Record no authorized to be sent intersystem" },
+{ 16, "Record exceeds Preferred-message-size" },
+{ 17, "Record exceeds Maximum-record-size" },
+{ 18, "Result set not supported as a search term" },
+{ 19, "Only single result set as search term supported" },
+{ 20, "Only ANDing of a single result set as search term supported" },
+{ 21, "Result set exists and replace indicator off" },
+{ 22, "Result set naming not supported" },
+{ 23, "Combination of specified databases not supported" },
+{ 24, "Element set names not supported" },
+{ 25, "Specified element set name not valid for specified database" },
+{ 26, "Only a single element set name supported" },
+{ 27, "Result set no longer exists - unilaterally deleted by target" },
+{ 28, "Result set is in use" },
+{ 29, "One of the specified databases is locked" },
+{ 30, "Specified result set does not exist" },
+{ 31, "Resources exhausted - no results available" },
+{ 32, "Resources exhausted - unpredictable partial results available" },
+{ 33, "Resources exhausted - valid subset of results available" },
+{ 100, "Unspecified error" },
+{ 101, "Access-control failure" },
+{ 102, "Security challenge required but could not be issued -"
+" request terminated" },
+{ 103, "Security challenge required but could not be issued -"
+" record not included" },
+{ 104, "Security challenge failed - record not included" },
+{ 105, "Terminated by negative continue response" },
+{ 106, "No abstract syntaxes agreed to for this record" },
+{ 107, "Query type not supported" },
+{ 108, "Malformed query" },
+{ 109, "Database unavailable" },
+{ 110, "Operator unsupported" },
+{ 111, "Too many databases specified" },
+{ 112, "Too many result sets created" },
+{ 113, "Unsupported attribute type" },
+{ 114, "Unsupported Use attribute" },
+{ 115, "Unsupported value for Use attribute" },
+{ 116, "Use attribute required but not supplied" },
+{ 117, "Unsupported Relation attribute" },
+{ 118, "Unsupported Structure attribute" },
+{ 119, "Unsupported Position attribute" },
+{ 120, "Unsupported Truncation attribute" },
+{ 121, "Unsupported Attribute Set" },
+{ 122, "Unsupported Completeness attribute" },
+{ 123, "Unsupported attribute combination" },
+{ 124, "Unsupported coded value for term" },
+{ 125, "Malformed search term" },
+{ 126, "Illegal term value for attribute" },
+{ 127, "Unparsable format for un-normalized value" },
+{ 128, "Illegal result set name" },
+{ 129, "Proximity search of sets not supported" },
+{ 130, "Illegal result set in proximity search" },
+{ 131, "Unsupported proximity relation" },
+{ 132, "Unsupported proximity unit code" },
+{ 201, "Proximity not supported with this attribute combination" },
+{ 202, "Unsupported distance for proximity" },
+{ 203, "Ordered flag not supported for proximity" },
+{ 205, "Only zero step size supported for Scan" },
+{ 206, "Specified step size not supported for Scan" },
+{ 207, "Cannot sort according to sequence" },
+{ 208, "No result set name supplied on Sort" },
+{ 209, "Generic sort not supported (database-specific sort only supported)" },
+{ 210, "Database specific sort not supported" },
+{ 211, "Too many sort keys" },
+{ 212, "Duplicate sort keys" },
+{ 213, "Unsupported missing data action" },
+{ 214, "Illegal sort relation" },
+{ 215, "Illegal case value" },
+{ 216, "Illegal missing data action" },
+{ 217, "Segmentation: Cannot guarantee records will fit in specified segments"
+},
+{ 218, "ES: Package name already in use" },
+{ 219, "ES: no such package, on modify/delete" },
+{ 220, "ES: quota exceeded" },
+{ 221, "ES: extended service type not supported" },
+{ 222, "ES: permission denied on ES - id not authorized" },
+{ 223, "ES: permission denied on ES - cannot modify or delete" },
+{ 224, "ES: immediate execution failed" },
+{ 225, "ES: immediate execution not supported for this service" },
+{ 226, "ES: immediate execution not supported for these parameters" },
+{ 227, "No data available in requested record syntax" },
+{ 228, "Scan: malformed scan" },
+{ 229, "Term type not supported" },
+{ 230, "Sort: too many input results" },
+{ 231, "Sort: incompatible record formats" },
+{ 232, "Scan: term list not supported" },
+{ 233, "Scan: unsupported value of position-in-response" },
+{ 234, "Too many index terms processed" },
+{ 235, "Database does not exist" },
+{ 236, "Access to specified database denied" },
+{ 237, "Sort: illegal sort" },
+{ 238, "Record not available in requested syntax" },
+{ 239, "Record syntax not supported" },
+{ 240, "Scan: Resources exhausted looking for satisfying terms" },
+{ 241, "Scan: Beginning or end of term list" },
+{ 242, "Segmentation: max-segment-size too small to segment record" },
+{ 243, "Present:  additional-ranges parameter not supported" },
+{ 244, "Present:  comp-spec parameter not supported" },
+{ 245, "Type-1 query: restriction ('resultAttr') operand not supported" },
+{ 246, "Type-1 query: 'complex' attributeValue not supported" },
+{ 247, "Type-1 query: 'attributeSet' as part of AttributeElement not supported" },
+{ 1001, "Malformed APDU"}, 
+{ 1002, "ES: EXTERNAL form of Item Order request not supported" },
+{ 1003, "ES: Result set item form of Item Order request not supported" },
+{ 1004, "ES: Extended services not supported unless access control is in effect" },
+{ 1005, "Response records in Search response not supported" },
+{ 1006, "Response records in Search response not possible for specified database (or database combination)" },
+{ 1007, "No Explain server. Addinfo: pointers to servers that have a surrogate Explain database for this server" },
+{ 1008, "ES: missing mandatory parameter for specified function. Addinfo: parameter" },
+{ 1009, "ES: Item Order, unsupported OID in itemRequest. Addinfo: OID" },
+{ 1010, "Init/AC: Bad Userid" },
+{ 1011, "Init/AC: Bad Userid and/or Password" },
+{ 1012, "Init/AC: No searches remaining (pre-purchased searches exhausted)" },
+{ 1013, "Init/AC: Incorrect interface type (specified id valid only when used with a particular access method or client)" },
+{ 1014, "Init/AC: Authentication System error" },
+{ 1015, "Init/AC: Maximum number of simultaneous sessions for Userid" },
+{ 1016, "Init/AC: Blocked network address"},
+{ 1017, "Init/AC: No databases available for specified userId"},
+{ 1018, "Init/AC: System temporarily out of resources"},
+{ 1019, "Init/AC: System not available due to maintenance" },
+{ 1020, "Init/AC: System temporarily unavailable (Addinfo: when it's expected back up)"},
+{ 1021, "Init/AC: Account has expired"},
+{ 1022, "Init/AC: Password has expired so a new one must be supplied"},
+{ 1023, "Init/AC: Password has been changed by an administrator so a new one must be supplied"},
+{ 1024, "Unsupported Attribute" },
+{ 1025, "Service not supported for this database" },
+{ 1026, "Record cannot be opened because it is locked"},
+{ 1027, "SQL error" },
+{ 1028, "Record deleted" },
+{ 1029, "Scan: too many terms requested. Addinfo: max terms supported" },
+/* 1030 - 1039 /currently unnassigned */
+    
+/* The following, 1040 - 1047, were approved at the June 1998 ZIG meeting.
+   These were originally proposed for addition to the Extended Services
+   diagnostic set. */
+{ 1040, "ES: Invalid function" },
+{ 1041, "ES: Error in retention time" },
+{ 1042, "ES: Permissions data not understood" },
+{ 1043, "ES: Invalid OID for task specific parameters" },
+{ 1044, "ES: Invalid action" },
+{ 1045, "ES: Unknown schema" },
+{ 1046, "ES: Too many records in package" },
+{ 1047, "ES: Invalid wait action" },
+/* The following, 1048 - 1053, were approved at the October 1998 ZIG
+   meeting. */
+{ 1048, "ES: Cannot create task package -- exceeds maximum permissable size"},
+{ 1049, "ES: Cannot return task package -- exceeds maximum permissable size"},
+{ 1050, "ES: Extended services request too large"},
+{ 1051, "Scan: Attribute set id required -- not supplied"},
+{ 1052, "ES: Cannot process task package record -- exceeds maximum "
+      "permissible record size for ES" },
+{ 1053, "ES: Cannot return task package record -- exceeds maximum "
+      "permissible record size for ES response" },
+/* The following, 1054 - 1057, were approved at the March 1999 ZIG
+   meeting. 1054 and 1055 are added for support of the Model for Z39.50
+   Negotiation During Initialization
+   <http://lcweb.loc.gov/z3950/agency/nego.html>. 1056 was added in
+   conjunction with the clarification Single-PDU, Multi-database Searching
+   -- Status <http://lcweb.loc.gov/z3950/agency/clarify/db-status.html> */
+{ 1054, "Init: Required negotiation record not included"},
+{ 1055, "Init: negotiation option required"},
+{ 1056, "Attribute not supported for database" },
+{ 1057, "ES: Unsupported value of task package parameter"},
+/* The following, 1058 - 1066, were approved at the August 1999 ZIG
+   meeting. 1058 through 1065 are added for support of the Z39.50 Duplicate
+   Detection Service <http://lcweb.loc.gov/z3950/agency/amend/dedup.html>. */
+{ 1058, "Duplicate Detection: Cannot dedup on requested record portion" },  
+{ 1059, "Duplicate Detection: Requested detection criterion not supported" },
+{ 1060, "Duplicate Detection: Requested level of match not supported" },
+{ 1061, "Duplicate Detection: Requested regular expression not supported" },
+{ 1062, "Duplicate Detection: Cannot do clustering" },
+{ 1063, "Duplicate Detection: Retention criterion not supported"},
+{ 1064, "Duplicate Detection: Requested number (or percentage) of entries "
+      "for retention too large" },
+{ 1065, "Duplicate Detection: Requested sort criterion not supported" },
+{ 1066, "CompSpec: Unknown schema, or schema not supported."},
+/* The following, 1067 - 1069, were approved at the January 2000 ZIG
+   meeting. 1067 and 1068 are added for support of encapsulation
+   <http://lcweb.loc.gov/z3950/agency/amend/encapsulation.html> . */
+{ 1067, "Encapsulation: Encapsulated sequence of PDUs not supported" },
+{ 1068, "Encapsulation: Base operation (and encapsulated PDUs) not executed "
+      "based on pre-screening analysis" },
+{ 1069, "No syntaxes available for this request" },
+/* The following, 1070-1071, were approved at the July 2000 ZIG meeting.
+   These are defined in conjunction with the clarification Server Selected
+   Record Syntax <http://lcweb.loc.gov/z3950/agency/clarify/altsyntax.html> */
+{ 1070, "user not authorized to receive record(s) in requested syntax" },
+{ 1071, "preferredRecordSyntax not supplied" },
+/* The following diagnostic was approved at the October 2001 ZIG meeting.
+   See http://lists.w3.org/Archives/Public/www-zig/2001Jun/0006.html */
+{ 1072, "Query term includes characters that do not translate into the "
+      "target character set"},
+{ 0, NULL} 
+};
+
+const char *diagbib1_str (int code)
+{
+    int i;
+    for (i=0; msg_tab[i].msg; i++)
+        if (msg_tab[i].code == code)
+            return msg_tab[i].msg;
+    return "Unknown error";
+}
diff --git a/src/dumpber.c b/src/dumpber.c
new file mode 100644 (file)
index 0000000..86c66e8
--- /dev/null
@@ -0,0 +1,124 @@
+/*
+ * Copyright (c) 1995-2003, Index Data.
+ * See the file LICENSE for details.
+ * Sebastian Hammer, Adam Dickmeiss
+ *
+ * $Id: dumpber.c,v 1.1 2003-10-27 12:21:30 adam Exp $
+ */
+#if HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include <stdio.h>
+#include "odr-priv.h"
+
+static int do_dumpBER(FILE *f, const char *buf, int len, int level, int offset)
+{
+    int res, ll, zclass, tag, cons, lenlen, taglen;
+    const char *b = buf, *bp = buf;
+    
+    if (!len)
+       return 0;
+    if (!buf[0] && !buf[1])
+       return 0;
+    if ((res = ber_dectag((unsigned char*)b, &zclass, &tag, &cons, len)) <= 0)
+       return 0;
+    if (res > len)
+    {
+       fprintf(stderr, "Unexpected end of buffer\n");
+       return 0;
+    }
+    fprintf(f, "%5d: %*s", offset, level * 4, "");
+    if (zclass == ODR_UNIVERSAL)
+    {
+       static char *nl[] =
+       {
+           "[Univ 0]", "BOOLEAN", "INTEGER", "BIT STRING", "OCTET STRING",
+           "NULL", "OID", "OBJECT DESCIPTOR", "EXTERNAL", "REAL",
+           "ENUM", "[UNIV 11]", "[UNIV 12]", "[UNIV 13]", "[UNIV 14]",
+           "[UNIV 15]", "SEQUENCE", "SET", "NUMERICSTRING", "PRINTABLESTRING",
+           "[UNIV 20]", "[UNIV 21]", "[UNIV 22]", "[UNIV 23]", "[UNIV 24]",
+           "GRAPHICSTRING", "VISIBLESTRING", "GENERALSTRING", "[UNIV 28]"
+       };
+
+       if (tag >= 0 && tag < 28)
+           fprintf(f, "%s", nl[tag]);
+       else
+           fprintf(f, "[UNIV %d]", tag);
+    }
+    else if (zclass == ODR_CONTEXT)
+       fprintf(f, "[%d]", tag);
+    else
+       fprintf(f, "[%d:%d]", zclass, tag);
+    b += res;
+    taglen = res;
+    len -= res;
+    bp = b;
+    if ((res = ber_declen((unsigned char*)b, &ll, len)) <= 0)
+    {
+       fprintf(f, "\n%*sBad length\n", level*4+5, "");
+       return 0;
+    }
+    lenlen = res;
+    b += res;
+    len -= res;
+    if (ll >= 0)
+       fprintf(f, " len=%d", ll);
+    else
+       fprintf(f, " len=?");
+    fprintf(f, "       tl=%d, ll=%d cons=%d\n", taglen, lenlen, cons);
+    if (!cons)
+    {
+       if (ll < 0 || ll > len)
+       {
+           fprintf(f, "%*sBad length on primitive type. ll=%d len=%d\n",
+                    level*4+5, "", ll, len);
+           return 0;
+       }
+       return ll + (b - buf);
+    }
+    if (ll >= 0)
+    {
+        if (ll > len)
+        {
+           fprintf(f, "%*sBad length of constructed type ll=%d len=%d.\n",
+                    level*4+5, "", ll, len);
+           return 0;
+        }
+       len = ll;
+    }
+    /* constructed - cycle through children */
+    while ((ll == -1 && len >= 2) || (ll >= 0 && len))
+    {
+       if (ll == -1 && *b == 0 && *(b + 1) == 0)
+           break;
+       if (!(res = do_dumpBER(f, b, len, level + 1, offset + (b - buf))))
+       {
+           fprintf(f, "%*sDump of content element failed.\n", level*4+5, "");
+           return 0;
+       }
+       b += res;
+       len -= res;
+        if (len < 0)
+        {
+            fprintf(f, "%*sBad length\n", level*4+5, "");
+            return 0;
+        }
+    }
+    if (ll == -1)
+    {
+       if (len < 2)
+       {
+           fprintf(f, "%*sBuffer too short in indefinite length.\n",
+                    level*4+5, "");
+           return 0;
+       }
+       return (b - buf) + 2;
+    }
+    return b - buf;
+}
+
+int odr_dumpBER(FILE *f, const char *buf, int len)
+{
+    return do_dumpBER(f, buf, len, 0, 0);
+}
diff --git a/src/esadmin.asn b/src/esadmin.asn
new file mode 100644 (file)
index 0000000..9ec766b
--- /dev/null
@@ -0,0 +1,49 @@
+ESFormat-Admin
+{Z39-50-extendedService Index-Data(81) AdminES (1)} DEFINITIONS ::=
+  -- oid is 1.2.840.10003.9.81.1
+BEGIN
+IMPORTS DiagRec, InternationalString, Segment
+FROM Z39-50-APDU-1995;
+Admin ::= CHOICE{
+    esRequest      [1] IMPLICIT SEQUENCE{
+       toKeep         [1] OriginPartToKeep,
+       notToKeep      [2] OriginPartNotToKeep},
+    taskPackage    [2] IMPLICIT SEQUENCE{
+                       originPart     [1]
+                                   OriginPartToKeep,
+                       targetPart     [2] TargetPart}}
+
+OriginPartToKeep ::= SEQUENCE{
+action              [1] CHOICE{
+    reIndex         [1] NULL,
+    truncate        [2] NULL,
+    drop            [3] NULL,
+    create          [4] NULL,
+    import          [5] ImportParameters,
+    refresh         [6] NULL,   -- Review internal representation of records against source files on disk to
+                               -- see if they have been updated.
+    commit          [7] NULL,
+    shutdown        [8] NULL,
+    start           [9] NULL},
+databaseName           [2] IMPLICIT InternationalString OPTIONAL}
+
+OriginPartNotToKeep ::= CHOICE{
+records                 [1] Segment,
+recordsWillFollow       [0] NULL}
+
+TargetPart ::= SEQUENCE{
+  updateStatus        [1] IMPLICIT INTEGER{
+                          success (1),
+                          partial (2),
+                          failure (3)},
+  globalDiagnostics   [2] IMPLICIT SEQUENCE OF
+                              DiagRec OPTIONAL
+               }
+              
+-- Auxiliary definitions for Admin
+
+ImportParameters ::= SEQUENCE{
+ recordType          [1] IMPLICIT InternationalString
+}
+
+END
diff --git a/src/esupdate.asn b/src/esupdate.asn
new file mode 100644 (file)
index 0000000..e6628a1
--- /dev/null
@@ -0,0 +1,103 @@
+ESFormat-Update
+{Z39-50-extendedService Update (5) revisions (1)  revision-1 (1)} DEFINITIONS ::=
+  -- oid is 1.2.840.10003.9.5.1.1
+BEGIN
+IMPORTS DiagRec, InternationalString
+FROM Z39-50-APDU-1995;
+Update ::= CHOICE{
+    esRequest      [1] IMPLICIT SEQUENCE{
+       toKeep         [1] OriginPartToKeep,
+       notToKeep      [2] OriginPartNotToKeep},
+    taskPackage    [2] IMPLICIT SEQUENCE{
+                       originPart     [1]
+                                   OriginPartToKeep,
+                       targetPart     [2] TargetPart}}
+
+OriginPartToKeep ::= SEQUENCE{
+action                  [1] IMPLICIT INTEGER{
+                                recordInsert    (1),
+                                recordReplace   (2),
+                                recordDelete    (3),
+                                elementUpdate   (4),
+                                specialUpdate   (5)},
+ databaseName           [2] IMPLICIT InternationalString,
+ schema                 [3] IMPLICIT OBJECT IDENTIFIER OPTIONAL,
+ elementSetName         [4] IMPLICIT InternationalString OPTIONAL,
+ actionQualifier        [5] IMPLICIT EXTERNAL OPTIONAL}
+
+OriginPartNotToKeep ::= SuppliedRecords
+
+TargetPart ::= SEQUENCE{
+  updateStatus        [1] IMPLICIT INTEGER{
+                          success (1),
+                          partial (2),
+                          failure (3)},
+  globalDiagnostics   [2] IMPLICIT SEQUENCE OF
+                              DiagRec OPTIONAL,
+                    -- These are non-surrogate
+                    -- diagnosticsrelating to the task,
+                    -- not to individual records.
+  taskPackageRecords  [3] IMPLICIT SEQUENCE OF
+TaskPackageRecordStructure
+                    -- There should be a
+                    -- TaskPackageRecordStructure
+                    -- for every record supplied.
+                    -- The target should create
+                    -- such a structure for every
+                    -- record immediately upon
+                    -- creating the task package
+                    -- to include correlation
+                    -- information and status.
+                    -- The record itself would not
+                    -- be included until processing
+                    -- for that record is complete.
+               }
+
+-- Auxiliary definitions for Update
+SuppliedRecords ::= SEQUENCE OF SEQUENCE{
+  recordId     [1] CHOICE{
+                number  [1] IMPLICIT INTEGER,
+                string  [2] IMPLICIT  InternationalString,
+                opaque  [3] IMPLICIT OCTET STRING} OPTIONAL,
+  supplementalId [2] CHOICE{
+                 timeStamp       [1] IMPLICIT  GeneralizedTime,
+                 versionNumber   [2] IMPLICIT InternationalString,
+                 previousVersion [3] IMPLICIT EXTERNAL} OPTIONAL,
+  correlationInfo   [3] IMPLICIT CorrelationInfo OPTIONAL,
+  record            [4] IMPLICIT EXTERNAL}
+
+CorrelationInfo ::= SEQUENCE{
+            -- origin may supply one or both for any record:
+  note [1] IMPLICIT InternationalString OPTIONAL,
+  id   [2] IMPLICIT INTEGER OPTIONAL}
+
+TaskPackageRecordStructure ::= SEQUENCE{
+     recordOrSurDiag  [1] CHOICE {
+                    record     [1] IMPLICIT EXTERNAL,
+                      -- Choose 'record' if
+                      -- recordStatus is 'success', and
+                      -- elementSetName was supplied.
+
+                  surrogateDiagnostics   [2] IMPLICIT
+                              SEQUENCE OF DiagRec
+                         -- Choose 'SurrogateDiagnostics', if
+                         -- RecordStatus is failure.
+                                } OPTIONAL,
+                -- The parameter recordOrSurDiag
+                    -- will thus be omitted only if
+                    -- 'elementSetName' was omitted and
+                    -- recordStatus is 'success'; or
+                    --if record status is 'queued'
+                    -- or in 'process'.
+     correlationInfo [2] IMPLICIT
+                         CorrelationInfo OPTIONAL,
+                    -- This should be included
+                    -- if it was supplied by the origin.
+     recordStatus    [3] IMPLICIT INTEGER{
+                                        success   (1),
+                                        queued    (2),
+                                        inProcess (3),
+                                        failure   (4)},
+      supplementalDiagnostics   [4] IMPLICIT
+                SEQUENCE OF DiagRec OPTIONAL}
+END
diff --git a/src/eventl.c b/src/eventl.c
new file mode 100644 (file)
index 0000000..ac56264
--- /dev/null
@@ -0,0 +1,188 @@
+/*
+ * Copyright (c) 1995-2003, Index Data
+ * See the file LICENSE for details.
+ * Sebastian Hammer, Adam Dickmeiss
+ *
+ * $Id: eventl.c,v 1.1 2003-10-27 12:21:30 adam Exp $
+ */
+
+#include <stdio.h>
+#include <assert.h>
+#ifdef WIN32
+#include <winsock.h>
+#else
+#include <unistd.h>
+#endif
+#include <stdlib.h>
+#include <errno.h>
+#include <string.h>
+
+#include <yaz/yconfig.h>
+#include <yaz/log.h>
+#include <yaz/comstack.h>
+#include <yaz/xmalloc.h>
+#include "eventl.h"
+#include "session.h"
+#include <yaz/statserv.h>
+
+#if YAZ_GNU_THREADS
+#include <pth.h>
+#define YAZ_EV_SELECT pth_select
+#endif
+
+#ifndef YAZ_EV_SELECT
+#define YAZ_EV_SELECT select
+#endif
+
+IOCHAN iochan_create(int fd, IOC_CALLBACK cb, int flags)
+{
+    IOCHAN new_iochan;
+
+    if (!(new_iochan = (IOCHAN)xmalloc(sizeof(*new_iochan))))
+       return 0;
+    new_iochan->destroyed = 0;
+    new_iochan->fd = fd;
+    new_iochan->flags = flags;
+    new_iochan->fun = cb;
+    new_iochan->force_event = 0;
+    new_iochan->last_event = new_iochan->max_idle = 0;
+    new_iochan->next = NULL;
+    return new_iochan;
+}
+
+int event_loop(IOCHAN *iochans)
+{
+    do /* loop as long as there are active associations to process */
+    {
+       IOCHAN p, nextp;
+       fd_set in, out, except;
+       int res, max;
+       static struct timeval to;
+        time_t now = time(0);
+
+        if (statserv_must_terminate())
+        {
+            for (p = *iochans; p; p = p->next)
+                p->force_event = EVENT_TIMEOUT;
+        }
+       FD_ZERO(&in);
+       FD_ZERO(&out);
+       FD_ZERO(&except);
+       to.tv_sec = 3600;
+       to.tv_usec = 0;
+       max = 0;
+       for (p = *iochans; p; p = p->next)
+       {
+            time_t w, ftime;
+            yaz_log(LOG_DEBUG, "fd=%d flags=%d force_event=%d",
+                    p->fd, p->flags, p->force_event);
+           if (p->force_event)
+                to.tv_sec = 0;          /* polling select */
+           if (p->flags & EVENT_INPUT)
+               FD_SET(p->fd, &in);
+           if (p->flags & EVENT_OUTPUT)
+               FD_SET(p->fd, &out);
+           if (p->flags & EVENT_EXCEPT)
+               FD_SET(p->fd, &except);
+           if (p->fd > max)
+               max = p->fd;
+            if (p->max_idle && p->last_event)
+            {
+                ftime = p->last_event + p->max_idle;
+                if (ftime < now)
+                    w = p->max_idle;
+                else
+                    w = ftime - now;
+                if (w < to.tv_sec)
+                    to.tv_sec = w;
+            }
+       }
+        yaz_log(LOG_DEBUG, "select start %ld", (long) to.tv_sec);
+       res = YAZ_EV_SELECT(max + 1, &in, &out, &except, &to);
+        yaz_log(LOG_DEBUG, "select end");
+       if (res < 0)
+       {
+           if (yaz_errno() == EINTR)
+            {
+                if (statserv_must_terminate())
+                {
+                    for (p = *iochans; p; p = p->next)
+                        p->force_event = EVENT_TIMEOUT;
+                }
+                continue;
+            }
+            else
+            {
+                /* Destroy the first member in the chain, and try again */
+                association *assoc = (association *)iochan_getdata(*iochans);
+                COMSTACK conn = assoc->client_link;
+
+                cs_close(conn);
+               destroy_association(assoc);
+               iochan_destroy(*iochans);
+                yaz_log(LOG_DEBUG, "error select, destroying iochan %p",
+                       *iochans);
+            }
+       }
+        now = time(0);
+       for (p = *iochans; p; p = p->next)
+       {
+           int force_event = p->force_event;
+
+           p->force_event = 0;
+           if (!p->destroyed && (FD_ISSET(p->fd, &in) ||
+               force_event == EVENT_INPUT))
+           {
+               p->last_event = now;
+               (*p->fun)(p, EVENT_INPUT);
+           }
+           if (!p->destroyed && (FD_ISSET(p->fd, &out) ||
+               force_event == EVENT_OUTPUT))
+           {
+               p->last_event = now;
+               (*p->fun)(p, EVENT_OUTPUT);
+           }
+           if (!p->destroyed && (FD_ISSET(p->fd, &except) ||
+               force_event == EVENT_EXCEPT))
+           {
+               p->last_event = now;
+               (*p->fun)(p, EVENT_EXCEPT);
+           }
+           if (!p->destroyed && ((p->max_idle && now - p->last_event >=
+               p->max_idle) || force_event == EVENT_TIMEOUT))
+           {
+               p->last_event = now;
+               (*p->fun)(p, EVENT_TIMEOUT);
+           }
+       }
+       for (p = *iochans; p; p = nextp)
+       {
+           nextp = p->next;
+
+           if (p->destroyed)
+           {
+               IOCHAN tmp = p, pr;
+
+                /* We need to inform the threadlist that this channel has been destroyed */
+                statserv_remove(p);
+
+               /* Now reset the pointers */
+                if (p == *iochans)
+                   *iochans = p->next;
+               else
+               {
+                   for (pr = *iochans; pr; pr = pr->next)
+                       if (pr->next == p)
+                           break;
+                   assert(pr); /* grave error if it weren't there */
+                   pr->next = p->next;
+               }
+               if (nextp == p)
+                   nextp = p->next;
+               xfree(tmp);
+           }
+       }
+    }
+    while (*iochans);
+    return 0;
+}
diff --git a/src/eventl.h b/src/eventl.h
new file mode 100644 (file)
index 0000000..43df1bc
--- /dev/null
@@ -0,0 +1,56 @@
+/*
+ * Copyright (c) 1995-2003, Index Data
+ * See the file LICENSE for details.
+ * Sebastian Hammer, Adam Dickmeiss
+ *
+ * $Id: eventl.h,v 1.1 2003-10-27 12:21:30 adam Exp $
+ */
+
+#ifndef EVENTL_H
+#define EVENTL_H
+
+#include <time.h>
+
+struct iochan;
+
+typedef void (*IOC_CALLBACK)(struct iochan *i, int event);
+
+typedef struct iochan
+{
+    int fd;
+    int flags;
+#define EVENT_INPUT     0x01
+#define EVENT_OUTPUT    0x02
+#define EVENT_EXCEPT    0x04
+#define EVENT_TIMEOUT   0x08
+#define EVENT_WORK      0x10
+int force_event;
+    IOC_CALLBACK fun;
+    void *data;
+    int destroyed;
+    time_t last_event;
+    time_t max_idle;
+    
+    struct iochan *next;
+} *IOCHAN;
+
+#define iochan_destroy(i) (void)((i)->destroyed = 1)
+#define iochan_getfd(i) ((i)->fd)
+#define iochan_setfd(i, f) ((i)->fd = (f))
+#define iochan_getdata(i) ((i)->data)
+#define iochan_setdata(i, d) ((i)->data = d)
+#define iochan_getflags(i) ((i)->flags)
+#define iochan_setflags(i, d) ((i)->flags = d)
+#define iochan_setflag(i, d) ((i)->flags |= d)
+#define iochan_clearflag(i, d) ((i)->flags &= ~(d))
+#define iochan_getflag(i, d) ((i)->flags & d ? 1 : 0)
+#define iochan_getfun(i) ((i)->fun)
+#define iochan_setfun(i, d) ((i)->fun = d)
+#define iochan_setevent(i, e) ((i)->force_event = (e))
+#define iochan_getnext(i) ((i)->next)
+#define iochan_settimeout(i, t) ((i)->max_idle = (t), (i)->last_event = time(0))
+
+IOCHAN iochan_create(int fd, IOC_CALLBACK cb, int flags);
+int event_loop(IOCHAN *iochans);
+void statserv_remove (IOCHAN pIOChannel);
+#endif
diff --git a/src/grs1disp.c b/src/grs1disp.c
new file mode 100644 (file)
index 0000000..bef6b3d
--- /dev/null
@@ -0,0 +1,117 @@
+/*
+ * Copyright (c) 2002, Index Data.
+ * See the file LICENSE for details.
+ *
+ * $Id: grs1disp.c,v 1.1 2003-10-27 12:21:30 adam Exp $
+ */
+
+#include <stdio.h>
+#include <string.h>
+#include <stdlib.h>
+#include <ctype.h>
+
+#include <yaz/proto.h>
+
+static void display_variant(WRBUF w, Z_Variant *v, int level)
+{
+    int i;
+
+    for (i = 0; i < v->num_triples; i++)
+    {
+        printf("%*sclass=%d,type=%d", level * 4, "", *v->triples[i]->zclass,
+            *v->triples[i]->type);
+        if (v->triples[i]->which == Z_Triple_internationalString)
+            printf(",value=%s\n", v->triples[i]->value.internationalString);
+        else
+            printf("\n");
+    }
+}
+
+static void display_grs1(WRBUF w, Z_GenericRecord *r, int level)
+{
+    int i;
+
+    if (!r)
+    {
+        return;
+    }
+    for (i = 0; i < r->num_elements; i++)
+    {
+        Z_TaggedElement *t;
+
+        wrbuf_printf(w, "%*s", level * 4, "");
+        t = r->elements[i];
+        wrbuf_printf(w, "(");
+        if (t->tagType)
+            wrbuf_printf(w, "%d,", *t->tagType);
+        else
+            wrbuf_printf(w, "?,");
+        if (t->tagValue->which == Z_StringOrNumeric_numeric)
+            wrbuf_printf(w, "%d) ", *t->tagValue->u.numeric);
+        else
+            wrbuf_printf(w, "%s) ", t->tagValue->u.string);
+        if (t->content->which == Z_ElementData_subtree)
+        {
+            if (!t->content->u.subtree)
+                printf (" (no subtree)\n");
+            else
+            {
+                wrbuf_printf(w, "\n");
+                display_grs1(w, t->content->u.subtree, level+1);
+            }
+        }
+        else if (t->content->which == Z_ElementData_string)
+            wrbuf_printf(w, "%s\n", t->content->u.string);
+        else if (t->content->which == Z_ElementData_numeric)
+            wrbuf_printf(w, "%d\n", *t->content->u.numeric);
+        else if (t->content->which == Z_ElementData_oid)
+        {
+            int *ip = t->content->u.oid;
+            oident *oent;
+            
+            if ((oent = oid_getentbyoid(t->content->u.oid)))
+                wrbuf_printf(w, "OID: %s\n", oent->desc);
+            else
+            {
+                wrbuf_printf(w, "{");
+                while (ip && *ip >= 0)
+                    wrbuf_printf(w, " %d", *(ip++));
+                wrbuf_printf(w, " }\n");
+            }
+        }
+        else if (t->content->which == Z_ElementData_noDataRequested)
+            wrbuf_printf(w, "[No data requested]\n");
+        else if (t->content->which == Z_ElementData_elementEmpty)
+            wrbuf_printf(w, "[Element empty]\n");
+        else if (t->content->which == Z_ElementData_elementNotThere)
+            wrbuf_printf(w, "[Element not there]\n");
+        else if (t->content->which == Z_ElementData_date)
+            wrbuf_printf(w, "Date: %s\n", t->content->u.date);
+        else if (t->content->which == Z_ElementData_ext)
+        {
+            printf ("External\n");
+            /* we cannot print externals here. Srry */
+        } 
+        else
+            wrbuf_printf(w, "? type = %d\n",t->content->which);
+        if (t->appliedVariant)
+            display_variant(w, t->appliedVariant, level+1);
+        if (t->metaData && t->metaData->supportedVariants)
+        {
+            int c;
+
+            wrbuf_printf(w, "%*s---- variant list\n", (level+1)*4, "");
+            for (c = 0; c < t->metaData->num_supportedVariants; c++)
+            {
+                wrbuf_printf(w, "%*svariant #%d\n", (level+1)*4, "", c);
+                display_variant(w, t->metaData->supportedVariants[c], level+2);
+            }
+        }
+    }
+}
+
+void yaz_display_grs1(WRBUF wrbuf, Z_GenericRecord *r, int flags)
+{
+    display_grs1 (wrbuf, r, 0);
+}
+
diff --git a/src/ill-get.c b/src/ill-get.c
new file mode 100644 (file)
index 0000000..86ea32d
--- /dev/null
@@ -0,0 +1,693 @@
+/*
+ * Copyright (c) 1999-2001, Index Data.
+ * See the file LICENSE for details.
+ *
+ * $Log: ill-get.c,v $
+ * Revision 1.1  2003-10-27 12:21:30  adam
+ * Source restructure. yaz-marcdump part of installation
+ *
+ * Revision 1.9  2001/03/25 21:55:12  adam
+ * Added odr_intdup. Ztest server returns TaskPackage for ItemUpdate.
+ *
+ * Revision 1.8  2001/02/21 13:46:53  adam
+ * C++ fixes.
+ *
+ * Revision 1.7  2001/02/20 11:25:32  adam
+ * Added ill_get_APDU and ill_get_Cancel.
+ *
+ * Revision 1.6  2000/08/10 08:41:26  adam
+ * Fixes for ILL.
+ *
+ * Revision 1.5  2000/02/24 08:52:01  adam
+ * Bug fix.
+ *
+ * Revision 1.4  2000/02/04 11:01:15  adam
+ * Added more elements.
+ *
+ * Revision 1.3  2000/01/31 13:15:21  adam
+ * Removed uses of assert(3). Cleanup of ODR. CCL parser update so
+ * that some characters are not surrounded by spaces in resulting term.
+ * ILL-code updates.
+ *
+ * Revision 1.2  2000/01/15 09:38:51  adam
+ * Implemented ill_get_ILLRequest. Added some type mappings for ILL protocol.
+ *
+ * Revision 1.1  1999/12/16 23:36:19  adam
+ * Implemented ILL protocol. Minor updates ASN.1 compiler.
+ *
+ */
+
+#include <yaz/ill.h>
+
+bool_t *ill_get_bool (struct ill_get_ctl *gc, const char *name,
+                     const char *sub, int val)
+{
+    ODR o = gc->odr;
+    char element[128];
+    const char *v;
+    bool_t *r = (bool_t *) odr_malloc (o, sizeof(*r));
+    
+    strcpy(element, name);
+    if (sub)
+    {
+       strcat (element, ",");
+       strcat (element, sub);
+    }    
+
+    v = (gc->f)(gc->clientData, element);
+    if (v)
+       val = atoi(v);
+    else if (val < 0)
+       return 0;
+    *r = val;
+    return r;
+}
+
+int *ill_get_int (struct ill_get_ctl *gc, const char *name,
+                 const char *sub, int val)
+{
+    ODR o = gc->odr;
+    char element[128];
+    const char *v;
+    
+    strcpy(element, name);
+    if (sub)
+    {
+       strcat (element, ",");
+       strcat (element, sub);
+    }    
+    v = (gc->f)(gc->clientData, element);
+    if (v)
+       val = atoi(v);
+    return odr_intdup(o, val);
+}
+
+int *ill_get_enumerated (struct ill_get_ctl *gc, const char *name,
+                        const char *sub, int val)
+{
+    return ill_get_int(gc, name, sub, val);
+}
+
+ILL_String *ill_get_ILL_String_x (struct ill_get_ctl *gc, const char *name,
+                                 const char *sub, const char *vdefault)
+{
+    ILL_String *r = (ILL_String *) odr_malloc (gc->odr, sizeof(*r));
+    char element[128];
+    const char *v;
+
+    strcpy(element, name);
+    if (sub)
+    {
+       strcat (element, ",");
+       strcat (element, sub);
+    }
+    v = (gc->f)(gc->clientData, element);
+    if (!v)
+        v = vdefault;
+    if (!v)
+       return 0;
+    r->which = ILL_String_GeneralString;
+    r->u.GeneralString = odr_strdup (gc->odr, v);
+    return r;
+}
+
+ILL_String *ill_get_ILL_String(struct ill_get_ctl *gc, const char *name,
+                              const char *sub)
+{
+    return ill_get_ILL_String_x (gc, name, sub, 0);
+}
+
+ILL_ISO_Date *ill_get_ILL_ISO_Date (struct ill_get_ctl *gc, const char *name,
+                                   const char *sub, const char *val)
+{
+    char element[128];
+    const char *v;
+
+    strcpy(element, name);
+    if (sub)
+    {
+       strcat (element, ",");
+       strcat (element, sub);
+    }
+    v = (gc->f)(gc->clientData, element);
+    if (!v)
+       v = val;
+    if (!v)
+       return 0;
+    return odr_strdup (gc->odr, v);
+}
+
+ILL_ISO_Time *ill_get_ILL_ISO_Time (struct ill_get_ctl *gc, const char *name,
+                                   const char *sub, const char *val)
+{
+    char element[128];
+    const char *v;
+
+    strcpy(element, name);
+    if (sub)
+    {
+       strcat (element, ",");
+       strcat (element, sub);
+    }
+    v = (gc->f)(gc->clientData, element);
+    if (!v)
+       v = val;
+    if (!v)
+       return 0;
+    return odr_strdup (gc->odr, v);
+}
+
+ILL_Person_Or_Institution_Symbol *ill_get_Person_Or_Insitution_Symbol (
+    struct ill_get_ctl *gc, const char *name, const char *sub)
+{
+    char element[128];
+    ODR o = gc->odr;
+    ILL_Person_Or_Institution_Symbol *p =
+       (ILL_Person_Or_Institution_Symbol *) odr_malloc (o, sizeof(*p));
+    
+    strcpy(element, name);
+    if (sub)
+    {
+       strcat (element, ",");
+       strcat (element, sub);
+    }
+    p->which = ILL_Person_Or_Institution_Symbol_person_symbol;
+    if ((p->u.person_symbol = ill_get_ILL_String (gc, element, "person")))
+       return p;
+
+    p->which = ILL_Person_Or_Institution_Symbol_institution_symbol;
+    if ((p->u.institution_symbol =
+        ill_get_ILL_String (gc, element, "institution")))
+       return p;
+    return 0;
+}
+
+static ILL_Name_Of_Person_Or_Institution *ill_get_Name_Of_Person_Or_Institution(
+    struct ill_get_ctl *gc, const char *name, const char *sub)
+{
+    char element[128];
+    ODR o = gc->odr;
+    ILL_Name_Of_Person_Or_Institution *p =
+       (ILL_Name_Of_Person_Or_Institution *) odr_malloc (o, sizeof(*p));
+    
+    strcpy(element, name);
+    if (sub)
+    {
+       strcat (element, ",");
+       strcat (element, sub);
+    }
+    p->which = ILL_Name_Of_Person_Or_Institution_name_of_person;
+    if ((p->u.name_of_person =
+        ill_get_ILL_String (gc, element, "name-of-person")))
+       return p;
+
+    p->which = ILL_Name_Of_Person_Or_Institution_name_of_institution;
+    if ((p->u.name_of_institution =
+        ill_get_ILL_String (gc, element, "name-of-institution")))
+       return p;
+    return 0;
+}
+    
+ILL_System_Id *ill_get_System_Id(struct ill_get_ctl *gc,
+                                const char *name, const char *sub)
+{
+    ODR o = gc->odr;
+    char element[128];
+    ILL_System_Id *p;
+    
+    strcpy(element, name);
+    if (sub)
+    {
+       strcat (element, ",");
+       strcat (element, sub);
+    }
+    p = (ILL_System_Id *) odr_malloc (o, sizeof(*p));
+    p->person_or_institution_symbol = ill_get_Person_Or_Insitution_Symbol (
+       gc, element, "person-or-institution-symbol");
+    p->name_of_person_or_institution = ill_get_Name_Of_Person_Or_Institution (
+       gc, element, "name-of-person-or-institution");
+    return p;
+}
+
+ILL_Transaction_Id *ill_get_Transaction_Id (struct ill_get_ctl *gc,
+                                           const char *name, const char *sub)
+{
+    ODR o = gc->odr;
+    ILL_Transaction_Id *r = (ILL_Transaction_Id *) odr_malloc (o, sizeof(*r));
+    char element[128];
+    
+    strcpy(element, name);
+    if (sub)
+    {
+       strcat (element, ",");
+       strcat (element, sub);
+    }    
+    r->initial_requester_id =
+       ill_get_System_Id (gc, element, "initial-requester-id");
+    r->transaction_group_qualifier =
+       ill_get_ILL_String_x (gc, element, "transaction-group-qualifier", "");
+    r->transaction_qualifier =
+       ill_get_ILL_String_x (gc, element, "transaction-qualifier", "");
+    r->sub_transaction_qualifier =
+       ill_get_ILL_String (gc, element, "sub-transaction-qualifier");
+    return r;
+}
+
+
+ILL_Service_Date_this *ill_get_Service_Date_this (
+    struct ill_get_ctl *gc, const char *name, const char *sub)
+{
+    ODR o = gc->odr;
+    ILL_Service_Date_this *r =
+       (ILL_Service_Date_this *) odr_malloc (o, sizeof(*r));
+    char element[128];
+    
+    strcpy(element, name);
+    if (sub)
+    {
+       strcat (element, ",");
+       strcat (element, sub);
+    }
+    r->date = ill_get_ILL_ISO_Date (gc, element, "date", "20000101");
+    r->time = ill_get_ILL_ISO_Time (gc, element, "time", 0);
+    return r;
+}
+
+ILL_Service_Date_original *ill_get_Service_Date_original (
+    struct ill_get_ctl *gc, const char *name, const char *sub)
+{
+    ODR o = gc->odr;
+    ILL_Service_Date_original *r =
+       (ILL_Service_Date_original *) odr_malloc (o, sizeof(*r));
+    char element[128];
+    
+    strcpy(element, name);
+    if (sub)
+    {
+       strcat (element, ",");
+       strcat (element, sub);
+    }
+    r->date = ill_get_ILL_ISO_Date (gc, element, "date", 0);
+    r->time = ill_get_ILL_ISO_Time (gc, element, "time", 0);
+    if (!r->date && !r->time)
+       return 0;
+    return r;
+}
+
+ILL_Service_Date_Time *ill_get_Service_Date_Time (
+    struct ill_get_ctl *gc, const char *name, const char *sub)
+{
+    ODR o = gc->odr;
+    ILL_Service_Date_Time *r =
+       (ILL_Service_Date_Time *) odr_malloc (o, sizeof(*r));
+    char element[128];
+    
+    strcpy(element, name);
+    if (sub)
+    {
+       strcat (element, ",");
+       strcat (element, sub);
+    }    
+    r->date_time_of_this_service = ill_get_Service_Date_this (
+       gc, element, "this");
+    r->date_time_of_original_service = ill_get_Service_Date_original (
+       gc, element, "original");
+    return r;
+}
+
+ILL_Requester_Optional_Messages_Type *ill_get_Requester_Optional_Messages_Type (
+    struct ill_get_ctl *gc, const char *name, const char *sub)
+{
+    ODR o = gc->odr;
+    ILL_Requester_Optional_Messages_Type *r =
+       (ILL_Requester_Optional_Messages_Type *) odr_malloc (o, sizeof(*r));
+    char element[128];
+    
+    strcpy(element, name);
+    if (sub)
+    {
+       strcat (element, ",");
+       strcat (element, sub);
+    }
+    r->can_send_RECEIVED = ill_get_bool (gc, element, "can-send-RECEIVED", 0);
+    r->can_send_RETURNED = ill_get_bool (gc, element, "can-send-RETURNED", 0);
+    r->requester_SHIPPED =
+       ill_get_enumerated (gc, element, "requester-SHIPPED", 1);
+    r->requester_CHECKED_IN =
+       ill_get_enumerated (gc, element, "requester-CHECKED-IN", 1);
+    return r;
+}
+
+ILL_Item_Id *ill_get_Item_Id (
+    struct ill_get_ctl *gc, const char *name, const char *sub)   
+{
+    ODR o = gc->odr;
+    ILL_Item_Id *r = (ILL_Item_Id *) odr_malloc (o, sizeof(*r));
+    char element[128];
+    
+    strcpy(element, name);
+    if (sub)
+    {
+       strcat (element, ",");
+       strcat (element, sub);
+    }
+    r->item_type = ill_get_enumerated (gc, element, "item-type",
+                                      ILL_Item_Id_monograph);
+    r->held_medium_type = 0;
+    r->call_number = ill_get_ILL_String(gc, element, "call-number");
+    r->author = ill_get_ILL_String(gc, element, "author");
+    r->title = ill_get_ILL_String(gc, element, "title");
+    r->sub_title = ill_get_ILL_String(gc, element, "sub-title");
+    r->sponsoring_body = ill_get_ILL_String(gc, element, "sponsoring-body");
+    r->place_of_publication =
+       ill_get_ILL_String(gc, element, "place-of-publication");
+    r->publisher = ill_get_ILL_String(gc, element, "publisher");
+    r->series_title_number =
+       ill_get_ILL_String(gc, element, "series-title-number");
+    r->volume_issue = ill_get_ILL_String(gc, element, "volume-issue");
+    r->edition = ill_get_ILL_String(gc, element, "edition");
+    r->publication_date = ill_get_ILL_String(gc, element, "publication-date");
+    r->publication_date_of_component =
+       ill_get_ILL_String(gc, element, "publication-date-of-component");
+    r->author_of_article = ill_get_ILL_String(gc, element,
+                                             "author-of-article");
+    r->title_of_article = ill_get_ILL_String(gc, element, "title-of-article");
+    r->pagination = ill_get_ILL_String(gc, element, "pagination");
+    r->national_bibliography_no = 0;
+    r->iSBN = ill_get_ILL_String(gc, element, "ISBN");
+    r->iSSN = ill_get_ILL_String(gc, element, "ISSN");
+    r->system_no = 0;
+    r->additional_no_letters =
+       ill_get_ILL_String(gc, element, "additional-no-letters");
+    r->verification_reference_source = 
+       ill_get_ILL_String(gc, element, "verification-reference-source");
+    return r;
+}
+
+
+ILL_Client_Id *ill_get_Client_Id (
+    struct ill_get_ctl *gc, const char *name, const char *sub)
+{
+    char element[128];
+    ODR o = gc->odr;
+    ILL_Client_Id *r = (ILL_Client_Id *) odr_malloc(o, sizeof(*r));
+
+    strcpy(element, name);
+    if (sub)
+    {
+       strcat (element, ",");
+       strcat (element, sub);
+    }
+    r->client_name = ill_get_ILL_String (gc, element, "client-name");
+    r->client_status = ill_get_ILL_String (gc, element, "client-status");
+    r->client_identifier = ill_get_ILL_String (gc, element,
+                                              "client-identifier");
+    return r;
+}
+
+ILL_Postal_Address *ill_get_Postal_Address (
+    struct ill_get_ctl *gc, const char *name, const char *sub)
+{
+    ODR o = gc->odr;
+    ILL_Postal_Address *r =
+       (ILL_Postal_Address *) odr_malloc(o, sizeof(*r));
+    char element[128];
+
+    strcpy(element, name);
+    if (sub)
+    {
+       strcat (element, ",");
+       strcat (element, sub);
+    }
+    r->name_of_person_or_institution = 
+       ill_get_Name_Of_Person_Or_Institution (
+           gc, element, "name-of-person-or-institution");
+    r->extended_postal_delivery_address =
+       ill_get_ILL_String (
+           gc, element, "extended-postal-delivery-address");
+    r->street_and_number =
+       ill_get_ILL_String (gc, element, "street-and-number");
+    r->post_office_box =
+       ill_get_ILL_String (gc, element, "post-office-box");
+    r->city = ill_get_ILL_String (gc, element, "city");
+    r->region = ill_get_ILL_String (gc, element, "region");
+    r->country = ill_get_ILL_String (gc, element, "country");
+    r->postal_code = ill_get_ILL_String (gc, element, "postal-code");
+    return r;
+}
+
+ILL_System_Address *ill_get_System_Address (
+    struct ill_get_ctl *gc, const char *name, const char *sub)
+{
+    ODR o = gc->odr;
+    ILL_System_Address *r =
+       (ILL_System_Address *) odr_malloc(o, sizeof(*r));
+    char element[128];
+    
+    strcpy(element, name);
+    if (sub)
+    {
+       strcat (element, ",");
+       strcat (element, sub);
+    }
+    r->telecom_service_identifier =
+       ill_get_ILL_String (gc, element, "telecom-service-identifier");
+    r->telecom_service_address =
+       ill_get_ILL_String (gc, element, "telecom-service-addreess");
+    return r;
+}
+
+ILL_Delivery_Address *ill_get_Delivery_Address (
+    struct ill_get_ctl *gc, const char *name, const char *sub)
+{
+    ODR o = gc->odr;
+    ILL_Delivery_Address *r =
+       (ILL_Delivery_Address *) odr_malloc(o, sizeof(*r));
+    char element[128];
+    
+    strcpy(element, name);
+    if (sub)
+    {
+       strcat (element, ",");
+       strcat (element, sub);
+    }
+    r->postal_address =
+       ill_get_Postal_Address (gc, element, "postal-address");
+    r->electronic_address =
+       ill_get_System_Address (gc, element, "electronic-address");
+    return r;
+}
+
+ILL_Search_Type *ill_get_Search_Type (
+    struct ill_get_ctl *gc, const char *name, const char *sub)
+{
+    ODR o = gc->odr;
+    ILL_Search_Type *r = (ILL_Search_Type *) odr_malloc(o, sizeof(*r));
+    char element[128];
+    
+    strcpy(element, name);
+    if (sub)
+    {
+       strcat (element, ",");
+       strcat (element, sub);
+    }
+    r->level_of_service = ill_get_ILL_String (gc, element, "level-of-service");
+    r->need_before_date = ill_get_ILL_ISO_Date (gc, element,
+                                               "need-before-date", 0);
+    r->expiry_date = ill_get_ILL_ISO_Date (gc, element, "expiry-date", 0);
+    r->expiry_flag = ill_get_enumerated (gc, element, "expiry-flag", 3);
+                                        
+    return r;
+}
+
+ILL_Request *ill_get_ILLRequest (
+    struct ill_get_ctl *gc, const char *name, const char *sub)
+{
+    ODR o = gc->odr;
+    ILL_Request *r = (ILL_Request *) odr_malloc(o, sizeof(*r));
+    char element[128];
+    
+    strcpy(element, name);
+    if (sub)
+    {
+       strcat (element, ",");
+       strcat (element, sub);
+    }
+    r->protocol_version_num =
+       ill_get_enumerated (gc, element, "protocol-version-num", 
+                           ILL_Request_version_2);
+    
+    r->transaction_id = ill_get_Transaction_Id (gc, element, "transaction-id");
+    r->service_date_time =
+       ill_get_Service_Date_Time (gc, element, "service-date-time");
+    r->requester_id = ill_get_System_Id (gc, element, "requester-id");
+    r->responder_id = ill_get_System_Id (gc, element, "responder-id");
+    r->transaction_type =
+       ill_get_enumerated(gc, element, "transaction-type", 1);
+
+    r->delivery_address =
+       ill_get_Delivery_Address (gc, element, "delivery-address");
+    r->delivery_service = 0; /* TODO */
+    /* ill_get_Delivery_Service (gc, element, "delivery-service"); */
+    r->billing_address =
+       ill_get_Delivery_Address (gc, element, "billing-address");
+
+    r->num_iLL_service_type = 1;
+    r->iLL_service_type = (ILL_Service_Type **)
+       odr_malloc (o, sizeof(*r->iLL_service_type));
+    *r->iLL_service_type =
+       ill_get_enumerated (gc, element, "ill-service-type",
+                           ILL_Service_Type_copy_non_returnable);
+
+    r->responder_specific_service = 0;
+    r->requester_optional_messages =
+       ill_get_Requester_Optional_Messages_Type (
+           gc, element,"requester-optional-messages");
+    r->search_type = ill_get_Search_Type(gc, element, "search-type");
+    r->num_supply_medium_info_type = 0;
+    r->supply_medium_info_type = 0;
+
+    r->place_on_hold = ill_get_enumerated (
+       gc, element, "place-on-hold", 
+       ILL_Place_On_Hold_Type_according_to_responder_policy);
+    r->client_id = ill_get_Client_Id (gc, element, "client-id");
+                          
+    r->item_id = ill_get_Item_Id (gc, element, "item-id");
+    r->supplemental_item_description = 0;
+    r->cost_info_type = 0;
+    r->copyright_compliance =
+       ill_get_ILL_String(gc, element, "copyright-complicance");
+    r->third_party_info_type = 0;
+    r->retry_flag = ill_get_bool (gc, element, "retry-flag", 0);
+    r->forward_flag = ill_get_bool (gc, element, "forward-flag", 0);
+    r->requester_note = ill_get_ILL_String(gc, element, "requester-note");
+    r->forward_note = ill_get_ILL_String(gc, element, "forward-note");
+    r->num_iLL_request_extensions = 0;
+    r->iLL_request_extensions = 0;
+    return r;
+}
+
+ILL_ItemRequest *ill_get_ItemRequest (
+    struct ill_get_ctl *gc, const char *name, const char *sub)
+{
+    ODR o = gc->odr;
+    ILL_ItemRequest *r = (ILL_ItemRequest *)odr_malloc(o, sizeof(*r));
+    char element[128];
+    
+    strcpy(element, name);
+    if (sub)
+    {
+       strcat (element, ",");
+       strcat (element, sub);
+    }
+    r->protocol_version_num =
+       ill_get_enumerated (gc, element, "protocol-version-num", 
+                           ILL_Request_version_2);
+    
+    r->transaction_id = ill_get_Transaction_Id (gc, element, "transaction-id");
+    r->service_date_time =
+       ill_get_Service_Date_Time (gc, element, "service-date-time");
+    r->requester_id = ill_get_System_Id (gc, element, "requester-id");
+    r->responder_id = ill_get_System_Id (gc, element, "responder-id");
+    r->transaction_type =
+       ill_get_enumerated(gc, element, "transaction-type", 1);
+
+    r->delivery_address =
+       ill_get_Delivery_Address (gc, element, "delivery-address");
+    r->delivery_service = 0; /* TODO */
+    /* ill_get_Delivery_Service (gc, element, "delivery-service"); */
+    r->billing_address =
+       ill_get_Delivery_Address (gc, element, "billing-address");
+
+    r->num_iLL_service_type = 1;
+    r->iLL_service_type = (ILL_Service_Type **)
+       odr_malloc (o, sizeof(*r->iLL_service_type));
+    *r->iLL_service_type =
+       ill_get_enumerated (gc, element, "ill-service-type",
+                           ILL_Service_Type_copy_non_returnable);
+
+    r->responder_specific_service = 0;
+    r->requester_optional_messages =
+       ill_get_Requester_Optional_Messages_Type (
+           gc, element,"requester-optional-messages");
+    r->search_type = ill_get_Search_Type(gc, element, "search-type");
+    r->num_supply_medium_info_type = 0;
+    r->supply_medium_info_type = 0;
+
+    r->place_on_hold = ill_get_enumerated (
+       gc, element, "place-on-hold", 
+       ILL_Place_On_Hold_Type_according_to_responder_policy);
+    r->client_id = ill_get_Client_Id (gc, element, "client-id");
+                          
+    r->item_id = ill_get_Item_Id (gc, element, "item-id");
+    r->supplemental_item_description = 0;
+    r->cost_info_type = 0;
+    r->copyright_compliance =
+       ill_get_ILL_String(gc, element, "copyright-complicance");
+    r->third_party_info_type = 0;
+    r->retry_flag = ill_get_bool (gc, element, "retry-flag", 0);
+    r->forward_flag = ill_get_bool (gc, element, "forward-flag", 0);
+    r->requester_note = ill_get_ILL_String(gc, element, "requester-note");
+    r->forward_note = ill_get_ILL_String(gc, element, "forward-note");
+    r->num_iLL_request_extensions = 0;
+    r->iLL_request_extensions = 0;
+    return r;
+}
+
+ILL_Cancel *ill_get_Cancel (
+    struct ill_get_ctl *gc, const char *name, const char *sub)
+{
+    ODR o = gc->odr;
+    ILL_Cancel *r = (ILL_Cancel *)odr_malloc(o, sizeof(*r));
+    char element[128];
+    
+    strcpy(element, name);
+    if (sub)
+    {
+       strcat (element, ",");
+       strcat (element, sub);
+    }
+    r->protocol_version_num =
+       ill_get_enumerated (gc, element, "protocol-version-num", 
+                           ILL_Request_version_2);
+    
+    r->transaction_id = ill_get_Transaction_Id (gc, element, "transaction-id");
+    r->service_date_time =
+       ill_get_Service_Date_Time (gc, element, "service-date-time");
+    r->requester_id = ill_get_System_Id (gc, element, "requester-id");
+    r->responder_id = ill_get_System_Id (gc, element, "responder-id");
+    r->requester_note = ill_get_ILL_String(gc, element, "requester-note");
+
+    r->num_cancel_extensions = 0;
+    r->cancel_extensions = 0;
+    return r;
+}
+
+ILL_APDU *ill_get_APDU (
+    struct ill_get_ctl *gc, const char *name, const char *sub)
+{
+    ODR o = gc->odr;
+    ILL_APDU *r = (ILL_APDU *)odr_malloc(o, sizeof(*r));
+    char element[128];
+    const char *v;
+
+    strcpy (element, name);
+    strcat (element, ",which");
+
+    v = (gc->f)(gc->clientData, element);
+    if (!v)
+       v = "request";
+    if (!strcmp (v, "request"))
+    {
+       r->which = ILL_APDU_ILL_Request;
+       r->u.illRequest = ill_get_ILLRequest(gc, name, sub);
+    }
+    else if (!strcmp (v, "cancel"))
+    {
+       r->which = ILL_APDU_Cancel;
+       r->u.Cancel = ill_get_Cancel(gc, name, sub);
+    }
+    else
+       return 0;
+    return r;
+}
diff --git a/src/ill.tcl b/src/ill.tcl
new file mode 100644 (file)
index 0000000..f311497
--- /dev/null
@@ -0,0 +1,63 @@
+# Config File for ILL
+# $Id: ill.tcl,v 1.1 2003-10-27 12:21:30 adam Exp $
+# ----------------------------------------------------------
+# Prefix Specifications
+#  
+#    1: C function prefix
+#    2: C type prefix
+#    3: C preprocessor prefix
+
+# Default prefix
+set default-prefix {ill_ ILL_ ILL_}
+
+# ----------------------------------------------------------
+set m ISO-10161-ILL-1
+
+# Filename
+set filename($m) ill-core
+
+# Header initialization code
+set init($m,h) "
+"
+
+# Header body code
+set body($m,h) "
+#ifdef __cplusplus
+extern \"C\" \{
+#endif
+
+#ifdef __cplusplus
+\}
+#endif
+"
+
+# C body code
+set body($m,c) "
+"
+
+# Some mappings - that map ill_ILL_<name> to ill_<name>
+set map($m,ILL-APDU) APDU
+set map($m,ILL-Request) Request
+set map($m,ILL-Answer) Answer
+set map($m,ILL-String) String
+set map($m,ILL-APDU-Type) APDU_Type
+set map($m,ILL-Service-Type) Service_Type
+set map($m,Service_Date_Time_0) Service_Date_this
+set map($m,Service_Date_Time_1) Service_Date_original
+set map($m,Overdue_0) Overdue_ExtensionS
+set membermap($m,APDU,ILL-Request) {APDU_ILL_Request illRequest}
+set membermap($m,APDU,ILL-Answer) {APDU_ILL_Answer illAnswer}
+
+# ----------------------------------------------------------
+set m Z39.50-extendedService-ItemOrder-ItemRequest-1
+# Filename
+set filename($m) item-req
+
+# Mappings of a few basic types
+proc asnBasicPrintableString {} {
+    return {odr_visiblestring char}
+}
+
+proc asnBasicANY {} {
+    return {odr_any Odr_any}
+}
diff --git a/src/ill9702.asn b/src/ill9702.asn
new file mode 100644 (file)
index 0000000..e947489
--- /dev/null
@@ -0,0 +1,1165 @@
+-- use of parameters and types is to be consistent with their definitions in clause 3
+
+ISO-10161-ILL-1 DEFINITIONS EXPLICIT TAGS ::=
+
+BEGIN
+-- ISO-10161-ILL-1 refers to the ILL ISO standard 10161 version 1
+-- and version 2 as specified in ISO standard 10161 Amendment 1
+
+ILL-APDU ::= CHOICE {
+       ILL-Request,
+       Forward-Notification,
+       Shipped,
+       ILL-Answer,
+       Conditional-Reply,
+       Cancel,
+       Cancel-Reply,
+       Received,
+       Recall,
+       Returned,
+       Checked-In,
+       Overdue,
+       Renew,
+       Renew-Answer,
+       Lost,
+       Damaged,
+       Message,
+       Status-Query,
+       Status-Or-Error-Report,
+       Expired
+       }
+
+-- The tagging scheme used in the APDU definitions is as follows:
+-- each named type that is a component type of an APDU definition is assigned a different tag
+-- that is unique within the set of APDU definitions.  Where these component types themselves
+-- have structure, the tagging within such type definitions has only local scope. 
+
+ILL-Request ::= [APPLICATION 1] SEQUENCE {
+       protocol-version-num    [0]     IMPLICIT INTEGER {
+                               version-1 (1),
+                               version-2 (2)
+                               },
+       transaction-id  [1]     IMPLICIT Transaction-Id,
+       service-date-time       [2]     IMPLICIT Service-Date-Time,
+       requester-id    [3]     IMPLICIT System-Id OPTIONAL,
+               -- mandatory when using store-and-forward communications
+               -- optional when using connection-oriented communications
+       responder-id    [4]     IMPLICIT System-Id OPTIONAL,
+               -- mandatory when using store-and-forward communications
+               -- optional when using connection-oriented communications
+       transaction-type        [5]     IMPLICIT Transaction-Type DEFAULT 1,
+       delivery-address        [6]     IMPLICIT Delivery-Address OPTIONAL, 
+       delivery-service                Delivery-Service OPTIONAL,
+       billing-address [8]     IMPLICIT Delivery-Address OPTIONAL,
+       iLL-service-type        [9]     IMPLICIT SEQUENCE SIZE (1..5) OF 
+                               ILL-Service-Type,
+               -- this sequence is a list, in order of preference
+       responder-specific-service      [10]    EXTERNAL OPTIONAL,
+               -- use direct reference style
+       requester-optional-messages     [11]    IMPLICIT Requester-Optional-Messages-Type,
+       search-type     [12]    IMPLICIT Search-Type OPTIONAL,
+       supply-medium-info-type         [13]    IMPLICIT SEQUENCE SIZE (1..7) OF
+                               Supply-Medium-Info-Type OPTIONAL,
+               -- this sequence is a list, in order of preference,
+               -- with a maximum number of 7 entries
+       place-on-hold   [14]    IMPLICIT Place-On-Hold-Type DEFAULT 3,
+       client-id       [15]    IMPLICIT Client-Id OPTIONAL,     
+       item-id [16]    IMPLICIT Item-Id,
+       supplemental-item-description   [17]    IMPLICIT Supplemental-Item-Description OPTIONAL,
+       cost-info-type  [18]    IMPLICIT Cost-Info-Type OPTIONAL,
+       copyright-compliance    [19]    ILL-String OPTIONAL,
+       third-party-info-type   [20]    IMPLICIT Third-Party-Info-Type OPTIONAL,
+               -- mandatory when initiating a FORWARD service or an
+               -- ILL-REQUEST service for a partitioned ILL sub-
+               -- transaction or when initiating an ILL-REQUEST service for
+               -- an ILL sub-transaction if the received ILL-REQUEST
+               -- included an "already-tried-list";optional otherwise
+       retry-flag      [21]    IMPLICIT BOOLEAN DEFAULT FALSE,
+       forward-flag    [22]    IMPLICIT BOOLEAN DEFAULT FALSE,
+       requester-note  [46]    ILL-String OPTIONAL,
+       forward-note    [47]    ILL-String OPTIONAL,
+       iLL-request-extensions  [49]    IMPLICIT SEQUENCE OF Extension OPTIONAL
+       }
+
+Forward-Notification ::= [APPLICATION 2] SEQUENCE {
+       protocol-version-num    [0]     IMPLICIT INTEGER {
+                               version-1 (1),
+                               version-2 (2)
+                               },
+       transaction-id  [1]     IMPLICIT Transaction-Id,   
+       service-date-time       [2]     IMPLICIT Service-Date-Time,
+       requester-id    [3]     IMPLICIT System-Id OPTIONAL,
+               -- mandatory when using store-and-forward communications
+               -- optional when using connection-oriented communications
+       responder-id    [4]     IMPLICIT System-Id,
+               -- mandatory in this APDU
+       responder-address       [24]    IMPLICIT System-Address OPTIONAL,
+       intermediary-id [25]    IMPLICIT System-Id,
+       notification-note       [48]    ILL-String OPTIONAL,
+       forward-notification-extensions [49]    IMPLICIT SEQUENCE OF Extension OPTIONAL
+       }
+
+Shipped ::= [APPLICATION 3] SEQUENCE {
+       protocol-version-num    [0]     IMPLICIT INTEGER {
+                               version-1 (1),
+                               version-2 (2)
+                               },
+       transaction-id  [1]     IMPLICIT Transaction-Id,   
+       service-date-time       [2]     IMPLICIT Service-Date-Time,
+       requester-id    [3]     IMPLICIT System-Id OPTIONAL,
+               -- mandatory when using store-and-forward communications
+               -- optional when using connection-oriented communications
+       responder-id    [4]     IMPLICIT System-Id OPTIONAL,
+               -- mandatory when using store-and-forward communications
+               -- optional when using connection-oriented communications
+       responder-address       [24]    IMPLICIT System-Address OPTIONAL,
+       intermediary-id [25]    IMPLICIT System-Id OPTIONAL,
+       supplier-id     [26]    IMPLICIT System-Id OPTIONAL,
+       client-id       [15]    IMPLICIT Client-Id OPTIONAL,
+       transaction-type        [5]     IMPLICIT Transaction-Type DEFAULT 1,
+       supplemental-item-description   [17]    IMPLICIT Supplemental-Item-Description OPTIONAL,
+       shipped-service-type    [27]    IMPLICIT Shipped-Service-Type,
+       responder-optional-messages     [28]    IMPLICIT Responder-Optional-Messages-Type
+                               OPTIONAL,
+       supply-details  [29]    IMPLICIT Supply-Details,
+       return-to-address       [30]    IMPLICIT Postal-Address OPTIONAL,
+       responder-note  [46]    ILL-String OPTIONAL,
+       shipped-extensions      [49]    IMPLICIT SEQUENCE OF Extension OPTIONAL
+       }
+
+ILL-Answer ::= [APPLICATION 4] SEQUENCE {
+       protocol-version-num    [0]     IMPLICIT INTEGER {
+                               version-1 (1),
+                               version-2 (2)
+                               },
+       transaction-id  [1]     IMPLICIT Transaction-Id,
+       service-date-time       [2]     IMPLICIT Service-Date-Time,
+       requester-id    [3]     IMPLICIT System-Id OPTIONAL,
+               -- mandatory when using store-and-forward communications
+               -- optional when using connection-oriented communications
+       responder-id    [4]     IMPLICIT System-Id OPTIONAL,
+               -- mandatory when using store-and-forward communications
+               -- optional when using connection-oriented communications
+       transaction-results     [31]    IMPLICIT Transaction-Results,
+       results-explanation     [32]    CHOICE {
+                               conditional-results     [1] Conditional-Results,
+                               -- chosen if transaction-results=CONDITIONAL
+                               retry-results           [2] Retry-Results,
+                               -- chosen if transaction-results=RETRY
+                               unfilled-results        [3] Unfilled-Results,
+                               --chosen if transaction-results=UNFILLED
+                               locations-results       [4] Locations-Results,
+                               -- chosen if transaction-results=LOCATIONS-PROVIDED
+                               will-supply-results     [5] Will-Supply-Results,
+                               -- chosen if transaction-results=WILL-SUPPLY
+                               hold-placed-results     [6] Hold-Placed-Results,
+                               -- chosen if transaction-results=HOLD-PLACED
+                               estimate-results        [7] Estimate-Results
+                               -- chosen if transaction-results=ESTIMATE
+                               } OPTIONAL,
+               -- optional if transaction-results equals RETRY, UNFILLED,
+               -- WILL-SUPPLY or HOLD-PLACED;
+               -- required if transaction-results equals CONDITIONAL,
+               -- LOCATIONS-PROVIDED or ESTIMATE
+       responder-specific-results      [33]    EXTERNAL OPTIONAL,
+               -- this type is mandatory if results-explanation
+               -- chosen for any result 
+               -- has the value "responder-specific".
+       supplemental-item-description   [17]    IMPLICIT Supplemental-Item-Description OPTIONAL,
+       send-to-list    [23]    IMPLICIT Send-To-List-Type OPTIONAL,
+       already-tried-list      [34]    IMPLICIT Already-Tried-List-Type OPTIONAL,
+       responder-optional-messages     [28]    IMPLICIT Responder-Optional-Messages-Type
+                               OPTIONAL,
+       responder-note  [46]    ILL-String OPTIONAL,
+       ill-answer-extensions   [49]    IMPLICIT SEQUENCE OF Extension OPTIONAL
+       }
+
+Conditional-Reply ::= [APPLICATION 5] SEQUENCE {
+       protocol-version-num    [0]     IMPLICIT INTEGER {
+                               version-1 (1),
+                               version-2 (2)
+                               },
+       transaction-id  [1]     IMPLICIT Transaction-Id,
+       service-date-time       [2]     IMPLICIT Service-Date-Time,
+       requester-id    [3]     IMPLICIT System-Id OPTIONAL,
+               -- mandatory when using store-and-forward communications
+               -- optional when using connection-oriented communications
+       responder-id    [4]     IMPLICIT System-Id OPTIONAL,
+               -- mandatory when using store-and-forward communications
+               -- optional when using connection-oriented communications
+       answer  [35]    IMPLICIT BOOLEAN,
+       requester-note  [46]    ILL-String OPTIONAL,
+       conditional-reply-extensions    [49]    IMPLICIT SEQUENCE OF Extension OPTIONAL
+       }
+
+Cancel ::= [APPLICATION 6] SEQUENCE {
+       protocol-version-num    [0]     IMPLICIT INTEGER {
+                               version-1 (1),
+                               version-2 (2)
+                               },
+       transaction-id  [1]     IMPLICIT Transaction-Id,
+       service-date-time       [2]     IMPLICIT Service-Date-Time,
+       requester-id    [3]     IMPLICIT System-Id OPTIONAL,
+               -- mandatory when using store-and-forward communications
+               -- optional when using connection-oriented communications
+       responder-id    [4]     IMPLICIT System-Id OPTIONAL,
+               -- mandatory when using store-and-forward communications
+               -- optional when using connection-oriented communications
+       requester-note  [46]    ILL-String OPTIONAL,
+       cancel-extensions       [49]    IMPLICIT SEQUENCE OF Extension OPTIONAL
+       }
+
+Cancel-Reply ::= [APPLICATION 7] SEQUENCE {
+       protocol-version-num    [0]     IMPLICIT INTEGER {
+                                version-1 (1),
+                                version-2 (2)
+                                },
+       transaction-id  [1]     IMPLICIT Transaction-Id,
+       service-date-time       [2]     IMPLICIT Service-Date-Time,
+       requester-id    [3]     IMPLICIT System-Id OPTIONAL,
+               -- mandatory when using store-and-forward communications
+               -- optional when using connection-oriented communications
+       responder-id    [4]     IMPLICIT System-Id OPTIONAL,
+               -- mandatory when using store-and-forward communications
+               -- optional when using connection-oriented communications
+       answer  [35]    IMPLICIT BOOLEAN,
+       responder-note  [46]    ILL-String OPTIONAL,
+       cancel-reply-extensions [49]    IMPLICIT SEQUENCE OF Extension OPTIONAL
+       }
+
+Received ::= [APPLICATION 8] SEQUENCE { 
+       protocol-version-num    [0]     IMPLICIT INTEGER {
+                        version-1 (1),
+                        version-2 (2)
+                        },
+       transaction-id  [1]     IMPLICIT Transaction-Id,
+       service-date-time       [2]     IMPLICIT Service-Date-Time,
+       requester-id    [3]     IMPLICIT System-Id OPTIONAL,
+               -- mandatory when using store-and-forward communications
+               -- optional when using connection-oriented communications
+       responder-id    [4]     IMPLICIT System-Id OPTIONAL,
+               -- mandatory when using store-and-forward communications
+               -- optional when using connection-oriented communications
+       supplier-id     [26]    IMPLICIT System-Id OPTIONAL,
+       supplemental-item-description   [17]    IMPLICIT Supplemental-Item-Description OPTIONAL,
+       date-received   [36]    IMPLICIT ISO-Date,
+       shipped-service-type    [27]    IMPLICIT Shipped-Service-Type,
+       requester-note  [46]    ILL-String OPTIONAL,
+       received-extensions     [49]    IMPLICIT SEQUENCE OF Extension OPTIONAL
+       }
+
+Recall ::= [APPLICATION 9] SEQUENCE {  
+       protocol-version-num    [0]     IMPLICIT INTEGER {
+                               version-1 (1),
+                               version-2 (2)
+                               },
+       transaction-id  [1]     IMPLICIT Transaction-Id,   
+       service-date-time       [2]     IMPLICIT Service-Date-Time,
+       requester-id    [3]     IMPLICIT System-Id OPTIONAL, 
+               -- mandatory when using store-and-forward communications
+               -- optional when using connection-oriented communications
+       responder-id    [4]     IMPLICIT System-Id OPTIONAL, 
+               -- mandatory when using store-and-forward communications
+               -- optional when using connection-oriented communications
+       responder-note  [46]    ILL-String OPTIONAL,
+       recall-extensions       [49]    IMPLICIT SEQUENCE OF Extension OPTIONAL
+       }
+
+Returned ::= [APPLICATION 10] SEQUENCE { 
+       protocol-version-num    [0]     IMPLICIT INTEGER {
+                               version-1 (1),
+                               version-2 (2)
+                               },
+       transaction-id  [1]     IMPLICIT Transaction-Id,
+       service-date-time       [2]     IMPLICIT Service-Date-Time,
+       requester-id    [3]     IMPLICIT System-Id OPTIONAL,
+               -- mandatory when using store-and-forward communications
+               -- optional when using connection-oriented communications
+       responder-id    [4]     IMPLICIT System-Id OPTIONAL,
+               -- mandatory when using store-and-forward communications
+               -- optional when using connection-oriented communications
+       supplemental-item-description   [17]    IMPLICIT Supplemental-Item-Description OPTIONAL,
+       date-returned   [37]    IMPLICIT ISO-Date,
+       returned-via    [38]    Transportation-Mode OPTIONAL,
+       insured-for     [39]    IMPLICIT Amount OPTIONAL,
+       requester-note  [46]    ILL-String OPTIONAL,
+       returned-extensions     [49]    IMPLICIT SEQUENCE OF Extension OPTIONAL
+       }
+
+Checked-In ::= [APPLICATION 11] SEQUENCE {
+       protocol-version-num    [0]     IMPLICIT INTEGER {
+                               version-1 (1),
+                               version-2 (2)
+                               },
+       transaction-id  [1]     IMPLICIT Transaction-Id,   
+       service-date-time       [2]     IMPLICIT Service-Date-Time,
+       requester-id    [3]     IMPLICIT System-Id OPTIONAL, 
+               -- mandatory when using store-and-forward communications
+               -- optional when using connection-oriented communications
+       responder-id    [4]     IMPLICIT System-Id OPTIONAL, 
+               -- mandatory when using store-and-forward communications
+               -- optional when using connection-oriented communications
+       date-checked-in [40]    IMPLICIT ISO-Date,
+       responder-note  [46]    ILL-String OPTIONAL,
+       checked-in-extensions   [49]    IMPLICIT SEQUENCE OF Extension OPTIONAL
+       }
+
+Overdue ::= [APPLICATION 12] SEQUENCE { 
+       protocol-version-num    [0]     IMPLICIT INTEGER {
+                               version-1 (1),
+                               version-2 (2)
+                               },
+       transaction-id  [1]     IMPLICIT Transaction-Id,
+       service-date-time       [2]     IMPLICIT Service-Date-Time,
+       requester-id    [3]     IMPLICIT System-Id OPTIONAL,
+               -- mandatory when using store-and-forward communications
+               -- optional when using connection-oriented communications
+       responder-id    [4]     IMPLICIT System-Id OPTIONAL,
+               -- mandatory when using store-and-forward communications
+               -- optional when using connection-oriented communications
+       date-due        [41]    IMPLICIT Date-Due,
+       responder-note  [46]    ILL-String OPTIONAL,
+       overdue-extensions      [49]    SEQUENCE OF Extension OPTIONAL
+       }
+
+Renew ::= [APPLICATION 13] SEQUENCE {
+       protocol-version-num    [0]     IMPLICIT INTEGER {
+                               version-1 (1),
+                               version-2 (2)
+                               },
+       transaction-id  [1]     IMPLICIT Transaction-Id,   
+       service-date-time       [2]     IMPLICIT Service-Date-Time,
+       requester-id    [3]     IMPLICIT System-Id OPTIONAL,   
+               -- mandatory when using store-and-forward communications
+               -- optional when using connection-oriented communications
+       responder-id    [4]     IMPLICIT System-Id OPTIONAL,   
+               -- mandatory when using store-and-forward communications
+               -- optional when using connection-oriented communications
+       desired-due-date        [42]    IMPLICIT ISO-Date OPTIONAL,
+       requester-note  [46]    ILL-String OPTIONAL,
+       renew-extensions        [49]    IMPLICIT SEQUENCE OF Extension OPTIONAL
+       }
+
+Renew-Answer ::= [APPLICATION 14] SEQUENCE {
+       protocol-version-num    [0]     IMPLICIT INTEGER {
+                               version-1 (1),
+                               version-2 (2)
+                               },
+       transaction-id  [1]     IMPLICIT Transaction-Id,   
+       service-date-time       [2]     IMPLICIT Service-Date-Time,
+       requester-id    [3]     IMPLICIT System-Id OPTIONAL,   
+               -- mandatory when using store-and-forward communications
+               -- optional when using connection-oriented communications
+       responder-id    [4]     IMPLICIT System-Id OPTIONAL,   
+               -- mandatory when using store-and-forward communications
+               -- optional when using connection-oriented communications
+       answer  [35]    IMPLICIT BOOLEAN,
+       date-due        [41]    IMPLICIT Date-Due OPTIONAL,
+       responder-note  [46]    ILL-String OPTIONAL,
+       renew-answer-extensions [49]    IMPLICIT SEQUENCE OF Extension OPTIONAL
+       }
+
+Lost ::= [APPLICATION 15] SEQUENCE {
+       protocol-version-num    [0]     IMPLICIT INTEGER {
+                               version-1 (1),
+                               version-2 (2)
+                               },
+       transaction-id  [1]     IMPLICIT Transaction-Id,   
+       service-date-time       [2]     IMPLICIT Service-Date-Time,
+       requester-id    [3]     IMPLICIT System-Id OPTIONAL,   
+               -- mandatory when using store-and-forward communications
+               -- optional when using connection-oriented communications
+       responder-id    [4]     IMPLICIT System-Id OPTIONAL,   
+               -- mandatory when using store-and-forward communications
+               -- optional when using connection-oriented communications
+       note    [46]    ILL-String OPTIONAL,
+       lost-extensions [49]    IMPLICIT SEQUENCE OF Extension OPTIONAL
+       }
+
+Damaged ::= [APPLICATION 16] SEQUENCE { 
+       protocol-version-num    [0]     IMPLICIT INTEGER {
+                               version-1 (1),
+                               version-2 (2)
+                               },
+       transaction-id  [1]     IMPLICIT Transaction-Id,
+       service-date-time       [2]     IMPLICIT Service-Date-Time,
+       requester-id    [3]     IMPLICIT System-Id OPTIONAL,
+               -- mandatory when using store-and-forward communications
+               -- optional when using connection-oriented communications
+       responder-id    [4]     IMPLICIT System-Id OPTIONAL, 
+               -- mandatory when using store-and-forward communications
+               -- optional when using connection-oriented communications
+       damaged-details [5]     IMPLICIT Damaged-Details OPTIONAL,
+               -- this parameter may only be present in APDU's with a
+               -- protocol-version-num value of 2 or greater
+       note    [46]    ILL-String OPTIONAL,
+       damaged-extensions      [49]    IMPLICIT SEQUENCE OF Extension OPTIONAL
+       }
+
+Message ::= [APPLICATION 17] SEQUENCE { 
+       protocol-version-num    [0]     IMPLICIT INTEGER {
+                               version-1 (1),
+                               version-2 (2)
+                               },
+       transaction-id  [1]     IMPLICIT Transaction-Id,   
+       service-date-time       [2]     IMPLICIT Service-Date-Time,
+       requester-id    [3]     IMPLICIT System-Id OPTIONAL,   
+               -- mandatory when using store-and-forward communications
+               -- optional when using connection-oriented communications
+       responder-id    [4]     IMPLICIT System-Id OPTIONAL,   
+               -- mandatory when using store-and-forward communications
+               -- optional when using connection-oriented communications
+       note    [46]    ILL-String,
+       message-extensions      [49]    IMPLICIT SEQUENCE OF Extension OPTIONAL
+       }
+
+Status-Query ::= [APPLICATION 18] SEQUENCE {
+       protocol-version-num    [0]     IMPLICIT INTEGER {
+                               version-1 (1),
+                               version-2 (2)
+                               },
+       transaction-id  [1]     IMPLICIT Transaction-Id,
+       service-date-time       [2]     IMPLICIT Service-Date-Time,
+       requester-id    [3]     IMPLICIT System-Id OPTIONAL,
+               -- mandatory when using store-and-forward communications
+               -- optional when using connection-oriented communications
+       responder-id    [4]     IMPLICIT System-Id OPTIONAL,
+               -- mandatory when using store-and-forward communications
+               -- optional when using connection-oriented communications
+       note    [46]    ILL-String OPTIONAL,
+       status-query-extensions [49]    IMPLICIT SEQUENCE OF Extension OPTIONAL
+       }
+
+Status-Or-Error-Report ::= [APPLICATION 19] SEQUENCE {
+       protocol-version-num    [0]     IMPLICIT INTEGER {
+                               version-1 (1),
+                               version-2 (2)
+                               },
+       transaction-id  [1]     IMPLICIT Transaction-Id,   
+       service-date-time       [2]     IMPLICIT Service-Date-Time,
+       requester-id    [3]     IMPLICIT System-Id OPTIONAL,   
+               -- mandatory when using store-and-forward communications
+               -- optional when using connection-oriented communications
+       responder-id    [4]     IMPLICIT System-Id OPTIONAL,
+               -- mandatory when using store-and-forward communications
+               -- optional when using connection-oriented communications
+       reason-no-report        [43]    IMPLICIT Reason-No-Report OPTIONAL,
+               -- mandatory if no report is present;
+               -- not present otherwise
+       status-report   [44]    IMPLICIT Status-Report OPTIONAL,
+       error-report    [45]    IMPLICIT Error-Report OPTIONAL,
+       note    [46]    ILL-String OPTIONAL,
+       status-or-error-report-extensions       [49]    IMPLICIT SEQUENCE OF Extension OPTIONAL
+       }
+
+Expired ::= [APPLICATION 20] SEQUENCE {
+       protocol-version-num    [0]     IMPLICIT INTEGER {
+                               version-1 (1),
+                               version-2 (2)
+                               },
+       transaction-id  [1]     IMPLICIT Transaction-Id,
+       service-date-time       [2]     IMPLICIT Service-Date-Time,
+       requester-id    [3]     IMPLICIT System-Id OPTIONAL,
+               -- mandatory when using store-and-forward communications
+               -- optional when using connection-oriented communications
+       responder-id    [4]     IMPLICIT System-Id OPTIONAL,
+               -- mandatory when using store-and-forward communications
+               -- optional when using connection-oriented communications
+       expired-extensions      [49]    IMPLICIT SEQUENCE OF Extension OPTIONAL
+       }
+
+Account-Number ::= ILL-String
+
+Already-Forwarded ::= SEQUENCE {
+       responder-id    [0]     IMPLICIT System-Id,
+       responder-address       [1]     IMPLICIT System-Address OPTIONAL
+       }       
+
+Already-Tried-List-Type ::= SEQUENCE OF System-Id
+
+Amount ::= SEQUENCE {
+       currency-code   [0]     IMPLICIT PrintableString (SIZE (3)) OPTIONAL,
+               -- values defined in ISO 4217-1981
+       monetary-value  [1]     IMPLICIT AmountString (SIZE (1..10))
+       }
+
+AmountString ::= PrintableString (FROM ("1"|"2"|"3"|"4"|"5"|"6"|"7"|"8"|"9"|"0"|" "|"."|","))
+
+Client-Id ::= SEQUENCE {
+       client-name     [0]     ILL-String OPTIONAL,
+       client-status   [1]     ILL-String OPTIONAL,
+       client-identifier       [2]     ILL-String OPTIONAL
+       }
+
+Conditional-Results ::= SEQUENCE {
+       conditions      [0]     IMPLICIT ENUMERATED {
+                               cost-exceeds-limit                              (13),
+                               charges                                         (14),
+                               prepayment-required                     (15),
+                               lacks-copyright-compliance                      (16),
+                               library-use-only                                (22),
+                               no-reproduction                                 (23),
+                               client-signature-required                       (24),
+                               special-collections-supervision-required        (25),
+                               other                                   (27),
+                               responder-specific                              (28),
+                               proposed-delivery-service                       (30) 
+                               },
+       date-for-reply  [1]     IMPLICIT ISO-Date OPTIONAL,
+       locations       [2]     IMPLICIT SEQUENCE OF Location-Info OPTIONAL,
+       proposed-delivery-service               Delivery-Service OPTIONAL
+               -- this parameter specifies a proposed delivery service the
+               -- acceptance of which is a condition of supply.  It may be a
+               -- physical service or an electronic service.  This parameter
+               -- may only be present in APDUs with a 
+               -- protocol-version-num value of 2 or greater
+       }
+
+Cost-Info-Type ::= SEQUENCE {
+       account-number  [0]     Account-Number OPTIONAL,
+       maximum-cost    [1]     IMPLICIT Amount OPTIONAL,
+       reciprocal-agreement    [2]     IMPLICIT BOOLEAN DEFAULT FALSE,
+       will-pay-fee    [3]     IMPLICIT BOOLEAN DEFAULT FALSE,
+       payment-provided        [4]     IMPLICIT BOOLEAN DEFAULT FALSE
+       }
+
+Current-State ::= ENUMERATED {
+       nOT-SUPPLIED    (1),
+       pENDING (2),
+       iN-PROCESS      (3),
+       fORWARD (4),
+       cONDITIONAL     (5),
+       cANCEL-PENDING  (6),
+       cANCELLED       (7),
+       sHIPPED         (8),
+       rECEIVED        (9),
+       rENEW-PENDING   (10),
+       nOT-RECEIVED-OVERDUE    (11),
+       rENEW-OVERDUE   (12),
+       oVERDUE         (13),
+       rETURNED        (14),
+       cHECKED-IN      (15),
+       rECALL  (16),
+       lOST    (17),
+       uNKNOWN         (18)
+       }
+
+Damaged-Details ::= SEQUENCE {
+       document-type-id        [0]     IMPLICIT OBJECT IDENTIFIER OPTIONAL,
+               -- identifies an OSI document type registered in accordance
+               -- with ISO 9834-2, for use in an automated environment
+       damaged-portion         CHOICE {
+                               complete-document       [1]     IMPLICIT NULL,
+                               specific-units  [2]     IMPLICIT SEQUENCE 
+                                                                       OF INTEGER
+                               -- the nature and extent of a "unit" is implicit in the
+                               -- value of document-type-id if one is supplied
+                               }
+       }
+
+Date-Due ::= SEQUENCE {
+       date-due-field  [0]     IMPLICIT ISO-Date,
+       renewable       [1]     IMPLICIT BOOLEAN DEFAULT TRUE
+       }
+
+Delivery-Address ::= SEQUENCE {
+       postal-address  [0]     IMPLICIT Postal-Address OPTIONAL,
+       electronic-address      [1]     IMPLICIT System-Address OPTIONAL
+       }
+
+Delivery-Service ::= CHOICE {
+       physical-delivery       [7]     Transportation-Mode,
+       electronic-delivery     [50]    IMPLICIT SEQUENCE OF Electronic-Delivery-Service
+               -- electronic-delivery may only be present in APDUs
+               -- with a protocol-version-num value of 2 or greater
+       }
+
+Electronic-Delivery-Service ::= SEQUENCE {
+       -- the first four parameters are intended to be used in an automated
+       -- environment
+               e-delivery-service      [0] IMPLICIT SEQUENCE {
+               -- identifies the kind of electronic delivery service, e.g.
+               -- MOTIS IPM,FTAM, etc., using the assigned object
+               -- identifier for the standard e.g. {joint-iso-ccitt mhs-motis 
+               -- ipms}
+                       e-delivery-mode [0] IMPLICIT OBJECT IDENTIFIER,
+                       e-delivery-parameters   [1] ANY DEFINED BY e-delivery-mode
+                       } OPTIONAL,
+               document-type           [1] IMPLICIT SEQUENCE {
+                       document-type-id                [2] IMPLICIT OBJECT IDENTIFIER,
+                       -- identifies an OSI document type registered in accordance
+                       -- with ISO 9834-2
+                       document-type-parameters        [3] ANY DEFINED BY document-type-id
+                       -- any parameters relating to the registered document type
+                       } OPTIONAL,
+               e-delivery-description          [4] ILL-String OPTIONAL,
+               -- holds a human readable name or description of the
+               -- required electronic delivery service and document type;
+               -- this may also be used to identify an electronic delivery
+               -- service for which there is no object identifier.
+               -- This parameter may be present instead of, or in addition
+               -- to, the previous 4 parameters
+               e-delivery-details              [5] CHOICE {
+                       e-delivery-address      [0] IMPLICIT System-Address,
+                       e-delivery-id           [1] IMPLICIT System-Id
+                       },
+               name-or-code            [6] ILL-String OPTIONAL,
+               -- holds a human-readable identifier or correlation
+               -- information for the document as shipped, e.g. a directory 
+               -- and/or file name or message-id
+               delivery-time           [7] IMPLICIT ISO-Time OPTIONAL
+               -- holds the requester's preferred delivery time or
+               -- the responder's proposed or actual delivery time
+               }
+
+Error-Report ::= SEQUENCE {
+       correlation-information [0]     ILL-String,
+       report-source   [1]     IMPLICIT Report-Source,
+       user-error-report       [2]     User-Error-Report OPTIONAL,
+               -- mandatory if report-source is "user"; not present otherwise
+       provider-error-report   [3]     Provider-Error-Report OPTIONAL
+               -- mandatory if report-source is "provider"; not
+               -- present otherwise
+       }
+
+Estimate-Results ::= SEQUENCE {
+       cost-estimate   [0]     ILL-String,
+       locations       [1]     IMPLICIT SEQUENCE OF Location-Info OPTIONAL
+       }
+
+Extension ::= SEQUENCE {
+       identifier      [0]     IMPLICIT INTEGER,
+       critical        [1]     IMPLICIT BOOLEAN DEFAULT FALSE,
+       item    [2]     ANY DEFINED BY identifier
+       }
+
+General-Problem ::= ENUMERATED {
+       unrecognized-APDU       (1),
+       mistyped-APDU   (2),
+       badly-structured-APDU   (3),
+       protocol-version-not-supported  (4),
+       other   (5)
+       }
+
+History-Report ::= SEQUENCE {
+       date-requested  [0]     IMPLICIT ISO-Date OPTIONAL,
+       author  [1]     ILL-String OPTIONAL,
+       title   [2]     ILL-String OPTIONAL,
+       author-of-article       [3]     ILL-String OPTIONAL,
+       title-of-article        [4]     ILL-String OPTIONAL,
+       date-of-last-transition         [5]     IMPLICIT ISO-Date,
+       most-recent-service     [6]     IMPLICIT ENUMERATED {
+                               iLL-REQUEST                     (1),
+                               fORWARD                                 (21),
+                               fORWARD-NOTIFICATION            (2),
+                               sHIPPED                                 (3),
+                               iLL-ANSWER                      (4),
+                               cONDITIONAL-REPLY               (5),
+                               cANCEL                          (6),
+                               cANCEL-REPLY                    (7),
+                               rECEIVED                                (8),
+                               rECALL                          (9),
+                               rETURNED                                (10),
+                               cHECKED-IN                      (11),
+                               rENEW-ANSWER                    (14),
+                               lOST                            (15),
+                               dAMAGED                                 (16),
+                               mESSAGE                                 (17),
+                               sTATUS-QUERY                    (18),
+                               sTATUS-OR-ERROR-REPORT  (19),
+                               eXPIRED                                 (20)
+                               },
+       date-of-most-recent-service     [7]     IMPLICIT ISO-Date,
+       initiator-of-most-recent-service        [8]     IMPLICIT System-Id,
+       shipped-service-type    [9]     IMPLICIT Shipped-Service-Type OPTIONAL,
+               -- If the information is available, i.e. if a SHIPPED or
+               -- RECEIVED APDU has been sent or received, then the
+               -- value in this parameter shall be supplied.
+               -- Value must contain the most current information, e.g. if a
+               -- requester has received a SHIPPED APDU and then
+               -- invokes a RECEIVED.request, then the value from the
+               -- RECEIVED.request is used
+       transaction-results     [10]    IMPLICIT Transaction-Results OPTIONAL,
+               -- If the information is available, i.e. if an ILL-ANWSER
+               -- APDU has been sent or received, then the value in this
+               -- parameter shall be supplied.
+       most-recent-service-note        [11]    ILL-String OPTIONAL
+               -- If the information is available, i.e. if a note has been
+               -- supplied in the most recent service primitive, then the
+               -- value in this parameter shall be supplied.
+       }
+
+Hold-Placed-Results ::= SEQUENCE {
+       estimated-date-available        [0]     IMPLICIT ISO-Date,
+       hold-placed-medium-type [1]     IMPLICIT Medium-Type OPTIONAL,
+       locations       [2]     IMPLICIT SEQUENCE OF Location-Info OPTIONAL
+       }
+
+ILL-APDU-Type ::= ENUMERATED {
+       iLL-REQUEST     (1),
+       fORWARD-NOTIFICATION    (2),
+       sHIPPED         (3),
+       iLL-ANSWER      (4),
+       cONDITIONAL-REPLY       (5),
+       cANCEL  (6),
+       cANCEL-REPLY    (7),
+       rECEIVED        (8),
+       rECALL  (9),
+       rETURNED        (10),
+       cHECKED-IN      (11),
+       oVERDUE         (12),
+       rENEW   (13),
+       rENEW-ANSWER    (14),
+       lOST    (15),
+       dAMAGED         (16),
+       mESSAGE         (17),
+       sTATUS-QUERY    (18),
+       sTATUS-OR-ERROR-REPORT  (19),
+       eXPIRED         (20)
+       }
+
+ILL-Service-Type ::= ENUMERATED  {
+       loan    (1),
+       copy-non-returnable     (2),
+       locations       (3),
+       estimate        (4),
+       responder-specific      (5)
+       }
+
+ILL-String ::= CHOICE {
+       GeneralString,
+       -- may contain any ISO registered G (graphic) and C
+       -- (control) character set
+       EDIFACTString
+       }
+       -- may not include leading or trailing spaces
+       -- may not consist only of space (" ") or non-printing 
+       -- characters
+
+Intermediary-Problem ::= ENUMERATED {
+       cannot-send-onward      (1)
+       }
+
+ISO-Date ::= VisibleString
+       -- conforms to ISO 8601
+       -- length = 8
+       -- fixed
+       -- YYYYMMDD
+
+ISO-Time ::= VisibleString
+       -- conforms to ISO 8601
+       -- length = 6, 
+       -- fixed
+       -- HHMMSS
+       -- local time of person or institution invoking service
+
+Item-Id ::= SEQUENCE {
+       item-type       [0]     IMPLICIT ENUMERATED {
+                               monograph       (1),
+                               serial  (2),
+                               other   (3)
+                               } OPTIONAL,
+       held-medium-type        [1]     IMPLICIT Medium-Type OPTIONAL,
+       call-number     [2]     ILL-String OPTIONAL,
+       author  [3]     ILL-String OPTIONAL,
+       title   [4]     ILL-String OPTIONAL,
+       sub-title       [5]     ILL-String OPTIONAL,
+       sponsoring-body [6]     ILL-String OPTIONAL,
+       place-of-publication    [7]     ILL-String OPTIONAL,
+       publisher       [8]     ILL-String OPTIONAL,
+       series-title-number     [9]     ILL-String OPTIONAL,
+       volume-issue    [10]    ILL-String OPTIONAL,
+       edition [11]    ILL-String OPTIONAL,
+       publication-date        [12]    ILL-String OPTIONAL,
+       publication-date-of-component   [13] ILL-String OPTIONAL,
+       author-of-article       [14]    ILL-String OPTIONAL,
+       title-of-article        [15]    ILL-String OPTIONAL,
+       pagination      [16]    ILL-String OPTIONAL,
+       national-bibliography-no        [17]    EXTERNAL OPTIONAL,
+       iSBN    [18]    ILL-String (SIZE (10)) OPTIONAL,
+               -- must conform to ISO 2108-1978
+       iSSN    [19]    ILL-String (SIZE (8)) OPTIONAL,
+               -- must conform to ISO 3297-1986
+       system-no       [20]    EXTERNAL OPTIONAL,
+       additional-no-letters   [21] ILL-String OPTIONAL,
+       verification-reference-source   [22] ILL-String OPTIONAL
+       }
+
+Location-Info ::= SEQUENCE {
+       location-id     [0]     IMPLICIT System-Id,
+       location-address        [1]     IMPLICIT System-Address OPTIONAL,
+       location-note   [2]     ILL-String OPTIONAL
+       }
+
+Locations-Results ::= SEQUENCE {
+       reason-locs-provided    [0]     IMPLICIT Reason-Locs-Provided OPTIONAL,
+       locations       [1]     IMPLICIT SEQUENCE OF Location-Info
+       }
+
+Medium-Type ::= ENUMERATED {
+       printed         (1),
+       microform       (3),
+       film-or-video-recording (4),
+       audio-recording         (5),
+       machine-readable        (6),
+       other   (7)
+       }
+
+Name-Of-Person-Or-Institution ::= CHOICE {
+       name-of-person  [0]     ILL-String,
+       name-of-institution     [1]     ILL-String
+       }
+
+Person-Or-Institution-Symbol ::= CHOICE {
+       person-symbol   [0]     ILL-String,
+       institution-symbol      [1]     ILL-String
+       }
+
+Place-On-Hold-Type ::= ENUMERATED {
+       yes     (1),
+       no      (2),
+       according-to-responder-policy   (3)
+       }
+
+Postal-Address ::= SEQUENCE {
+       name-of-person-or-institution   [0]     Name-Of-Person-Or-Institution OPTIONAL,
+       extended-postal-delivery-address [1]    ILL-String OPTIONAL,
+       street-and-number       [2]     ILL-String OPTIONAL,
+       post-office-box [3]     ILL-String OPTIONAL,
+       city    [4]     ILL-String OPTIONAL,
+       region  [5]     ILL-String OPTIONAL,
+       country [6]     ILL-String OPTIONAL,
+       postal-code     [7]     ILL-String OPTIONAL
+       }
+
+Provider-Error-Report ::= CHOICE {
+       general-problem [0]     IMPLICIT General-Problem,
+       transaction-id-problem  [1]     IMPLICIT Transaction-Id-Problem,
+       state-transition-prohibited     [2]     IMPLICIT State-Transition-Prohibited
+       }
+
+Reason-Locs-Provided ::= ENUMERATED {
+       in-use-on-loan  (1),
+       in-process      (2),
+       lost    (3),
+       non-circulating         (4),
+       not-owned       (5),
+       on-order        (6),
+       volume-issue-not-yet-available  (7),
+       at-bindery      (8),
+       lacking         (9),
+       not-on-shelf    (10),
+       on-reserve      (11),
+       poor-condition  (12),
+       cost-exceeds-limit      (13),
+       on-hold         (19),
+       other   (27),
+       responder-specific      (28) 
+       }
+
+Reason-No-Report ::= ENUMERATED {
+       temporary       (1),
+       permanent       (2)
+       }
+
+Reason-Unfilled ::= ENUMERATED {
+       in-use-on-loan  (1),
+       in-process      (2),
+       lost    (3),
+       non-circulating (4),
+       not-owned       (5),
+       on-order        (6),
+       volume-issue-not-yet-available  (7),
+       at-bindery      (8),
+       lacking (9),
+       not-on-shelf    (10),
+       on-reserve      (11),
+       poor-condition  (12),
+       cost-exceeds-limit      (13),
+       charges (14),
+       prepayment-required     (15),
+       lacks-copyright-compliance      (16),
+       not-found-as-cited      (17),
+       locations-not-found     (18),
+       on-hold (19),
+       policy-problem  (20),
+       mandatory-messaging-not-supported       (21),
+       expiry-not-supported    (22) ,
+       requested-delivery-services-not-supported       (23),
+       preferred-delivery-time-not-possible    (24),
+       other   (27),
+       responder-specific      (28)
+       }
+
+Report-Source ::= ENUMERATED {
+       user    (1),
+       provider        (2)
+       }
+
+Requester-Optional-Messages-Type ::= SEQUENCE {
+       can-send-RECEIVED       [0]     IMPLICIT BOOLEAN,
+       can-send-RETURNED       [1]     IMPLICIT BOOLEAN,
+       requester-SHIPPED       [2]     IMPLICIT ENUMERATED {
+                               requires        (1),
+                               desires         (2),
+                               neither (3)
+                               },
+       requester-CHECKED-IN    [3]     IMPLICIT ENUMERATED {
+                               requires        (1),
+                               desires         (2),
+                               neither         (3)
+                               }
+       }
+
+Responder-Optional-Messages-Type ::= SEQUENCE {
+       can-send-SHIPPED        [0]     IMPLICIT BOOLEAN,
+       can-send-CHECKED-IN     [1]     IMPLICIT BOOLEAN,
+       responder-RECEIVED      [2]     IMPLICIT ENUMERATED {
+                               requires        (1),
+                               desires         (2),
+                               neither         (3)
+                               },
+       responder-RETURNED      [3]     IMPLICIT ENUMERATED {
+                               requires        (1),
+                               desires         (2),
+                               neither         (3)
+                               }
+       }
+
+Retry-Results ::= SEQUENCE {
+       reason-not-available    [0]     IMPLICIT ENUMERATED {
+                               in-use-on-loan                  (1),
+                               in-process                              (2),
+                               on-order                                (6),
+                               volume-issue-not-yet-available  (7),
+                               at-bindery                              (8),
+                               cost-exceeds-limit                      (13),
+                               charges                                 (14),
+                               prepayment-required             (15),
+                               lacks-copyright-compliance              (16),
+                               not-found-as-cited                      (17),
+                               on-hold                                 (19),
+                               other                           (27),
+                               responder-specific                      (28)
+                               } OPTIONAL,
+       retry-date      [1]     IMPLICIT ISO-Date OPTIONAL,
+       locations       [2]     IMPLICIT SEQUENCE OF Location-Info OPTIONAL
+       }
+
+Search-Type ::= SEQUENCE {
+       level-of-service        [0]     ILL-String (SIZE (1)) OPTIONAL,
+       need-before-date        [1]     IMPLICIT ISO-Date OPTIONAL,
+       expiry-flag     [2]     IMPLICIT ENUMERATED {
+                               need-Before-Date        (1),
+                               other-Date              (2),
+                               no-Expiry               (3)
+                               } DEFAULT 3,
+                               -- value of "need-Before-Date" indicates that
+                               -- need-before-date also specifies transaction expiry
+                               -- date
+       expiry-date     [3]     IMPLICIT ISO-Date OPTIONAL
+               -- alternative expiry date can be used only when expiry-flag
+               -- is set to "Other-Date"
+       }
+
+Security-Problem ::= ILL-String
+
+Send-To-List-Type ::= SEQUENCE OF SEQUENCE {
+       system-id       [0]     IMPLICIT System-Id,
+       account-number  [1]     Account-Number OPTIONAL,
+       system-address  [2]     IMPLICIT System-Address OPTIONAL
+       }
+
+Service-Date-Time ::= SEQUENCE {
+       date-time-of-this-service       [0]     IMPLICIT SEQUENCE {
+                               date    [0]     IMPLICIT ISO-Date,
+                               time    [1]     IMPLICIT ISO-Time OPTIONAL
+                               -- mandatory for 2nd and subsequent services
+                               -- invoked for a given 
+                               -- ILL-transaction on the same day
+                               },
+       date-time-of-original-service   [1]     IMPLICIT SEQUENCE {
+                               date    [0]     IMPLICIT ISO-Date,
+                               time    [1]     IMPLICIT ISO-Time OPTIONAL
+                               } OPTIONAL
+       }
+
+Shipped-Service-Type ::= ILL-Service-Type (loan | copy-non-returnable)
+       -- subtype of ILL-Service-Type
+
+State-Transition-Prohibited ::= SEQUENCE {
+       aPDU-type       [0]     IMPLICIT ILL-APDU-Type,
+       current-state   [1]     IMPLICIT Current-State
+       }
+
+Status-Report ::= SEQUENCE {
+       user-status-report      [0]     IMPLICIT History-Report,
+       provider-status-report  [1]     IMPLICIT Current-State
+       }
+
+Supplemental-Item-Description ::= SEQUENCE OF EXTERNAL
+       -- the syntax of supplementary item description information is defined outside this standard
+
+Supply-Details ::= SEQUENCE {
+       date-shipped    [0]     IMPLICIT ISO-Date OPTIONAL,
+       date-due        [1]     IMPLICIT Date-Due OPTIONAL,
+       chargeable-units        [2]     IMPLICIT INTEGER (1..9999) OPTIONAL,
+       cost    [3]     IMPLICIT Amount OPTIONAL,
+       shipped-conditions      [4]     IMPLICIT ENUMERATED {
+                               library-use-only                                (22),
+                               no-reproduction                         (23),
+                               client-signature-required                       (24),
+                               special-collections-supervision-required        (25),
+                               other                                   (27)
+                               } OPTIONAL,
+       shipped-via             CHOICE {
+                               physical-delivery       [5]     Transportation-Mode,
+                               electronic-delivery     [50]    IMPLICIT
+                                                                Electronic-Delivery-Service
+                               } OPTIONAL,
+               -- electronic-delivery may only be present in APDUs with a
+               -- protocol-version-num value of 2 or greater
+       insured-for     [6]     IMPLICIT Amount OPTIONAL,
+       return-insurance-require        [7]     IMPLICIT Amount OPTIONAL,
+       no-of-units-per-medium  [8]     IMPLICIT SEQUENCE OF Units-Per-Medium-Type      
+                               OPTIONAL
+       }
+
+Supply-Medium-Info-Type ::= SEQUENCE {
+       supply-medium-type      [0]     IMPLICIT Supply-Medium-Type,
+       medium-characteristics  [1]     ILL-String OPTIONAL
+       }
+
+Supply-Medium-Type ::= ENUMERATED {
+       printed (1),
+       photocopy       (2),
+       microform       (3),
+       film-or-video-recording (4),
+       audio-recording (5),
+       machine-readable        (6),
+       other   (7)
+       }
+
+System-Address ::= SEQUENCE {
+       telecom-service-identifier      [0]     ILL-String OPTIONAL,
+       telecom-service-address [1]     ILL-String OPTIONAL
+       }
+
+System-Id ::= SEQUENCE {
+       --at least one of the following must be present
+       person-or-institution-symbol    [0]     Person-Or-Institution-Symbol OPTIONAL,
+       name-of-person-or-institution   [1]     Name-Of-Person-Or-Institution OPTIONAL
+       }
+
+Third-Party-Info-Type ::= SEQUENCE {
+       permission-to-forward   [0]     IMPLICIT BOOLEAN DEFAULT FALSE,
+       permission-to-chain     [1]     IMPLICIT BOOLEAN DEFAULT FALSE,
+       permission-to-partition         [2]     IMPLICIT BOOLEAN DEFAULT FALSE,
+       permission-to-change-send-to-list [3]   IMPLICIT BOOLEAN DEFAULT FALSE,
+       initial-requester-address       [4]     IMPLICIT System-Address OPTIONAL,
+               -- mandatory when initiating a FORWARD service or an
+               -- ILL-REQUEST service for a partitioned ILL
+               -- sub-transaction; optional otherwise
+       preference      [5]     IMPLICIT ENUMERATED {
+                               ordered (1),
+                               unordered       (2)
+                               } DEFAULT 2,
+       send-to-list    [6]     IMPLICIT Send-To-List-Type OPTIONAL,
+       already-tried-list      [7]     IMPLICIT Already-Tried-List-Type OPTIONAL
+               -- mandatory when initiating a FORWARD service, or when
+               -- initiating an ILL-REQUEST service for an ILL
+               -- sub-transaction if the received ILL-REQUEST included an
+               -- "already-tried-list"; optional otherwise
+       }
+
+Transaction-Id ::= SEQUENCE {
+       initial-requester-id    [0]     IMPLICIT System-Id OPTIONAL,
+               -- mandatory for sub-transactions; not called
+               -- "requester-id" to distinguish id of initial-requester
+               --from id of requester of sub-transaction if there is one
+       transaction-group-qualifier     [1]     ILL-String,
+       transaction-qualifier   [2]     ILL-String,
+       sub-transaction-qualifier       [3]     ILL-String OPTIONAL
+               -- mandatory for sub-transactions
+       }
+
+Transaction-Id-Problem ::= ENUMERATED {
+       duplicate-transaction-id        (1),
+       invalid-transaction-id  (2),
+       unknown-transaction-id  (3)
+       }
+
+Transaction-Results ::= ENUMERATED {
+       conditional     (1),
+       retry   (2),
+       unfilled        (3),
+       locations-provided      (4),
+       will-supply     (5),
+       hold-placed     (6),
+       estimate        (7)
+       }
+
+Transaction-Type ::= ENUMERATED  {
+       simple  (1),
+       chained (2),
+       partitioned     (3)
+       }
+
+Transportation-Mode ::= ILL-String
+
+Unable-To-Perform ::= ENUMERATED {
+       not-available   (1),
+       resource-limitation     (2),
+       other   (3)
+       }
+
+Unfilled-Results ::= SEQUENCE {
+       reason-unfilled [0]     IMPLICIT Reason-Unfilled,
+       locations       [1]     IMPLICIT SEQUENCE OF Location-Info OPTIONAL
+       }
+
+Units-Per-Medium-Type ::= SEQUENCE {
+       medium  [0]     Supply-Medium-Type,
+       no-of-units     [1]     INTEGER (1..9999)
+       }
+
+User-Error-Report ::= CHOICE {
+       already-forwarded       [0]     IMPLICIT Already-Forwarded,
+       intermediary-problem    [1]     IMPLICIT Intermediary-Problem,
+       security-problem        [2]     Security-Problem,
+       unable-to-perform       [3]     IMPLICIT Unable-To-Perform
+       }
+
+
+Will-Supply-Results ::= SEQUENCE {
+       reason-will-supply      [0]     ENUMERATED {
+                               in-use-on-loan          (1),
+                               in-process                      (2),
+                               on-order                        (6),
+                               at-bindery                      (8),
+                               on-hold                         (19),
+                               being-processed-for-supply      (26),
+                               other                   (27),
+                               responder-specific              (28),
+                               electronic-delivery             (30)
+                               },
+       supply-date     [1]     ISO-Date OPTIONAL,
+       return-to-address       [2]     Postal-Address OPTIONAL,
+       locations       [3]     IMPLICIT SEQUENCE OF Location-Info OPTIONAL,
+       electronic-delivery-service     [4] Electronic-Delivery-Service OPTIONAL
+               -- if present, this must be one of the services proposed by 
+               -- the requester
+       }
+
+EDIFACTString ::= VisibleString 
+       (FROM ("A"|"B"|"C"|"D"|"E"|"F"|"G"|"H"|
+       "I"|"J"|"K"|"L"|"M"|"N"|"O"|"P"|"Q"|"R"|"S"|"T"|"U"|
+       "V"|"W"|"X"|"Y"|"Z"|"a"|"b"|"c"|"d"|"e"|"f"|"g"|"h"|
+       "i"|"j"|"k"|"l"|"m"|"n"|"o"|"p"|"q"|"r"|"s"|"t"|"u"|
+       "v"|"w"|"x"|"y"|"z"|"1"|"2"|"3"|"4"|"5"|"6"|"7"|"8"|
+       "9"|"0"|" "|"."|","|"-"|"("|")"|"/"|"="|"!"|"""|"%"|"&"|
+       "*"|";"|"<"|">"|"'"|"+"|":"|"?"))
+
+END
+
+
diff --git a/src/item-req.asn b/src/item-req.asn
new file mode 100644 (file)
index 0000000..612d509
--- /dev/null
@@ -0,0 +1,58 @@
+Z39.50-extendedService-ItemOrder-ItemRequest-1 DEFINITIONS ::=
+BEGIN
+IMPORTS
+       Transaction-Id,
+       Service-Date-Time,
+       System-Id,
+       Transaction-Type,
+       Delivery-Address,
+       ILL-Service-Type,
+       Requester-Optional-Messages-Type,
+       Search-Type,
+       Supply-Medium-Info-Type,
+       Place-On-Hold-Type,
+       Client-Id,
+       Item-Id,
+       Supplemental-Item-Description,
+       Cost-Info-Type,
+       ILL-String,
+       Third-Party-Info-Type,
+       Extension
+FROM ISO-10161-ILL-1;
+
+ItemRequest ::=SEQUENCE {
+       protocol-version-num    [0]     IMPLICIT INTEGER {
+                               version-1 (1),
+                               version-2 (2)
+                               },
+       transaction-id          [1]     IMPLICIT Transaction-Id OPTIONAL,
+       service-date-time       [2]     IMPLICIT Service-Date-Time OPTIONAL,
+       requester-id            [3]     IMPLICIT System-Id OPTIONAL,
+       responder-id            [4]     IMPLICIT System-Id OPTIONAL,
+       transaction-type        [5]     IMPLICIT Transaction-Type DEFAULT 1,
+       delivery-address        [6]     IMPLICIT Delivery-Address OPTIONAL, 
+       delivery-service                Delivery-Service OPTIONAL,
+       billing-address         [8]     IMPLICIT Delivery-Address OPTIONAL,
+       iLL-service-type        [9]     IMPLICIT SEQUENCE SIZE (1..5) OF 
+                                       ILL-Service-Type OPTIONAL,
+       responder-specific-service      [10]    EXTERNAL OPTIONAL,
+               -- use direct reference style
+       requester-optional-messages     [11]    IMPLICIT Requester-Optional-Messages-Type OPTIONAL,
+       search-type             [12]    IMPLICIT Search-Type OPTIONAL,
+       supply-medium-info-type [13]    IMPLICIT SEQUENCE SIZE (1..7) OF
+                               Supply-Medium-Info-Type OPTIONAL,
+       place-on-hold           [14]    IMPLICIT Place-On-Hold-Type DEFAULT 3,
+       client-id               [15]    IMPLICIT Client-Id OPTIONAL,     
+       item-id                 [16]    IMPLICIT Item-Id OPTIONAL,
+       supplemental-item-description   [17]    IMPLICIT Supplemental-Item-Description OPTIONAL,
+       cost-info-type          [18]    IMPLICIT Cost-Info-Type OPTIONAL,
+       copyright-compliance    [19]    ILL-String OPTIONAL,
+       third-party-info-type   [20]    IMPLICIT Third-Party-Info-Type OPTIONAL,
+       retry-flag              [21]    IMPLICIT BOOLEAN DEFAULT FALSE,
+       forward-flag            [22]    IMPLICIT BOOLEAN DEFAULT FALSE,
+       requester-note          [46]    ILL-String OPTIONAL,
+       forward-note            [47]    ILL-String OPTIONAL,
+       iLL-request-extensions  [49]    IMPLICIT SEQUENCE OF Extension OPTIONAL
+       }
+END
+  
diff --git a/src/lexer.h b/src/lexer.h
new file mode 100644 (file)
index 0000000..6c8a3b4
--- /dev/null
@@ -0,0 +1,113 @@
+/* $Id: lexer.h,v 1.1 2003-10-27 12:21:30 adam Exp $
+   Copyright (C) 2002-2003
+   Index Data Aps
+
+This file is part of the YAZ toolkit.
+
+See the file LICENSE.
+*/
+
+static void putb(YYSTYPE *lval, CQL_parser cp, int c)
+{
+    if (lval->len+1 >= lval->size)
+    {
+        char *nb = nmem_malloc(cp->nmem, (lval->size = lval->len * 2 + 20));
+        memcpy (nb, lval->buf, lval->len);
+        lval->buf = nb;
+    }
+    if (c)
+        lval->buf[lval->len++] = c;
+    lval->buf[lval->len] = '\0';
+}
+
+/*
+ * bison lexer for CQL.
+ */
+
+int yylex(YYSTYPE *lval, void *vp)
+{
+    CQL_parser cp = (CQL_parser) vp;
+    int c;
+    lval->cql = 0;
+    lval->rel = 0;
+    lval->len = 0;
+    lval->size = 10;
+    lval->buf = nmem_malloc(cp->nmem, lval->size);
+    lval->buf[0] = '\0';
+    do
+    {
+        c = cp->getbyte(cp->client_data);
+        if (c == 0)
+            return 0;
+        if (c == '\n')
+            return 0;
+    } while (isspace(c));
+    if (strchr("()=></", c))
+    {
+        int c1;
+        putb(lval, cp, c);
+        if (c == '>')
+        {
+            c1 = cp->getbyte(cp->client_data);
+            if (c1 == '=')
+            {
+                putb(lval, cp, c1);
+                return GE;
+            }
+            else
+                cp->ungetbyte(c1, cp->client_data);
+        }
+        else if (c == '<')
+        {
+            c1 = cp->getbyte(cp->client_data);
+            if (c1 == '=')
+            {
+                putb(lval, cp, c1);
+                return LE;
+            }
+            else if (c1 == '>')
+            {
+                putb(lval, cp, c1);
+                return NE;
+            }
+            else
+                cp->ungetbyte(c1, cp->client_data);
+        }
+        return c;
+    }
+    if (c == '"')
+    {
+        while ((c = cp->getbyte(cp->client_data)) != EOF && c != '"')
+        {
+            if (c == '\\')
+                c = cp->getbyte(cp->client_data);
+            putb(lval, cp, c);
+        }
+        putb(lval, cp, 0);
+    }
+    else
+    {
+        putb(lval, cp, c);
+        while ((c = cp->getbyte(cp->client_data)) != 0 &&
+               !strchr(" \n()=<>/", c))
+        {
+            if (c == '\\')
+                c = cp->getbyte(cp->client_data);
+            putb(lval, cp, c);
+        }
+#if YYDEBUG
+        printf ("got %s\n", lval->buf);
+#endif
+        if (c != 0)
+            cp->ungetbyte(c, cp->client_data);
+        if (!strcmp(lval->buf, "and"))
+            return AND;
+        if (!strcmp(lval->buf, "or"))
+            return OR;
+        if (!strcmp(lval->buf, "not"))
+            return NOT;
+        if (!strncmp(lval->buf, "prox", 4))
+            return PROX;
+    }
+    return TERM;
+}
diff --git a/src/log.c b/src/log.c
new file mode 100644 (file)
index 0000000..6d629bf
--- /dev/null
+++ b/src/log.c
@@ -0,0 +1,235 @@
+/*
+ * Copyright (c) 1995-2003, Index Data
+ * See the file LICENSE for details.
+ *
+ * $Id: log.c,v 1.1 2003-10-27 12:21:30 adam Exp $
+ */
+
+#if HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#ifdef WIN32
+#include <windows.h>
+#endif
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <ctype.h>
+#include <string.h>
+#include <stdarg.h>
+#include <errno.h>
+#include <time.h>
+#include <yaz/nmem.h>
+#include <yaz/log.h>
+
+#define HAS_STRERROR 1
+
+#if HAS_STRERROR
+
+#else
+char *strerror(int n)
+{
+        extern char *sys_errlist[];
+        return sys_errlist[n];
+}
+
+#endif
+
+static int l_level = LOG_DEFAULT_LEVEL;
+static FILE *l_file = NULL;
+static char l_prefix[512] = "";
+static char l_prefix2[512] = "";
+static char l_fname[512] = "";
+
+static struct {
+    int mask;
+    char *name;
+} mask_names[] =
+{
+    { LOG_FATAL, "fatal"},
+    { LOG_DEBUG, "debug"},
+    { LOG_WARN,  "warn" },
+    { LOG_LOG,   "log"  },
+    { LOG_ERRNO, ""},
+    { LOG_MALLOC, "malloc"},
+    { LOG_APP,   "app"  },
+    { LOG_NOTIME, "" },
+    { LOG_APP2  , "app2" },
+    { LOG_APP3  , "app3" },
+    { LOG_ALL,   "all"  },
+    { 0,         "none" },
+    { 0, NULL }
+};  
+
+FILE *yaz_log_file(void)
+{
+    if (!l_file)
+        l_file = stderr;
+    return l_file;
+}
+
+void yaz_log_init_file (const char *fname)
+{
+    if (fname)
+    {
+       strncpy(l_fname, fname, sizeof(l_fname)-1);
+       l_fname[sizeof(l_fname)-1] = '\0';
+    }
+    else
+       l_fname[0] = '\0';
+    yaz_log_reopen();
+}
+
+void yaz_log_reopen(void)
+{
+    FILE *new_file;
+    if (!l_file)
+        l_file = stderr;
+
+    if (!*l_fname)
+       new_file=stderr;
+    else if (!(new_file = fopen(l_fname, "a")))
+        return;
+    if (l_file != stderr)
+    {
+        fclose (l_file);
+    }
+    setvbuf(new_file, 0, _IONBF, 0);
+    l_file = new_file;
+}
+
+void yaz_log_init_level (int level)
+{
+    l_level = level;
+}
+
+void yaz_log_init_prefix (const char *prefix)
+{
+    if (prefix && *prefix)
+       sprintf(l_prefix, "%.511s ", prefix);
+    else
+        *l_prefix = 0;
+}
+
+void yaz_log_init_prefix2 (const char *prefix)
+{
+    if (prefix && *prefix)
+       sprintf(l_prefix2, "%.511s ", prefix);
+    else
+        *l_prefix2 = 0;
+}
+
+void yaz_log_init(int level, const char *prefix, const char *fname)
+{
+    yaz_log_init_level (level);
+    yaz_log_init_prefix (prefix);
+    if (fname && *fname)
+        yaz_log_init_file (fname);
+}
+
+static void (*start_hook_func)(int, const char *, void *) = NULL;
+static void *start_hook_info;
+static void (*end_hook_func)(int, const char *, void *) = NULL;
+static void *end_hook_info;
+
+void log_event_start (void (*func)(int, const char *, void *), void *info)
+{
+    start_hook_func = func;
+    start_hook_info = info;
+}
+
+void log_event_end (void (*func)(int, const char *, void *), void *info)
+{
+    end_hook_func = func;
+    end_hook_info = info;
+}
+
+void yaz_log(int level, const char *fmt, ...)
+{
+    va_list ap;
+    char buf[4096], flags[1024];
+    int i;
+    time_t ti;
+    struct tm *tim;
+    char tbuf[50]="";
+    int o_level = level;
+
+    if (!(level & l_level))
+       return;
+    if (!l_file)
+        l_file = stderr;
+    *flags = '\0';
+    for (i = 0; level && mask_names[i].name; i++)
+       if (mask_names[i].mask & level)
+       {
+           if (*mask_names[i].name)
+               sprintf(flags + strlen(flags), "[%s]", mask_names[i].name);
+           level -= mask_names[i].mask;
+       }
+    va_start(ap, fmt);
+#ifdef WIN32
+    _vsnprintf(buf, sizeof(buf)-1, fmt, ap);
+#else
+/* !WIN32 */
+#if HAVE_VSNPRINTF
+    vsnprintf(buf, sizeof(buf), fmt, ap);
+#else
+    vsprintf(buf, fmt, ap);
+#endif
+#endif
+/* WIN32 */
+    if (o_level & LOG_ERRNO)
+    {
+        strcat(buf, " [");
+        yaz_strerror(buf+strlen(buf), 2048);
+        strcat(buf, "]");
+    }
+    va_end (ap);
+    if (start_hook_func)
+        (*start_hook_func)(o_level, buf, start_hook_info);
+    ti = time(0);
+    tim = localtime(&ti);
+    if (l_level & LOG_NOTIME)
+      tbuf[0]='\0';
+    else
+      strftime(tbuf, 50, "%H:%M:%S-%d/%m: ", tim);
+    fprintf(l_file, "%s%s%s %s%s\n", tbuf, l_prefix, flags,
+            l_prefix2, buf);
+    fflush(l_file);
+    if (end_hook_func)
+       (*end_hook_func)(o_level, buf, end_hook_info);
+}
+
+int yaz_log_mask_str (const char *str)
+{
+    return yaz_log_mask_str_x (str, LOG_DEFAULT_LEVEL);
+}
+
+int yaz_log_mask_str_x (const char *str, int level)
+{
+    const char *p;
+    int i;
+
+    while (*str)
+    {
+        for (p = str; *p && *p != ','; p++)
+            ;
+        if (*str == '-' || isdigit(*str))
+            level = atoi (str);
+        else
+            for (i = 0; mask_names[i].name; i++)
+                if (strlen (mask_names[i].name) == (size_t) (p-str) &&
+                    memcmp (mask_names[i].name, str, p-str) == 0)
+                {
+                    if (mask_names[i].mask)
+                        level |= mask_names[i].mask;
+                    else
+                        level = 0;
+                }
+        if (*p == ',')
+            p++;
+        str = p;
+    }
+    return level;
+}
diff --git a/src/logrpn.c b/src/logrpn.c
new file mode 100644 (file)
index 0000000..b79b2e3
--- /dev/null
@@ -0,0 +1,368 @@
+/*
+ * Copyright (C) 1995-2003, Index Data
+ * All rights reserved.
+ *
+ * $Id: logrpn.c,v 1.1 2003-10-27 12:21:30 adam Exp $
+ */
+#include <stdio.h>
+
+#include <yaz/log.h>
+#include <yaz/logrpn.h>
+
+static const char *relToStr(int v)
+{
+    const char *str = 0;
+    switch (v)
+    {
+    case 1: str = "Less than"; break;
+    case 2: str = "Less than or equal"; break;
+    case 3: str = "Equal"; break;
+    case 4: str = "Greater or equal"; break;
+    case 5: str = "Greater than"; break;
+    case 6: str = "Not equal"; break;
+    case 100: str = "Phonetic"; break;
+    case 101: str = "Stem"; break;
+    case 102: str = "Relevance"; break;
+    case 103: str = "AlwaysMatches"; break;
+    }
+    return str;
+}
+static void attrStr (int type, int value, enum oid_value ast, char *str)
+{
+    const char *rstr;
+    *str = '\0';
+    switch (ast)
+    {
+    case VAL_BIB1:
+    case VAL_EXP1:
+    case VAL_GILS:
+        switch (type)
+        {
+        case 1:
+            sprintf (str, "use");
+            break;
+        case 2:
+            rstr = relToStr(value);
+            if (rstr)
+                sprintf (str, "relation=%s", rstr);
+            else
+                sprintf (str, "relation=%d", value);
+            break;
+        case 3:
+            switch (value)
+            {
+            case 1:
+                sprintf (str, "position=First in field");
+                break;
+            case 2:
+                sprintf (str, "position=First in any subfield");
+                break;
+            case 3:
+                sprintf (str, "position=Any position in field");
+                break;
+            default:
+                sprintf (str, "position");
+            }
+            break;
+        case 4:
+            switch (value)
+            {
+            case 1:
+                sprintf (str, "structure=Phrase");
+                break;
+            case 2:
+                sprintf (str, "structure=Word");
+                break;
+            case 3:
+                sprintf (str, "structure=Key");
+                break;
+            case 4:
+                sprintf (str, "structure=Year");
+                break;
+            case 5:
+                sprintf (str, "structure=Date");
+                break;
+            case 6:
+                sprintf (str, "structure=Word list");
+                break;
+            case 100:
+                sprintf (str, "structure=Date (un)");
+                break;
+            case 101:
+                sprintf (str, "structure=Name (norm)");
+                break;
+            case 102:
+                sprintf (str, "structure=Name (un)");
+                break;
+            case 103:
+                sprintf (str, "structure=Structure");
+                break;
+            case 104:
+                sprintf (str, "structure=urx");
+                break;
+            case 105:
+                sprintf (str, "structure=free-form-text");
+                break;
+            case 106:
+                sprintf (str, "structure=document-text");
+                break;
+            case 107:
+                sprintf (str, "structure=local-number");
+                break;
+            case 108:
+                sprintf (str, "structure=string");
+                break;
+            case 109:
+                sprintf (str, "structure=numeric string");
+                break;
+            default:
+                sprintf (str, "structure");
+            }
+            break;
+        case 5:
+            switch (value)
+            {
+            case 1:
+                sprintf (str, "truncation=Right");
+                break;
+            case 2:
+                sprintf (str, "truncation=Left");
+                break;
+            case 3:
+                sprintf (str, "truncation=Left&right");
+                break;
+            case 100:
+                sprintf (str, "truncation=Do not truncate");
+                break;
+            case 101:
+                sprintf (str, "truncation=Process #");
+                break;
+            case 102:
+                sprintf (str, "truncation=re-1");
+                break;
+            case 103:
+                sprintf (str, "truncation=re-2");
+                break;
+            case 104:
+                sprintf (str, "truncation=CCL");
+                break;
+            default:
+                sprintf (str, "truncation");
+            }
+            break;
+        case 6:
+            switch (value)
+            {
+            case 1:
+                sprintf (str, "completeness=Incomplete subfield");
+                break;
+            case 2:
+                sprintf (str, "completeness=Complete subfield");
+                break;
+            case 3:
+                sprintf (str, "completeness=Complete field");
+                break;
+            default:
+                sprintf (str, "completeness");
+            }
+            break;
+        }
+        break;
+    default:
+        break;
+    }
+    if (*str)
+        sprintf (str + strlen(str), " (%d=%d)", type, value);
+    else
+        sprintf (str, "%d=%d", type, value);
+}
+
+/*
+ * zlog_attributes: print attributes of term
+ */
+static void zlog_attributes (Z_AttributesPlusTerm *t, int level,
+                             enum oid_value ast)
+{
+    int of, i;
+    char str[80];
+    int num_attributes = t->attributes->num_attributes;
+    
+    for (of = 0; of < num_attributes; of++)
+    {
+       const char *attset_name = "";
+        Z_AttributeElement *element;
+       element = t->attributes->attributes[of];
+       if (element->attributeSet)
+       {
+           oident *attrset;
+           attrset = oid_getentbyoid (element->attributeSet);
+           attset_name = attrset->desc;
+       }
+        switch (element->which) 
+        {
+        case Z_AttributeValue_numeric:
+           attrStr (*element->attributeType,
+                    *element->value.numeric, ast, str);
+            yaz_log (LOG_LOG, "%*.0s%s %s", level, "", attset_name, str);
+            break;
+        case Z_AttributeValue_complex:
+            yaz_log (LOG_LOG, "%*.0s%s attributeType=%d complex",
+                 level, "", attset_name, *element->attributeType);
+            for (i = 0; i<element->value.complex->num_list; i++)
+            {
+                if (element->value.complex->list[i]->which ==
+                    Z_StringOrNumeric_string)
+                    yaz_log (LOG_LOG, "%*.0s  string: '%s'", level, "",
+                            element->value.complex->list[i]->u.string);
+                else if (element->value.complex->list[i]->which ==
+                         Z_StringOrNumeric_numeric)
+                    yaz_log (LOG_LOG, "%*.0s  numeric: '%d'", level, "",
+                            *element->value.complex->list[i]->u.numeric);
+            }
+            break;
+        default:
+            yaz_log (LOG_LOG, "%.*s%s attribute unknown",
+                    level, "", attset_name);
+        }
+    }
+}
+
+static void zlog_structure (Z_RPNStructure *zs, int level, enum oid_value ast)
+{
+    if (zs->which == Z_RPNStructure_complex)
+    {
+        Z_Operator *op = zs->u.complex->roperator;
+        const char *rstr = 0;
+        const char *unit = "private";
+        switch (op->which)
+        {
+        case Z_Operator_and:
+            yaz_log (LOG_LOG, "%*.0s and", level, "");
+            break;
+        case Z_Operator_or:
+            yaz_log (LOG_LOG, "%*.0s or", level, "");
+            break;
+        case Z_Operator_and_not:
+            yaz_log (LOG_LOG, "%*.0s and-not", level, "");
+            break;
+       case Z_Operator_prox:
+            if (op->u.prox->which == Z_ProximityOperator_known)
+            {
+                switch(*op->u.prox->u.known)
+                {
+                case Z_ProxUnit_character: unit = "character"; break;
+                case Z_ProxUnit_word: unit = "word"; break;
+                case Z_ProxUnit_sentence: unit = "sentence"; break;
+                case Z_ProxUnit_paragraph: unit = "paragraph"; break;
+                case Z_ProxUnit_section: unit = "section"; break;
+                case Z_ProxUnit_chapter: unit = "chapter"; break;
+                case Z_ProxUnit_document: unit = "document"; break;
+                case Z_ProxUnit_element: unit = "element"; break;
+                case Z_ProxUnit_subelement: unit = "subelement"; break;
+                case Z_ProxUnit_elementType: unit = "elementType"; break;
+                case Z_ProxUnit_byte: unit = "byte"; break;
+                default: unit = "unknown"; break;
+                }
+            }
+            rstr = relToStr(*op->u.prox->relationType);
+            yaz_log (LOG_LOG, "%*.0s prox excl=%s dist=%d order=%s "
+                     "rel=%s unit=%s",
+                     level, "", op->u.prox->exclusion ?
+                     (*op->u.prox->exclusion ? "T" : "F") : "N", 
+                     *op->u.prox->distance,
+                     *op->u.prox->ordered ? "T" : "F",
+                     rstr ? rstr : "unknown",
+                     unit);
+           break;
+        default:
+            yaz_log (LOG_LOG, "%*.0s unknown complex", level, "");
+            return;
+        }
+        zlog_structure (zs->u.complex->s1, level+2, ast);
+        zlog_structure (zs->u.complex->s2, level+2, ast);
+    }
+    else if (zs->which == Z_RPNStructure_simple)
+    {
+        if (zs->u.simple->which == Z_Operand_APT)
+        {
+            Z_AttributesPlusTerm *zapt = zs->u.simple->u.attributesPlusTerm;
+
+            switch (zapt->term->which)
+            {
+            case Z_Term_general:
+                yaz_log (LOG_LOG, "%*.0s term '%.*s' (general)", level, "",
+                        zapt->term->u.general->len,
+                        zapt->term->u.general->buf);
+                break;
+            case Z_Term_characterString:
+                yaz_log (LOG_LOG, "%*.0s term '%s' (string)", level, "",
+                        zapt->term->u.characterString);
+                break;
+            case Z_Term_numeric:
+                yaz_log (LOG_LOG, "%*.0s term '%d' (numeric)", level, "",
+                        *zapt->term->u.numeric);
+                break;
+            case Z_Term_null:
+                yaz_log (LOG_LOG, "%*.0s term (null)", level, "");
+                break;
+            default:
+                yaz_log (LOG_LOG, "%*.0s term (not general)", level, "");
+            }
+            zlog_attributes (zapt, level+2, ast);
+        }
+        else if (zs->u.simple->which == Z_Operand_resultSetId)
+        {
+            yaz_log (LOG_LOG, "%*.0s set '%s'", level, "",
+                    zs->u.simple->u.resultSetId);
+        }
+        else
+            yaz_log (LOG_LOG, "%*.0s unknown simple structure", level, "");
+    }
+    else
+        yaz_log (LOG_LOG, "%*.0s unknown structure", level, "");
+}
+
+void log_rpn_query (Z_RPNQuery *rpn)
+{
+    oident *attrset;
+    enum oid_value ast;
+    
+    attrset = oid_getentbyoid (rpn->attributeSetId);
+    if (attrset)
+    {
+        ast = attrset->value;
+       yaz_log (LOG_LOG, "RPN query. Type: %s", attrset->desc);
+    } 
+    else
+    {
+       ast = VAL_NONE;
+       yaz_log (LOG_LOG, "RPN query. Unknown type");
+    }
+    zlog_structure (rpn->RPNStructure, 0, ast);
+}
+
+void log_scan_term (Z_AttributesPlusTerm *zapt, oid_value ast)
+{
+    int level = 0;
+    if (zapt->term->which == Z_Term_general) 
+    {
+       yaz_log (LOG_LOG, "%*.0s term '%.*s' (general)", level, "",
+                zapt->term->u.general->len, zapt->term->u.general->buf);
+    }
+    else
+       yaz_log (LOG_LOG, "%*.0s term (not general)", level, "");
+    zlog_attributes (zapt, level+2, ast);
+}
+
+void yaz_log_zquery (Z_Query *q)
+{
+    switch (q->which)
+    {
+    case Z_Query_type_1: case Z_Query_type_101:
+       log_rpn_query (q->u.type_1);
+        break;
+    case Z_Query_type_104:
+        if (q->u.type_104->which == Z_External_CQL)
+            yaz_log (LOG_LOG, "CQL: %s", q->u.type_104->u.cql);
+    }
+}
diff --git a/src/marcdisp.c b/src/marcdisp.c
new file mode 100644 (file)
index 0000000..f5d5553
--- /dev/null
@@ -0,0 +1,467 @@
+/*
+ * Copyright (c) 1995-2003, Index Data
+ * See the file LICENSE for details.
+ *
+ * $Id: marcdisp.c,v 1.1 2003-10-27 12:21:30 adam Exp $
+ */
+
+#if HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include <stdio.h>
+#include <string.h>
+#include <ctype.h>
+#include <yaz/marcdisp.h>
+#include <yaz/wrbuf.h>
+#include <yaz/yaz-util.h>
+
+struct yaz_marc_t_ {
+    WRBUF m_wr;
+    int xml;
+    int debug;
+};
+
+yaz_marc_t yaz_marc_create(void)
+{
+    yaz_marc_t mt = (yaz_marc_t) xmalloc(sizeof(*mt));
+    mt->xml = YAZ_MARC_LINE;
+    mt->debug = 0;
+    mt->m_wr = wrbuf_alloc();
+    return mt;
+}
+
+void yaz_marc_destroy(yaz_marc_t mt)
+{
+    if (!mt)
+        return ;
+    wrbuf_free (mt->m_wr, 1);
+    xfree (mt);
+}
+
+static void marc_cdata (yaz_marc_t mt, const char *buf, size_t len, WRBUF wr)
+{
+    size_t i;
+    for (i = 0; i<len; i++)
+    {
+        if (mt->xml)
+        {
+            switch (buf[i]) {
+            case '<':
+                wrbuf_puts(wr, "&lt;");
+                break;
+            case '>':
+                wrbuf_puts(wr, "&gt;");
+                break;
+            case '&':
+                wrbuf_puts(wr, "&amp;");
+                break;
+           case '"':
+               wrbuf_puts(wr, "&quot;");
+               break;
+           case '\'':
+               wrbuf_puts(wr, "&apos;");
+               break;
+            default:
+                wrbuf_putc(wr, buf[i]);
+            }
+        }
+        else
+            wrbuf_putc(wr, buf[i]);
+    }
+}
+
+#if 0
+static void marc_cdata (yaz_marc_t mt, const char *buf, size_t len)
+{
+    if (!mt->cd)
+        marc_cdata2 (mt, buf, len);
+    else
+    {
+        char outbuf[12];
+        size_t inbytesleft = len;
+        const char *inp = buf;
+        
+        while (inbytesleft)
+        {
+            size_t outbytesleft = sizeof(outbuf);
+            char *outp = outbuf;
+            size_t r = yaz_iconv (mt->cd, (char**) &inp, &inbytesleft, 
+                                  &outp, &outbytesleft);
+            if (r == (size_t) (-1))
+            {
+                int e = yaz_iconv_error(mt->cd);
+                if (e != YAZ_ICONV_E2BIG)
+                    break;
+            }
+            marc_cdata2 (mt, outbuf, outp - outbuf);
+        }
+    }
+}
+#endif
+
+int yaz_marc_decode_wrbuf (yaz_marc_t mt, const char *buf, int bsize, WRBUF wr)
+{
+    int entry_p;
+    int record_length;
+    int indicator_length;
+    int identifier_length;
+    int base_address;
+    int length_data_entry;
+    int length_starting;
+    int length_implementation;
+
+    wrbuf_rewind(wr);
+
+    record_length = atoi_n (buf, 5);
+    if (record_length < 25)
+    {
+       if (mt->debug)
+       {
+           char str[40];
+           
+           sprintf (str, "Record length %d - aborting\n", record_length);
+           wrbuf_puts (wr, str);
+       }
+        return -1;
+    }
+    /* ballout if bsize is known and record_length is than that */
+    if (bsize != -1 && record_length > bsize)
+       return -1;
+    if (isdigit(buf[10]))
+        indicator_length = atoi_n (buf+10, 1);
+    else
+        indicator_length = 2;
+    if (isdigit(buf[11]))
+       identifier_length = atoi_n (buf+11, 1);
+    else
+        identifier_length = 2;
+    base_address = atoi_n (buf+12, 5);
+
+    length_data_entry = atoi_n (buf+20, 1);
+    length_starting = atoi_n (buf+21, 1);
+    length_implementation = atoi_n (buf+22, 1);
+
+    if (mt->xml)
+    {
+        char str[80];
+        int i;
+        switch(mt->xml)
+        {
+        case YAZ_MARC_SIMPLEXML:
+            wrbuf_puts (wr, "<iso2709\n");
+            sprintf (str, " RecordStatus=\"%c\"\n", buf[5]);
+            wrbuf_puts (wr, str);
+            sprintf (str, " TypeOfRecord=\"%c\"\n", buf[6]);
+            wrbuf_puts (wr, str);
+            for (i = 1; i<=19; i++)
+            {
+                sprintf (str, " ImplDefined%d=\"%c\"\n", i, buf[6+i]);
+                wrbuf_puts (wr, str);
+            }
+            wrbuf_puts (wr, ">\n");
+            break;
+        case YAZ_MARC_OAIMARC:
+            wrbuf_puts(
+                wr,
+                "<oai_marc xmlns=\"http://www.openarchives.org/OIA/oai_marc\""
+                "\n"
+                " xmlns:xsi=\"http://www.w3.org/2000/10/XMLSchema-instance\""
+                "\n"
+                " xsi:schemaLocation=\"http://www.openarchives.org/OAI/oai_marc.xsd\""
+                "\n"
+                );
+            
+            sprintf (str, " status=\"%c\" type=\"%c\" catForm=\"%c\">\n",
+                     buf[5], buf[6], buf[7]);
+            wrbuf_puts (wr, str);
+            break;
+        case YAZ_MARC_MARCXML:
+            wrbuf_printf(
+                wr,
+                "<record xmlns=\"http://www.loc.gov/MARC21/slim\">\n"
+                "  <leader>%.24s</leader>\n", buf);
+            break;
+        }
+    }
+    if (mt->debug)
+    {
+       char str[40];
+
+        if (mt->xml)
+            wrbuf_puts (wr, "<!--\n");
+       sprintf (str, "Record length         %5d\n", record_length);
+       wrbuf_puts (wr, str);
+       sprintf (str, "Indicator length      %5d\n", indicator_length);
+       wrbuf_puts (wr, str);
+       sprintf (str, "Identifier length     %5d\n", identifier_length);
+       wrbuf_puts (wr, str);
+       sprintf (str, "Base address          %5d\n", base_address);
+       wrbuf_puts (wr, str);
+       sprintf (str, "Length data entry     %5d\n", length_data_entry);
+       wrbuf_puts (wr, str);
+       sprintf (str, "Length starting       %5d\n", length_starting);
+       wrbuf_puts (wr, str);
+       sprintf (str, "Length implementation %5d\n", length_implementation);
+       wrbuf_puts (wr, str);
+        if (mt->xml)
+            wrbuf_puts (wr, "-->\n");
+    }
+
+    for (entry_p = 24; buf[entry_p] != ISO2709_FS; )
+    {
+        entry_p += 3+length_data_entry+length_starting;
+        if (entry_p >= record_length)
+            return -1;
+    }
+    base_address = entry_p+1;
+    for (entry_p = 24; buf[entry_p] != ISO2709_FS; )
+    {
+        int data_length;
+       int data_offset;
+       int end_offset;
+       int i, j;
+       char tag[4];
+        int identifier_flag = 1;
+
+        memcpy (tag, buf+entry_p, 3);
+       entry_p += 3;
+        tag[3] = '\0';
+       data_length = atoi_n (buf+entry_p, length_data_entry);
+       entry_p += length_data_entry;
+       data_offset = atoi_n (buf+entry_p, length_starting);
+       entry_p += length_starting;
+       i = data_offset + base_address;
+       end_offset = i+data_length-1;
+        
+        if (indicator_length < 4 && indicator_length > 0)
+        {
+            if (buf[i + indicator_length] != ISO2709_IDFS)
+                identifier_flag = 0;
+        }
+        else if (!memcmp (tag, "00", 2))
+            identifier_flag = 0;
+        
+        switch(mt->xml)
+        {
+        case YAZ_MARC_LINE:
+            if (mt->debug)
+                wrbuf_puts (wr, "Tag: ");
+            wrbuf_puts (wr, tag);
+            wrbuf_puts (wr, " ");
+            break;
+        case YAZ_MARC_SIMPLEXML:
+            wrbuf_printf (wr, "<field tag=\"%s\"", tag);
+            break;
+        case YAZ_MARC_OAIMARC:
+            if (identifier_flag)
+                wrbuf_printf (wr, "  <varfield id=\"%s\"", tag);
+            else
+                wrbuf_printf (wr, "  <fixfield id=\"%s\"", tag);
+            break;
+        case YAZ_MARC_MARCXML:
+            if (identifier_flag)
+                wrbuf_printf (wr, "  <datafield tag=\"%s\"", tag);
+            else
+                wrbuf_printf (wr, "  <controlfield tag=\"%s\"", tag);
+        }
+        
+        if (identifier_flag)
+       {
+            for (j = 0; j<indicator_length; j++, i++)
+            {
+                switch(mt->xml)
+                {
+                case YAZ_MARC_LINE:
+                    if (mt->debug)
+                        wrbuf_puts (wr, " Ind: ");
+                    wrbuf_putc (wr, buf[i]);
+                    break;
+                case YAZ_MARC_SIMPLEXML:
+                    wrbuf_printf (wr, " Indicator%d=\"%c\"", j+1, buf[i]);
+                    break;
+                case YAZ_MARC_OAIMARC:
+                    wrbuf_printf (wr, " i%d=\"%c\"", j+1, buf[i]);
+                    break;
+                case YAZ_MARC_MARCXML:
+                    wrbuf_printf (wr, " ind%d=\"%c\"", j+1, buf[i]);
+                }
+            }
+       }
+        if (mt->xml)
+        {
+            wrbuf_puts (wr, ">");
+            if (identifier_flag)
+                wrbuf_puts (wr, "\n");
+        }
+        else
+        {
+            if (mt->debug && !mt->xml)
+                wrbuf_puts (wr, " Fields: ");
+        }
+        if (identifier_flag)
+        {
+            while (buf[i] != ISO2709_RS && buf[i] != ISO2709_FS && i < end_offset)
+            {
+                int i0;
+                i++;
+                switch(mt->xml)
+                {
+                case YAZ_MARC_LINE: 
+                    wrbuf_puts (wr, " $"); 
+                    for (j = 1; j<identifier_length; j++, i++)
+                        wrbuf_putc (wr, buf[i]);
+                    wrbuf_putc (wr, ' ');
+                    break;
+                case YAZ_MARC_SIMPLEXML:
+                    wrbuf_puts (wr, "  <subfield code=\"");
+                    for (j = 1; j<identifier_length; j++, i++)
+                        wrbuf_putc (wr, buf[i]);
+                    wrbuf_puts (wr, "\">");
+                    break;
+                case YAZ_MARC_OAIMARC:
+                    wrbuf_puts (wr, "    <subfield label=\"");
+                    for (j = 1; j<identifier_length; j++, i++)
+                        wrbuf_putc (wr, buf[i]);
+                    wrbuf_puts (wr, "\">");
+                    break;
+                case YAZ_MARC_MARCXML:
+                    wrbuf_puts (wr, "    <subfield code=\"");
+                    for (j = 1; j<identifier_length; j++, i++)
+                        wrbuf_putc (wr, buf[i]);
+                    wrbuf_puts (wr, "\">");
+                    break;
+                }
+                i0 = i;
+                while (buf[i] != ISO2709_RS && buf[i] != ISO2709_IDFS &&
+                       buf[i] != ISO2709_FS && i < end_offset)
+                    i++;
+                marc_cdata(mt, buf + i0, i - i0, wr);
+                
+                if (mt->xml)
+                    wrbuf_puts (wr, "</subfield>\n");
+            }
+        }
+        else
+        {
+            int i0 = i;
+            while (buf[i] != ISO2709_RS && buf[i] != ISO2709_FS && i < end_offset)
+                i++;
+            marc_cdata(mt, buf + i0, i - i0, wr);
+       }
+        if (!mt->xml)
+            wrbuf_putc (wr, '\n');
+       if (i < end_offset)
+           wrbuf_puts (wr, "  <!-- separator but not at end of field -->\n");
+       if (buf[i] != ISO2709_RS && buf[i] != ISO2709_FS)
+           wrbuf_puts (wr, "  <!-- no separator at end of field -->\n");
+        switch(mt->xml)
+        {
+        case YAZ_MARC_SIMPLEXML:
+            wrbuf_puts (wr, "</field>\n");
+            break;
+        case YAZ_MARC_OAIMARC:
+            if (identifier_flag)
+                wrbuf_puts (wr, "  </varfield>\n");
+            else
+                wrbuf_puts (wr, "  </fixfield>\n");
+            break;
+        case YAZ_MARC_MARCXML:
+            if (identifier_flag)
+                wrbuf_puts (wr, "  </datafield>\n");
+            else
+                wrbuf_puts (wr, "  </controlfield>\n");
+            break;
+        }
+    }
+    switch (mt->xml)
+    {
+    case YAZ_MARC_LINE:
+        wrbuf_puts (wr, "");
+        break;
+    case YAZ_MARC_SIMPLEXML:
+        wrbuf_puts (wr, "</iso2709>\n");
+        break;
+    case YAZ_MARC_OAIMARC:
+        wrbuf_puts (wr, "</oai_marc>\n");
+        break;
+    case YAZ_MARC_MARCXML:
+        wrbuf_puts (wr, "</record>\n");
+        break;
+    }
+    return record_length;
+}
+
+int yaz_marc_decode_buf (yaz_marc_t mt, const char *buf, int bsize,
+                         char **result, int *rsize)
+{
+    int r = yaz_marc_decode_wrbuf(mt, buf, bsize, mt->m_wr);
+    if (r > 0)
+    {
+        if (result)
+            *result = wrbuf_buf(mt->m_wr);
+        if (rsize)
+            *rsize = wrbuf_len(mt->m_wr);
+    }
+    return r;
+}
+
+void yaz_marc_xml(yaz_marc_t mt, int xmlmode)
+{
+    if (mt)
+        mt->xml = xmlmode;
+}
+
+void yaz_marc_debug(yaz_marc_t mt, int level)
+{
+    if (mt)
+        mt->debug = level;
+}
+
+/* depricated */
+int yaz_marc_decode(const char *buf, WRBUF wr, int debug, int bsize, int xml)
+{
+    yaz_marc_t mt = yaz_marc_create();
+    int r;
+
+    mt->debug = debug;
+    mt->xml = xml;
+    r = yaz_marc_decode_wrbuf(mt, buf, bsize, wr);
+    yaz_marc_destroy(mt);
+    return r;
+}
+
+/* depricated */
+int marc_display_wrbuf (const char *buf, WRBUF wr, int debug, int bsize)
+{
+    return yaz_marc_decode(buf, wr, debug, bsize, 0);
+}
+
+/* depricated */
+int marc_display_exl (const char *buf, FILE *outf, int debug, int bsize)
+{
+    yaz_marc_t mt = yaz_marc_create();
+    int r;
+
+    mt->debug = debug;
+    r = yaz_marc_decode_wrbuf (mt, buf, bsize, mt->m_wr);
+    if (!outf)
+       outf = stdout;
+    if (r > 0)
+       fwrite (wrbuf_buf(mt->m_wr), 1, wrbuf_len(mt->m_wr), outf);
+    yaz_marc_destroy(mt);
+    return r;
+}
+
+/* depricated */
+int marc_display_ex (const char *buf, FILE *outf, int debug)
+{
+    return marc_display_exl (buf, outf, debug, -1);
+}
+
+/* depricated */
+int marc_display (const char *buf, FILE *outf)
+{
+    return marc_display_ex (buf, outf, 0);
+}
+
diff --git a/src/matchstr.c b/src/matchstr.c
new file mode 100644 (file)
index 0000000..2ec92d8
--- /dev/null
@@ -0,0 +1,78 @@
+/*
+ * Copyright (c) 1995-2003, Index Data.
+ * See the file LICENSE for details.
+ * Sebastian Hammer, Adam Dickmeiss
+ *
+ * $Id: matchstr.c,v 1.1 2003-10-27 12:21:31 adam Exp $
+ */
+#if HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include <stdio.h>
+#include <assert.h>
+#include <ctype.h>
+#include <string.h>
+#include <yaz/yaz-util.h>
+
+/*
+ * Match strings, independently of case and occurences of '-'.
+ * fairly inefficient - will be replaced with an indexing scheme for
+ * the various subsystems if we get a bottleneck here.
+ */
+
+int yaz_matchstr(const char *s1, const char *s2)
+{
+    while (*s1 && *s2)
+    {
+       char c1 = *s1;
+       char c2 = *s2;
+
+        if (c2 == '?')
+            return 0;
+       if (c1 == '-')
+           c1 = *++s1;
+       if (c2 == '-')
+           c2 = *++s2;
+       if (!c1 || !c2)
+           break;
+        if (c2 != '.')
+        {
+           if (isupper(c1))
+               c1 = tolower(c1);
+           if (isupper(c2))
+               c2 = tolower(c2);
+           if (c1 != c2)
+               break;
+        }
+       s1++;
+       s2++;
+    }
+    return *s1 || *s2;
+}
+
+int yaz_strcmp_del(const char *a, const char *b, const char *b_del)
+{
+    while (*a && *b)
+    {
+        if (*a != *b)
+            return *a - *b;
+        a++;
+        b++;
+    }
+    if (b_del && strchr(b_del, *b))
+        return *a;
+    return *a - *b;
+}
+
+#ifdef __GNUC__
+#ifdef __CHECKER__
+void __assert_fail (const char *assertion, const char *file, 
+                    unsigned int line, const char *function)
+{
+    fprintf (stderr, "%s in file %s line %d func %s\n",
+             assertion, file, line, function);
+    abort ();
+}
+#endif
+#endif
diff --git a/src/mterm2.asn b/src/mterm2.asn
new file mode 100644 (file)
index 0000000..eff29d7
--- /dev/null
@@ -0,0 +1,10 @@
+UserInfoFormat-multipleSearchTerms-2
+{Z39-50-userInfoFormat MultipleSearchTerms-2 (5)} DEFINITIONS ::=
+BEGIN
+IMPORTS Term FROM Z39-50-APDU-1995;
+
+MultipleSearchTerms-2 ::= SEQUENCE OF SEQUENCE{
+                             term  [1]   IMPLICIT Term,
+                             flag  [2]   IMPLICIT BOOLEAN OPTIONAL}
+
+END
diff --git a/src/nmem.c b/src/nmem.c
new file mode 100644 (file)
index 0000000..2526dbb
--- /dev/null
@@ -0,0 +1,483 @@
+/*
+ * Copyright (c) 1995-2003, Index Data.
+ * See the file LICENSE for details.
+ * Sebastian Hammer, Adam Dickmeiss
+ *
+ * $Id: nmem.c,v 1.1 2003-10-27 12:21:32 adam Exp $
+ */
+
+/*
+ * This is a simple and fairly wasteful little module for nibble memory
+ * allocation. Evemtually we'll put in something better.
+ */
+#if HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include <assert.h>
+#include <string.h>
+#include <errno.h>
+#include <yaz/xmalloc.h>
+#include <yaz/nmem.h>
+#include <yaz/log.h>
+#include <yaz/oid.h>
+
+#ifdef WIN32
+#include <windows.h>
+#endif
+
+#if YAZ_POSIX_THREADS
+#include <pthread.h>
+#endif
+
+#if YAZ_GNU_THREADS
+#include <pth.h>
+#endif
+
+#define NMEM_CHUNK (4*1024)
+
+#ifdef WIN32
+static CRITICAL_SECTION critical_section;
+#define NMEM_ENTER EnterCriticalSection(&critical_section)
+#define NMEM_LEAVE LeaveCriticalSection(&critical_section)
+struct nmem_mutex {
+    CRITICAL_SECTION m_handle;
+};
+#elif YAZ_POSIX_THREADS
+static pthread_mutex_t nmem_mutex = PTHREAD_MUTEX_INITIALIZER;
+#define NMEM_ENTER pthread_mutex_lock(&nmem_mutex);
+#define NMEM_LEAVE pthread_mutex_unlock(&nmem_mutex);
+struct nmem_mutex {
+    pthread_mutex_t m_handle;
+};
+#elif YAZ_GNU_THREADS
+static pth_mutex_t nmem_mutex = PTH_MUTEX_INIT;
+#define NMEM_ENTER pth_mutex_acquire(&nmem_mutex, 0, 0)
+#define NMEM_LEAVE pth_mutex_release(&nmem_mutex)
+struct nmem_mutex {
+    pth_mutex_t m_handle;
+};
+#else
+#define NMEM_ENTER
+#define NMEM_LEAVE
+struct nmem_mutex {
+    int dummy;
+};
+#endif
+
+YAZ_EXPORT void nmem_mutex_create(NMEM_MUTEX *p)
+{
+    NMEM_ENTER;
+    if (!*p)
+    {
+       *p = (NMEM_MUTEX) malloc (sizeof(**p));
+#ifdef WIN32
+       InitializeCriticalSection(&(*p)->m_handle);
+#elif YAZ_POSIX_THREADS
+       pthread_mutex_init (&(*p)->m_handle, 0);
+#elif YAZ_GNU_THREADS
+        pth_mutex_init (&(*p)->m_handle);
+#endif
+    }
+    NMEM_LEAVE;
+}
+
+YAZ_EXPORT void nmem_mutex_enter(NMEM_MUTEX p)
+{
+    if (p)
+    {
+#ifdef WIN32
+       EnterCriticalSection(&p->m_handle);
+#elif YAZ_POSIX_THREADS
+       pthread_mutex_lock(&p->m_handle);
+#endif
+    }
+}
+
+YAZ_EXPORT void nmem_mutex_leave(NMEM_MUTEX p)
+{
+    if (p)
+    {
+#ifdef WIN32
+       LeaveCriticalSection(&p->m_handle);
+#elif YAZ_POSIX_THREADS
+       pthread_mutex_unlock(&p->m_handle);
+#endif
+    }
+}
+
+YAZ_EXPORT void nmem_mutex_destroy(NMEM_MUTEX *p)
+{
+    NMEM_ENTER;
+    if (*p)
+    {
+#ifdef WIN32
+       DeleteCriticalSection(&(*p)->m_handle);
+#endif
+       free (*p);
+       *p = 0;
+    }
+    NMEM_LEAVE;
+}
+
+static nmem_block *freelist = NULL;        /* "global" freelists */
+static nmem_control *cfreelist = NULL;
+static int nmem_active_no = 0;
+static int nmem_init_flag = 0;
+
+#if NMEM_DEBUG
+struct nmem_debug_info {
+    void *p;
+    char file[40];
+    int line;
+    struct nmem_debug_info *next;
+};
+  
+struct nmem_debug_info *nmem_debug_list = 0;  
+#endif
+
+static void free_block(nmem_block *p)
+{  
+    p->next = freelist;
+    freelist = p;
+#if NMEM_DEBUG
+    yaz_log (LOG_DEBUG, "nmem free_block p=%p", p);
+#endif
+}
+
+#if NMEM_DEBUG
+void nmem_print_list (void)
+{
+    struct nmem_debug_info *p;
+
+    yaz_log (LOG_DEBUG, "nmem print list");
+    NMEM_ENTER;
+    for (p = nmem_debug_list; p; p = p->next)
+       yaz_log (LOG_DEBUG, " %s:%d p=%p size=%d", p->file, p->line, p->p,
+                nmem_total(p->p));
+    NMEM_LEAVE;
+}
+#endif
+/*
+ * acquire a block with a minimum of size free bytes.
+ */
+static nmem_block *get_block(int size)
+{
+    nmem_block *r, *l;
+
+#if NMEM_DEBUG
+    yaz_log (LOG_DEBUG, "nmem get_block size=%d", size);
+#endif
+    for (r = freelist, l = 0; r; l = r, r = r->next)
+       if (r->size >= size)
+           break;
+    if (r)
+    {
+#if NMEM_DEBUG
+       yaz_log (LOG_DEBUG, "nmem get_block found free block p=%p", r);
+#endif
+       if (l)
+           l->next = r->next;
+       else
+           freelist = r->next;
+    }
+    else
+    {
+       int get = NMEM_CHUNK;
+
+       if (get < size)
+           get = size;
+#if NMEM_DEBUG
+       yaz_log (LOG_DEBUG, "nmem get_block alloc new block size=%d", get);
+#endif
+       r = (nmem_block *)xmalloc(sizeof(*r));
+       r->buf = (char *)xmalloc(r->size = get);
+    }
+    r->top = 0;
+    return r;
+}
+
+void nmem_reset(NMEM n)
+{
+    nmem_block *t;
+
+#if NMEM_DEBUG
+    yaz_log (LOG_DEBUG, "nmem_reset p=%p", n);
+#endif
+    if (!n)
+       return;
+    NMEM_ENTER;
+    while (n->blocks)
+    {
+       t = n->blocks;
+       n->blocks = n->blocks->next;
+       free_block(t);
+    }
+    n->total = 0;
+    NMEM_LEAVE;
+}
+
+#if NMEM_DEBUG
+void *nmem_malloc_f (const char *file, int line, NMEM n, int size)
+#else
+void *nmem_malloc(NMEM n, int size)
+#endif
+{
+    struct nmem_block *p;
+    char *r;
+
+#if NMEM_DEBUG
+    yaz_log (LOG_DEBUG, "%s:%d: nmem_malloc p=%p size=%d", file, line,
+                     n, size);
+#endif
+    if (!n)
+    {
+        yaz_log (LOG_FATAL, "calling nmem_malloc with an null pointer");
+        abort ();
+    }
+#ifdef WIN32
+    assert (nmem_init_flag);
+#endif
+    NMEM_ENTER;
+    p = n->blocks;
+    if (!p || p->size - p->top < size)
+    {
+       p = get_block(size);
+       p->next = n->blocks;
+       n->blocks = p;
+    }
+    r = p->buf + p->top;
+    /* align size */
+    p->top += (size + (sizeof(long) - 1)) & ~(sizeof(long) - 1);
+    n->total += size;
+    NMEM_LEAVE;
+    return r;
+}
+
+int nmem_total(NMEM n)
+{
+    return n->total;
+}
+
+#if NMEM_DEBUG
+NMEM nmem_create_f(const char *file, int line)
+#else
+NMEM nmem_create(void)
+#endif
+{
+    NMEM r;
+#if NMEM_DEBUG
+    struct nmem_debug_info *debug_p;
+#endif
+    
+    NMEM_ENTER;
+    nmem_active_no++;
+    r = cfreelist;
+    if (r)
+       cfreelist = cfreelist->next;
+    else
+       r = (nmem_control *)xmalloc(sizeof(*r));
+    NMEM_LEAVE;
+
+#if NMEM_DEBUG
+    yaz_log (LOG_DEBUG, "%s:%d: nmem_create %d p=%p", file, line,
+                     nmem_active_no, r);
+#endif
+    r->blocks = 0;
+    r->total = 0;
+    r->next = 0;
+
+#if NMEM_DEBUG
+    for (debug_p = nmem_debug_list; debug_p; debug_p = debug_p->next)
+       if (debug_p->p == r)
+       {
+           yaz_log (LOG_FATAL, "multi used block in nmem");
+           abort ();
+       }
+    debug_p = xmalloc (sizeof(*debug_p));
+    strncpy (debug_p->file, file, sizeof(debug_p->file)-1);
+    debug_p->file[sizeof(debug_p->file)-1] = '\0';
+    debug_p->line = line;
+    debug_p->p = r;
+    debug_p->next = nmem_debug_list;
+    nmem_debug_list = debug_p;
+
+    nmem_print_list();
+#endif
+    return r;
+}
+
+#if NMEM_DEBUG
+void nmem_destroy_f(const char *file, int line, NMEM n)
+#else
+void nmem_destroy(NMEM n)
+#endif
+{
+#if NMEM_DEBUG
+    struct nmem_debug_info **debug_p;
+    int ok = 0;
+#endif
+    if (!n)
+       return;
+    
+#if NMEM_DEBUG
+    yaz_log (LOG_DEBUG, "%s:%d: nmem_destroy %d p=%p", file, line,
+                     nmem_active_no-1, n);
+    NMEM_ENTER;
+    for (debug_p = &nmem_debug_list; *debug_p; debug_p = &(*debug_p)->next)
+       if ((*debug_p)->p == n)
+       {
+           struct nmem_debug_info *debug_save = *debug_p;
+           *debug_p = (*debug_p)->next;
+           xfree (debug_save);
+           ok = 1;
+           break;
+       }
+    NMEM_LEAVE;
+    nmem_print_list();
+    if (!ok)
+    {
+       yaz_log (LOG_WARN, "%s:%d destroying unallocated nmem block p=%p",
+                file, line, n);
+       return;
+    }
+#endif
+    nmem_reset(n);
+    NMEM_ENTER;
+    nmem_active_no--;
+    n->next = cfreelist;
+    cfreelist = n;
+    NMEM_LEAVE;
+}
+
+void nmem_transfer (NMEM dst, NMEM src)
+{
+    nmem_block *t;
+    while ((t=src->blocks))
+    {
+       src->blocks = t->next;
+       t->next = dst->blocks;
+       dst->blocks = t;
+    }
+    dst->total += src->total;
+    src->total = 0;
+}
+
+void nmem_critical_enter (void)
+{
+    NMEM_ENTER;
+}
+
+void nmem_critical_leave (void)
+{
+    NMEM_LEAVE;
+}
+
+void nmem_init (void)
+{
+    if (++nmem_init_flag == 1)
+    {
+#ifdef WIN32
+       InitializeCriticalSection(&critical_section);
+#elif YAZ_GNU_THREADS
+       yaz_log (LOG_LOG, "pth_init");
+        pth_init ();
+#endif
+       nmem_active_no = 0;
+       freelist = NULL;
+       cfreelist = NULL;
+    }
+}
+
+void nmem_exit (void)
+{
+    if (--nmem_init_flag == 0)
+    {
+        oid_exit();
+       while (freelist)
+       {
+           struct nmem_block *fl = freelist;
+           freelist = freelist->next;
+           xfree (fl->buf);
+           xfree (fl);
+       }
+       while (cfreelist)
+       {
+           struct nmem_control *cfl = cfreelist;
+           cfreelist = cfreelist->next;
+           xfree (cfl);
+       }
+#ifdef WIN32
+       DeleteCriticalSection(&critical_section);
+#endif
+    }
+}
+
+
+#ifdef WIN32
+BOOL WINAPI DllMain (HINSTANCE hinstDLL,
+                    DWORD reason,
+                    LPVOID reserved)
+{
+    switch (reason)
+    {
+    case DLL_PROCESS_ATTACH:
+       nmem_init ();
+       break;
+    case DLL_PROCESS_DETACH:
+       nmem_exit ();
+    }
+    return TRUE;
+}
+#endif
+
+int yaz_errno(void)
+{
+    return errno;
+}
+
+void yaz_set_errno(int v)
+{
+    errno = v;
+}
+
+void yaz_strerror(char *buf, int max)
+{
+    char *cp;
+#ifdef WIN32
+    DWORD err = GetLastError();
+    if (err)
+    {
+        FormatMessage(
+               FORMAT_MESSAGE_FROM_SYSTEM,
+               NULL,
+               err,
+               MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), /* Default lang */
+               (LPTSTR) buf,
+               max-1,
+               NULL);
+    }
+    else
+       *buf = '\0';
+#else
+/* UNIX */
+#if HAVE_STRERROR_R
+#if YAZ_POSIX_THREADS
+    *buf = '\0';
+    strerror_r(errno, buf, max);
+    /* if buffer is unset - use strerror anyway (GLIBC bug) */
+    if (*buf == '\0')
+        strcpy(buf, strerror(yaz_errno()));
+#else
+    strcpy(buf, strerror(yaz_errno()));
+#endif
+#else
+    strcpy(buf, strerror(yaz_errno()));
+#endif
+/* UNIX */
+#endif
+    if ((cp=strrchr(buf, '\n')))
+       *cp = '\0';
+    if ((cp=strrchr(buf, '\r')))
+       *cp = '\0';
+}
diff --git a/src/nmemsdup.c b/src/nmemsdup.c
new file mode 100644 (file)
index 0000000..69343f4
--- /dev/null
@@ -0,0 +1,34 @@
+/*
+ * Copyright (c) 1997-2003, Index Data.
+ * See the file LICENSE for details.
+ *
+ * $Id: nmemsdup.c,v 1.1 2003-10-27 12:21:33 adam Exp $
+ */
+#if HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include <string.h>
+#include <yaz/nmem.h>
+
+char *nmem_strdup (NMEM mem, const char *src)
+{
+    char *dst = (char *)nmem_malloc (mem, strlen(src)+1);
+    strcpy (dst, src);
+    return dst;
+}
+
+char *nmem_strdupn (NMEM mem, const char *src, size_t n)
+{
+    char *dst = (char *)nmem_malloc (mem, n+1);
+    memcpy (dst, src, n);
+    dst[n] = '\0';
+    return dst;
+}
+
+int *nmem_intdup(NMEM mem, int v)
+{
+    int *dst = (int*) nmem_malloc (mem, sizeof(int));
+    *dst = v;
+    return dst;
+}
diff --git a/src/oclcui.asn b/src/oclcui.asn
new file mode 100644 (file)
index 0000000..33b4c23
--- /dev/null
@@ -0,0 +1,33 @@
+UserInfoFormat-oclcUserInformation
+{Z39-50-userInfoFormat OCLCUserInformation (7)} DEFINITIONS ::=
+BEGIN
+
+-- $Id: oclcui.asn,v 1.1 2003-10-27 12:21:33 adam Exp $
+--
+-- This format is returned from the server at
+--     fsz3950test.oclc.org:210
+-- I found the definition at
+--     http://www.oclc.org/firstsearch/documentation/z3950/config_guide.htm
+--
+-- I have added OPTIONAL modifiers to the `dblist' and and `code'
+-- elements because they appear to be admitted from the APDU returned
+-- as an Init diagnostic from fsz3950test.oclc.org:210.  Adam further
+-- removed the SEQUENCE structure, changed failReason to a BOOLEAN and
+-- deleted diagnosticSetId altogether, to make the ASN.1 conform to
+-- what's actually returned on the wire.  Finally, I removed the
+-- OPTIONAL on failReason on the advice of OCLC's Keith Neibarger
+-- <neibarge@oclc.org> (although he'd also advised me, wrongly, that I
+-- could remove the OPTIONAL on dblist).
+
+OCLC-UserInformation ::= SEQUENCE {
+    motd        [1] IMPLICIT VisibleString OPTIONAL,
+    dblist      SEQUENCE OF DBName OPTIONAL,
+    failReason  [3] IMPLICIT BOOLEAN OPTIONAL,
+    code        [1] IMPLICIT INTEGER OPTIONAL,
+    text        [2] IMPLICIT VisibleString OPTIONAL
+}
+
+DBName ::= [2] IMPLICIT VisibleString
+
+END
+
diff --git a/src/odr-priv.h b/src/odr-priv.h
new file mode 100644 (file)
index 0000000..6aef58b
--- /dev/null
@@ -0,0 +1,95 @@
+/*
+ * Copyright (c) 1995-2003, Index Data.
+ *
+ * Permission to use, copy, modify, distribute, and sell this software and
+ * its documentation, in whole or in part, for any purpose, is hereby granted,
+ * provided that:
+ *
+ * 1. This copyright and permission notice appear in all copies of the
+ * software and its documentation. Notices of copyright or attribution
+ * which appear at the beginning of any file must remain unchanged.
+ *
+ * 2. The name of Index Data or the individual authors may not be used to
+ * endorse or promote products derived from this software without specific
+ * prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED "AS IS" AND WITHOUT WARRANTY OF ANY KIND,
+ * EXPRESS, IMPLIED, OR OTHERWISE, INCLUDING WITHOUT LIMITATION, ANY
+ * WARRANTY OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.
+ * IN NO EVENT SHALL INDEX DATA BE LIABLE FOR ANY SPECIAL, INCIDENTAL,
+ * INDIRECT OR CONSEQUENTIAL DAMAGES OF ANY KIND, OR ANY DAMAGES
+ * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER OR
+ * NOT ADVISED OF THE POSSIBILITY OF DAMAGE, AND ON ANY THEORY OF
+ * LIABILITY, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE
+ * OF THIS SOFTWARE.
+ *
+ * $Id: odr-priv.h,v 1.1 2003-10-27 12:21:33 adam Exp $
+ */
+
+#ifndef ODR_PRIV_H
+
+#define ODR_PRIV_H
+
+#include <yaz/odr.h>
+#include <yaz/yaz-util.h>
+
+struct Odr_ber_tag {      /* used to be statics in ber_tag... */
+    int lclass;
+    int ltag;
+    int br;
+    int lcons;
+};
+
+#define odr_max(o) ((o)->size - ((o)->bp - (o)->buf))
+#define odr_offset(o) ((o)->bp - (o)->buf)
+
+struct Odr_private {
+    /* stack for constructed types */
+#define ODR_MAX_STACK 50
+    int stackp;          /* top of stack (-1 == initial state) */
+    odr_constack stack[ODR_MAX_STACK];
+
+    struct Odr_ber_tag odr_ber_tag;
+    yaz_iconv_t iconv_handle;
+    int error_id;
+    char element[80];
+};
+
+/* Private macro.
+ * write a single character at the current position - grow buffer if
+ * necessary.
+ * (no, we're not usually this anal about our macros, but this baby is
+ *  next to unreadable without some indentation  :)
+ */
+#define odr_putc(o, c) \
+( \
+    ( \
+        (o)->pos < (o)->size ? \
+        ( \
+            (o)->buf[(o)->pos++] = (c), \
+            0 \
+        ) : \
+        ( \
+            odr_grow_block((o), 1) == 0 ? \
+            ( \
+                (o)->buf[(o)->pos++] = (c), \
+                0 \
+            ) : \
+            ( \
+                (o)->error = OSPACE, \
+                -1 \
+            ) \
+        ) \
+    ) == 0 ? \
+    ( \
+        (o)->pos > (o)->top ? \
+        ( \
+            (o)->top = (o)->pos, \
+            0 \
+        ) : \
+        0 \
+    ) : \
+        -1 \
+)
+
+#endif
diff --git a/src/odr.c b/src/odr.c
new file mode 100644 (file)
index 0000000..acc7b19
--- /dev/null
+++ b/src/odr.c
@@ -0,0 +1,183 @@
+/*
+ * Copyright (c) 1995-2003, Index Data
+ * See the file LICENSE for details.
+ *
+ * $Id: odr.c,v 1.1 2003-10-27 12:21:33 adam Exp $
+ *
+ */
+#if HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include <stdio.h>
+#include <stdlib.h>
+
+#include <yaz/xmalloc.h>
+#include "odr-priv.h"
+
+Odr_null *ODR_NULLVAL = (Odr_null *) "NULL";  /* the presence of a null value */
+
+Odr_null *odr_nullval (void)
+{
+    return ODR_NULLVAL;
+}
+
+char *odr_errlist[] =
+{
+    "No (unknown) error",
+    "Memory allocation failed",
+    "System error",
+    "No space in buffer",
+    "Required data element missing",
+    "Unexpected tag",
+    "Other error",
+    "Protocol error",
+    "Malformed data",
+    "Stack overflow",
+    "Length of constructed type different from sum of members",
+    "Overflow writing definite length of constructed type",
+    "Bad HTTP Request"
+};
+
+char *odr_errmsg(int n)
+{
+    return odr_errlist[n];
+}
+
+void odr_perror(ODR o, const char *message)
+{
+    const char *e = odr_getelement(o);
+    int err, x;
+
+    err =  odr_geterrorx(o, &x);
+    fprintf(stderr, "%s: %s (code %d:%d)", message, odr_errlist[err], err, x);
+    if (e && *e)
+        fprintf (stderr, " element %s", e);
+    fprintf(stderr, "\n");
+}
+
+int odr_geterror(ODR o)
+{
+    return o->error;
+}
+
+int odr_geterrorx(ODR o, int *x)
+{
+    if (x)
+        *x = o->op->error_id;
+    return o->error;
+}
+
+char *odr_getelement(ODR o)
+{
+    return o->op->element;
+}
+
+void odr_seterror(ODR o, int error, int id)
+{
+    o->error = error;
+    o->op->error_id = id;
+    o->op->element[0] = '\0';
+}
+
+void odr_setelement(ODR o, const char *element)
+{
+    if (element)
+    {
+        strncpy(o->op->element, element, sizeof(o->op->element)-1);
+        o->op->element[sizeof(o->op->element)-1] = '\0';
+    }
+}
+
+void odr_setprint(ODR o, FILE *file)
+{
+    o->print = file;
+}
+
+int odr_set_charset(ODR o, const char *to, const char *from)
+{
+    if (o->op->iconv_handle)
+        yaz_iconv_close (o->op->iconv_handle);
+    o->op->iconv_handle = 0;
+    if (to && from)
+    {
+        o->op->iconv_handle = yaz_iconv_open (to, from);
+        if (o->op->iconv_handle == 0)
+            return -1;
+    }
+    return 0;
+}
+
+#include <yaz/log.h>
+
+ODR odr_createmem(int direction)
+{
+    ODR r;
+
+    if (!(r = (ODR)xmalloc(sizeof(*r))))
+        return 0;
+    r->direction = direction;
+    r->print = stderr;
+    r->buf = 0;
+    r->size = r->pos = r->top = 0;
+    r->can_grow = 1;
+    r->mem = nmem_create();
+    r->enable_bias = 1;
+    r->op = (struct Odr_private *) xmalloc (sizeof(*r->op));
+    r->op->odr_ber_tag.lclass = -1;
+    r->op->iconv_handle = 0;
+    odr_reset(r);
+    yaz_log (LOG_DEBUG, "odr_createmem dir=%d o=%p", direction, r);
+    return r;
+}
+
+void odr_reset(ODR o)
+{
+    odr_seterror(o, ONONE, 0);
+    o->bp = o->buf;
+    odr_seek(o, ODR_S_SET, 0);
+    o->top = 0;
+    o->t_class = -1;
+    o->t_tag = -1;
+    o->indent = 0;
+    o->op->stackp = -1;
+    nmem_reset(o->mem);
+    o->choice_bias = -1;
+    o->lenlen = 1;
+    if (o->op->iconv_handle != 0)
+        yaz_iconv(o->op->iconv_handle, 0, 0, 0, 0);
+    yaz_log (LOG_DEBUG, "odr_reset o=%p", o);
+}
+    
+void odr_destroy(ODR o)
+{
+    nmem_destroy(o->mem);
+    if (o->buf && o->can_grow)
+       xfree(o->buf);
+    if (o->print && o->print != stderr)
+        fclose(o->print);
+    if (o->op->iconv_handle != 0)
+        yaz_iconv_close (o->op->iconv_handle);
+    xfree(o->op);
+    xfree(o);
+    yaz_log (LOG_DEBUG, "odr_destroy o=%p", o);
+}
+
+void odr_setbuf(ODR o, char *buf, int len, int can_grow)
+{
+    o->bp = (unsigned char *) buf;
+
+    o->buf = (unsigned char *) buf;
+    o->can_grow = can_grow;
+    o->top = o->pos = 0;
+    o->size = len;
+}
+
+char *odr_getbuf(ODR o, int *len, int *size)
+{
+    *len = o->top;
+    if (size)
+        *size = o->size;
+    return (char*) o->buf;
+}
+
diff --git a/src/odr_any.c b/src/odr_any.c
new file mode 100644 (file)
index 0000000..ac1a4f5
--- /dev/null
@@ -0,0 +1,36 @@
+/*
+ * Copyright (c) 1995-2003, Index Data
+ * See the file LICENSE for details.
+ * Sebastian Hammer, Adam Dickmeiss
+ *
+ * $Id: odr_any.c,v 1.1 2003-10-27 12:21:33 adam Exp $
+ */
+#if HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include "odr-priv.h"
+
+/*
+ * This is a catch-all type. It stuffs a random ostring (assumed to be properly
+ * encoded) into the stream, or reads a full data element. Implicit tagging
+ * does not work, and neither does the optional flag, unless the element
+ * is the last in a sequence.
+ */
+int odr_any(ODR o, Odr_any **p, int opt, const char *name)
+{
+    if (o->error)
+       return 0;
+    if (o->direction == ODR_PRINT)
+    {
+       odr_prname(o, name);
+       fprintf(o->print, "ANY (len=%d)\n", (*p)->len);
+       return 1;
+    }
+    if (o->direction == ODR_DECODE)
+       *p = (Odr_oct *)odr_malloc(o, sizeof(**p));
+    if (ber_any(o, p))
+       return 1;
+    *p = 0;
+    return odr_missing(o, opt, name);
+}
diff --git a/src/odr_bit.c b/src/odr_bit.c
new file mode 100644 (file)
index 0000000..05ef420
--- /dev/null
@@ -0,0 +1,54 @@
+/*
+ * Copyright (c) 1995-2003, Index Data
+ * See the file LICENSE for details.
+ * Sebastian Hammer, Adam Dickmeiss
+ *
+ * $Id: odr_bit.c,v 1.1 2003-10-27 12:21:33 adam Exp $
+ */
+#if HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include <string.h>
+#include "odr-priv.h"
+
+/*
+ * Top level bitstring string en/decoder.
+ * Returns 1 on success, 0 on error.
+ */
+int odr_bitstring(ODR o, Odr_bitmask **p, int opt, const char *name)
+{
+    int res, cons = 0;
+
+    if (o->error)
+       return 0;
+    if (o->t_class < 0)
+    {
+       o->t_class = ODR_UNIVERSAL;
+       o->t_tag = ODR_BITSTRING;
+    }
+    if ((res = ber_tag(o, p, o->t_class, o->t_tag, &cons, opt, name)) < 0)
+       return 0;
+    if (!res)
+       return odr_missing(o, opt, name);
+    if (o->direction == ODR_PRINT)
+    {
+       odr_prname(o, name);
+       fprintf(o->print, "BITSTRING(len=%d)\n",(*p)->top + 1);
+       return 1;
+    }
+    if (o->direction == ODR_DECODE)
+    {
+       *p = (Odr_bitmask *)odr_malloc(o, sizeof(Odr_bitmask));
+       memset((*p)->bits, 0, ODR_BITMASK_SIZE);
+       (*p)->top = -1;
+    }
+#if 0
+    /* ignoring the cons helps with at least one target. 
+     * http://bugzilla.indexdata.dk/cgi-bin/bugzilla/show_bug.cgi?id=24
+     */
+    return ber_bitstring(o, *p, 0);
+#else
+    return ber_bitstring(o, *p, cons);
+#endif
+}
diff --git a/src/odr_bool.c b/src/odr_bool.c
new file mode 100644 (file)
index 0000000..36c858b
--- /dev/null
@@ -0,0 +1,45 @@
+/*
+ * Copyright (c) 1995-2003, Index Data
+ * See the file LICENSE for details.
+ * Sebastian Hammer, Adam Dickmeiss
+ *
+ * $Id: odr_bool.c,v 1.1 2003-10-27 12:21:33 adam Exp $
+ */
+#if HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include <stdio.h>
+#include "odr-priv.h"
+
+/*
+ * Top level boolean en/decoder.
+ * Returns 1 on success, 0 on error.
+ */
+int odr_bool(ODR o, int **p, int opt, const char *name)
+{
+    int res, cons = 0;
+
+    if (o->error)
+       return 0;
+    if (o->t_class < 0)
+    {
+       o->t_class = ODR_UNIVERSAL;
+       o->t_tag = ODR_BOOLEAN;
+    }
+    if ((res = ber_tag(o, p, o->t_class, o->t_tag, &cons, opt, name)) < 0)
+       return 0;
+    if (!res)
+       return odr_missing(o, opt, name);
+    if (o->direction == ODR_PRINT)
+    {
+       odr_prname(o, name);
+       fprintf(o->print, "%s\n", (**p ? "TRUE" : "FALSE"));
+       return 1;
+    }
+    if (cons)
+       return 0;
+    if (o->direction == ODR_DECODE)
+       *p = (int *)odr_malloc(o, sizeof(int));
+    return ber_boolean(o, *p);
+}
diff --git a/src/odr_choice.c b/src/odr_choice.c
new file mode 100644 (file)
index 0000000..53b6516
--- /dev/null
@@ -0,0 +1,96 @@
+/*
+ * Copyright (c) 1995-2003, Index Data
+ * See the file LICENSE for details.
+ * Sebastian Hammer, Adam Dickmeiss
+ *
+ * $Id: odr_choice.c,v 1.1 2003-10-27 12:21:33 adam Exp $
+ */
+#if HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include "odr-priv.h"
+
+int odr_choice(ODR o, Odr_arm arm[], void *p, void *whichp,
+              const char *name)
+{
+    int i, cl = -1, tg, cn, *which = (int *)whichp, bias = o->choice_bias;
+
+    if (o->error)
+       return 0;
+    if (o->direction != ODR_DECODE && !*(char**)p)
+       return 0;
+
+    if (o->direction == ODR_DECODE)
+    {
+        *which = -1;
+        *(char**)p = 0;
+    }
+    o->choice_bias = -1;
+
+    if (o->direction == ODR_PRINT)
+    {
+       if (name)
+       {
+           odr_prname(o, name);
+           fprintf (o->print, "choice\n");
+       }
+    }
+    for (i = 0; arm[i].fun; i++)
+    {
+       if (o->direction == ODR_DECODE)
+       {
+           if (bias >= 0 && bias != arm[i].which)
+               continue;
+           *which = arm[i].which;
+       }
+       else if (*which != arm[i].which)
+           continue;
+
+       if (arm[i].tagmode != ODR_NONE)
+       {
+           if (o->direction == ODR_DECODE && cl < 0)
+           {
+               if (o->op->stackp > -1 && !odr_constructed_more(o))
+                   return 0;
+               if (ber_dectag(o->bp, &cl, &tg, &cn, odr_max(o)) <= 0)
+                   return 0;
+           }
+           else if (o->direction != ODR_DECODE)
+           {
+               cl = arm[i].zclass;
+               tg = arm[i].tag;
+           }
+           if (tg == arm[i].tag && cl == arm[i].zclass)
+           {
+               if (arm[i].tagmode == ODR_IMPLICIT)
+               {
+                   odr_implicit_settag(o, cl, tg);
+                   return (*arm[i].fun)(o, (char **)p, 0, arm[i].name);
+               }
+               /* explicit */
+               if (!odr_constructed_begin(o, p, cl, tg, 0))
+                   return 0;
+               return (*arm[i].fun)(o, (char **)p, 0, arm[i].name) &&
+                   odr_constructed_end(o);
+           }
+       }
+       else  /* no tagging. Have to poll type */
+       {
+           if ((*arm[i].fun)(o, (char **)p, 1, arm[i].name) && *(char**)p)
+               return 1;
+       }
+    }
+    return 0;
+}
+
+void odr_choice_bias(ODR o, int what)
+{
+    if (o->enable_bias)
+        o->choice_bias = what;
+}
+
+void odr_choice_enable_bias (ODR o, int mode)
+{
+    o->enable_bias = mode;
+}
diff --git a/src/odr_cons.c b/src/odr_cons.c
new file mode 100644 (file)
index 0000000..7f455dd
--- /dev/null
@@ -0,0 +1,180 @@
+/*
+ * Copyright (c) 1995-2003, Index Data
+ * See the file LICENSE for details.
+ *
+ * $Id: odr_cons.c,v 1.1 2003-10-27 12:21:33 adam Exp $
+ *
+ */
+#if HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include "odr-priv.h"
+
+void odr_setlenlen(ODR o, int len)
+{
+    o->lenlen = len;
+}
+
+int odr_constructed_begin(ODR o, void *p, int zclass, int tag,
+                         const char *name)
+{
+    int res;
+    int cons = 1;
+    int lenlen = o->lenlen;
+
+    if (o->error)
+       return 0;
+    o->lenlen = 1; /* reset lenlen */
+    if (o->t_class < 0)
+    {
+       o->t_class = zclass;
+       o->t_tag = tag;
+    }
+    if ((res = ber_tag(o, p, o->t_class, o->t_tag, &cons, 1, name)) < 0)
+       return 0;
+    if (!res || !cons)
+       return 0;
+
+    if (o->op->stackp == ODR_MAX_STACK - 1)
+    {
+        odr_seterror(o, OSTACK, 30);
+       return 0;
+    }
+    o->op->stack[++(o->op->stackp)].lenb = o->bp;
+    o->op->stack[o->op->stackp].len_offset = odr_tell(o);
+#ifdef ODR_DEBUG
+    fprintf(stderr, "[cons_begin(%d)]", o->op->stackp);
+#endif
+    if (o->direction == ODR_ENCODE)
+    {
+       static unsigned char dummy[sizeof(int)+1];
+
+       o->op->stack[o->op->stackp].lenlen = lenlen;
+
+       if (odr_write(o, dummy, lenlen) < 0)  /* dummy */
+        {
+            --(o->op->stackp);
+           return 0;
+        }
+    }
+    else if (o->direction == ODR_DECODE)
+    {
+       if ((res = ber_declen(o->bp, &o->op->stack[o->op->stackp].len,
+                              odr_max(o))) < 0)
+        {
+            odr_seterror(o, OOTHER, 31);
+            --(o->op->stackp);
+           return 0;
+        }
+       o->op->stack[o->op->stackp].lenlen = res;
+       o->bp += res;
+        if (o->op->stack[o->op->stackp].len > odr_max(o))
+        {
+            odr_seterror(o, OOTHER, 32);
+            --(o->op->stackp);
+           return 0;
+        }
+    }
+    else if (o->direction == ODR_PRINT)
+    {
+       odr_prname(o, name);
+       fprintf(o->print, "{\n");
+       o->indent++;
+    }
+    else
+    {
+        odr_seterror(o, OOTHER, 33);
+        --(o->op->stackp);
+       return 0;
+    }
+    o->op->stack[o->op->stackp].base = o->bp;
+    o->op->stack[o->op->stackp].base_offset = odr_tell(o);
+    return 1;
+}
+
+int odr_constructed_more(ODR o)
+{
+    if (o->error)
+       return 0;
+    if (o->op->stackp < 0)
+       return 0;
+    if (o->op->stack[o->op->stackp].len >= 0)
+       return o->bp - o->op->stack[o->op->stackp].base < o->op->stack[o->op->stackp].len;
+    else
+       return (!(*o->bp == 0 && *(o->bp + 1) == 0));
+}
+
+int odr_constructed_end(ODR o)
+{
+    int res;
+    int pos;
+
+    if (o->error)
+       return 0;
+    if (o->op->stackp < 0)
+    {
+        odr_seterror(o, OOTHER, 34);
+       return 0;
+    }
+    switch (o->direction)
+    {
+    case ODR_DECODE:
+        if (o->op->stack[o->op->stackp].len < 0)
+        {
+            if (*o->bp++ == 0 && *(o->bp++) == 0)
+            {
+                   o->op->stackp--;
+                   return 1;
+            }
+            else
+            {
+                odr_seterror(o, OOTHER, 35);
+                return 0;
+            }
+        }
+        else if (o->bp - o->op->stack[o->op->stackp].base !=
+                 o->op->stack[o->op->stackp].len)
+        {
+            odr_seterror(o, OCONLEN, 36);
+            return 0;
+        }
+        o->op->stackp--;
+        return 1;
+    case ODR_ENCODE:
+        pos = odr_tell(o);
+        odr_seek(o, ODR_S_SET, o->op->stack[o->op->stackp].len_offset);
+        if ((res = ber_enclen(o, pos - o->op->stack[o->op->stackp].base_offset,
+                              o->op->stack[o->op->stackp].lenlen, 1)) < 0)
+        {
+            odr_seterror(o, OLENOV, 37);
+            return 0;
+        }
+        odr_seek(o, ODR_S_END, 0);
+        if (res == 0)   /* indefinite encoding */
+        {
+#ifdef ODR_DEBUG
+            fprintf(stderr, "[cons_end(%d): indefinite]", o->op->stackp);
+#endif
+            if (odr_putc(o, 0) < 0 || odr_putc(o, 0) < 0)
+                return 0;
+        }
+#ifdef ODR_DEBUG
+        else
+        {
+            fprintf(stderr, "[cons_end(%d): definite]", o->op->stackp);
+        }
+#endif
+        o->op->stackp--;
+        return 1;
+    case ODR_PRINT:
+        o->op->stackp--;
+        o->indent--;
+        odr_prname(o, 0);
+        fprintf(o->print, "}\n");
+        return 1;
+    default:
+        odr_seterror(o, OOTHER, 38);
+        return 0;
+    }
+}
diff --git a/src/odr_enum.c b/src/odr_enum.c
new file mode 100644 (file)
index 0000000..45710f6
--- /dev/null
@@ -0,0 +1,47 @@
+/*
+ * Copyright (c) 1995-2003, Index Data
+ * See the file LICENSE for details.
+ * Sebastian Hammer, Adam Dickmeiss
+ *
+ * $Id: odr_enum.c,v 1.1 2003-10-27 12:21:33 adam Exp $
+ */
+#if HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include "odr-priv.h"
+
+/*
+ * Top level enum en/decoder.
+ * Returns 1 on success, 0 on error.
+ */
+int odr_enum(ODR o, int **p, int opt, const char *name)
+{
+    int res, cons = 0;
+
+    if (o->error)
+        return 0;
+    if (o->t_class < 0)
+    {
+        o->t_class = ODR_UNIVERSAL;
+        o->t_tag = ODR_ENUM;
+    }
+    if ((res = ber_tag(o, p, o->t_class, o->t_tag, &cons, opt, name)) < 0)
+        return 0;
+    if (!res)
+        return odr_missing(o, opt, name);
+    if (o->direction == ODR_PRINT)
+    {
+       odr_prname(o, name);
+        fprintf(o->print, "%d\n", **p);
+        return 1;
+    }
+    if (cons)
+    {
+        odr_seterror(o, OPROTO, 54);
+        return 0;
+    }
+    if (o->direction == ODR_DECODE)
+        *p = (int *)odr_malloc(o, sizeof(int));
+    return ber_integer(o, *p);
+}
diff --git a/src/odr_int.c b/src/odr_int.c
new file mode 100644 (file)
index 0000000..33e86fb
--- /dev/null
@@ -0,0 +1,47 @@
+/*
+ * Copyright (c) 1995-2003, Index Data
+ * See the file LICENSE for details.
+ * Sebastian Hammer, Adam Dickmeiss
+ *
+ * $Id: odr_int.c,v 1.1 2003-10-27 12:21:33 adam Exp $
+ */
+#if HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include "odr-priv.h"
+
+/*
+ * Top level integer en/decoder.
+ * Returns 1 on success, 0 on error.
+ */
+int odr_integer(ODR o, int **p, int opt, const char *name)
+{
+    int res, cons = 0;
+
+    if (o->error)
+        return 0;
+    if (o->t_class < 0)
+    {
+        o->t_class = ODR_UNIVERSAL;
+        o->t_tag = ODR_INTEGER;
+    }
+    if ((res = ber_tag(o, p, o->t_class, o->t_tag, &cons, opt, name)) < 0)
+        return 0;
+    if (!res)
+        return odr_missing(o, opt, name);
+    if (o->direction == ODR_PRINT)
+    {
+       odr_prname(o, name);
+        fprintf(o->print, "%d\n", **p);
+        return 1;
+    }
+    if (cons)
+    {
+        odr_seterror(o, OPROTO, 1);
+        return 0;
+    }
+    if (o->direction == ODR_DECODE)
+        *p = (int *)odr_malloc(o, sizeof(int));
+    return ber_integer(o, *p);
+}
diff --git a/src/odr_mem.c b/src/odr_mem.c
new file mode 100644 (file)
index 0000000..a18b372
--- /dev/null
@@ -0,0 +1,109 @@
+/*
+ * Copyright (c) 1995-2003, Index Data
+ * See the file LICENSE for details.
+ *
+ * $Id: odr_mem.c,v 1.1 2003-10-27 12:21:33 adam Exp $
+ */
+#if HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include <stdlib.h>
+#include "odr-priv.h"
+#include <yaz/xmalloc.h>
+
+/* ------------------------ NIBBLE MEMORY ---------------------- */
+
+/*
+ * Extract the memory control block from o.
+ */
+NMEM odr_extract_mem(ODR o)
+{
+    NMEM r = o->mem;
+
+    o->mem = 0;
+    return r;
+}
+
+void *odr_malloc(ODR o, int size)
+{
+    if (o && !o->mem)
+       o->mem = nmem_create();
+    return nmem_malloc(o ? o->mem : 0, size);
+}
+
+char *odr_strdup(ODR o, const char *str)
+{
+    return nmem_strdup(o->mem, str);
+}
+
+char *odr_strdupn(ODR o, const char *str, size_t n)
+{
+    return nmem_strdupn(o->mem, str, n);
+}
+
+int *odr_intdup(ODR o, int v)
+{
+    return nmem_intdup(o->mem, v);
+}
+
+int odr_total(ODR o)
+{
+    return o->mem ? nmem_total(o->mem) : 0;
+}
+
+/* ---------- memory management for data encoding ----------*/
+
+
+int odr_grow_block(ODR b, int min_bytes)
+{
+    int togrow;
+
+    if (!b->can_grow)
+       return -1;
+    if (!b->size)
+       togrow = 1024;
+    else
+       togrow = b->size;
+    if (togrow < min_bytes)
+       togrow = min_bytes;
+    if (b->size && !(b->buf =
+                    (unsigned char *) xrealloc(b->buf, b->size += togrow)))
+       abort();
+    else if (!b->size && !(b->buf = (unsigned char *)
+                          xmalloc(b->size = togrow)))
+       abort();
+#ifdef ODR_DEBUG
+    fprintf(stderr, "New size for encode_buffer: %d\n", b->size);
+#endif
+    return 0;
+}
+
+int odr_write(ODR o, unsigned char *buf, int bytes)
+{
+    if (o->pos + bytes >= o->size && odr_grow_block(o, bytes))
+    {
+        odr_seterror(o, OSPACE, 40);
+       return -1;
+    }
+    memcpy(o->buf + o->pos, buf, bytes);
+    o->pos += bytes;
+    if (o->pos > o->top)
+       o->top = o->pos;
+    return 0;
+}
+
+int odr_seek(ODR o, int whence, int offset)
+{
+    if (whence == ODR_S_CUR)
+       offset += o->pos;
+    else if (whence == ODR_S_END)
+       offset += o->top;
+    if (offset > o->size && odr_grow_block(o, offset - o->size))
+    {
+        odr_seterror(o, OSPACE, 41);
+       return -1;
+    }
+    o->pos = offset;
+    return 0;
+}
diff --git a/src/odr_null.c b/src/odr_null.c
new file mode 100644 (file)
index 0000000..cc33ff7
--- /dev/null
@@ -0,0 +1,51 @@
+/*
+ * Copyright (c) 1995-2003, Index Data
+ * See the file LICENSE for details.
+ * Sebastian Hammer, Adam Dickmeiss
+ *
+ * $Id: odr_null.c,v 1.1 2003-10-27 12:21:33 adam Exp $
+ */
+#if HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include "odr-priv.h"
+
+/*
+ * Top level null en/decoder.
+ * Returns 1 on success, 0 on error.
+ */
+int odr_null(ODR o, Odr_null **p, int opt, const char *name)
+{
+    int res, cons = 0;
+
+    if (o->error)
+       return 0;
+    if (o->t_class < 0)
+    {
+       o->t_class = ODR_UNIVERSAL;
+       o->t_tag = ODR_NULL;
+    }
+    if ((res = ber_tag(o, p, o->t_class, o->t_tag, &cons, opt, name)) < 0)
+       return 0;
+    if (!res)
+       return odr_missing(o, opt, name);
+    if (o->direction == ODR_PRINT)
+    {
+       odr_prname(o, name);
+       fprintf(o->print, "NULL\n");
+       return 1;
+    }
+    if (cons)
+    {
+#ifdef ODR_STRICT_NULL
+        odr_seterror(OPROTO, 42);
+       return 0;
+#else
+       fprintf(stderr, "odr: Warning: Bad NULL\n");
+#endif
+    }
+    if (o->direction == ODR_DECODE)
+       *p = odr_nullval();
+    return ber_null(o);
+}
diff --git a/src/odr_oct.c b/src/odr_oct.c
new file mode 100644 (file)
index 0000000..f8e2682
--- /dev/null
@@ -0,0 +1,206 @@
+/*
+ * Copyright (c) 1995-2003, Index Data
+ * See the file LICENSE for details.
+ * Sebastian Hammer, Adam Dickmeiss
+ *
+ * $Id: odr_oct.c,v 1.1 2003-10-27 12:21:33 adam Exp $
+ */
+#if HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include <yaz/log.h>
+#include "odr-priv.h"
+
+/*
+ * Top level octet string en/decoder.
+ * Returns 1 on success, 0 on error.
+ */
+int odr_octetstring(ODR o, Odr_oct **p, int opt, const char *name)
+{
+    int res, cons = 0;
+
+    if (o->error)
+       return 0;
+    if (o->t_class < 0)
+    {
+       o->t_class = ODR_UNIVERSAL;
+       o->t_tag = ODR_OCTETSTRING;
+    }
+    if ((res = ber_tag(o, p, o->t_class, o->t_tag, &cons, opt, name)) < 0)
+       return 0;
+    if (!res)
+       return odr_missing(o, opt, name);
+    if (o->direction == ODR_PRINT)
+    {
+        int i;
+       odr_prname(o, name);
+       fprintf(o->print, "OCTETSTRING(len=%d)", (*p)->len);
+        for (i = 0; i<(*p)->len; i++)
+        {
+           if (i < 5 || i > ((*p)->len - 4))
+            {
+                fprintf (o->print, " %02X", (*p)->buf[i]);
+            }
+            else if (i == 5)
+                fprintf (o->print, " .. ");
+        }
+        fprintf(o->print, "\n");
+       return 1;
+    }
+    if (o->direction == ODR_DECODE)
+    {
+       *p = (Odr_oct *)odr_malloc(o, sizeof(Odr_oct));
+       (*p)->size= 0;
+       (*p)->len = 0;
+       (*p)->buf = 0;
+    }
+    if (ber_octetstring(o, *p, cons))
+       return 1;
+    odr_seterror(o, OOTHER, 43);
+    return 0;
+}
+
+/*
+ * Friendlier interface to octetstring.
+ */
+int odr_cstring(ODR o, char **p, int opt, const char *name)
+{
+    int cons = 0, res;
+    Odr_oct *t;
+
+    if (o->error)
+       return 0;
+    if (o->t_class < 0)
+    {
+       o->t_class = ODR_UNIVERSAL;
+       o->t_tag = ODR_OCTETSTRING;
+    }
+    if ((res = ber_tag(o, p, o->t_class, o->t_tag, &cons, opt, name)) < 0)
+       return 0;
+    if (!res)
+       return odr_missing(o, opt, name);
+    if (o->direction == ODR_PRINT)
+    {
+       odr_prname(o, name);
+       fprintf(o->print, "'%s'\n", *p);
+       return 1;
+    }
+    t = (Odr_oct *)odr_malloc(o, sizeof(Odr_oct)); /* wrapper for octstring */
+    if (o->direction == ODR_ENCODE)
+    {
+       t->buf = (unsigned char *) *p;
+       t->size = t->len = strlen(*p);
+    }
+    else
+    {
+       t->size= 0;
+       t->len = 0;
+       t->buf = 0;
+    }
+    if (!ber_octetstring(o, t, cons))
+       return 0;
+    if (o->direction == ODR_DECODE)
+    {
+       *p = (char *) t->buf;
+       *(*p + t->len) = '\0';  /* ber_octs reserves space for this */
+    }
+    return 1;
+}
+
+/*
+ * iconv interface to octetstring.
+ */
+int odr_iconv_string(ODR o, char **p, int opt, const char *name)
+{
+    int cons = 0, res;
+    Odr_oct *t;
+
+    if (o->error)
+       return 0;
+    if (o->t_class < 0)
+    {
+       o->t_class = ODR_UNIVERSAL;
+       o->t_tag = ODR_OCTETSTRING;
+    }
+    if ((res = ber_tag(o, p, o->t_class, o->t_tag, &cons, opt, name)) < 0)
+       return 0;
+    if (!res)
+       return odr_missing(o, opt, name);
+    if (o->direction == ODR_PRINT)
+    {
+       odr_prname(o, name);
+       fprintf(o->print, "'%s'\n", *p);
+       return 1;
+    }
+    t = (Odr_oct *)odr_malloc(o, sizeof(Odr_oct)); /* wrapper for octstring */
+    if (o->direction == ODR_ENCODE)
+    {
+        t->buf = 0;
+
+        if (o->op->iconv_handle != 0)
+        {
+            size_t inleft = strlen(*p);
+            char *inbuf = *p;
+            size_t outleft = 4 * inleft + 2;
+            char *outbuf = (char *) odr_malloc (o, outleft);
+            size_t ret;
+            
+            t->buf = (unsigned char *) outbuf;
+            
+            ret = yaz_iconv (o->op->iconv_handle, &inbuf, &inleft,
+                             &outbuf, &outleft);
+            if (ret == (size_t)(-1))
+            {
+                odr_seterror(o, ODATA, 44);
+                return 0;
+            }
+            t->size = t->len = outbuf - (char*) t->buf;
+        }
+        if (!t->buf)
+        {
+            t->buf = (unsigned char *) *p;
+            t->size = t->len = strlen(*p);
+        }
+    }
+    else
+    {
+       t->size= 0;
+       t->len = 0;
+       t->buf = 0;
+    }
+    if (!ber_octetstring(o, t, cons))
+       return 0;
+    if (o->direction == ODR_DECODE)
+    {
+        *p = 0;
+
+        if (o->op->iconv_handle != 0)
+        {
+            size_t inleft = t->len;
+            char *inbuf = (char *) t->buf;
+            size_t outleft = 4 * inleft + 2;
+            char *outbuf = (char *) odr_malloc (o, outleft);
+            size_t ret;
+
+            *p = outbuf;
+            
+            ret = yaz_iconv (o->op->iconv_handle, &inbuf, &inleft,
+                             &outbuf, &outleft);
+            if (ret == (size_t)(-1))
+            {
+                odr_seterror(o, ODATA, 45);
+                return 0;
+            }
+            inleft = outbuf - (char*) *p;
+            
+            (*p)[inleft] = '\0';    /* null terminate it */
+        }
+        if (!*p)
+        {
+            *p = (char *) t->buf;
+            *(*p + t->len) = '\0';  /* ber_octs reserves space for this */
+        }
+    }
+    return 1;
+}
diff --git a/src/odr_oid.c b/src/odr_oid.c
new file mode 100644 (file)
index 0000000..5ff3f18
--- /dev/null
@@ -0,0 +1,53 @@
+/*
+ * Copyright (c) 1995-2003, Index Data
+ * See the file LICENSE for details.
+ * Sebastian Hammer, Adam Dickmeiss
+ *
+ * $Id: odr_oid.c,v 1.1 2003-10-27 12:21:33 adam Exp $
+ */
+#if HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include "odr-priv.h"
+#include <yaz/oid.h>
+
+/*
+ * Top level oid en/decoder.
+ * Returns 1 on success, 0 on error.
+ */
+int odr_oid(ODR o, Odr_oid **p, int opt, const char *name)
+{
+    int res, cons = 0;
+
+    if (o->error)
+       return 0;
+    if (o->t_class < 0)
+    {
+       o->t_class = ODR_UNIVERSAL;
+       o->t_tag = ODR_OID;
+    }
+    if ((res = ber_tag(o, p, o->t_class, o->t_tag, &cons, opt, name)) < 0)
+       return 0;
+    if (!res)
+       return odr_missing(o, opt, name);
+    if (cons)
+    {
+        odr_seterror(o, OPROTO, 46);
+       return 0;
+    }
+    if (o->direction == ODR_PRINT)
+    {
+       int i;
+
+       odr_prname(o, name);
+       fprintf(o->print, "OID:");
+       for (i = 0; (*p)[i] > -1; i++)
+           fprintf(o->print, " %d", (*p)[i]);
+       fprintf(o->print, "\n");
+       return 1;
+    }
+    if (o->direction == ODR_DECODE)
+       *p = (int *)odr_malloc(o, OID_SIZE * sizeof(**p));
+    return ber_oidc(o, *p);
+}
diff --git a/src/odr_seq.c b/src/odr_seq.c
new file mode 100644 (file)
index 0000000..c642ac1
--- /dev/null
@@ -0,0 +1,150 @@
+/*
+ * Copyright (c) 1995-2003, Index Data
+ * See the file LICENSE for details.
+ * Sebastian Hammer, Adam Dickmeiss
+ *
+ * $Id: odr_seq.c,v 1.1 2003-10-27 12:21:34 adam Exp $
+ */
+
+#if HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include "odr-priv.h"
+
+int odr_sequence_begin(ODR o, void *p, int size, const char *name)
+{
+    char **pp = (char**) p;
+
+    if (o->error)
+       return 0;
+    if (o->t_class < 0)
+    {
+       o->t_class = ODR_UNIVERSAL;
+       o->t_tag = ODR_SEQUENCE;
+    }
+    if (o->direction == ODR_DECODE)
+       *pp = 0;
+    if (odr_constructed_begin(o, p, o->t_class, o->t_tag, name))
+    {
+       if (o->direction == ODR_DECODE && size)
+           *pp = (char *)odr_malloc(o, size);
+       return 1;
+    }
+    else
+       return 0;
+}
+
+int odr_set_begin(ODR o, void *p, int size, const char *name)
+{
+    char **pp = (char**) p;
+
+    if (o->error)
+       return 0;
+    if (o->t_class < 0)
+    {
+       o->t_class = ODR_UNIVERSAL;
+       o->t_tag = ODR_SET;
+    }
+    if (o->direction == ODR_DECODE)
+       *pp = 0;
+    if (odr_constructed_begin(o, p, o->t_class, o->t_tag, name))
+    {
+       if (o->direction == ODR_DECODE && size)
+           *pp = (char *)odr_malloc(o, size);
+       return 1;
+    }
+    else
+       return 0;
+}
+
+int odr_sequence_end(ODR o)
+{
+    return odr_constructed_end(o);    
+}
+
+int odr_set_end(ODR o)
+{
+    return odr_constructed_end(o);    
+}
+
+static int odr_sequence_more(ODR o)
+{
+    return odr_constructed_more(o);
+}
+
+static int odr_sequence_x (ODR o, Odr_fun type, void *p, int *num)
+{
+    char ***pp = (char***) p;  /* for dereferencing */
+    char **tmp = 0;
+    int size = 0, i;
+
+    switch (o->direction)
+    {
+       case ODR_DECODE:
+           *num = 0;
+           *pp = (char **)odr_nullval();
+           while (odr_sequence_more(o))
+           {
+               /* outgrown array? */
+               if (*num * (int) sizeof(void*) >= size)
+               {
+                   /* double the buffer size */
+                   tmp = (char **)odr_malloc(o, sizeof(void*) *
+                                             (size += size ? size : 128));
+                   if (*num)
+                   {
+                       memcpy(tmp, *pp, *num * sizeof(void*));
+                       /*
+                        * For now, we just throw the old *p away, since we use
+                        * nibble memory anyway (disgusting, isn't it?).
+                        */
+                   }
+                   *pp = tmp;
+               }
+               if (!(*type)(o, (*pp) + *num, 0, 0))
+                   return 0;
+               (*num)++;
+           }
+           break;
+       case ODR_ENCODE: case ODR_PRINT:
+#ifdef ODR_DEBUG
+           fprintf(stderr, "[seqof: num=%d]", *num);
+#endif
+           for (i = 0; i < *num; i++)
+           {
+#ifdef ODR_DEBUG
+               fprintf(stderr, "[seqof: elem #%d]", i);
+#endif
+               if (!(*type)(o, *pp + i, 0, 0))
+                   return 0;
+           }
+           break;
+       default:
+            odr_seterror(o, OOTHER, 47);
+           return 0;
+    }
+    return odr_sequence_end(o);
+}
+
+int odr_set_of(ODR o, Odr_fun type, void *p, int *num, const char *name)
+{
+    if (!odr_set_begin(o, p, 0, name)) {
+       if (o->direction == ODR_DECODE)
+           *num = 0;
+       return 0;
+    }
+    return odr_sequence_x (o, type, p, num);
+}
+
+int odr_sequence_of(ODR o, Odr_fun type, void *p, int *num,
+                   const char *name)
+{
+    if (!odr_sequence_begin(o, p, 0, name)) {
+       if (o->direction == ODR_DECODE)
+           *num = 0;
+       return 0;
+    }
+    return odr_sequence_x (o, type, p, num);
+}
+
diff --git a/src/odr_tag.c b/src/odr_tag.c
new file mode 100644 (file)
index 0000000..a8f31f2
--- /dev/null
@@ -0,0 +1,57 @@
+/*
+ * Copyright (c) 1995-2003, Index Data
+ * See the file LICENSE for details.
+ * Sebastian Hammer, Adam Dickmeiss
+ *
+ * $Id: odr_tag.c,v 1.1 2003-10-27 12:21:34 adam Exp $
+ */
+#if HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include "odr-priv.h"
+
+int odr_peektag(ODR o, int *zclass, int *tag, int *cons)
+{
+    if (o->direction != ODR_DECODE)
+    {
+        odr_seterror(o, OOTHER, 48);
+       return 0;
+    }
+    if (o->op->stackp > -1 && !odr_constructed_more(o))
+       return 0;
+    if (ber_dectag(o->bp, zclass, tag, cons, odr_max(o)) <= 0)
+    {
+        odr_seterror(o, OREQUIRED, 49);
+       return 0;
+    }
+    return 1;
+}
+
+int odr_implicit_settag(ODR o, int zclass, int tag)
+{
+    if (o->error)
+       return 0;
+    if (o->t_class < 0)
+    {
+       o->t_class = zclass;
+       o->t_tag = tag;
+    }
+    return 1;
+}
+
+int odr_initmember(ODR o, void *p, int size)
+{
+    char **pp = (char **) p;
+
+    if (o->error)
+       return 0;
+    if (o->direction == ODR_DECODE)
+       *pp = (char *)odr_malloc(o, size);
+    else if (!*pp)
+    {
+       o->t_class = -1;
+       return 0;
+    }
+    return 1;
+}
diff --git a/src/odr_use.c b/src/odr_use.c
new file mode 100644 (file)
index 0000000..92e0363
--- /dev/null
@@ -0,0 +1,66 @@
+/*
+ * Copyright (c) 1995-2003, Index Data
+ * See the file LICENSE for details.
+ * Sebastian Hammer, Adam Dickmeiss
+ *
+ * $Id: odr_use.c,v 1.1 2003-10-27 12:21:34 adam Exp $
+ */
+#if HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include "odr-priv.h"
+
+int odr_external(ODR o, Odr_external **p, int opt, const char *name)
+{
+    Odr_external *pp;
+    static Odr_arm arm[] =
+    {
+       {ODR_EXPLICIT, ODR_CONTEXT, 0, ODR_EXTERNAL_single, 
+        (Odr_fun)odr_any, "single"},
+       {ODR_IMPLICIT, ODR_CONTEXT, 1, ODR_EXTERNAL_octet,
+        (Odr_fun)odr_octetstring, "octet"},
+       {ODR_IMPLICIT, ODR_CONTEXT, 2, ODR_EXTERNAL_arbitrary,
+        (Odr_fun)odr_bitstring, "arbitrary"},
+       {-1, -1, -1, -1, 0, 0}
+    };
+
+    odr_implicit_settag(o, ODR_UNIVERSAL, ODR_EXTERNAL);
+    if (!odr_sequence_begin(o, p, sizeof(Odr_external), name))
+       return odr_missing(o, opt, name);
+    pp = *p;
+    return
+       odr_oid(o, &pp->direct_reference, 1, "direct") &&
+       odr_integer(o, &pp->indirect_reference, 1, "indirect") &&
+       odr_graphicstring(o, &pp->descriptor, 1, "descriptor") &&
+       odr_choice(o, arm, &pp->u, &pp->which, 0) &&
+       odr_sequence_end(o);
+}
+
+int odr_visiblestring(ODR o, char **p, int opt, const char *name)
+{
+    return odr_implicit_tag(o, odr_cstring, p, ODR_UNIVERSAL,
+                           ODR_VISIBLESTRING, opt, name);
+}    
+
+/*
+ * a char may not be sufficient to hold a general string, but we'll deal
+ * with that once we start looking more closely at UniCode & co.
+ */
+int odr_generalstring(ODR o, char **p, int opt, const char *name)
+{
+    return odr_implicit_tag(o, odr_iconv_string, p, ODR_UNIVERSAL,
+                           ODR_GENERALSTRING,opt, name);
+}    
+
+int odr_graphicstring(ODR o, char **p, int opt, const char *name)
+{
+    return odr_implicit_tag(o, odr_cstring, p, ODR_UNIVERSAL,
+                       ODR_GRAPHICSTRING, opt, name);
+}    
+
+int odr_generalizedtime(ODR o, char **p, int opt, const char *name)
+{
+    return odr_implicit_tag(o, odr_cstring, p, ODR_UNIVERSAL,
+                           ODR_GENERALIZEDTIME, opt, name);
+}
diff --git a/src/odr_util.c b/src/odr_util.c
new file mode 100644 (file)
index 0000000..d95a693
--- /dev/null
@@ -0,0 +1,94 @@
+/*
+ * Copyright (c) 1995-2003, Index Data
+ * See the file LICENSE for details.
+ *
+ * $Id: odr_util.c,v 1.1 2003-10-27 12:21:34 adam Exp $
+ */
+#if HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include <stdlib.h>
+#include <string.h>
+#include <ctype.h>
+#include "odr-priv.h"
+#include <yaz/oid.h>
+
+void odr_prname(ODR o, const char *name)
+{
+    if (name)
+       fprintf (o->print, "%*s%s ", o->indent*4, "", name);
+    else
+       fprintf (o->print, "%*s", o->indent*4, "");
+}
+
+int odp_more_chunks(ODR o, const unsigned char *base, int len)
+{
+    if (!len)
+       return 0;
+    if (len < 0) /* indefinite length */
+    {
+       if (*o->bp == 0 && *(o->bp + 1) == 0)
+       {
+           o->bp += 2;
+           return 0;
+       }
+       else
+           return 1;
+    }
+    else
+        return o->bp - base < len;
+}
+
+Odr_oid *odr_oiddup_nmem(NMEM nmem, Odr_oid *o)
+{
+    Odr_oid *r;
+
+    if (!o)
+       return 0;
+    if (!(r = (int *)nmem_malloc(nmem, (oid_oidlen(o) + 1) * sizeof(int))))
+       return 0;
+    oid_oidcpy(r, o);
+    return r;
+}
+
+Odr_oid *odr_oiddup(ODR odr, Odr_oid *o)
+{
+    return odr_oiddup_nmem (odr->mem, o);
+}
+
+Odr_oid *odr_getoidbystr_nmem(NMEM nmem, const char *str)
+{
+    int num = 1, i = 0;
+    const char *p = str;
+    Odr_oid *ret;
+
+    if (!isdigit(*str))
+       return 0;
+    while ((p = strchr(p, '.')))
+       num++, p++;
+    ret = (int *)nmem_malloc(nmem, sizeof(*ret)*(num + 1));
+    p = str;
+    do
+       ret[i++] = atoi(p);
+    while ((p = strchr(p, '.')) && *++p);
+    ret[i] = -1;
+    return ret;
+}
+
+Odr_oid *odr_getoidbystr(ODR o, const char *str)
+{
+    return odr_getoidbystr_nmem (o->mem, str);
+}
+
+int odr_missing(ODR o, int opt, const char *name)
+{
+    if (o->error)
+        return 0;
+    if (!opt)
+    {
+        odr_seterror(o, OREQUIRED, 53);
+        odr_setelement(o, name);
+    }
+    return opt;
+}
diff --git a/src/oid.c b/src/oid.c
new file mode 100644 (file)
index 0000000..2b7fb2d
--- /dev/null
+++ b/src/oid.c
@@ -0,0 +1,614 @@
+/*
+ * Copyright (c) 1995-2003, Index Data
+ * See the file LICENSE for details.
+ *
+ * $Id: oid.c,v 1.1 2003-10-27 12:21:34 adam Exp $
+ */
+
+/*
+ * More or less protocol-transparent OID database.
+ * We could (and should?) extend this so that the user app can add new
+ * entries to the list at initialization.
+ */
+#if HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include <stdlib.h>
+#include <string.h>
+#include <ctype.h>
+
+#include <yaz/oid.h>
+#include <yaz/yaz-util.h>
+
+static int z3950_prefix[] = { 1, 2, 840, 10003, -1 };
+static int sr_prefix[]    = { 1, 0, 10163, -1 };
+
+struct oident_list {
+    struct oident oident;
+    struct oident_list *next;
+};
+
+static struct oident_list *oident_table = NULL;
+static int oid_value_dynamic = VAL_DYNAMIC;
+static int oid_init_flag = 0;
+static NMEM_MUTEX oid_mutex = 0;
+static NMEM oid_nmem = 0;
+
+/*
+ * OID database
+ */
+static oident standard_oids[] =
+{
+    /* General definitions */
+    {PROTO_GENERAL, CLASS_TRANSYN, VAL_BER,          {2,1,1,-1},
+     "BER" },
+    {PROTO_GENERAL, CLASS_TRANSYN, VAL_ISO2709,      {1,0,2709,1,1,-1},
+     "ISO2709"},
+    {PROTO_GENERAL, CLASS_GENERAL, VAL_ISO_ILL_1,    {1,0,10161,2,1,-1},
+     "ISOILL-1"},
+    /* Z39.50v3 definitions */
+    {PROTO_Z3950,   CLASS_ABSYN,   VAL_APDU,         {2,1,-1},
+     "Z-APDU"},    
+    {PROTO_Z3950,   CLASS_APPCTX,  VAL_BASIC_CTX,    {1,1,-1},
+     "Z-BASIC"},
+    {PROTO_Z3950,   CLASS_ATTSET,  VAL_BIB1,         {3,1,-1},
+     "Bib-1"},
+    {PROTO_Z3950,   CLASS_ATTSET,  VAL_EXP1,         {3,2,-1},
+     "Exp-1"},
+    {PROTO_Z3950,   CLASS_ATTSET,  VAL_EXT1,         {3,3,-1},
+     "Ext-1"},
+    {PROTO_Z3950,   CLASS_ATTSET,  VAL_CCL1,         {3,4,-1},
+     "CCL-1"},
+    {PROTO_Z3950,   CLASS_ATTSET,  VAL_GILS,         {3,5,-1},
+     "GILS-attset"},
+    {PROTO_Z3950,   CLASS_ATTSET,  VAL_GILS,         {3,5,-1},
+     "GILS"},
+    {PROTO_Z3950,   CLASS_ATTSET,  VAL_STAS,         {3,6,-1},
+     "STAS-attset"},
+    {PROTO_Z3950,   CLASS_ATTSET,  VAL_COLLECT1,     {3,7,-1},
+     "Collections-attset"},
+    {PROTO_Z3950,   CLASS_ATTSET,  VAL_CIMI1,        {3,8,-1},
+     "CIMI-attset"},
+    {PROTO_Z3950,   CLASS_ATTSET,  VAL_GEO,          {3,9,-1},
+     "Geo-attset"},
+
+    {PROTO_Z3950,   CLASS_ATTSET,  VAL_ZBIG,         {3,10,-1},
+     "ZBIG"},
+    {PROTO_Z3950,   CLASS_ATTSET,  VAL_UTIL,         {3,11,-1},
+     "Util"},
+    {PROTO_Z3950,   CLASS_ATTSET,  VAL_XD1,          {3,12,-1},
+     "XD-1"},
+    {PROTO_Z3950,   CLASS_ATTSET,  VAL_ZTHES,        {3,13,-1},
+     "Zthes"},
+    {PROTO_Z3950,   CLASS_ATTSET,  VAL_FIN1,         {3,14,-1},
+     "Fin-1"},
+    {PROTO_Z3950,   CLASS_ATTSET,  VAL_DAN1,         {3,15,-1},
+     "Dan-1"},
+    {PROTO_Z3950,   CLASS_ATTSET,  VAL_HOLDINGS,     {3,16,-1},
+     "Holdings"},
+    {PROTO_Z3950,   CLASS_ATTSET,  VAL_USMARC,       {3,17,-1},
+     "MARC"},
+    {PROTO_Z3950,   CLASS_ATTSET,  VAL_BIB2,         {3,18,-1},
+     "Bib-2"},
+    {PROTO_Z3950,   CLASS_ATTSET,  VAL_ZEEREX,       {3,19,-1},
+     "ZeeRex"},
+    /* New applications should use Zthes-1 instead of this Satan-spawn */
+    {PROTO_Z3950,   CLASS_ATTSET,  VAL_THESAURUS,    {3,1000,81,1,-1},
+     "Thesaurus-attset"},
+    {PROTO_Z3950,   CLASS_ATTSET,  VAL_IDXPATH,      {3,1000,81,2,-1},
+     "IDXPATH"},
+    {PROTO_Z3950,   CLASS_DIAGSET, VAL_BIB1,         {4,1,-1},
+     "Bib-1"},
+    {PROTO_Z3950,   CLASS_DIAGSET, VAL_DIAG1,        {4,2,-1},
+     "Diag-1"},
+    {PROTO_Z3950,   CLASS_DIAGSET, VAL_DIAG_ES,      {4,3,-1},
+     "Diag-ES"},
+    {PROTO_Z3950,   CLASS_DIAGSET, VAL_DIAG_GENERAL, {4,3,-1},
+     "Diag-General"},
+    {PROTO_Z3950,   CLASS_RECSYN,  VAL_UNIMARC,      {5,1,-1},
+     "Unimarc"},
+    {PROTO_Z3950,   CLASS_RECSYN,  VAL_INTERMARC,    {5,2,-1},
+     "Intermarc"},
+    {PROTO_Z3950,   CLASS_RECSYN,  VAL_CCF,          {5,3,-1},
+     "CCF"},
+    {PROTO_Z3950,   CLASS_RECSYN,  VAL_USMARC,       {5,10,-1},
+     "USmarc"},
+    {PROTO_Z3950,   CLASS_RECSYN,  VAL_UKMARC,       {5,11,-1},
+     "UKmarc"},
+    {PROTO_Z3950,   CLASS_RECSYN,  VAL_NORMARC,      {5,12,-1},
+     "Normarc"},
+    {PROTO_Z3950,   CLASS_RECSYN,  VAL_LIBRISMARC,   {5,13,-1},
+     "Librismarc"},
+    {PROTO_Z3950,   CLASS_RECSYN,  VAL_DANMARC,      {5,14,-1},
+     "Danmarc"},
+    {PROTO_Z3950,   CLASS_RECSYN,  VAL_FINMARC,      {5,15,-1},
+     "Finmarc"},
+    {PROTO_Z3950,   CLASS_RECSYN,  VAL_MAB,          {5,16,-1},
+     "MAB"},
+    {PROTO_Z3950,   CLASS_RECSYN,  VAL_CANMARC,      {5,17,-1},
+     "Canmarc"},
+    {PROTO_Z3950,   CLASS_RECSYN,  VAL_SBN,          {5,18,-1},
+     "SBN"},
+    {PROTO_Z3950,   CLASS_RECSYN,  VAL_PICAMARC,     {5,19,-1},
+     "Picamarc"},
+    {PROTO_Z3950,   CLASS_RECSYN,  VAL_AUSMARC,      {5,20,-1},
+     "Ausmarc"},
+    {PROTO_Z3950,   CLASS_RECSYN,  VAL_IBERMARC,     {5,21,-1},
+     "Ibermarc"},
+    {PROTO_Z3950,   CLASS_RECSYN,  VAL_CATMARC,      {5,22,-1},
+     "Carmarc"},
+    {PROTO_Z3950,   CLASS_RECSYN,  VAL_MALMARC,      {5,23,-1},
+     "Malmarc"},
+    {PROTO_Z3950,   CLASS_RECSYN,  VAL_JPMARC,       {5,24,-1},
+     "JPmarc"},
+    {PROTO_Z3950,   CLASS_RECSYN,  VAL_SWEMARC,      {5,25,-1},
+     "SWEmarc"},
+    {PROTO_Z3950,   CLASS_RECSYN,  VAL_SIGLEMARC,    {5,26,-1},
+     "SIGLEmarc"},
+    {PROTO_Z3950,   CLASS_RECSYN,  VAL_ISDSMARC,     {5,27,-1},
+     "ISDSmarc"},
+    {PROTO_Z3950,   CLASS_RECSYN,  VAL_RUSMARC,      {5,28,-1},
+     "RUSmarc"},
+    {PROTO_Z3950,   CLASS_RECSYN,  VAL_HUNMARC,      {5,29,-1},
+     "Hunmarc"},
+    {PROTO_Z3950,   CLASS_RECSYN,  VAL_EXPLAIN,      {5,100,-1},
+     "Explain"},
+    {PROTO_Z3950,   CLASS_RECSYN,  VAL_SUTRS,        {5,101,-1},
+     "SUTRS"},
+    {PROTO_Z3950,   CLASS_RECSYN,  VAL_OPAC,         {5,102,-1},
+     "OPAC"},
+    {PROTO_Z3950,   CLASS_RECSYN,  VAL_SUMMARY,      {5,103,-1},
+     "Summary"},
+    {PROTO_Z3950,   CLASS_RECSYN,  VAL_GRS0,         {5,104,-1},
+     "GRS-0"},
+    {PROTO_Z3950,   CLASS_RECSYN,  VAL_GRS1,         {5,105,-1},
+     "GRS-1"},
+    {PROTO_Z3950,   CLASS_RECSYN,  VAL_EXTENDED,     {5,106,-1},
+     "Extended"},
+    {PROTO_Z3950,   CLASS_RECSYN,  VAL_FRAGMENT,     {5,107,-1},
+     "Fragment"},
+    {PROTO_Z3950,   CLASS_RECSYN,  VAL_PDF,          {5,109,1,-1},
+     "pdf"},
+    {PROTO_Z3950,   CLASS_RECSYN,  VAL_POSTSCRIPT,   {5,109,2,-1},
+     "postscript"},
+    {PROTO_Z3950,   CLASS_RECSYN,  VAL_HTML,         {5,109,3,-1},
+     "html"},
+    {PROTO_Z3950,   CLASS_RECSYN,  VAL_TIFF,         {5,109,4,-1},
+     "tiff"},
+    {PROTO_Z3950,   CLASS_RECSYN,  VAL_GIF,          {5,109,5,-1},
+     "gif"},
+    {PROTO_Z3950,   CLASS_RECSYN,  VAL_JPEG,         {5,109,6,-1},
+     "jpeg"},
+    {PROTO_Z3950,   CLASS_RECSYN,  VAL_PNG,          {5,109,7,-1},
+     "png"},
+    {PROTO_Z3950,   CLASS_RECSYN,  VAL_MPEG,         {5,109,8,-1},
+     "mpeg"},
+    {PROTO_Z3950,   CLASS_RECSYN,  VAL_SGML,         {5,109,9,-1},
+     "sgml"},
+
+    {PROTO_Z3950,   CLASS_RECSYN,  VAL_TIFFB,        {5,110,1,-1},
+     "tiff-b"},
+    {PROTO_Z3950,   CLASS_RECSYN,  VAL_WAV,          {5,110,2,-1},
+     "wav"},
+
+    {PROTO_Z3950,   CLASS_RECSYN,  VAL_SQLRS,        {5,111,-1},
+     "SQL-RS"},
+    {PROTO_Z3950,   CLASS_RECSYN,  VAL_SOIF,         {5,1000,81,2,-1},
+     "SOIF" },
+    {PROTO_Z3950,   CLASS_RECSYN,  VAL_TEXT_XML,     {5,109,10,-1},
+     "text-XML" },
+    {PROTO_Z3950,   CLASS_RECSYN,  VAL_TEXT_XML,     {5,109,10,-1},
+     "XML" },
+    {PROTO_Z3950,   CLASS_RECSYN,  VAL_APPLICATION_XML, {5,109,11,-1},
+     "application-XML" },
+    {PROTO_Z3950,   CLASS_RESFORM, VAL_RESOURCE1,    {7,1,-1},
+     "Resource-1"},
+    {PROTO_Z3950,   CLASS_RESFORM, VAL_RESOURCE2,    {7,2,-1},
+     "Resource-2"},
+    {PROTO_Z3950,   CLASS_RESFORM, VAL_UNIVERSE_REPORT, {7,1000,81,1,-1},
+     "UNIverse-Resource-Report"},
+
+    {PROTO_Z3950,   CLASS_ACCFORM, VAL_PROMPT1,      {8,1,-1},
+     "Prompt-1"},
+    {PROTO_Z3950,   CLASS_ACCFORM, VAL_DES1,         {8,2,-1},
+     "Des-1"},
+    {PROTO_Z3950,   CLASS_ACCFORM, VAL_KRB1,         {8,3,-1},
+     "Krb-1"},
+    {PROTO_Z3950,   CLASS_EXTSERV, VAL_PRESSET,      {9,1,-1},
+     "Pers. set"},
+    {PROTO_Z3950,   CLASS_EXTSERV, VAL_PQUERY,       {9,2,-1},
+     "Pers. query"},
+    {PROTO_Z3950,   CLASS_EXTSERV, VAL_PCQUERY,      {9,3,-1},
+     "Per'd query"},
+    {PROTO_Z3950,   CLASS_EXTSERV, VAL_ITEMORDER,    {9,4,-1},
+     "Item order"},
+    {PROTO_Z3950,   CLASS_EXTSERV, VAL_DBUPDATE0,    {9,5,-1},
+     "DB. Update (first version)"},
+    {PROTO_Z3950,   CLASS_EXTSERV, VAL_DBUPDATE1,    {9,5,1,-1},
+     "DB. Update (second version)"},
+    {PROTO_Z3950,   CLASS_EXTSERV, VAL_DBUPDATE,     {9,5,1,1,-1},
+     "DB. Update"},
+    {PROTO_Z3950,   CLASS_EXTSERV, VAL_EXPORTSPEC,   {9,6,-1},
+     "exp. spec."},
+    {PROTO_Z3950,   CLASS_EXTSERV, VAL_EXPORTINV,    {9,7,-1},
+     "exp. inv."},
+    {PROTO_Z3950,   CLASS_EXTSERV, VAL_ADMINSERVICE, {9,1000,81,1,-1},
+     "Admin"},
+    {PROTO_Z3950,   CLASS_USERINFO,VAL_SEARCHRES1,   {10,1,-1},
+     "searchResult-1"},
+    {PROTO_Z3950,   CLASS_USERINFO,VAL_CHARLANG,     {10,2,-1},
+     "CharSetandLanguageNegotiation"},
+    {PROTO_Z3950,   CLASS_USERINFO,VAL_USERINFO1,    {10,3,-1},
+     "UserInfo-1"},
+    {PROTO_Z3950,   CLASS_USERINFO,VAL_MULTISRCH1,   {10,4,-1},
+     "MultipleSearchTerms-1"},
+    {PROTO_Z3950,   CLASS_USERINFO,VAL_MULTISRCH2,   {10,5,-1},
+     "MultipleSearchTerms-2"},
+    {PROTO_Z3950,   CLASS_USERINFO,VAL_DATETIME,     {10,6,-1},
+     "DateTime"},
+    {PROTO_Z3950,   CLASS_USERINFO,VAL_PROXY,        {10,1000,81,1,-1},
+     "Proxy" },
+    {PROTO_Z3950,   CLASS_USERINFO,VAL_COOKIE,       {10,1000,81,2,-1},
+     "Cookie" },
+    {PROTO_Z3950,   CLASS_USERINFO,VAL_CLIENT_IP,    {10,1000,81,3,-1},
+     "Client-IP" },
+    {PROTO_Z3950,   CLASS_ELEMSPEC,VAL_ESPEC1,       {11,1,-1},
+     "Espec-1"},
+    {PROTO_Z3950,   CLASS_VARSET,  VAL_VAR1,         {12,1,-1},
+     "Variant-1"},
+    {PROTO_Z3950,   CLASS_SCHEMA,  VAL_WAIS,         {13,1,-1},
+     "WAIS-schema"},
+    {PROTO_Z3950,   CLASS_SCHEMA,  VAL_GILS,         {13,2,-1},
+     "GILS-schema"},
+    {PROTO_Z3950,   CLASS_SCHEMA,  VAL_COLLECT1,     {13,3,-1},
+     "Collections-schema"},
+    {PROTO_Z3950,   CLASS_SCHEMA,  VAL_GEO,          {13,4,-1},
+     "Geo-schema"},
+    {PROTO_Z3950,   CLASS_SCHEMA,  VAL_CIMI1,        {13,5,-1},
+     "CIMI-schema"},
+    {PROTO_Z3950,   CLASS_SCHEMA,  VAL_UPDATEES,     {13,6,-1},
+     "Update ES"},
+    {PROTO_Z3950,   CLASS_SCHEMA,  VAL_HOLDINGS,     {13,7,-1},
+     "Holdings"},
+    {PROTO_Z3950,   CLASS_SCHEMA,  VAL_ZTHES,        {13,8,-1},
+     "Zthes"},
+    {PROTO_Z3950,   CLASS_SCHEMA,  VAL_THESAURUS,    {13,1000,81,1,-1},
+     "thesaurus-schema"},
+    {PROTO_Z3950,   CLASS_SCHEMA,  VAL_EXPLAIN,      {13,1000,81,2,-1},
+     "Explain-schema"},
+    {PROTO_Z3950,   CLASS_TAGSET,  VAL_SETM,         {14,1,-1},
+     "TagsetM"},
+    {PROTO_Z3950,   CLASS_TAGSET,  VAL_SETG,         {14,2,-1},
+     "TagsetG"},
+    {PROTO_Z3950,   CLASS_TAGSET,  VAL_STAS,         {14,3,-1},
+     "STAS-tagset"},
+    {PROTO_Z3950,   CLASS_TAGSET,  VAL_GILS,         {14,4,-1},
+     "GILS-tagset"},
+    {PROTO_Z3950,   CLASS_TAGSET,  VAL_COLLECT1,     {14,5,-1},
+     "Collections-tagset"},
+    {PROTO_Z3950,   CLASS_TAGSET,  VAL_CIMI1,        {14,6,-1},
+     "CIMI-tagset"},
+    {PROTO_Z3950,   CLASS_TAGSET,  VAL_THESAURUS,    {14,1000,81,1,-1},
+     "thesaurus-tagset"},      /* What is this Satan-spawn doing here? */
+    {PROTO_Z3950,   CLASS_TAGSET,  VAL_EXPLAIN,      {14,1000,81,2,-1},
+     "Explain-tagset"},
+    {PROTO_Z3950,   CLASS_TAGSET,  VAL_ZTHES,        {14,8,-1},
+     "Zthes-tagset"},
+    {PROTO_Z3950,   CLASS_NEGOT,   VAL_CHARNEG3,     {15,3,-1},
+     "CharSetandLanguageNegotiation-3"},
+    {PROTO_Z3950,   CLASS_NEGOT,   VAL_ID_CHARSET,   {15,1000,81,1,-1},
+     "ID-Charset" },
+    {PROTO_Z3950,   CLASS_USERINFO,VAL_CQL,          {16, 2, -1},
+     "CQL"},
+    {PROTO_GENERAL, CLASS_GENERAL, VAL_UCS2,    {1,0,10646,1,0,2,-1},
+     "UCS-2"},
+    {PROTO_GENERAL, CLASS_GENERAL, VAL_UCS4,    {1,0,10646,1,0,4,-1},
+     "UCS-4"},
+    {PROTO_GENERAL, CLASS_GENERAL, VAL_UTF16,   {1,0,10646,1,0,5,-1},
+     "UTF-16"},
+    {PROTO_GENERAL, CLASS_GENERAL, VAL_UTF8,    {1,0,10646,1,0,8,-1},
+     "UTF-8"},
+    {PROTO_Z3950,   CLASS_USERINFO,VAL_OCLCUI,  {10, 1000, 17, 1, -1},
+     "OCLC-userInfo"},
+    {PROTO_NOP,     CLASS_NOP,     VAL_NOP,       {-1},        0          }
+};
+
+/* OID utilities */
+
+void oid_oidcpy(int *t, int *s)
+{
+    while ((*(t++) = *(s++)) > -1);
+}
+
+void oid_oidcat(int *t, int *s)
+{
+    while (*t > -1)
+        t++;
+    while ((*(t++) = *(s++)) > -1);
+}
+
+int oid_oidcmp(int *o1, int *o2)
+{
+    while (*o1 == *o2 && *o1 > -1)
+    {
+        o1++;
+        o2++;
+    }
+    if (*o1 == *o2)
+        return 0;
+    else if (*o1 > *o2)
+        return 1;
+    else
+        return -1;
+}
+
+int oid_oidlen(int *o)
+{
+    int len = 0;
+
+    while (*(o++) >= 0)
+        len++;
+    return len;
+}
+
+
+static int match_prefix(int *look, int *prefix)
+{
+    int len;
+
+    for (len = 0; *look == *prefix; look++, prefix++, len++);
+    if (*prefix < 0) /* did we reach the end of the prefix? */
+        return len;
+    return 0;
+}
+
+void oid_transfer (struct oident *oidentp)
+{
+    while (*oidentp->oidsuffix >= 0)
+    {
+       oid_addent (oidentp->oidsuffix, oidentp->proto,
+                   oidentp->oclass,
+                   oidentp->desc, oidentp->value);
+       oidentp++;
+    }
+}
+
+void oid_init (void)
+{
+    if (oid_init_flag == 0)
+    {
+       /* oid_transfer is thread safe, so there's nothing wrong in having
+          two threads calling it simultaniously. On the other hand
+          no thread may exit oid_init before all OID's bave been
+          transferred - which is why checked is set after oid_transfer... 
+       */
+       nmem_mutex_create (&oid_mutex);
+       nmem_mutex_enter (oid_mutex);
+       if (!oid_nmem)
+           oid_nmem = nmem_create ();
+       nmem_mutex_leave (oid_mutex);
+       oid_transfer (standard_oids);
+       oid_init_flag = 1;
+    }
+}
+
+void oid_exit (void)
+{
+    if (oid_init_flag)
+    {
+        oid_init_flag = 0;
+        nmem_mutex_destroy (&oid_mutex);
+        nmem_destroy (oid_nmem);
+        oid_nmem = 0;
+    }
+}
+
+static struct oident *oid_getentbyoid_x(int *o)
+{
+    enum oid_proto proto;
+    int prelen;
+    struct oident_list *ol;
+    
+    /* determine protocol type */
+    if ((prelen = match_prefix(o, z3950_prefix)) != 0)
+        proto = PROTO_Z3950;
+    else if ((prelen = match_prefix(o, sr_prefix)) != 0)
+        proto = PROTO_SR;
+    else
+        proto = PROTO_GENERAL;
+    for (ol = oident_table; ol; ol = ol->next)
+    {
+       struct oident *p = &ol->oident;
+        if (p->proto == proto && !oid_oidcmp(o + prelen, p->oidsuffix))
+            return p;
+       if (p->proto == PROTO_GENERAL && !oid_oidcmp (o, p->oidsuffix))
+           return p;
+    }
+    return 0;
+}
+
+/*
+ * To query, fill out proto, class, and value of the ent parameter.
+ */
+int *oid_ent_to_oid(struct oident *ent, int *ret)
+{
+    struct oident_list *ol;
+    
+    oid_init ();
+    for (ol = oident_table; ol; ol = ol->next)
+    {
+       struct oident *p = &ol->oident;
+        if (ent->value == p->value &&
+            (p->proto == PROTO_GENERAL || (ent->proto == p->proto &&  
+           (ent->oclass == p->oclass || ent->oclass == CLASS_GENERAL))))
+       {
+           if (p->proto == PROTO_Z3950)
+               oid_oidcpy(ret, z3950_prefix);
+           else if (p->proto == PROTO_SR)
+               oid_oidcpy(ret, sr_prefix);
+           else
+               ret[0] = -1;
+           oid_oidcat(ret, p->oidsuffix);
+           ent->desc = p->desc;
+           return ret;
+       }
+    }
+    ret[0] = -1;
+    return 0;
+}
+
+/*
+ * To query, fill out proto, class, and value of the ent parameter.
+ */
+int *oid_getoidbyent(struct oident *ent)
+{
+    static int ret[OID_SIZE];
+
+    return oid_ent_to_oid (ent, ret);
+}
+
+struct oident *oid_addent (int *oid, enum oid_proto proto,
+                          enum oid_class oclass,
+                          const char *desc, int value)
+{
+    struct oident *oident = 0;
+
+    nmem_mutex_enter (oid_mutex);
+    if (!oident)
+    {
+       char desc_str[200];
+       struct oident_list *oident_list;
+       oident_list = (struct oident_list *)
+           nmem_malloc (oid_nmem, sizeof(*oident_list));
+       oident = &oident_list->oident;
+       oident->proto = proto;
+       oident->oclass = oclass;
+
+       if (!desc)
+       {
+           int i;
+
+           sprintf (desc_str, "%d", *oid);
+           for (i = 1; i < 12 && oid[i] >= 0; i++)
+               sprintf (desc_str+strlen(desc_str), ".%d", oid[i]);
+           desc = desc_str;
+       }
+       oident->desc = nmem_strdup (oid_nmem, desc);
+       if (value == VAL_DYNAMIC)
+           oident->value = (enum oid_value) (++oid_value_dynamic);
+       else
+           oident->value = (enum oid_value) value;
+       oid_oidcpy (oident->oidsuffix, oid);
+       oident_list->next = oident_table;
+       oident_table = oident_list;
+    }
+    nmem_mutex_leave (oid_mutex);
+    return oident;
+}
+
+struct oident *oid_getentbyoid(int *oid)
+{
+    struct oident *oident;
+
+    if (!oid)
+       return 0;
+    oid_init ();
+    oident = oid_getentbyoid_x (oid);
+    if (!oident)
+       oident = oid_addent (oid, PROTO_GENERAL, CLASS_GENERAL,
+                            NULL, VAL_DYNAMIC);
+    return oident;
+}
+
+static oid_value oid_getval_raw(const char *name)
+{
+    int val = 0, i = 0, oid[OID_SIZE];
+    struct oident *oident;
+    
+    while (isdigit (*name))
+    {
+        val = val*10 + (*name - '0');
+        name++;
+        if (*name == '.')
+        {
+            if (i < OID_SIZE-1)
+                oid[i++] = val;
+           val = 0;
+            name++;
+        }
+    }
+    oid[i] = val;
+    oid[i+1] = -1;
+    oident = oid_getentbyoid_x (oid);
+    if (!oident)
+        oident = oid_addent (oid, PROTO_GENERAL, CLASS_GENERAL, NULL,
+                        VAL_DYNAMIC);
+    return oident->value;
+}
+
+oid_value oid_getvalbyname(const char *name)
+{
+    struct oident_list *ol;
+
+    oid_init ();
+    if (isdigit (*name))
+        return oid_getval_raw (name);
+    for (ol = oident_table; ol; ol = ol->next)
+       if (!yaz_matchstr(ol->oident.desc, name))
+       {
+           return ol->oident.value;
+       }
+    return VAL_NONE;
+}
+
+void oid_setprivateoids(oident *list)
+{
+    oid_transfer (list);
+}
+
+void oid_trav (void (*func)(struct oident *oidinfo, void *vp), void *vp)
+{
+    struct oident_list *ol;
+
+    oid_init ();
+    for (ol = oident_table; ol; ol = ol->next)
+        (*func)(&ol->oident, vp);
+}
+
+int *oid_name_to_oid(oid_class oclass, const char *name, int *oid) {
+    struct oident ent;
+
+    /* Translate syntax to oid_val */
+    oid_value value = oid_getvalbyname(name);
+
+    /* Build it into an oident */
+    ent.proto = PROTO_Z3950;
+    ent.oclass = oclass;
+    ent.value = value;
+
+    /* Translate to an array of int */
+    return oid_ent_to_oid(&ent, oid);
+}
+
+char *oid_to_dotstring(const int *oid, char *oidbuf) {
+    char tmpbuf[20];
+    int i;
+
+    oidbuf[0] = '\0';
+    for (i = 0; oid[i] != -1; i++) {
+       sprintf(tmpbuf, "%d", oid[i]);
+       if (i > 0) strcat(oidbuf, ".");
+       strcat(oidbuf, tmpbuf);
+    }
+
+    return oidbuf;
+}
+
+char *oid_name_to_dotstring(oid_class oclass, const char *name, char *oidbuf) {
+    int oid[OID_SIZE];
+
+    (void) oid_name_to_oid(oclass, name, oid);
+    return oid_to_dotstring(oid, oidbuf);
+}
+
diff --git a/src/opacdisp.c b/src/opacdisp.c
new file mode 100644 (file)
index 0000000..157e58f
--- /dev/null
@@ -0,0 +1,135 @@
+/*
+ * Copyright (c) 2003, Index Data.
+ * See the file LICENSE for details.
+ *
+ * $Id: opacdisp.c,v 1.1 2003-10-27 12:21:34 adam Exp $
+ */
+
+#include <stdio.h>
+#include <string.h>
+#include <stdlib.h>
+#include <ctype.h>
+
+#include <yaz/proto.h>
+
+static void opac_element_str(WRBUF wrbuf, int l, const char *elem,
+                            const char *data)
+{
+    if (data)
+    {
+       while (--l >= 0)
+           wrbuf_puts(wrbuf, " ");
+       wrbuf_puts(wrbuf, "<");
+       wrbuf_puts(wrbuf, elem);
+       wrbuf_puts(wrbuf, ">");
+       wrbuf_xmlputs(wrbuf, data);
+       wrbuf_puts(wrbuf, "</");
+       wrbuf_puts(wrbuf, elem);
+       wrbuf_puts(wrbuf, ">\n");
+    }
+}
+
+static void opac_element_bool(WRBUF wrbuf, int l, const char *elem, int *data)
+{
+    if (data)
+    {
+       while (--l >= 0)
+           wrbuf_puts(wrbuf, " ");
+       wrbuf_puts(wrbuf, "<");
+       wrbuf_puts(wrbuf, elem);
+       if (*data)
+            wrbuf_puts(wrbuf, " value=\"1\"");
+       else
+            wrbuf_puts(wrbuf, " value=\"0\"");
+       wrbuf_puts(wrbuf, "/>\n");
+    }
+}
+
+void yaz_display_OPAC(WRBUF wrbuf, Z_OPACRecord *r, int flags)
+{
+    int i;
+    wrbuf_puts(wrbuf, "<holdings>\n");
+
+    for (i = 0; i < r->num_holdingsData; i++)
+    {
+       Z_HoldingsRecord *h = r->holdingsData[i];
+       wrbuf_puts(wrbuf, " <holding>\n");
+
+       if (h->which == Z_HoldingsRecord_marcHoldingsRecord)
+       {
+           wrbuf_puts (wrbuf, "  <marc/>\n");
+       /*  h->u.marcHoldingsRecord) */
+       }
+       else if (h->which == Z_HoldingsRecord_holdingsAndCirc)
+       {
+           int j;
+           
+           Z_HoldingsAndCircData *d = h->u.holdingsAndCirc;
+       
+           opac_element_str(wrbuf, 2, "typeOfRecord", d->typeOfRecord);
+           opac_element_str(wrbuf, 2, "encodingLevel", d->encodingLevel);
+           opac_element_str(wrbuf, 2, "format", d->format);
+           opac_element_str(wrbuf, 2, "receiptAcqStatus", d->receiptAcqStatus);
+           opac_element_str (wrbuf, 2, "generalRetention", d->generalRetention);
+           opac_element_str (wrbuf, 2, "completeness", d->completeness);
+           opac_element_str (wrbuf, 2, "dateOfReport", d->dateOfReport);
+           opac_element_str (wrbuf, 2, "nucCode", d->nucCode);
+           opac_element_str (wrbuf, 2, "localLocation", d->localLocation);
+           opac_element_str (wrbuf, 2, "shelvingLocation", d->shelvingLocation);
+           opac_element_str (wrbuf, 2, "callNumber", d->callNumber);
+           opac_element_str (wrbuf, 2, "copyNumber", d->copyNumber);
+           opac_element_str (wrbuf, 2, "publicNote", d->publicNote);
+           opac_element_str (wrbuf, 2, "reproductionNote", d->reproductionNote);
+           opac_element_str (wrbuf, 2, "termsUseRepro", d->termsUseRepro);
+           opac_element_str (wrbuf, 2, "enumAndChron", d->enumAndChron);
+           if (d->num_volumes)
+           {
+               wrbuf_puts (wrbuf, "  <volumes>\n");
+               for (j = 0; j<d->num_volumes; j++)
+               {
+                   wrbuf_puts (wrbuf, "   <volume>\n");
+                   opac_element_str (wrbuf, 4, "enumeration",
+                                     d->volumes[j]->enumeration);
+                   opac_element_str (wrbuf, 4, "chronology",
+                                     d->volumes[j]->chronology);
+                   opac_element_str (wrbuf, 4, "enumAndChron",
+                                     d->volumes[j]->enumAndChron);
+                   wrbuf_puts (wrbuf, "   </volume>\n");
+               }
+               wrbuf_puts (wrbuf, "  </volumes>\n");
+           }
+           if (d->num_circulationData)
+           {
+               wrbuf_puts (wrbuf, "  <circulations>\n");
+               for (j = 0; j<d->num_circulationData; j++)
+               {
+                   wrbuf_puts (wrbuf,"   <circulation>\n");
+                   opac_element_bool (wrbuf, 4, "availableNow",
+                                      d->circulationData[j]->availableNow);
+                   opac_element_str (wrbuf, 4, "availabiltyDate",
+                                     d->circulationData[j]->availablityDate);
+                   opac_element_str (wrbuf, 4, "availableThru",
+                                     d->circulationData[j]->availableThru);
+                   opac_element_str (wrbuf, 4, "restrictions",
+                                     d->circulationData[j]->restrictions);
+                   opac_element_str (wrbuf, 4, "itemId",
+                                     d->circulationData[j]->itemId);
+                   opac_element_bool (wrbuf, 4, "renewable",
+                                      d->circulationData[j]->renewable);
+                   opac_element_bool (wrbuf, 4, "onHold",
+                                      d->circulationData[j]->onHold);
+                   opac_element_str (wrbuf, 4, "enumAndChron",
+                                     d->circulationData[j]->enumAndChron);
+                   opac_element_str (wrbuf, 4, "midspine",
+                                     d->circulationData[j]->midspine);
+                   opac_element_str (wrbuf, 4, "temporaryLocation",
+                                     d->circulationData[j]->temporaryLocation);
+                   wrbuf_puts (wrbuf, "   </circulation>\n");
+               }
+               wrbuf_puts (wrbuf, "  </circulations>\n");
+           }
+       }
+       wrbuf_puts(wrbuf, " </holding>\n");
+    }
+    wrbuf_puts(wrbuf, "</holdings>\n");
+}
diff --git a/src/options.c b/src/options.c
new file mode 100644 (file)
index 0000000..ee836da
--- /dev/null
@@ -0,0 +1,121 @@
+/*
+ * Copyright (c) 1995-2000, Index Data
+ * See the file LICENSE for details.
+ * Sebastian Hammer, Adam Dickmeiss
+ *
+ * $Log: options.c,v $
+ * Revision 1.1  2003-10-27 12:21:34  adam
+ * Source restructure. yaz-marcdump part of installation
+ *
+ * Revision 1.8  2000/02/29 13:44:55  adam
+ * Check for config.h (currently not generated).
+ *
+ * Revision 1.7  1999/11/30 13:47:12  adam
+ * Improved installation. Moved header files to include/yaz.
+ *
+ * Revision 1.6  1997/09/01 08:54:13  adam
+ * New windows NT/95 port using MSV5.0. Made prefix query handling
+ * thread safe. The function options ignores empty arguments when met.
+ *
+ * Revision 1.5  1995/12/06 13:00:19  adam
+ * Minus alone not treated as an option.
+ *
+ * Revision 1.4  1995/09/29  17:12:35  quinn
+ * Smallish
+ *
+ * Revision 1.3  1995/09/27  15:03:03  quinn
+ * Modified function heads & prototypes.
+ *
+ * Revision 1.2  1995/05/16  08:51:13  quinn
+ * License, documentation, and memory fixes
+ *
+ * Revision 1.1  1995/03/27  08:35:18  quinn
+ * Created util library
+ * Added memory debugging module. Imported options-manager
+ *
+ * Revision 1.2  1994/10/04  17:47:10  adam
+ * Function options now returns arg with error option.
+ *
+ * Revision 1.1  1994/08/16  15:57:22  adam
+ * The first utility modules.
+ *
+ */
+#if HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include <stdlib.h>
+
+#include <yaz/options.h>
+
+static int arg_no = 1;
+static int arg_off = 0;
+
+int options (const char *desc, char **argv, int argc, char **arg)
+{
+    int ch, i = 0;
+    
+    if (arg_no >= argc)
+        return -2;
+    if (arg_off == 0)
+    {
+        while (argv[arg_no][0] == '\0')
+        {
+            arg_no++;
+            if (arg_no >= argc)
+                return -2;
+        }
+        if (argv[arg_no][0] != '-' || argv[arg_no][1] == '\0')
+        {
+            *arg = argv[arg_no++];
+            return 0;
+        }
+        arg_off++;
+    }
+    ch = argv[arg_no][arg_off++];
+    while (desc[i])
+    {
+        int desc_char = desc[i++];
+        int type = 0;
+        if (desc[i] == ':')
+       {       /* string argument */
+            type = desc[i++];
+       }
+        if (desc_char == ch)
+       { /* option with argument */
+            if (type)
+           {
+                if (argv[arg_no][arg_off])
+               {
+                    *arg = argv[arg_no]+arg_off;
+                    arg_no++;
+                    arg_off =  0;
+               }
+                else
+               {
+                    arg_no++;
+                    arg_off = 0;
+                    if (arg_no < argc)
+                        *arg = argv[arg_no++];
+                    else
+                        *arg = "";
+               }
+           }
+            else /* option with no argument */
+           {
+                if (argv[arg_no][arg_off])
+                    arg_off++;
+                else
+               {
+                    arg_off = 0;
+                    arg_no++;
+               }
+           }
+            return ch;
+       }               
+    }
+    *arg = argv[arg_no]+arg_off-1;
+    arg_no = arg_no + 1;
+    arg_off = 0;
+    return -1;
+}
diff --git a/src/otherinfo.c b/src/otherinfo.c
new file mode 100644 (file)
index 0000000..72de061
--- /dev/null
@@ -0,0 +1,211 @@
+/*
+ * Copyright (c) 1999-2003, Index Data
+ * See the file LICENSE for details.
+ * Sebastian Hammer, Adam Dickmeiss
+ *
+ * $Id: otherinfo.c,v 1.1 2003-10-27 12:21:34 adam Exp $
+ */
+
+#include <stdio.h>
+#include <string.h>
+
+#include <yaz/otherinfo.h>
+
+void yaz_oi_APDU(Z_APDU *apdu, Z_OtherInformation ***oip)
+{
+    switch (apdu->which)
+    {
+    case Z_APDU_initRequest:
+       *oip = &apdu->u.initRequest->otherInfo;
+       break;
+    case Z_APDU_searchRequest:
+       *oip = &apdu->u.searchRequest->otherInfo;
+       break;
+    case Z_APDU_presentRequest:
+       *oip = &apdu->u.presentRequest->otherInfo;
+       break;
+    case Z_APDU_sortRequest:
+       *oip = &apdu->u.sortRequest->otherInfo;
+       break;
+    case Z_APDU_scanRequest:
+       *oip = &apdu->u.scanRequest->otherInfo;
+       break;
+    case Z_APDU_extendedServicesRequest:
+       *oip = &apdu->u.extendedServicesRequest->otherInfo;
+       break;
+    case Z_APDU_deleteResultSetRequest:
+       *oip = &apdu->u.deleteResultSetRequest->otherInfo;
+       break;
+    case Z_APDU_initResponse:
+       *oip = &apdu->u.initResponse->otherInfo;
+       break;
+    case Z_APDU_searchResponse:
+       *oip = &apdu->u.searchResponse->otherInfo;
+       break;
+    case Z_APDU_presentResponse:
+       *oip = &apdu->u.presentResponse->otherInfo;
+       break;
+    case Z_APDU_sortResponse:
+       *oip = &apdu->u.sortResponse->otherInfo;
+       break;
+    case Z_APDU_scanResponse:
+       *oip = &apdu->u.scanResponse->otherInfo;
+       break;
+    case Z_APDU_extendedServicesResponse:
+       *oip = &apdu->u.extendedServicesResponse->otherInfo;
+       break;
+    case Z_APDU_deleteResultSetResponse:
+       *oip = &apdu->u.deleteResultSetResponse->otherInfo;
+       break;
+    case Z_APDU_duplicateDetectionRequest:
+       *oip = &apdu->u.duplicateDetectionRequest->otherInfo;
+       break;
+    case Z_APDU_duplicateDetectionResponse:
+       *oip = &apdu->u.duplicateDetectionResponse->otherInfo;
+       break;
+    default:
+       *oip = 0;
+       break;
+    }
+}
+
+Z_OtherInformationUnit *yaz_oi_update (
+    Z_OtherInformation **otherInformationP, ODR odr,
+    int *oid, int categoryValue, int delete_flag)
+{
+    int i;
+    Z_OtherInformation *otherInformation;
+
+    if (!otherInformationP)
+        return 0;
+    otherInformation = *otherInformationP;
+    if (!otherInformation)
+    {
+       if (!odr)
+           return 0;
+       otherInformation = *otherInformationP = (Z_OtherInformation *)
+           odr_malloc (odr, sizeof(*otherInformation));
+       otherInformation->num_elements = 0;
+       otherInformation->list = 0;
+    }
+    for (i = 0; i<otherInformation->num_elements; i++)
+    {
+       if (!oid)
+       {
+           if (!otherInformation->list[i]->category)
+               return otherInformation->list[i];
+       }
+       else
+       {
+           if (otherInformation->list[i]->category &&
+               categoryValue ==
+               *otherInformation->list[i]->category->categoryValue &&
+               !oid_oidcmp (oid, otherInformation->list[i]->category->
+                            categoryTypeId))
+           {
+               Z_OtherInformationUnit *this_list = otherInformation->list[i];
+
+               if (delete_flag)
+               {
+                   (otherInformation->num_elements)--;
+                   while (i < otherInformation->num_elements)
+                   {
+                       otherInformation->list[i] =
+                           otherInformation->list[i+1];
+                       i++;
+                   }
+               }
+               return this_list;
+           }
+       }
+    }
+    if (!odr)
+       return 0;
+    else
+    {
+       Z_OtherInformationUnit **newlist = (Z_OtherInformationUnit**)
+           odr_malloc(odr, (otherInformation->num_elements+1) *
+                      sizeof(*newlist));
+       for (i = 0; i<otherInformation->num_elements; i++)
+           newlist[i] = otherInformation->list[i];
+       otherInformation->list = newlist;
+       
+       otherInformation->list[i] = (Z_OtherInformationUnit*)
+           odr_malloc (odr, sizeof(Z_OtherInformationUnit));
+       if (oid)
+       {
+           otherInformation->list[i]->category = (Z_InfoCategory*)
+               odr_malloc (odr, sizeof(Z_InfoCategory));
+           otherInformation->list[i]->category->categoryTypeId = (int*)
+               odr_oiddup (odr, oid);
+           otherInformation->list[i]->category->categoryValue = (int*)
+               odr_malloc (odr, sizeof(int));
+           *otherInformation->list[i]->category->categoryValue =
+               categoryValue;
+       }
+       else
+           otherInformation->list[i]->category = 0;
+       otherInformation->list[i]->which = Z_OtherInfo_characterInfo;
+       otherInformation->list[i]->information.characterInfo = 0;
+       
+       otherInformation->num_elements = i+1;
+       return otherInformation->list[i];
+    }
+}
+
+void yaz_oi_set_string_oid (
+    Z_OtherInformation **otherInformation, ODR odr,
+    int *oid, int categoryValue,
+    const char *str)
+{
+    Z_OtherInformationUnit *oi =
+       yaz_oi_update(otherInformation, odr, oid, categoryValue, 0);
+    if (!oi)
+       return;
+    oi->which = Z_OtherInfo_characterInfo;
+    oi->information.characterInfo = odr_strdup (odr, str);
+}
+
+void yaz_oi_set_string_oidval (
+    Z_OtherInformation **otherInformation, ODR odr,
+    int oidval, int categoryValue,
+    const char *str)
+{
+    int oid[OID_SIZE];
+    struct oident ent;
+    ent.proto = PROTO_Z3950;
+    ent.oclass = CLASS_USERINFO;
+    ent.value = (oid_value) oidval;
+    if (!oid_ent_to_oid (&ent, oid))
+       return ;
+    yaz_oi_set_string_oid(otherInformation,
+                         odr, oid, categoryValue, str);
+}
+
+char *yaz_oi_get_string_oid (
+    Z_OtherInformation **otherInformation,
+    int *oid, int categoryValue, int delete_flag)
+{
+    Z_OtherInformationUnit *oi;
+    
+    if ((oi = yaz_oi_update(otherInformation, 0, oid, 1, delete_flag)) &&
+       oi->which == Z_OtherInfo_characterInfo)
+       return oi->information.characterInfo;
+    return 0;
+}
+
+char *yaz_oi_get_string_oidval(Z_OtherInformation **otherInformation,
+                              int oidval, int categoryValue, int delete_flag)
+{
+    int oid[OID_SIZE];
+    struct oident ent;
+    ent.proto = PROTO_Z3950;
+    ent.oclass = CLASS_USERINFO;
+    ent.value = (oid_value) oidval;
+
+    if (!oid_ent_to_oid (&ent, oid))
+       return 0;
+    return yaz_oi_get_string_oid (otherInformation, oid, categoryValue,
+                                 delete_flag);
+}
+
diff --git a/src/pquery.c b/src/pquery.c
new file mode 100644 (file)
index 0000000..bcaa487
--- /dev/null
@@ -0,0 +1,817 @@
+/*
+ * Copyright (c) 1995-2003, Index Data.
+ * See the file LICENSE for details.
+ *
+ * $Id: pquery.c,v 1.1 2003-10-27 12:21:35 adam Exp $
+ */
+
+#include <stdio.h>
+#include <string.h>
+#include <stdlib.h>
+#include <ctype.h>
+
+#include <yaz/proto.h>
+#include <yaz/oid.h>
+#include <yaz/pquery.h>
+
+static oid_value p_query_dfset = VAL_NONE;
+
+struct yaz_pqf_parser {
+    const char *query_buf;
+    const char *query_ptr;
+    const char *lex_buf;
+    size_t lex_len;
+    int query_look;
+    char *left_sep;
+    char *right_sep;
+    int escape_char;
+    int term_type;
+    int external_type;
+    int error;
+};
+
+static Z_RPNStructure *rpn_structure (struct yaz_pqf_parser *li, ODR o,
+                                      oid_proto, 
+                                      int num_attr, int max_attr, 
+                                      int *attr_list, char **attr_clist,
+                                     oid_value *attr_set);
+
+static enum oid_value query_oid_getvalbyname (struct yaz_pqf_parser *li)
+{
+    enum oid_value value;
+    char buf[32];
+
+    if (li->lex_len > 31)
+        return VAL_NONE;
+    memcpy (buf, li->lex_buf, li->lex_len);
+    buf[li->lex_len] = '\0';
+    value = oid_getvalbyname (buf);
+    return value;
+}
+
+static int compare_term (struct yaz_pqf_parser *li, const char *src,
+                         size_t off)
+{
+    size_t len=strlen(src);
+    
+    if (li->lex_len == len+off && !memcmp (li->lex_buf+off, src, len-off))
+       return 1;
+    return 0;
+}
+
+static int query_token (struct yaz_pqf_parser *li)
+{
+    int sep_char = ' ';
+    const char *sep_match;
+    const char **qptr = &li->query_ptr;
+
+    while (**qptr == ' ')
+        (*qptr)++;
+    if (**qptr == '\0')
+        return 0;
+    li->lex_len = 0;
+    if ((sep_match = strchr (li->left_sep, **qptr)))
+    {
+       sep_char = li->right_sep[sep_match - li->left_sep];
+        ++(*qptr);
+    }
+    li->lex_buf = *qptr;
+   
+    if (**qptr == li->escape_char && isdigit ((*qptr)[1]))
+    {
+       ++(li->lex_len);
+       ++(*qptr);
+       return 'l';
+    }
+    while (**qptr && **qptr != sep_char)
+    {
+       if (**qptr == '\\')
+       {
+           ++(li->lex_len);
+           ++(*qptr);
+       }
+       ++(li->lex_len);
+       ++(*qptr);
+    }
+    if (**qptr)
+       ++(*qptr);
+    if (sep_char == ' ' &&
+        li->lex_len >= 1 && li->lex_buf[0] == li->escape_char)
+    {
+       if (compare_term (li, "and", 1))
+           return 'a';
+        if (compare_term (li, "or", 1))
+            return 'o';
+        if (compare_term (li, "not", 1))
+            return 'n';
+        if (compare_term (li, "attr", 1))
+            return 'l';
+        if (compare_term (li, "set", 1))
+            return 's';
+        if (compare_term (li, "attrset", 1))
+            return 'r';
+        if (compare_term (li, "prox", 1))
+            return 'p';
+        if (compare_term (li, "term", 1))
+            return 'y';
+    }
+    return 't';
+}
+
+static int lex (struct yaz_pqf_parser *li)
+{
+    return li->query_look = query_token (li);
+}
+
+static int escape_string(char *out_buf, const char *in, int len)
+{
+
+    char *out = out_buf;
+    while (--len >= 0)
+       if (*in == '\\' && len > 0)
+       {
+           --len;
+           switch (*++in)
+           {
+           case 't':
+               *out++ = '\t';
+               break;
+           case 'n':
+               *out++ = '\n';
+               break;
+           case 'r':
+               *out++ = '\r';
+               break;
+           case 'f':
+               *out++ = '\f';
+               break;
+           case 'x':
+               if (len > 1)
+               {
+                   char s[4];
+                   int n = 0;
+                   s[0] = *++in;
+                   s[1] = *++in;
+                   s[2] = '\0';
+                   len = len - 2;
+                   sscanf (s, "%x", &n);
+                   *out++ = n;
+               }
+               break;
+           case '0':
+           case '1':
+           case '2':
+           case '3':
+               if (len > 1)
+               {
+                   char s[4];
+                   int n = 0;
+                   s[0] = *in;
+                   s[1] = *++in;                   
+                   s[2] = *++in;
+                   s[3] = '\0';
+                   len = len - 2;
+                   sscanf (s, "%o", &n);
+                   *out++ = n;
+               }
+               break;
+           default:
+               *out++ = *in;
+               break;
+           }
+           in++;
+       }
+       else
+           *out++ = *in++;
+    return out - out_buf;
+}
+
+static int p_query_parse_attr(struct yaz_pqf_parser *li, ODR o,
+                             int num_attr, int *attr_list,
+                             char **attr_clist, oid_value *attr_set)
+{
+    const char *cp;
+    if (!(cp = strchr (li->lex_buf, '=')) ||
+       (size_t) (cp-li->lex_buf) > li->lex_len)
+    {
+       attr_set[num_attr] = query_oid_getvalbyname (li);
+       if (attr_set[num_attr] == VAL_NONE)
+        {
+            li->error = YAZ_PQF_ERROR_ATTSET;
+           return 0;
+        }
+       if (!lex (li))
+        {
+            li->error = YAZ_PQF_ERROR_MISSING;
+            return 0;
+        }
+       if (!(cp = strchr (li->lex_buf, '=')))
+        {
+            li->error = YAZ_PQF_ERROR_BADATTR;
+           return 0;
+        }
+    }
+    else 
+    {
+       if (num_attr > 0)
+           attr_set[num_attr] = attr_set[num_attr-1];
+       else
+           attr_set[num_attr] = VAL_NONE;
+    }
+    attr_list[2*num_attr] = atoi(li->lex_buf);
+       cp++;
+    if (*cp >= '0' && *cp <= '9')
+    {
+       attr_list[2*num_attr+1] = atoi (cp);
+       attr_clist[num_attr] = 0;
+    }
+    else
+    {
+       int len = li->lex_len - (cp - li->lex_buf);
+       attr_list[2*num_attr+1] = 0;
+       attr_clist[num_attr] = (char *) odr_malloc (o, len+1);
+       len = escape_string(attr_clist[num_attr], cp, len);
+       attr_clist[num_attr][len] = '\0';
+    }
+    return 1;
+}
+
+static Z_AttributesPlusTerm *rpn_term (struct yaz_pqf_parser *li, ODR o,
+                                       oid_proto proto, 
+                                       int num_attr, int *attr_list,
+                                      char **attr_clist, oid_value *attr_set)
+{
+    Z_AttributesPlusTerm *zapt;
+    Odr_oct *term_octet;
+    Z_Term *term;
+    Z_AttributeElement **elements;
+
+    zapt = (Z_AttributesPlusTerm *)odr_malloc (o, sizeof(*zapt));
+    term_octet = (Odr_oct *)odr_malloc (o, sizeof(*term_octet));
+    term = (Z_Term *)odr_malloc (o, sizeof(*term));
+
+    if (!num_attr)
+        elements = (Z_AttributeElement**)odr_nullval();
+    else
+    {
+        int i, k = 0;
+        int *attr_tmp;
+
+        elements = (Z_AttributeElement**)
+           odr_malloc (o, num_attr * sizeof(*elements));
+
+        attr_tmp = (int *)odr_malloc (o, num_attr * 2 * sizeof(int));
+        memcpy (attr_tmp, attr_list, num_attr * 2 * sizeof(int));
+        for (i = num_attr; --i >= 0; )
+        {
+            int j;
+            for (j = i+1; j<num_attr; j++)
+                if (attr_tmp[2*j] == attr_tmp[2*i])
+                    break;
+            if (j < num_attr)
+                continue;
+            elements[k] =
+                (Z_AttributeElement*)odr_malloc (o,sizeof(**elements));
+            elements[k]->attributeType = &attr_tmp[2*i];
+           elements[k]->attributeSet =
+               yaz_oidval_to_z3950oid(o, CLASS_ATTSET, attr_set[i]);
+
+           if (attr_clist[i])
+           {
+               elements[k]->which = Z_AttributeValue_complex;
+               elements[k]->value.complex = (Z_ComplexAttribute *)
+                   odr_malloc (o, sizeof(Z_ComplexAttribute));
+               elements[k]->value.complex->num_list = 1;
+               elements[k]->value.complex->list =
+                   (Z_StringOrNumeric **)
+                   odr_malloc (o, 1 * sizeof(Z_StringOrNumeric *));
+               elements[k]->value.complex->list[0] =
+                   (Z_StringOrNumeric *)
+                   odr_malloc (o, sizeof(Z_StringOrNumeric));
+               elements[k]->value.complex->list[0]->which =
+                   Z_StringOrNumeric_string;
+               elements[k]->value.complex->list[0]->u.string =
+                   attr_clist[i];
+               elements[k]->value.complex->semanticAction = (int **)
+                   odr_nullval();
+               elements[k]->value.complex->num_semanticAction = 0;
+           }
+           else
+           {
+               elements[k]->which = Z_AttributeValue_numeric;
+               elements[k]->value.numeric = &attr_tmp[2*i+1];
+           }
+            k++;
+        }
+        num_attr = k;
+    }
+    zapt->attributes = (Z_AttributeList *)
+       odr_malloc (o, sizeof(*zapt->attributes));
+    zapt->attributes->num_attributes = num_attr;
+    zapt->attributes->attributes = elements;
+
+    zapt->term = term;
+
+    term_octet->buf = (unsigned char *)odr_malloc (o, 1 + li->lex_len);
+    term_octet->size = term_octet->len =
+        escape_string ((char *) (term_octet->buf), li->lex_buf, li->lex_len);
+    term_octet->buf[term_octet->size] = 0;  /* null terminate */
+    
+    switch (li->term_type)
+    {
+    case Z_Term_general:
+        term->which = Z_Term_general;
+        term->u.general = term_octet;
+        break;
+    case Z_Term_characterString:
+        term->which = Z_Term_characterString;
+        term->u.characterString = (char*) term_octet->buf; 
+                                    /* null terminated above */
+        break;
+    case Z_Term_numeric:
+        term->which = Z_Term_numeric;
+        term->u.numeric = odr_intdup (o, atoi((char*) (term_octet->buf)));
+        break;
+    case Z_Term_null:
+        term->which = Z_Term_null;
+        term->u.null = odr_nullval();
+        break;
+    case Z_Term_external:
+        term->which = Z_Term_external;
+       term->u.external = 0;
+       break;
+    default:
+        term->which = Z_Term_null;
+        term->u.null = odr_nullval();
+        break;
+    }
+    return zapt;
+}
+
+static Z_Operand *rpn_simple (struct yaz_pqf_parser *li, ODR o, oid_proto proto,
+                              int num_attr, int *attr_list, char **attr_clist,
+                              oid_value *attr_set)
+{
+    Z_Operand *zo;
+
+    zo = (Z_Operand *)odr_malloc (o, sizeof(*zo));
+    switch (li->query_look)
+    {
+    case 't':
+        zo->which = Z_Operand_APT;
+        if (!(zo->u.attributesPlusTerm =
+              rpn_term (li, o, proto, num_attr, attr_list, attr_clist,
+                       attr_set)))
+            return 0;
+        lex (li);
+        break;
+    case 's':
+        lex (li);
+        if (!li->query_look)
+        {
+            li->error = YAZ_PQF_ERROR_MISSING;
+            return 0;
+        }
+        zo->which = Z_Operand_resultSetId;
+        zo->u.resultSetId = (char *)odr_malloc (o, li->lex_len+1);
+        memcpy (zo->u.resultSetId, li->lex_buf, li->lex_len);
+        zo->u.resultSetId[li->lex_len] = '\0';
+        lex (li);
+        break;
+    default:
+        /* we're only called if one of the above types are seens so
+           this shouldn't happen */
+        li->error = YAZ_PQF_ERROR_INTERNAL;
+        return 0;
+    }
+    return zo;
+}
+
+static Z_ProximityOperator *rpn_proximity (struct yaz_pqf_parser *li, ODR o)
+{
+    Z_ProximityOperator *p = (Z_ProximityOperator *)odr_malloc (o, sizeof(*p));
+
+    if (!lex (li))
+    {
+        li->error = YAZ_PQF_ERROR_MISSING;
+        return NULL;
+    }
+    if (*li->lex_buf == '1')
+    {
+        p->exclusion = (int *)odr_malloc (o, sizeof(*p->exclusion));
+        *p->exclusion = 1;
+    } 
+    else if (*li->lex_buf == '0')
+    {
+        p->exclusion = (int *)odr_malloc (o, sizeof(*p->exclusion));
+        *p->exclusion = 0;
+    }
+    else
+        p->exclusion = NULL;
+
+    if (!lex (li))
+    {
+        li->error = YAZ_PQF_ERROR_MISSING;
+        return NULL;
+    }
+    p->distance = (int *)odr_malloc (o, sizeof(*p->distance));
+    *p->distance = atoi (li->lex_buf);
+
+    if (!lex (li))
+    {
+        li->error = YAZ_PQF_ERROR_MISSING;
+        return NULL;
+    }
+    p->ordered = (int *)odr_malloc (o, sizeof(*p->ordered));
+    *p->ordered = atoi (li->lex_buf);
+    
+    if (!lex (li))
+    {
+        li->error = YAZ_PQF_ERROR_MISSING;
+        return NULL;
+    }
+    p->relationType = (int *)odr_malloc (o, sizeof(*p->relationType));
+    *p->relationType = atoi (li->lex_buf);
+
+    if (!lex (li))
+    {
+        li->error = YAZ_PQF_ERROR_MISSING;
+        return NULL;
+    }
+    if (*li->lex_buf == 'k')
+        p->which = 0;
+    else if (*li->lex_buf == 'p')
+        p->which = 1;
+    else
+        p->which = atoi (li->lex_buf);
+
+    if (!lex (li))
+    {
+        li->error = YAZ_PQF_ERROR_MISSING;
+        return NULL;
+    }
+    p->which = Z_ProximityOperator_known;
+    p->u.known = (int *)odr_malloc (o, sizeof(*p->u.known));
+    *p->u.known = atoi (li->lex_buf);
+    return p;
+}
+
+static Z_Complex *rpn_complex (struct yaz_pqf_parser *li, ODR o, oid_proto proto,
+                               int num_attr, int max_attr, 
+                               int *attr_list, char **attr_clist,
+                              oid_value *attr_set)
+{
+    Z_Complex *zc;
+    Z_Operator *zo;
+
+    zc = (Z_Complex *)odr_malloc (o, sizeof(*zc));
+    zo = (Z_Operator *)odr_malloc (o, sizeof(*zo));
+    zc->roperator = zo;
+    switch (li->query_look)
+    {
+    case 'a':
+        zo->which = Z_Operator_and;
+        zo->u.and_not = odr_nullval();
+        break;
+    case 'o':
+        zo->which = Z_Operator_or;
+        zo->u.and_not = odr_nullval();
+        break;
+    case 'n':
+        zo->which = Z_Operator_and_not;
+        zo->u.and_not = odr_nullval();
+        break;
+    case 'p':
+        zo->which = Z_Operator_prox;
+        zo->u.prox = rpn_proximity (li, o);
+        if (!zo->u.prox)
+            return NULL;
+        break;
+    default:
+        /* we're only called if one of the above types are seens so
+           this shouldn't happen */
+        li->error = YAZ_PQF_ERROR_INTERNAL;
+        return NULL;
+    }
+    lex (li);
+    if (!(zc->s1 =
+          rpn_structure (li, o, proto, num_attr, max_attr, attr_list,
+                        attr_clist, attr_set)))
+        return NULL;
+    if (!(zc->s2 =
+          rpn_structure (li, o, proto, num_attr, max_attr, attr_list,
+                         attr_clist, attr_set)))
+        return NULL;
+    return zc;
+}
+
+static void rpn_term_type (struct yaz_pqf_parser *li, ODR o)
+{
+    if (!li->query_look)
+        return ;
+    if (compare_term (li, "general", 0))
+        li->term_type = Z_Term_general;
+    else if (compare_term (li, "numeric", 0))
+        li->term_type = Z_Term_numeric;
+    else if (compare_term (li, "string", 0))
+        li->term_type = Z_Term_characterString;
+    else if (compare_term (li, "oid", 0))
+        li->term_type = Z_Term_oid;
+    else if (compare_term (li, "datetime", 0))
+        li->term_type = Z_Term_dateTime;
+    else if (compare_term (li, "null", 0))
+        li->term_type = Z_Term_null;
+    else if (compare_term(li, "range", 0))
+    {
+       /* prepare for external: range search .. */
+        li->term_type = Z_Term_external;
+       li->external_type = VAL_MULTISRCH2;
+    }
+    lex (li);
+}
+                           
+static Z_RPNStructure *rpn_structure (struct yaz_pqf_parser *li, ODR o,
+                                      oid_proto proto, 
+                                      int num_attr, int max_attr, 
+                                      int *attr_list,
+                                     char **attr_clist,
+                                     oid_value *attr_set)
+{
+    Z_RPNStructure *sz;
+
+    sz = (Z_RPNStructure *)odr_malloc (o, sizeof(*sz));
+    switch (li->query_look)
+    {
+    case 'a':
+    case 'o':
+    case 'n':
+    case 'p':
+        sz->which = Z_RPNStructure_complex;
+        if (!(sz->u.complex =
+              rpn_complex (li, o, proto, num_attr, max_attr, attr_list,
+                           attr_clist, attr_set)))
+            return NULL;
+        break;
+    case 't':
+    case 's':
+        sz->which = Z_RPNStructure_simple;
+        if (!(sz->u.simple =
+              rpn_simple (li, o, proto, num_attr, attr_list,
+                          attr_clist, attr_set)))
+            return NULL;
+        break;
+    case 'l':
+        lex (li);
+        if (!li->query_look)
+        {
+            li->error = YAZ_PQF_ERROR_MISSING;
+            return 0;
+        }
+        if (num_attr >= max_attr)
+        {
+            li->error = YAZ_PQF_ERROR_TOOMANY;
+            return 0;
+        }
+       if (!p_query_parse_attr(li, o, num_attr, attr_list,
+                                attr_clist, attr_set))
+            return 0;
+       num_attr++;
+        lex (li);
+        return
+            rpn_structure (li, o, proto, num_attr, max_attr, attr_list,
+                          attr_clist,  attr_set);
+    case 'y':
+       lex (li);
+        rpn_term_type (li, o);
+        return
+            rpn_structure (li, o, proto, num_attr, max_attr, attr_list,
+                          attr_clist, attr_set);
+    case 0:                /* operator/operand expected! */
+        li->error = YAZ_PQF_ERROR_MISSING;
+        return 0;
+    }
+    return sz;
+}
+
+Z_RPNQuery *p_query_rpn_mk (ODR o, struct yaz_pqf_parser *li, oid_proto proto,
+                            const char *qbuf)
+{
+    Z_RPNQuery *zq;
+    int attr_array[1024];
+    char *attr_clist[512];
+    oid_value attr_set[512];
+    oid_value topSet = VAL_NONE;
+
+    zq = (Z_RPNQuery *)odr_malloc (o, sizeof(*zq));
+    lex (li);
+    if (li->query_look == 'r')
+    {
+        lex (li);
+        topSet = query_oid_getvalbyname (li);
+        if (topSet == VAL_NONE)
+        {
+            li->error = YAZ_PQF_ERROR_ATTSET;
+            return NULL;
+        }
+
+        lex (li);
+    }
+    if (topSet == VAL_NONE)
+        topSet = p_query_dfset;
+    if (topSet == VAL_NONE)
+        topSet = VAL_BIB1;
+
+    zq->attributeSetId = yaz_oidval_to_z3950oid(o, CLASS_ATTSET, topSet);
+
+    if (!zq->attributeSetId)
+    {
+        li->error = YAZ_PQF_ERROR_ATTSET;
+       return 0;
+    }
+
+    if (!(zq->RPNStructure = rpn_structure (li, o, proto, 0, 512,
+                                            attr_array, attr_clist, attr_set)))
+        return 0;
+    if (li->query_look)
+    {
+        li->error = YAZ_PQF_ERROR_EXTRA;
+        return 0;
+    }
+    return zq;
+}
+
+Z_RPNQuery *p_query_rpn (ODR o, oid_proto proto,
+                         const char *qbuf)
+{
+    struct yaz_pqf_parser li;
+
+    li.error = 0;
+    li.left_sep = "{\"";
+    li.right_sep = "}\"";
+    li.escape_char = '@';
+    li.term_type = Z_Term_general;
+    li.query_buf = li.query_ptr = qbuf;
+    li.lex_buf = 0;
+    return p_query_rpn_mk (o, &li, proto, qbuf);
+}
+
+
+Z_AttributesPlusTerm *p_query_scan_mk (struct yaz_pqf_parser *li,
+                                       ODR o, oid_proto proto,
+                                       Odr_oid **attributeSetP,
+                                       const char *qbuf)
+{
+    int attr_list[1024];
+    char *attr_clist[512];
+    oid_value attr_set[512];
+    int num_attr = 0;
+    int max_attr = 512;
+    oid_value topSet = VAL_NONE;
+    Z_AttributesPlusTerm *apt;
+
+    lex (li);
+    if (li->query_look == 'r')
+    {
+        lex (li);
+        topSet = query_oid_getvalbyname (li);
+
+        lex (li);
+    }
+    if (topSet == VAL_NONE)
+        topSet = p_query_dfset;
+    if (topSet == VAL_NONE)
+        topSet = VAL_BIB1;
+
+    *attributeSetP = yaz_oidval_to_z3950oid (o, CLASS_ATTSET, topSet);
+
+    while (1)
+    {
+        if (li->query_look == 'l')
+        {
+            lex (li);
+            if (!li->query_look)
+            {
+                li->error = YAZ_PQF_ERROR_MISSING;
+                return 0;
+            }
+            if (num_attr >= max_attr)
+            {
+                li->error = YAZ_PQF_ERROR_TOOMANY;
+                return 0;
+            }
+            if (!p_query_parse_attr(li, o, num_attr, attr_list,
+                                    attr_clist, attr_set))
+                return 0;
+            num_attr++;
+            lex (li);
+        }
+        else if (li->query_look == 'y')
+        {
+            lex (li);
+            rpn_term_type (li, o);
+        }
+        else
+            break;
+    }
+    if (!li->query_look)
+    {
+        li->error = YAZ_PQF_ERROR_MISSING;
+        return 0;
+    }
+    apt = rpn_term (li, o, proto, num_attr, attr_list, attr_clist, attr_set);
+
+    lex (li);
+
+    if (li->query_look != 0)
+    {
+        li->error = YAZ_PQF_ERROR_EXTRA;
+        return 0;
+    }
+    return apt;
+}
+
+Z_AttributesPlusTerm *p_query_scan (ODR o, oid_proto proto,
+                                    Odr_oid **attributeSetP,
+                                    const char *qbuf)
+{
+    struct yaz_pqf_parser li;
+
+    li.error = 0;
+    li.left_sep = "{\"";
+    li.right_sep = "}\"";
+    li.escape_char = '@';
+    li.term_type = Z_Term_general;
+    li.query_buf = li.query_ptr = qbuf;
+    li.lex_buf = 0;
+
+    return p_query_scan_mk (&li, o, proto, attributeSetP, qbuf);
+}
+
+int p_query_attset (const char *arg)
+{
+    p_query_dfset = oid_getvalbyname (arg);
+    return (p_query_dfset == VAL_NONE) ? -1 : 0;
+}
+
+YAZ_PQF_Parser yaz_pqf_create (void)
+{
+    YAZ_PQF_Parser p = (YAZ_PQF_Parser) xmalloc (sizeof(*p));
+
+    p->error = 0;
+    p->left_sep = "{\"";
+    p->right_sep = "}\"";
+    p->escape_char = '@';
+    p->term_type = Z_Term_general;
+
+    return p;
+}
+
+void yaz_pqf_destroy (YAZ_PQF_Parser p)
+{
+    xfree (p);
+}
+
+Z_RPNQuery *yaz_pqf_parse (YAZ_PQF_Parser p, ODR o, const char *qbuf)
+{
+    if (!p)
+        return 0;
+    p->query_buf = p->query_ptr = qbuf;
+    p->lex_buf = 0;
+    return p_query_rpn_mk (o, p, PROTO_Z3950, qbuf);
+}
+
+Z_AttributesPlusTerm *yaz_pqf_scan (YAZ_PQF_Parser p, ODR o,
+                                    Odr_oid **attributeSetP,
+                                    const char *qbuf)
+{
+    if (!p)
+        return 0;
+    p->query_buf = p->query_ptr = qbuf;
+    p->lex_buf = 0;
+    return p_query_scan_mk (p, o, PROTO_Z3950, attributeSetP, qbuf);
+}
+
+int yaz_pqf_error (YAZ_PQF_Parser p, const char **msg, size_t *off)
+{
+    switch (p->error)
+    {
+    case YAZ_PQF_ERROR_NONE:
+        *msg = "no error"; break;
+    case YAZ_PQF_ERROR_EXTRA:
+        *msg = "extra token"; break;
+    case YAZ_PQF_ERROR_MISSING:
+        *msg = "missing token"; break;
+    case YAZ_PQF_ERROR_ATTSET:
+        *msg = "unknown attribute set"; break;
+    case YAZ_PQF_ERROR_TOOMANY:
+        *msg = "too many attributes"; break;
+    case YAZ_PQF_ERROR_BADATTR:
+        *msg = "bad attribute specification"; break;
+    case YAZ_PQF_ERROR_INTERNAL:
+        *msg = "internal error"; break;
+    default:
+        *msg = "unknown error"; break;
+    }
+    *off = p->query_ptr - p->query_buf;
+    return p->error;
+}
diff --git a/src/prt-ext.c b/src/prt-ext.c
new file mode 100644 (file)
index 0000000..e3b0c5b
--- /dev/null
@@ -0,0 +1,232 @@
+/*
+ * Copyright (c) 1995-2003, Index Data.
+ * See the file LICENSE for details.
+ *
+ * $Id: prt-ext.c,v 1.1 2003-10-27 12:21:35 adam Exp $
+ */
+
+#include <yaz/proto.h>
+
+/*
+ * The table below should be moved to the ODR structure itself and
+ * be an image of the association context: To help
+ * map indirect references when they show up. 
+ */
+static Z_ext_typeent type_table[] =
+{
+    {VAL_SUTRS, Z_External_sutrs, (Odr_fun) z_SUTRS},
+    {VAL_EXPLAIN, Z_External_explainRecord, (Odr_fun)z_ExplainRecord},
+    {VAL_RESOURCE1, Z_External_resourceReport1, (Odr_fun)z_ResourceReport1},
+    {VAL_RESOURCE2, Z_External_resourceReport2, (Odr_fun)z_ResourceReport2},
+    {VAL_PROMPT1, Z_External_promptObject1, (Odr_fun)z_PromptObject1 },
+    {VAL_GRS1, Z_External_grs1, (Odr_fun)z_GenericRecord},
+    {VAL_EXTENDED, Z_External_extendedService, (Odr_fun)z_TaskPackage},
+    {VAL_ITEMORDER, Z_External_itemOrder, (Odr_fun)z_IOItemOrder},
+    {VAL_DIAG1, Z_External_diag1, (Odr_fun)z_DiagnosticFormat},
+    {VAL_ESPEC1, Z_External_espec1, (Odr_fun)z_Espec1},
+    {VAL_SUMMARY, Z_External_summary, (Odr_fun)z_BriefBib},
+    {VAL_OPAC, Z_External_OPAC, (Odr_fun)z_OPACRecord},
+    {VAL_SEARCHRES1, Z_External_searchResult1, (Odr_fun)z_SearchInfoReport},
+    {VAL_DBUPDATE, Z_External_update, (Odr_fun)z_IUUpdate},
+    {VAL_DBUPDATE0, Z_External_update0, (Odr_fun)z_IU0Update},
+    {VAL_DBUPDATE1, Z_External_update0, (Odr_fun)z_IU0Update},
+    {VAL_DATETIME, Z_External_dateTime, (Odr_fun)z_DateTime},
+    {VAL_UNIVERSE_REPORT, Z_External_universeReport,(Odr_fun)z_UniverseReport},
+    {VAL_ADMINSERVICE, Z_External_ESAdmin, (Odr_fun)z_Admin},
+    {VAL_USERINFO1, Z_External_userInfo1, (Odr_fun) z_OtherInformation},
+    {VAL_CHARNEG3, Z_External_charSetandLanguageNegotiation, (Odr_fun)
+                  z_CharSetandLanguageNegotiation},
+    {VAL_PROMPT1, Z_External_acfPrompt1, (Odr_fun) z_PromptObject1},
+    {VAL_DES1, Z_External_acfDes1, (Odr_fun) z_DES_RN_Object},
+    {VAL_KRB1, Z_External_acfKrb1, (Odr_fun) z_KRBObject},
+    {VAL_MULTISRCH2, Z_External_multisrch2, (Odr_fun) z_MultipleSearchTerms_2},
+    {VAL_CQL, Z_External_CQL, (Odr_fun) z_InternationalString},
+    {VAL_OCLCUI, Z_External_OCLCUserInfo, (Odr_fun) z_OCLC_UserInformation},
+    {VAL_NONE, 0, 0}
+};
+
+Z_ext_typeent *z_ext_getentbyref(oid_value val)
+{
+    Z_ext_typeent *i;
+
+    for (i = type_table; i->dref != VAL_NONE; i++)
+       if (i->dref == val)
+           return i;
+    return 0;
+}
+
+int z_External(ODR o, Z_External **p, int opt, const char *name)
+{
+    oident *oid;
+    Z_ext_typeent *type;
+
+    static Odr_arm arm[] =
+    {
+       {ODR_EXPLICIT, ODR_CONTEXT, 0, Z_External_single,
+        (Odr_fun)odr_any, 0},
+       {ODR_IMPLICIT, ODR_CONTEXT, 1, Z_External_octet,
+        (Odr_fun)odr_octetstring, 0},
+       {ODR_IMPLICIT, ODR_CONTEXT, 2, Z_External_arbitrary,
+        (Odr_fun)odr_bitstring, 0},
+       {ODR_EXPLICIT, ODR_CONTEXT, 0, Z_External_sutrs,
+        (Odr_fun)z_SUTRS, 0},
+       {ODR_EXPLICIT, ODR_CONTEXT, 0, Z_External_explainRecord,
+        (Odr_fun)z_ExplainRecord, 0},
+
+       {ODR_EXPLICIT, ODR_CONTEXT, 0, Z_External_resourceReport1,
+        (Odr_fun)z_ResourceReport1, 0},
+       {ODR_EXPLICIT, ODR_CONTEXT, 0, Z_External_resourceReport2,
+        (Odr_fun)z_ResourceReport2, 0},
+       {ODR_EXPLICIT, ODR_CONTEXT, 0, Z_External_promptObject1,
+        (Odr_fun)z_PromptObject1, 0},
+       {ODR_EXPLICIT, ODR_CONTEXT, 0, Z_External_grs1,
+        (Odr_fun)z_GenericRecord, 0},
+       {ODR_EXPLICIT, ODR_CONTEXT, 0, Z_External_extendedService,
+        (Odr_fun)z_TaskPackage, 0},
+
+       {ODR_EXPLICIT, ODR_CONTEXT, 0, Z_External_itemOrder,
+        (Odr_fun)z_IOItemOrder, 0},
+       {ODR_EXPLICIT, ODR_CONTEXT, 0, Z_External_diag1,
+        (Odr_fun)z_DiagnosticFormat, 0},
+       {ODR_EXPLICIT, ODR_CONTEXT, 0, Z_External_espec1,
+        (Odr_fun)z_Espec1, 0},
+       {ODR_EXPLICIT, ODR_CONTEXT, 0, Z_External_summary,
+        (Odr_fun)z_BriefBib, 0},
+       {ODR_EXPLICIT, ODR_CONTEXT, 0, Z_External_OPAC,
+        (Odr_fun)z_OPACRecord, 0},
+
+       {ODR_EXPLICIT, ODR_CONTEXT, 0, Z_External_searchResult1,
+        (Odr_fun)z_SearchInfoReport, 0},
+       {ODR_EXPLICIT, ODR_CONTEXT, 0, Z_External_update,
+        (Odr_fun)z_IUUpdate, 0},
+       {ODR_EXPLICIT, ODR_CONTEXT, 0, Z_External_dateTime,
+        (Odr_fun)z_DateTime, 0},
+       {ODR_EXPLICIT, ODR_CONTEXT, 0, Z_External_universeReport,
+        (Odr_fun)z_UniverseReport, 0},
+       {ODR_EXPLICIT, ODR_CONTEXT, 0, Z_External_ESAdmin,
+        (Odr_fun)z_Admin, 0},
+
+       {ODR_EXPLICIT, ODR_CONTEXT, 0, Z_External_update0,
+        (Odr_fun)z_IU0Update, 0},
+        {ODR_EXPLICIT, ODR_CONTEXT, 0, Z_External_userInfo1,
+         (Odr_fun)z_OtherInformation, 0},
+        {ODR_EXPLICIT, ODR_CONTEXT, 0, Z_External_charSetandLanguageNegotiation,
+         (Odr_fun)z_CharSetandLanguageNegotiation, 0},
+        {ODR_EXPLICIT, ODR_CONTEXT, 0, Z_External_acfPrompt1,
+         (Odr_fun)z_PromptObject1, 0},
+        {ODR_EXPLICIT, ODR_CONTEXT, 0, Z_External_acfDes1,
+         (Odr_fun)z_DES_RN_Object, 0},
+
+        {ODR_EXPLICIT, ODR_CONTEXT, 0, Z_External_acfKrb1,
+         (Odr_fun)z_KRBObject, 0},
+        {ODR_EXPLICIT, ODR_CONTEXT, 0, Z_External_multisrch2,
+         (Odr_fun)z_MultipleSearchTerms_2, 0},
+        {ODR_EXPLICIT, ODR_CONTEXT, 0, Z_External_CQL,
+         (Odr_fun)z_InternationalString, 0},
+        {ODR_EXPLICIT, ODR_CONTEXT, 0, Z_External_OCLCUserInfo,
+         (Odr_fun)z_OCLC_UserInformation, 0},
+       {-1, -1, -1, -1, 0, 0}
+    };
+    
+    odr_implicit_settag(o, ODR_UNIVERSAL, ODR_EXTERNAL);
+    if (!odr_sequence_begin(o, p, sizeof(**p), name))
+       return opt && odr_ok(o);
+    if (!(odr_oid(o, &(*p)->direct_reference, 1, 0) &&
+         odr_integer(o, &(*p)->indirect_reference, 1, 0) &&
+         odr_graphicstring(o, &(*p)->descriptor, 1, 0)))
+       return 0;
+    /*
+     * Do we know this beast?
+     */
+    if (o->direction == ODR_DECODE && (*p)->direct_reference &&
+       (oid = oid_getentbyoid((*p)->direct_reference)) &&
+       (type = z_ext_getentbyref(oid->value)))
+    {
+       int zclass, tag, cons;
+       
+       /*
+        * We know it. If it's represented as an ASN.1 type, bias the CHOICE.
+        */
+       if (!odr_peektag(o, &zclass, &tag, &cons))
+           return opt && odr_ok(o);
+       if (zclass == ODR_CONTEXT && tag == 0 && cons == 1)
+           odr_choice_bias(o, type->what);
+    }
+    return
+       odr_choice(o, arm, &(*p)->u, &(*p)->which, name) &&
+       odr_sequence_end(o);
+}
+
+Z_External *z_ext_record(ODR o, int format, const char *buf, int len)
+{
+    Z_External *thisext;
+
+    thisext = (Z_External *) odr_malloc(o, sizeof(*thisext));
+    thisext->descriptor = 0;
+    thisext->indirect_reference = 0;
+
+    thisext->direct_reference = 
+       yaz_oidval_to_z3950oid (o, CLASS_RECSYN, format);    
+    if (!thisext->direct_reference)
+       return 0;
+
+    if (len < 0) /* Structured data */
+    {
+       
+       /*
+        * We cheat on the pointers here. Obviously, the record field
+        * of the backend-fetch structure should have been a union for
+        * correctness, but we're stuck with this for backwards
+        * compatibility.
+        */
+       thisext->u.grs1 = (Z_GenericRecord*) buf;
+
+       switch (format)
+       {
+       case VAL_SUTRS:
+           thisext->which = Z_External_sutrs;
+           break;
+       case VAL_GRS1:
+           thisext->which = Z_External_grs1;
+           break;
+       case VAL_EXPLAIN:
+           thisext->which = Z_External_explainRecord;
+           break;
+       case VAL_SUMMARY:
+           thisext->which = Z_External_summary;
+           break;
+       case VAL_OPAC:
+           thisext->which = Z_External_OPAC;
+           break;
+       case VAL_EXTENDED:
+           thisext->which = Z_External_extendedService;
+           break;
+       default:
+           return 0;
+       }
+    }
+    else if (format == VAL_SUTRS) /* SUTRS is a single-ASN.1-type */
+    {
+       Odr_oct *sutrs = (Odr_oct *)odr_malloc(o, sizeof(*sutrs));
+       
+       thisext->which = Z_External_sutrs;
+       thisext->u.sutrs = sutrs;
+       sutrs->buf = (unsigned char *)odr_malloc(o, len);
+       sutrs->len = sutrs->size = len;
+       memcpy(sutrs->buf, buf, len);
+    }
+    else
+    {
+       thisext->which = Z_External_octet;
+       if (!(thisext->u.octet_aligned = (Odr_oct *)
+             odr_malloc(o, sizeof(Odr_oct))))
+           return 0;
+       if (!(thisext->u.octet_aligned->buf = (unsigned char *)
+             odr_malloc(o, len)))
+           return 0;
+       memcpy(thisext->u.octet_aligned->buf, buf, len);
+       thisext->u.octet_aligned->len = thisext->u.octet_aligned->size = len;
+    }
+    return thisext;
+}
+
diff --git a/src/query.c b/src/query.c
new file mode 100644 (file)
index 0000000..ec0bdcb
--- /dev/null
@@ -0,0 +1,116 @@
+/*
+ * Copyright (c) 1995-2001, Index Data
+ * See the file LICENSE for details.
+ *
+ * $Id: query.c,v 1.1 2003-10-27 12:21:35 adam Exp $
+ */
+
+#include <stdio.h>
+#include <ctype.h>
+#include <string.h>
+
+#include <yaz/odr.h>
+#include <yaz/proto.h>
+
+static Z_Complex *makecomplex(ODR o, char **buf);
+static Z_Operand *makesimple(ODR o, char **buf);
+Z_RPNStructure *makerpn(ODR o, char **buf);
+
+void skip_spaces(char**p)
+{
+    while (**p && isspace(**p))
+       (*p)++;
+}
+
+static Z_Operand *makesimple(ODR o, char **buf)
+{
+    Z_Operand *r;
+    Z_AttributesPlusTerm *t;
+    char *b;
+
+    r = odr_malloc(o, sizeof(*r));
+    if (**buf == 's' && *((*buf) + 1) == '=')
+    {
+       char *b = odr_malloc(o, 100);
+
+       r->which = Z_Operand_resultSetId;
+       r->u.resultSetId = b;
+       (*buf)++;
+       (*buf)++;
+       while (**buf && !isspace(**buf))
+           *(b++) = *((*buf)++);
+       *b = 0;
+       return r;
+    }
+    else if (**buf != '"')
+       return 0;
+    (*buf)++;
+    r->which = Z_Operand_APT;
+    r->u.attributesPlusTerm = t = odr_malloc(o, sizeof(*t));
+    t->attributes = odr_malloc(o, sizeof(*t));
+    t->attributes->num_attributes = 0;
+    t->attributes->attributes = 0;
+    t->term = odr_malloc(o, sizeof(*t->term));
+    t->term->which = Z_Term_general;
+    t->term->u.general = odr_malloc(o, sizeof(Odr_oct));
+    t->term->u.general->buf = odr_malloc(o, 100);
+    t->term->u.general->size = 100;
+    t->term->u.general->len = 0;
+    b = (char*) t->term->u.general->buf;
+    while (**buf && **buf != '"')
+    {
+       *(b++) = *((*buf)++);
+       t->term->u.general->len++;
+    }
+    if (**buf != '"')
+       return 0;
+    (*buf)++;
+    return r;
+}
+
+static Z_Complex *makecomplex(ODR o, char **buf)
+{
+    Z_Complex *r;
+    char op[100], *b;
+
+    r = odr_malloc(o, sizeof(*r));
+    r->roperator = odr_malloc(o, sizeof(*r->roperator));
+
+    b = op;
+    while (**buf && !isspace(**buf))
+       *(b++) = *((*buf)++);
+    *b = 0;
+    if (!strcmp(op, "and"))
+       r->roperator->which = Z_Operator_and;
+    else if (!strcmp(op, "or"))
+       r->roperator->which = Z_Operator_or;
+    else if (!strcmp(op, "not"))
+       r->roperator->which = Z_Operator_and_not;
+    r->roperator->u.and = "";
+    while (**buf && !isspace(**buf))
+       (*buf)++;
+    if (!(r->s1 = makerpn(o, buf)))
+       return 0;
+    if (!(r->s2 = makerpn(o, buf)))
+       return 0;
+    return r;
+}
+    
+Z_RPNStructure *makerpn(ODR o, char **buf)
+{
+    Z_RPNStructure *r;
+
+    r = odr_malloc(o, sizeof(*r));
+    skip_spaces(buf);
+    if (**buf == '"' || **buf == 's')
+    {
+       r->which = Z_RPNStructure_simple;
+       if (!(r->u.simple = makesimple(o, buf)))
+           return 0;
+       return r;
+    }
+    r->which = Z_RPNStructure_complex;
+    if (!(r->u.complex = makecomplex(o, buf)))
+       return 0;
+    return r;
+}
diff --git a/src/readconf.c b/src/readconf.c
new file mode 100644 (file)
index 0000000..3b36874
--- /dev/null
@@ -0,0 +1,132 @@
+/*
+ * Copyright (C) 1994-2000, Index Data
+ * All rights reserved.
+ * Sebastian Hammer, Adam Dickmeiss
+ *
+ * $Log: readconf.c,v $
+ * Revision 1.1  2003-10-27 12:21:35  adam
+ * Source restructure. yaz-marcdump part of installation
+ *
+ * Revision 1.10  2000/02/29 13:44:55  adam
+ * Check for config.h (currently not generated).
+ *
+ * Revision 1.9  1999/11/30 13:47:12  adam
+ * Improved installation. Moved header files to include/yaz.
+ *
+ * Revision 1.8  1999/08/27 09:40:32  adam
+ * Renamed logf function to yaz_log. Removed VC++ project files.
+ *
+ * Revision 1.7  1999/06/30 09:10:32  adam
+ * Fixed reading of MS-DOS files.
+ *
+ * Revision 1.6  1998/10/13 16:09:55  adam
+ * Added support for arbitrary OID's for tagsets, schemas and attribute sets.
+ * Added support for multiple attribute set references and tagset references
+ * from an abstract syntax file.
+ * Fixed many bad logs-calls in routines that read the various
+ * specifications regarding data1 (*.abs,*.att,...) and made the messages
+ * consistent whenever possible.
+ * Added extra 'lineno' argument to function readconf_line.
+ *
+ * Revision 1.5  1997/09/04 07:53:02  adam
+ * Added include readconf.h.
+ *
+ * Revision 1.4  1997/05/14 06:54:07  adam
+ * C++ support.
+ *
+ * Revision 1.3  1996/05/29 15:48:48  quinn
+ * Added \n to the isspace rule.
+ *
+ * Revision 1.2  1996/05/29  10:05:01  quinn
+ * Changed space criteria to support 8-bit characters
+ *
+ * Revision 1.1  1995/11/01  13:55:06  quinn
+ * Minor adjustments
+ *
+ * Revision 1.2  1995/10/30  13:54:27  quinn
+ * iRemoved fclose().
+ *
+ * Revision 1.1  1995/10/10  16:28:18  quinn
+ * Initial revision
+ *
+ *
+ */
+#if HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include <stdio.h>
+#include <ctype.h>
+
+#include <yaz/log.h>
+#include <yaz/readconf.h>
+
+#define l_isspace(c) ((c) == '\t' || (c) == ' ' || (c) == '\n' || (c) == '\r')
+
+int readconf_line(FILE *f, int *lineno, char *line, int len,
+                 char *argv[], int num)
+{
+    char *p;
+    int argc;
+    
+    while ((p = fgets(line, len, f)))
+    {
+       (*lineno)++;
+       while (*p && l_isspace(*p))
+           p++;
+       if (*p && *p != '#')
+           break;
+    }
+    if (!p)
+       return 0;
+    
+    for (argc = 0; *p ; argc++)
+    {
+       if (*p == '#')  /* trailing comment */
+           break;
+       argv[argc] = p;
+       while (*p && !l_isspace(*p))
+           p++;
+       if (*p)
+       {
+           *(p++) = '\0';
+           while (*p && l_isspace(*p))
+               p++;
+       }
+    }
+    return argc;
+}
+
+/*
+ * Read lines of a configuration file.
+ */
+int readconf(char *name, void *rprivate,
+            int (*fun)(char *name, void *rprivate, int argc, char *argv[]))
+{
+    FILE *f;
+    char line[512], *m_argv[50];
+    int m_argc;
+    int lineno = 0;
+    
+    if (!(f = fopen(name, "r")))
+    {
+       yaz_log(LOG_WARN|LOG_ERRNO, "readconf: %s", name);
+       return -1;
+    }
+    for (;;)
+    {
+       int res;
+       
+       if (!(m_argc = readconf_line(f, &lineno, line, 512, m_argv, 50)))
+       {
+           fclose(f);
+           return 0;
+       }
+
+       if ((res = (*fun)(name, rprivate, m_argc, m_argv)))
+       {
+           fclose(f);
+           return res;
+       }
+    }
+}
diff --git a/src/requestq.c b/src/requestq.c
new file mode 100644 (file)
index 0000000..bf9f7e2
--- /dev/null
@@ -0,0 +1,100 @@
+/*
+ * Copyright (C) 1994-2003, Index Data.
+ * See the file LICENSE for details.
+ * Sebastian Hammer, Adam Dickmeiss
+ *
+ * $Id: requestq.c,v 1.1 2003-10-27 12:21:35 adam Exp $
+ *
+ */
+
+/*
+ * Simple queue management.
+ *
+ * We also use the request-freelist to store encoding buffers, rather than
+ * freeing and xmalloc'ing them on each cycle.
+ */
+
+#include <stdlib.h>
+
+#include <yaz/xmalloc.h>
+#include "session.h"
+
+void request_enq(request_q *q, request *r)
+{
+    if (q->tail)
+       q->tail->next = r;
+    else
+       q->head = r;
+    q->tail = r;
+    q->num++;
+}
+
+request *request_head(request_q *q)
+{
+    return q->head;
+}
+
+request *request_deq(request_q *q)
+{
+    request *r = q->head;
+
+    if (!r)
+       return 0;
+    q->head = q->head->next;
+    if (!q->head)
+       q->tail = 0;
+    q->num--;
+    return r;
+}
+
+void request_initq(request_q *q)
+{
+    q->head = q->tail = q->list = 0;
+    q->num = 0;
+}
+
+void request_delq(request_q *q)
+{
+    request *r1, *r = q->list;
+    while (r)
+    {
+       xfree (r->response);
+        r1 = r;
+        r = r->next;
+        xfree (r1);
+    }
+}
+
+request *request_get(request_q *q)
+{
+    request *r = q->list;
+
+    if (r)
+       q->list = r->next;
+    else
+    {
+       if (!(r = (request *)xmalloc(sizeof(*r))))
+           abort();
+       r->response = 0;
+       r->size_response = 0;
+    }
+    r->q = q;
+    r->len_refid = 0;
+    r->refid = 0;
+    r->gdu_request = 0;
+    r->apdu_request = 0;
+    r->request_mem = 0;
+    r->len_response = 0;
+    r->clientData = 0;
+    r->state = REQUEST_IDLE;
+    r->next = 0;
+    return r;
+}
+
+void request_release(request *r)
+{
+    request_q *q = r->q;
+    r->next = q->list;
+    q->list = r;
+}
+
diff --git a/src/service.c b/src/service.c
new file mode 100644 (file)
index 0000000..3ed4a39
--- /dev/null
@@ -0,0 +1,503 @@
+/*
+ * NT Service interface Utility.
+ *  Based on code written by
+ *     Chas Woodfield, Fretwell Downing Informatics.
+ * $Log: service.c,v $
+ * Revision 1.1  2003-10-27 12:21:35  adam
+ * Source restructure. yaz-marcdump part of installation
+ *
+ * Revision 1.5  2001/11/13 23:00:42  adam
+ * Separate malloc debug library. Removal of ASN_COMPILED-#ifdefs.
+ *
+ * Revision 1.4  2000/12/05 19:05:10  adam
+ * Service automatically starts in the directory from which it was installed.
+ *
+ * Revision 1.3  1999/06/10 11:45:30  adam
+ * Added bend_start, bend_stop handlers and removed pre_init.
+ * Handlers bend_start/bend_stop are called when service/daemon is
+ * started/stopped.
+ *
+ * Revision 1.2  1999/02/02 13:57:36  adam
+ * Uses preprocessor define WIN32 instead of WINDOWS to build code
+ * for Microsoft WIN32.
+ *
+ * Revision 1.1  1997/11/07 13:31:52  adam
+ * Added NT Service name part of statserv_options_block. Moved NT
+ * service utility to server library.
+ *
+ * Revision 1.6  1997/09/18 08:49:14  adam
+ * Option -runnormal no needed to run server in standalone mode.
+ *
+ * Revision 1.5  1997/09/17 12:10:43  adam
+ * YAZ version 1.4.
+ *
+ * Revision 1.4  1997/09/09 10:10:20  adam
+ * Another MSV5.0 port. Changed projects to include proper
+ * library/include paths.
+ * Server starts server in test-mode when no options are given.
+ *
+ * Revision 1.3  1997/09/04 13:50:30  adam
+ * Bug fix in ztest.
+ *
+ */
+
+/************************************************************/
+/* Note this file is shared by all processes                */
+/* Should really put it somewhere other than here           */
+/* For some strange reason it won't work when part of a lib */
+/************************************************************/
+
+#ifdef WIN32
+
+#include <windows.h>
+#include <stdio.h>
+#include <tchar.h>
+#include <direct.h>
+
+#include "service.h"
+
+static AppService *pService = NULL;
+static BOOL bRunAsService = TRUE;
+static void *pAppHandle = NULL;
+
+/* Private functions to this module */
+void Service_Create(LPTSTR pAppName, LPTSTR pServiceName, LPTSTR pServiceDisplayName, LPTSTR pDependancies, int argc, char **argv);
+void Service_Delete();
+void Service_Initialize();
+BOOL NotifyServiceController();
+BOOL UpdateServiceStatus(DWORD Status);
+void FailServiceStart(DWORD Win32Code, DWORD PrivateCode);
+void CmdInstallService(int argc, char *argv[], BOOL bAutoStart);
+void CmdRemoveService();
+LPTSTR GetLastErrorText(LPTSTR lpszBuf, DWORD dwSize);
+BOOL CheckServiceArguments(int argc, char *argv[]);
+
+/* Callback functions for thee service manager */
+void WINAPI ServiceMain(DWORD argc, LPTSTR argv[]);
+void WINAPI ServiceControlHandler(DWORD fdwControl);
+
+/* Function to handle Ctrl + C etc... */
+BOOL EventHandlerRoutine(DWORD dwCtrlType);
+
+void Service_Create(LPTSTR pAppName, LPTSTR pServiceName, LPTSTR pServiceDisplayName, LPTSTR pDependancies, int argc, char **argv)
+{
+    pService = malloc(sizeof(AppService));
+    pService->pAppName = pAppName;
+    pService->pServiceName = pServiceName;
+    pService->pServiceDisplayName = pServiceDisplayName;
+    pService->pDependancies = pDependancies;
+    pService->hService = 0;
+    pService->ServiceTable[0].lpServiceName = pServiceName; 
+    pService->ServiceTable[0].lpServiceProc = ServiceMain; 
+    pService->ServiceTable[1].lpServiceName = NULL; 
+    pService->ServiceTable[1].lpServiceProc = NULL; 
+    pService->argc = argc;
+    pService->argv = argv;
+}
+
+void Service_Delete()
+{
+    if (pService != NULL)
+    {
+        /* Mark the service as stopping */
+        UpdateServiceStatus(SERVICE_STOP_PENDING);
+
+        /* Stop the service */
+        StopAppService(pAppHandle);
+
+        /* Service has now stopped */
+        UpdateServiceStatus(SERVICE_STOPPED);
+
+        /* Free the memory */
+        free(pService);
+        pService = NULL;
+    }
+}
+
+void Service_Initialize()
+{
+    if (pService != NULL)
+    {
+        /* Register ourselves with the control dispatcher */
+        StartServiceCtrlDispatcher(pService->ServiceTable);
+    }
+}
+
+void WINAPI ServiceMain(DWORD argc, LPTSTR argv[])
+{
+    if (pService != NULL)
+    {
+        if (NotifyServiceController())
+        {
+            /* Set the status to pending */
+            UpdateServiceStatus(SERVICE_START_PENDING);
+
+            /* Lets attempt to start the service */
+            if (StartAppService(pAppHandle, pService->argc, pService->argv))
+            {
+                /* Service is now up and running */
+                UpdateServiceStatus(SERVICE_RUNNING);
+
+                /* Lets wait for our clients */
+                RunAppService(pAppHandle);
+            }
+            else
+            {
+                FailServiceStart(GetLastError(), 0);
+                Service_Delete();
+            }
+        }
+    }
+}
+
+BOOL NotifyServiceController()
+{
+    if (pService == NULL)
+    {
+        return(FALSE);
+    }
+    else
+    {
+        if (bRunAsService)
+        {
+            pService->ServiceStatus.dwServiceType = SERVICE_WIN32_OWN_PROCESS;
+            pService->ServiceStatus.dwCurrentState = SERVICE_STOPPED;
+            pService->ServiceStatus.dwControlsAccepted = SERVICE_ACCEPT_STOP;
+            pService->ServiceStatus.dwWin32ExitCode = 0;
+            pService->ServiceStatus.dwServiceSpecificExitCode = 0;
+            pService->ServiceStatus.dwCheckPoint = 0;
+            pService->ServiceStatus.dwWaitHint = 0;
+            pService->hService = RegisterServiceCtrlHandler(pService->pServiceName, ServiceControlHandler);
+
+            if (pService->hService)
+                UpdateServiceStatus(SERVICE_START_PENDING);
+            else
+                return(FALSE);
+        }
+        return(TRUE);
+    }
+}
+
+void WINAPI ServiceControlHandler(DWORD fdwControl)
+{
+    if (pService != NULL)
+    {
+        switch (fdwControl)
+        {
+            case SERVICE_CONTROL_STOP:
+                /* Update the service status to be pending */
+                Service_Delete();
+                break;
+
+            case SERVICE_CONTROL_INTERROGATE:
+                UpdateServiceStatus(pService->ServiceStatus.dwCurrentState);
+                break;
+
+            default:
+                break;
+        }
+    }
+}
+
+BOOL UpdateServiceStatus(DWORD Status)
+{
+    if (pService != NULL)
+    {
+        if (pService->hService)
+        {
+            pService->ServiceStatus.dwCurrentState = Status;
+            if ((Status == SERVICE_START_PENDING) || (Status == SERVICE_STOP_PENDING))
+            {
+                pService->ServiceStatus.dwCheckPoint ++;
+                pService->ServiceStatus.dwWaitHint = 5000;    /* 5 sec.*/
+            }
+            else
+            {
+                pService->ServiceStatus.dwCheckPoint = 0;
+                pService->ServiceStatus.dwWaitHint = 0;
+            }
+
+            return(SetServiceStatus(pService->hService, &pService->ServiceStatus));
+        }
+    }
+
+    return(FALSE);
+}
+
+void FailServiceStart(DWORD Win32Code, DWORD PrivateCode)
+{
+    if (pService != NULL)
+    {
+        pService->ServiceStatus.dwWin32ExitCode = Win32Code;
+        pService->ServiceStatus.dwServiceSpecificExitCode = PrivateCode;
+        UpdateServiceStatus(SERVICE_STOPPED);
+    }
+}
+
+void CmdInstallService(int argc, char *argv[], BOOL bAutoStart)
+{
+    if (pService != NULL)
+    {
+        SC_HANDLE   schService;
+        SC_HANDLE   schSCManager;
+
+        TCHAR szPath[2048];
+
+        if (GetModuleFileName(NULL, szPath, 512) == 0)
+        {
+            _tprintf(TEXT("Unable to install %s - %s\n"), TEXT(pService->pServiceDisplayName), GetLastErrorText(pService->szErr, 256));
+        }
+        else
+        {
+            int i;
+            char cwdstr[_MAX_PATH];
+
+            if (!_getcwd(cwdstr, sizeof(cwdstr)))
+                strcpy (cwdstr, ".");
+
+            strcat (szPath, TEXT(" -runservice \""));
+            strcat (szPath, cwdstr);
+            strcat (szPath, "\"");
+
+            for (i = 1; i < argc; i++)
+            {
+                /* We will add the given command line arguments to the command */
+                /* We are not interested in the install and remove options */
+                if ((stricmp("-install", argv[i]) != 0) &&
+                    (stricmp("-installa", argv[i]) != 0) &&
+                    (stricmp("-remove", argv[i]) != 0))
+                {
+                    strcat(szPath, TEXT(" "));
+                    strcat(szPath, argv[i]);
+                }
+            }
+
+            schSCManager = OpenSCManager(NULL,                   /* machine (NULL == local) */
+                                         NULL,                   /* database (NULL == default) */
+                                         SC_MANAGER_ALL_ACCESS); /* access required */
+            if (schSCManager)
+            {
+                schService = CreateService(schSCManager,               /* SCManager database */
+                                           TEXT(pService->pServiceName),        /* name of service */
+                                           TEXT(pService->pServiceDisplayName), /* name to display */
+                                           SERVICE_ALL_ACCESS,         /* desired access */
+                                           SERVICE_WIN32_OWN_PROCESS,  /* service type */
+                                           bAutoStart ? SERVICE_AUTO_START :
+                                                        SERVICE_DEMAND_START, /* start type */
+                                           SERVICE_ERROR_NORMAL,       /* error control type */
+                                           szPath,                     /* service's binary */
+                                           NULL,                       /* no load ordering group */
+                                           NULL,                       /* no tag identifier */
+                                           TEXT(pService->pDependancies),       /* dependencies */
+                                           NULL,                       /* LocalSystem account */
+                                           NULL);                      /* no password */
+
+                if (schService)
+                {
+                    _tprintf(TEXT("%s installed.\n"), TEXT(pService->pServiceDisplayName));
+                    CloseServiceHandle(schService);
+                }
+                else
+                {
+                    _tprintf(TEXT("CreateService failed - %s\n"), GetLastErrorText(pService->szErr, 256));
+                }
+
+                CloseServiceHandle(schSCManager);
+            }
+            else
+                _tprintf(TEXT("OpenSCManager failed - %s\n"), GetLastErrorText(pService->szErr,256));
+        }
+    }
+}
+
+void CmdRemoveService()
+{
+    if (pService != NULL)
+    {
+        SC_HANDLE   schService;
+        SC_HANDLE   schSCManager;
+
+        schSCManager = OpenSCManager(NULL,                   /* machine (NULL == local) */
+                                     NULL,                   /* database (NULL == default) */
+                                     SC_MANAGER_ALL_ACCESS); /* access required */
+        if (schSCManager)
+        {
+            schService = OpenService(schSCManager, TEXT(pService->pServiceName), SERVICE_ALL_ACCESS);
+
+            if (schService)
+            {
+                /* try to stop the service */
+                if (ControlService(schService, SERVICE_CONTROL_STOP, &pService->ServiceStatus))
+                {
+                    _tprintf(TEXT("Stopping %s."), TEXT(pService->pServiceDisplayName));
+                    Sleep(1000);
+
+                    while (QueryServiceStatus(schService, &pService->ServiceStatus))
+                    {
+                        if (pService->ServiceStatus.dwCurrentState == SERVICE_STOP_PENDING)
+                        {
+                            _tprintf(TEXT("."));
+                            Sleep( 1000 );
+                        }
+                        else
+                            break;
+                    }
+
+                    if (pService->ServiceStatus.dwCurrentState == SERVICE_STOPPED)
+                        _tprintf(TEXT("\n%s stopped.\n"), TEXT(pService->pServiceDisplayName));
+                    else
+                        _tprintf(TEXT("\n%s failed to stop.\n"), TEXT(pService->pServiceDisplayName));
+
+                }
+
+                /* now remove the service */
+                if(DeleteService(schService))
+                    _tprintf(TEXT("%s removed.\n"), TEXT(pService->pServiceDisplayName));
+                else
+                    _tprintf(TEXT("DeleteService failed - %s\n"), GetLastErrorText(pService->szErr,256));
+
+                CloseServiceHandle(schService);
+            }
+            else
+                _tprintf(TEXT("OpenService failed - %s\n"), GetLastErrorText(pService->szErr,256));
+
+            CloseServiceHandle(schSCManager);
+        }
+        else
+            _tprintf(TEXT("OpenSCManager failed - %s\n"), GetLastErrorText(pService->szErr,256));
+    }
+}
+
+LPTSTR GetLastErrorText(LPTSTR lpszBuf, DWORD dwSize)
+{
+    DWORD dwRet;
+    LPTSTR lpszTemp = NULL;
+
+    dwRet = FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM |FORMAT_MESSAGE_ARGUMENT_ARRAY,
+                          NULL,
+                          GetLastError(),
+                          LANG_NEUTRAL,
+                          (LPTSTR)&lpszTemp,
+                          0,
+                          NULL);
+
+    /* supplied buffer is not long enough */
+    if (!dwRet || ((long)dwSize < (long)dwRet + 14))
+        lpszBuf[0] = TEXT('\0');
+    else
+    {
+        lpszTemp[lstrlen(lpszTemp)-2] = TEXT('\0');  /* remove cr and newline character */
+        _stprintf(lpszBuf, TEXT("%s (0x%x)"), lpszTemp, GetLastError());
+    }
+
+    if (lpszTemp)
+        LocalFree((HLOCAL)lpszTemp);
+
+    return(lpszBuf);
+}
+
+BOOL CheckServiceArguments(int argc, char *argv[])
+{
+    int i;
+
+    /* Lets process the arguments */
+    for (i = 1; i < argc; i++)
+    {
+        if (stricmp("-install", argv[i]) == 0)
+        {
+            /* They want to install the service */
+            CmdInstallService(argc, argv, FALSE);
+
+            /* We don't carry on, after we have installed the service */
+            return(FALSE);
+        }
+        else if (stricmp("-installa", argv[i]) == 0)
+        {
+            /* They want to install the service */
+            CmdInstallService(argc, argv, TRUE);
+
+            /* We don't carry on, after we have installed the service */
+            return(FALSE);
+        }
+        else if (stricmp("-remove", argv[i]) == 0)
+        {
+            /* Here they want to remove it */
+            CmdRemoveService();
+
+            /* We don't carry on, after we have removed the service */
+            return(FALSE);
+        }
+        else if (stricmp ("-runservice", argv[i]) == 0)
+        {
+            /* We can carry on, if we reached here */
+            chdir(argv[i+1]);
+            argv[i] = "";
+            argv[i+1] = "";
+            return(TRUE);
+        }
+    }
+    bRunAsService = FALSE;
+    return(TRUE);
+}
+
+BOOL SetupService(int argc, char *argv[], void *pHandle, LPTSTR pAppName, LPTSTR pServiceName, LPTSTR pServiceDisplayName, LPTSTR pDependancies)
+{
+    BOOL bDeleteService = TRUE;
+    BOOL bResult = FALSE;
+
+    /* Save the handle for later use */
+    pAppHandle = pHandle;
+
+    /* Create our service class */
+    Service_Create(pAppName, pServiceName, pServiceDisplayName, pDependancies, argc, argv);
+
+    if (CheckServiceArguments(argc, argv))
+    {
+        if (bRunAsService)
+        {
+            /* No need to set the console control handler, as the service manager handles all this for us */
+            Service_Initialize();
+            bDeleteService = FALSE;
+        }
+        else
+        {
+            /* Set the console control handler for exiting the program */
+            SetConsoleCtrlHandler((PHANDLER_ROUTINE)EventHandlerRoutine, TRUE);
+
+            /* Now do the main work */
+            ServiceMain(argc, argv);
+        }
+
+        /* We have been successful initializing, so let the caller know */
+        bResult = TRUE;
+    }
+
+    if (bDeleteService)
+    {
+        /* Finished with the service now */
+        Service_Delete();
+    }
+    return(bResult);
+}
+
+BOOL EventHandlerRoutine(DWORD dwCtrlType)
+{
+    /* This routine dosn't seem to get called all the time, Why ??? */
+    switch (dwCtrlType)
+    {
+        case CTRL_C_EVENT:        /* A CTRL+C signal was received, either from keyboard input or from a signal generated by the GenerateConsoleCtrlEvent function.*/
+        case CTRL_BREAK_EVENT:    /* A CTRL+BREAK signal was received, either from keyboard input or from a signal generated by GenerateConsoleCtrlEvent.*/
+        case CTRL_CLOSE_EVENT:    /* A signal that the system sends to all processes attached to a console when the user closes the console (either by choosing the Close command from the console window's System menu, or by choosing the End Task command from the Task List).*/
+        case CTRL_LOGOFF_EVENT:   /* A signal that the system sends to all console processes when a user is logging off. This signal does not indicate which user is logging off, so no assumptions can be made.*/
+        case CTRL_SHUTDOWN_EVENT: /* A signal that the system sends to all console processes when the system */
+            /* We are basically shutting down, so call Service_Delete */
+            Service_Delete();
+            return(FALSE);
+            break;
+
+        default:
+            /* we are not handling this one, so return FALSE */
+            return(FALSE);
+    }
+}
+#endif
diff --git a/src/service.h b/src/service.h
new file mode 100644 (file)
index 0000000..67fed2a
--- /dev/null
@@ -0,0 +1,54 @@
+/*
+ * NT Service interface Utility.
+ *  Based on code written by
+ *     Chas Woodfield, Fretwell Downing Datasystems.
+ * $Log: service.h,v $
+ * Revision 1.1  2003-10-27 12:21:35  adam
+ * Source restructure. yaz-marcdump part of installation
+ *
+ * Revision 1.1  1997/11/07 13:31:52  adam
+ * Added NT Service name part of statserv_options_block. Moved NT
+ * service utility to server library.
+ *
+ * Revision 1.2  1997/09/04 13:50:30  adam
+ * Bug fix in ztest.
+ *
+ */
+
+#ifndef SERVICE_INCLUDED
+#define SERVICE_INCLUDED
+
+#ifdef WIN32
+
+#include <windows.h>
+
+typedef struct _Service
+{
+    LPTSTR pAppName;
+    LPTSTR pServiceName;
+    LPTSTR pServiceDisplayName;
+    LPTSTR pDependancies;
+    TCHAR szErr[256];
+    SERVICE_STATUS_HANDLE hService;
+    SERVICE_STATUS ServiceStatus;
+    SERVICE_TABLE_ENTRY ServiceTable[2];
+    int argc;
+    char **argv;
+} AppService;
+
+/* Called by the app to initialize the service */
+BOOL SetupService(int argc, char *argv[], void *pHandle, LPTSTR pAppName, LPTSTR pServiceName, LPTSTR pServiceDisplayName, LPTSTR pDependancies);
+
+#endif /* WIN32 */
+
+/* Functions that must be in the main application */
+/* Initializes the app */
+int StartAppService(void *pHandle, int argc, char **argv);
+
+/* Now we wait for any connections */
+void RunAppService(void *pHandle);
+
+/* Time to tidyup and stop the service */
+void StopAppService(void *pHandle);
+
+#endif
diff --git a/src/seshigh.c b/src/seshigh.c
new file mode 100644 (file)
index 0000000..05cc464
--- /dev/null
@@ -0,0 +1,2605 @@
+/*
+ * Copyright (c) 1995-2003, Index Data
+ * See the file LICENSE for details.
+ *
+ * $Id: seshigh.c,v 1.1 2003-10-27 12:21:35 adam Exp $
+ */
+
+/*
+ * Frontend server logic.
+ *
+ * This code receives incoming APDUs, and handles client requests by means
+ * of the backend API.
+ *
+ * Some of the code is getting quite involved, compared to simpler servers -
+ * primarily because it is asynchronous both in the communication with
+ * the user and the backend. We think the complexity will pay off in
+ * the form of greater flexibility when more asynchronous facilities
+ * are implemented.
+ *
+ * Memory management has become somewhat involved. In the simple case, where
+ * only one PDU is pending at a time, it will simply reuse the same memory,
+ * once it has found its working size. When we enable multiple concurrent
+ * operations, perhaps even with multiple parallel calls to the backend, it
+ * will maintain a pool of buffers for encoding and decoding, trying to
+ * minimize memory allocation/deallocation during normal operation.
+ *
+ */
+
+#include <stdlib.h>
+#include <stdio.h>
+#include <sys/types.h>
+#ifdef WIN32
+#include <io.h>
+#define S_ISREG(x) (x & _S_IFREG)
+#include <process.h>
+#include <sys/stat.h>
+#else
+#include <sys/stat.h>
+#include <unistd.h>
+#endif
+#include <assert.h>
+#include <ctype.h>
+
+#include <yaz/yconfig.h>
+#include <yaz/xmalloc.h>
+#include <yaz/comstack.h>
+#include "eventl.h"
+#include "session.h"
+#include <yaz/proto.h>
+#include <yaz/oid.h>
+#include <yaz/log.h>
+#include <yaz/logrpn.h>
+#include <yaz/statserv.h>
+#include <yaz/diagbib1.h>
+#include <yaz/charneg.h>
+#include <yaz/otherinfo.h>
+#include <yaz/yaz-util.h>
+#include <yaz/pquery.h>
+
+#include <yaz/srw.h>
+#include <yaz/backend.h>
+
+static void process_gdu_request(association *assoc, request *req);
+static int process_z_request(association *assoc, request *req, char **msg);
+void backend_response(IOCHAN i, int event);
+static int process_gdu_response(association *assoc, request *req, Z_GDU *res);
+static int process_z_response(association *assoc, request *req, Z_APDU *res);
+static Z_APDU *process_initRequest(association *assoc, request *reqb);
+static Z_External *init_diagnostics(ODR odr, int errcode, char *errstring);
+static Z_APDU *process_searchRequest(association *assoc, request *reqb,
+    int *fd);
+static Z_APDU *response_searchRequest(association *assoc, request *reqb,
+    bend_search_rr *bsrr, int *fd);
+static Z_APDU *process_presentRequest(association *assoc, request *reqb,
+    int *fd);
+static Z_APDU *process_scanRequest(association *assoc, request *reqb, int *fd);
+static Z_APDU *process_sortRequest(association *assoc, request *reqb, int *fd);
+static void process_close(association *assoc, request *reqb);
+void save_referenceId (request *reqb, Z_ReferenceId *refid);
+static Z_APDU *process_deleteRequest(association *assoc, request *reqb,
+    int *fd);
+static Z_APDU *process_segmentRequest (association *assoc, request *reqb);
+
+static FILE *apduf = 0; /* for use in static mode */
+static statserv_options_block *control_block = 0;
+
+static Z_APDU *process_ESRequest(association *assoc, request *reqb, int *fd);
+
+/*
+ * Create and initialize a new association-handle.
+ *  channel  : iochannel for the current line.
+ *  link     : communications channel.
+ * Returns: 0 or a new association handle.
+ */
+association *create_association(IOCHAN channel, COMSTACK link)
+{
+    association *anew;
+
+    if (!control_block)
+       control_block = statserv_getcontrol();
+    if (!(anew = (association *)xmalloc(sizeof(*anew))))
+       return 0;
+    anew->init = 0;
+    anew->version = 0;
+    anew->client_chan = channel;
+    anew->client_link = link;
+    anew->cs_get_mask = 0;
+    anew->cs_put_mask = 0;
+    anew->cs_accept_mask = 0;
+    if (!(anew->decode = odr_createmem(ODR_DECODE)) ||
+       !(anew->encode = odr_createmem(ODR_ENCODE)))
+       return 0;
+    if (*control_block->apdufile)
+    {
+       char filename[256];
+       FILE *f;
+
+       strcpy(filename, control_block->apdufile);
+       if (!(anew->print = odr_createmem(ODR_PRINT)))
+           return 0;
+       if (*control_block->apdufile == '@')
+        {
+           odr_setprint(anew->print, yaz_log_file());
+       }       
+       else if (*control_block->apdufile != '-')
+       {
+           strcpy(filename, control_block->apdufile);
+           if (!control_block->dynamic)
+           {
+               if (!apduf)
+               {
+                   if (!(apduf = fopen(filename, "w")))
+                   {
+                       yaz_log(LOG_WARN|LOG_ERRNO, "%s", filename);
+                       return 0;
+                   }
+                   setvbuf(apduf, 0, _IONBF, 0);
+               }
+               f = apduf;
+           }
+           else 
+           {
+               sprintf(filename + strlen(filename), ".%d", getpid());
+               if (!(f = fopen(filename, "w")))
+               {
+                   yaz_log(LOG_WARN|LOG_ERRNO, "%s", filename);
+                   return 0;
+               }
+               setvbuf(f, 0, _IONBF, 0);
+           }
+           odr_setprint(anew->print, f);
+       }
+    }
+    else
+       anew->print = 0;
+    anew->input_buffer = 0;
+    anew->input_buffer_len = 0;
+    anew->backend = 0;
+    anew->state = ASSOC_NEW;
+    request_initq(&anew->incoming);
+    request_initq(&anew->outgoing);
+    anew->proto = cs_getproto(link);
+    return anew;
+}
+
+/*
+ * Free association and release resources.
+ */
+void destroy_association(association *h)
+{
+    statserv_options_block *cb = statserv_getcontrol();
+    request *req;
+
+    xfree(h->init);
+    odr_destroy(h->decode);
+    odr_destroy(h->encode);
+    if (h->print)
+       odr_destroy(h->print);
+    if (h->input_buffer)
+    xfree(h->input_buffer);
+    if (h->backend)
+       (*cb->bend_close)(h->backend);
+    while ((req = request_deq(&h->incoming)))
+       request_release(req);
+    while ((req = request_deq(&h->outgoing)))
+       request_release(req);
+    request_delq(&h->incoming);
+    request_delq(&h->outgoing);
+    xfree(h);
+    xmalloc_trav("session closed");
+    if (control_block && control_block->one_shot)
+    {
+       exit (0);
+    }
+}
+
+static void do_close_req(association *a, int reason, char *message,
+                        request *req)
+{
+    Z_APDU apdu;
+    Z_Close *cls = zget_Close(a->encode);
+    
+    /* Purge request queue */
+    while (request_deq(&a->incoming));
+    while (request_deq(&a->outgoing));
+    if (a->version >= 3)
+    {
+       yaz_log(LOG_LOG, "Sending Close PDU, reason=%d, message=%s",
+           reason, message ? message : "none");
+       apdu.which = Z_APDU_close;
+       apdu.u.close = cls;
+       *cls->closeReason = reason;
+       cls->diagnosticInformation = message;
+       process_z_response(a, req, &apdu);
+       iochan_settimeout(a->client_chan, 20);
+    }
+    else
+    {
+       request_release(req);
+       yaz_log(LOG_DEBUG, "v2 client. No Close PDU");
+       iochan_setevent(a->client_chan, EVENT_TIMEOUT); /* force imm close */
+    }
+    a->state = ASSOC_DEAD;
+}
+
+static void do_close(association *a, int reason, char *message)
+{
+    request *req = request_get(&a->outgoing);
+    do_close_req (a, reason, message, req);
+}
+
+/*
+ * This is where PDUs from the client are read and the further
+ * processing is initiated. Flow of control moves down through the
+ * various process_* functions below, until the encoded result comes back up
+ * to the output handler in here.
+ * 
+ *  h     : the I/O channel that has an outstanding event.
+ *  event : the current outstanding event.
+ */
+void ir_session(IOCHAN h, int event)
+{
+    int res;
+    association *assoc = (association *)iochan_getdata(h);
+    COMSTACK conn = assoc->client_link;
+    request *req;
+
+    assert(h && conn && assoc);
+    if (event == EVENT_TIMEOUT)
+    {
+       if (assoc->state != ASSOC_UP)
+       {
+           yaz_log(LOG_LOG, "Final timeout - closing connection.");
+           cs_close(conn);
+           destroy_association(assoc);
+           iochan_destroy(h);
+       }
+       else
+       {
+           yaz_log(LOG_LOG, "Session idle too long. Sending close.");
+           do_close(assoc, Z_Close_lackOfActivity, 0);
+       }
+       return;
+    }
+    if (event & assoc->cs_accept_mask)
+    {
+       yaz_log (LOG_DEBUG, "ir_session (accept)");
+       if (!cs_accept (conn))
+       {
+           yaz_log (LOG_LOG, "accept failed");
+           destroy_association(assoc);
+           iochan_destroy(h);
+       }
+       iochan_clearflag (h, EVENT_OUTPUT|EVENT_OUTPUT);
+       if (conn->io_pending) 
+       {   /* cs_accept didn't complete */
+           assoc->cs_accept_mask = 
+               ((conn->io_pending & CS_WANT_WRITE) ? EVENT_OUTPUT : 0) |
+               ((conn->io_pending & CS_WANT_READ) ? EVENT_INPUT : 0);
+
+           iochan_setflag (h, assoc->cs_accept_mask);
+       }
+       else
+       {   /* cs_accept completed. Prepare for reading (cs_get) */
+           assoc->cs_accept_mask = 0;
+           assoc->cs_get_mask = EVENT_INPUT;
+           iochan_setflag (h, assoc->cs_get_mask);
+       }
+       return;
+    }
+    if ((event & assoc->cs_get_mask) || (event & EVENT_WORK)) /* input */
+    {
+       if ((assoc->cs_put_mask & EVENT_INPUT) == 0 && (event & assoc->cs_get_mask))
+       {
+           yaz_log(LOG_DEBUG, "ir_session (input)");
+           /* We aren't speaking to this fellow */
+           if (assoc->state == ASSOC_DEAD)
+           {
+               yaz_log(LOG_LOG, "Connection closed - end of session");
+               cs_close(conn);
+               destroy_association(assoc);
+               iochan_destroy(h);
+               return;
+           }
+           assoc->cs_get_mask = EVENT_INPUT;
+           if ((res = cs_get(conn, &assoc->input_buffer,
+               &assoc->input_buffer_len)) <= 0)
+           {
+               yaz_log(LOG_LOG, "Connection closed by client");
+               cs_close(conn);
+               destroy_association(assoc);
+               iochan_destroy(h);
+               return;
+           }
+           else if (res == 1) /* incomplete read - wait for more  */
+           {
+               if (conn->io_pending & CS_WANT_WRITE)
+                   assoc->cs_get_mask |= EVENT_OUTPUT;
+               iochan_setflag(h, assoc->cs_get_mask);
+               return;
+           }
+           if (cs_more(conn)) /* more stuff - call us again later, please */
+               iochan_setevent(h, EVENT_INPUT);
+               
+           /* we got a complete PDU. Let's decode it */
+           yaz_log(LOG_DEBUG, "Got PDU, %d bytes: lead=%02X %02X %02X", res,
+                           assoc->input_buffer[0] & 0xff,
+                           assoc->input_buffer[1] & 0xff,
+                           assoc->input_buffer[2] & 0xff);
+           req = request_get(&assoc->incoming); /* get a new request */
+           odr_reset(assoc->decode);
+           odr_setbuf(assoc->decode, assoc->input_buffer, res, 0);
+           if (!z_GDU(assoc->decode, &req->gdu_request, 0, 0))
+           {
+               yaz_log(LOG_LOG, "ODR error on incoming PDU: %s [element %s] "
+                        "[near byte %d] ",
+                       odr_errmsg(odr_geterror(assoc->decode)),
+                        odr_getelement(assoc->decode),
+                       odr_offset(assoc->decode));
+                if (assoc->decode->error != OHTTP)
+                {
+                    yaz_log(LOG_LOG, "PDU dump:");
+                    odr_dumpBER(yaz_log_file(), assoc->input_buffer, res);
+                   request_release(req);
+                    do_close(assoc, Z_Close_protocolError,"Malformed package");
+                }
+                else
+                {
+                    Z_GDU *p = z_get_HTTP_Response(assoc->encode, 400);
+                    assoc->state = ASSOC_DEAD;
+                    process_gdu_response(assoc, req, p);
+                }
+               return;
+           }
+           req->request_mem = odr_extract_mem(assoc->decode);
+           if (assoc->print && !z_GDU(assoc->print, &req->gdu_request, 0, 0))
+           {
+               yaz_log(LOG_WARN, "ODR print error: %s", 
+                   odr_errmsg(odr_geterror(assoc->print)));
+               odr_reset(assoc->print);
+           }
+           request_enq(&assoc->incoming, req);
+       }
+
+       /* can we do something yet? */
+       req = request_head(&assoc->incoming);
+       if (req->state == REQUEST_IDLE)
+       {
+           request_deq(&assoc->incoming);
+           process_gdu_request(assoc, req);
+       }
+    }
+    if (event & assoc->cs_put_mask)
+    {
+       request *req = request_head(&assoc->outgoing);
+
+       assoc->cs_put_mask = 0;
+       yaz_log(LOG_DEBUG, "ir_session (output)");
+        req->state = REQUEST_PENDING;
+       switch (res = cs_put(conn, req->response, req->len_response))
+       {
+       case -1:
+           yaz_log(LOG_LOG, "Connection closed by client");
+           cs_close(conn);
+           destroy_association(assoc);
+           iochan_destroy(h);
+           break;
+       case 0: /* all sent - release the request structure */
+           yaz_log(LOG_DEBUG, "Wrote PDU, %d bytes", req->len_response);
+#if 0
+           yaz_log(LOG_DEBUG, "HTTP out:\n%.*s", req->len_response,
+                    req->response);
+#endif
+           nmem_destroy(req->request_mem);
+           request_deq(&assoc->outgoing);
+           request_release(req);
+           if (!request_head(&assoc->outgoing))
+           {   /* restore mask for cs_get operation ... */
+               iochan_clearflag(h, EVENT_OUTPUT|EVENT_INPUT);
+               iochan_setflag(h, assoc->cs_get_mask);
+                if (assoc->state == ASSOC_DEAD)
+                    iochan_setevent(assoc->client_chan, EVENT_TIMEOUT);
+           }
+            else
+            {
+                assoc->cs_put_mask = EVENT_OUTPUT;
+            }
+           break;
+       default:
+           if (conn->io_pending & CS_WANT_WRITE)
+               assoc->cs_put_mask |= EVENT_OUTPUT;
+           if (conn->io_pending & CS_WANT_READ)
+               assoc->cs_put_mask |= EVENT_INPUT;
+           iochan_setflag(h, assoc->cs_put_mask);
+       }
+    }
+    if (event & EVENT_EXCEPT)
+    {
+       yaz_log(LOG_LOG, "ir_session (exception)");
+       cs_close(conn);
+       destroy_association(assoc);
+       iochan_destroy(h);
+    }
+}
+
+static int process_z_request(association *assoc, request *req, char **msg);
+
+static void assoc_init_reset(association *assoc)
+{
+    xfree (assoc->init);
+    assoc->init = (bend_initrequest *) xmalloc (sizeof(*assoc->init));
+
+    assoc->init->stream = assoc->encode;
+    assoc->init->print = assoc->print;
+    assoc->init->auth = 0;
+    assoc->init->referenceId = 0;
+    assoc->init->implementation_version = 0;
+    assoc->init->implementation_id = 0;
+    assoc->init->implementation_name = 0;
+    assoc->init->bend_sort = NULL;
+    assoc->init->bend_search = NULL;
+    assoc->init->bend_present = NULL;
+    assoc->init->bend_esrequest = NULL;
+    assoc->init->bend_delete = NULL;
+    assoc->init->bend_scan = NULL;
+    assoc->init->bend_segment = NULL;
+    assoc->init->bend_fetch = NULL;
+    assoc->init->bend_explain = NULL;
+
+    assoc->init->charneg_request = NULL;
+    assoc->init->charneg_response = NULL;
+
+    assoc->init->decode = assoc->decode;
+    assoc->init->peer_name = 
+        odr_strdup (assoc->encode, cs_addrstr(assoc->client_link));
+}
+
+static int srw_bend_init(association *assoc)
+{
+    const char *encoding = "UTF-8";
+    Z_External *ce;
+    bend_initresult *binitres;
+    statserv_options_block *cb = statserv_getcontrol();
+    
+    assoc_init_reset(assoc);
+
+    assoc->maximumRecordSize = 3000000;
+    assoc->preferredMessageSize = 3000000;
+#if 1
+    ce = yaz_set_proposal_charneg(assoc->decode, &encoding, 1, 0, 0, 1);
+    assoc->init->charneg_request = ce->u.charNeg3;
+#endif
+    if (!(binitres = (*cb->bend_init)(assoc->init)))
+    {
+       yaz_log(LOG_WARN, "Bad response from backend.");
+       return 0;
+    }
+    assoc->backend = binitres->handle;
+    return 1;
+}
+
+static int srw_bend_fetch(association *assoc, int pos,
+                          Z_SRW_searchRetrieveRequest *srw_req,
+                          Z_SRW_record *record)
+{
+    bend_fetch_rr rr;
+    ODR o = assoc->encode;
+
+    rr.setname = "default";
+    rr.number = pos;
+    rr.referenceId = 0;
+    rr.request_format = VAL_TEXT_XML;
+    rr.request_format_raw = yaz_oidval_to_z3950oid(assoc->decode,
+                                                   CLASS_TRANSYN,
+                                                   VAL_TEXT_XML);
+    rr.comp = (Z_RecordComposition *)
+           odr_malloc(assoc->decode, sizeof(*rr.comp));
+    rr.comp->which = Z_RecordComp_complex;
+    rr.comp->u.complex = (Z_CompSpec *)
+           odr_malloc(assoc->decode, sizeof(Z_CompSpec));
+    rr.comp->u.complex->selectAlternativeSyntax = (bool_t *)
+        odr_malloc(assoc->encode, sizeof(bool_t));
+    *rr.comp->u.complex->selectAlternativeSyntax = 0;    
+    rr.comp->u.complex->num_dbSpecific = 0;
+    rr.comp->u.complex->dbSpecific = 0;
+    rr.comp->u.complex->num_recordSyntax = 0; 
+    rr.comp->u.complex->recordSyntax = 0;
+
+    rr.comp->u.complex->generic = (Z_Specification *) 
+           odr_malloc(assoc->decode, sizeof(Z_Specification));
+    rr.comp->u.complex->generic->which = Z_Schema_uri;
+    rr.comp->u.complex->generic->schema.uri = srw_req->recordSchema;
+    rr.comp->u.complex->generic->elementSpec = 0;
+    
+    rr.stream = assoc->encode;
+    rr.print = assoc->print;
+
+    rr.basename = 0;
+    rr.len = 0;
+    rr.record = 0;
+    rr.last_in_set = 0;
+    rr.output_format = VAL_TEXT_XML;
+    rr.output_format_raw = 0;
+    rr.errcode = 0;
+    rr.errstring = 0;
+    rr.surrogate_flag = 0;
+    rr.schema = srw_req->recordSchema;
+
+    if (!assoc->init->bend_fetch)
+        return 1;
+
+    (*assoc->init->bend_fetch)(assoc->backend, &rr);
+
+    if (rr.len >= 0)
+    {
+        record->recordData_buf = rr.record;
+        record->recordData_len = rr.len;
+        record->recordPosition = odr_intdup(o, pos);
+        if (rr.schema)
+            record->recordSchema = odr_strdup(o, rr.schema);
+        else
+            record->recordSchema = 0;
+    }
+    return rr.errcode;
+}
+
+static void srw_bend_search(association *assoc, request *req,
+                            Z_SRW_searchRetrieveRequest *srw_req,
+                            Z_SRW_searchRetrieveResponse *srw_res)
+{
+    int srw_error = 0;
+    bend_search_rr rr;
+    Z_External *ext;
+    
+    yaz_log(LOG_LOG, "Got SRW SearchRetrieveRequest");
+    yaz_log(LOG_DEBUG, "srw_bend_search");
+    if (!assoc->init)
+    {
+        yaz_log(LOG_DEBUG, "srw_bend_init");
+        if (!srw_bend_init(assoc))
+        {
+            srw_error = 3;  /* assume Authentication error */
+
+            srw_res->num_diagnostics = 1;
+            srw_res->diagnostics = (Z_SRW_diagnostic *)
+                odr_malloc(assoc->encode, sizeof(*srw_res->diagnostics));
+            srw_res->diagnostics[0].code = 
+                odr_intdup(assoc->encode, srw_error);
+            srw_res->diagnostics[0].details = 0;
+            return;
+        }
+    }
+    
+    rr.setname = "default";
+    rr.replace_set = 1;
+    rr.num_bases = 1;
+    rr.basenames = &srw_req->database;
+    rr.referenceId = 0;
+
+    rr.query = (Z_Query *) odr_malloc (assoc->decode, sizeof(*rr.query));
+
+    if (srw_req->query_type == Z_SRW_query_type_cql)
+    {
+        ext = (Z_External *) odr_malloc(assoc->decode, sizeof(*ext));
+        ext->direct_reference = odr_getoidbystr(assoc->decode, 
+                                                "1.2.840.10003.16.2");
+        ext->indirect_reference = 0;
+        ext->descriptor = 0;
+        ext->which = Z_External_CQL;
+        ext->u.cql = srw_req->query.cql;
+
+        rr.query->which = Z_Query_type_104;
+        rr.query->u.type_104 =  ext;
+    }
+    else if (srw_req->query_type == Z_SRW_query_type_pqf)
+    {
+        Z_RPNQuery *RPNquery;
+        YAZ_PQF_Parser pqf_parser;
+
+        pqf_parser = yaz_pqf_create ();
+
+        RPNquery = yaz_pqf_parse (pqf_parser, assoc->decode,
+                                  srw_req->query.pqf);
+        if (!RPNquery)
+        {
+            const char *pqf_msg;
+            size_t off;
+            int code = yaz_pqf_error (pqf_parser, &pqf_msg, &off);
+            yaz_log(LOG_LOG, "%*s^\n", off+4, "");
+            yaz_log(LOG_LOG, "Bad PQF: %s (code %d)\n", pqf_msg, code);
+            
+            srw_error = 10;
+        }
+
+        rr.query->which = Z_Query_type_1;
+        rr.query->u.type_1 =  RPNquery;
+
+        yaz_pqf_destroy (pqf_parser);
+    }
+    else
+        srw_error = 11;
+
+    if (!srw_error && srw_req->sort_type != Z_SRW_sort_type_none)
+        srw_error = 80;
+
+    if (!srw_error && !assoc->init->bend_search)
+        srw_error = 1;
+
+    if (srw_error)
+    {
+        yaz_log(LOG_DEBUG, "srw_bend_search returned SRW error %d", srw_error);
+        srw_res->num_diagnostics = 1;
+        srw_res->diagnostics = (Z_SRW_diagnostic *)
+           odr_malloc(assoc->encode, sizeof(*srw_res->diagnostics));
+        srw_res->diagnostics[0].code = 
+            odr_intdup(assoc->encode, srw_error);
+        srw_res->diagnostics[0].details = 0;
+        return;
+    }
+    
+    rr.stream = assoc->encode;
+    rr.decode = assoc->decode;
+    rr.print = assoc->print;
+    rr.request = req;
+    rr.association = assoc;
+    rr.fd = 0;
+    rr.hits = 0;
+    rr.errcode = 0;
+    rr.errstring = 0;
+    rr.search_info = 0;
+    yaz_log_zquery(rr.query);
+    (assoc->init->bend_search)(assoc->backend, &rr);
+    srw_res->numberOfRecords = odr_intdup(assoc->encode, rr.hits);
+    if (rr.errcode)
+    {
+        yaz_log(LOG_DEBUG, "bend_search returned Bib-1 code %d", rr.errcode);
+        srw_res->num_diagnostics = 1;
+        srw_res->diagnostics = (Z_SRW_diagnostic *)
+           odr_malloc(assoc->encode, sizeof(*srw_res->diagnostics));
+        srw_res->diagnostics[0].code = 
+            odr_intdup(assoc->encode, 
+                       yaz_diag_bib1_to_srw (rr.errcode));
+        srw_res->diagnostics[0].details = rr.errstring;
+        yaz_log(LOG_DEBUG, "srw_bend_search returned SRW error %d",
+                *srw_res->diagnostics[0].code);
+                
+    }
+    else
+    {
+        int number = srw_req->maximumRecords ? *srw_req->maximumRecords : 0;
+        int start = srw_req->startRecord ? *srw_req->startRecord : 1;
+
+        yaz_log(LOG_LOG, "Request to pack %d+%d out of %d",
+                start, number, rr.hits);
+
+        srw_res->numberOfRecords = odr_intdup(assoc->encode, rr.hits);
+        if (number > 0)
+        {
+            int i;
+
+            if (start > rr.hits)
+            {
+                yaz_log(LOG_LOG, "Request out or range");
+            }
+            else
+            {
+                int j = 0;
+                int packing = Z_SRW_recordPacking_string;
+                if (start + number > rr.hits)
+                    number = rr.hits - start + 1;
+                if (srw_req->recordPacking && 
+                    !strcmp(srw_req->recordPacking, "xml"))
+                    packing = Z_SRW_recordPacking_XML;
+                srw_res->records = (Z_SRW_record *)
+                    odr_malloc(assoc->encode,
+                               number * sizeof(*srw_res->records));
+                for (i = 0; i<number; i++)
+                {
+                    int errcode;
+                    
+                    srw_res->records[j].recordPacking = packing;
+                    srw_res->records[j].recordData_buf = 0;
+                    yaz_log(LOG_DEBUG, "srw_bend_fetch %d", i+start);
+                    errcode = srw_bend_fetch(assoc, i+start, srw_req,
+                                             srw_res->records + j);
+                    if (errcode)
+                    {
+                        srw_res->num_diagnostics = 1;
+                        srw_res->diagnostics = (Z_SRW_diagnostic *)
+                            odr_malloc(assoc->encode, 
+                                       sizeof(*srw_res->diagnostics));
+                        srw_res->diagnostics[0].code = 
+                            odr_intdup(assoc->encode, 
+                                       yaz_diag_bib1_to_srw (errcode));
+                        srw_res->diagnostics[0].details = rr.errstring;
+                        break;
+                    }
+                    if (srw_res->records[j].recordData_buf)
+                        j++;
+                }
+                srw_res->num_records = j;
+                if (!j)
+                    srw_res->records = 0;
+            }
+        }
+    }
+}
+
+
+static void srw_bend_explain(association *assoc, request *req,
+                             Z_SRW_explainRequest *srw_req,
+                             Z_SRW_explainResponse *srw_res)
+{
+    yaz_log(LOG_LOG, "Got SRW ExplainRequest");
+    if (!assoc->init)
+    {
+        yaz_log(LOG_DEBUG, "srw_bend_init");
+        if (!srw_bend_init(assoc))
+            return;
+    }
+    if (assoc->init && assoc->init->bend_explain)
+    {
+        bend_explain_rr rr;
+
+        rr.stream = assoc->encode;
+        rr.decode = assoc->decode;
+        rr.print = assoc->print;
+        rr.explain_buf = 0;
+        (*assoc->init->bend_explain)(assoc->backend, &rr);
+        if (rr.explain_buf)
+        {
+            srw_res->explainData_buf = rr.explain_buf;
+            srw_res->explainData_len = strlen(rr.explain_buf);
+        }
+    }
+}
+
+static int hex_digit (int ch)
+{
+    if (ch >= '0' && ch <= '9')
+        return ch - '0';
+    else if (ch >= 'a' && ch <= 'f')
+        return ch - 'a'+10;
+    else if (ch >= 'A' && ch <= 'F')
+        return ch - 'A'+10;
+    return 0;
+}
+
+static char *uri_val(const char *path, const char *name, ODR o)
+{
+    size_t nlen = strlen(name);
+    if (*path != '?')
+        return 0;
+    path++;
+    while (path && *path)
+    {
+        const char *p1 = strchr(path, '=');
+        if (!p1)
+            break;
+        if ((size_t)(p1 - path) == nlen && !memcmp(path, name, nlen))
+        {
+            size_t i = 0;
+            char *ret;
+            
+            path = p1 + 1;
+            p1 = strchr(path, '&');
+            if (!p1)
+                p1 = strlen(path) + path;
+            ret = odr_malloc(o, p1 - path + 1);
+            while (*path && *path != '&')
+            {
+                if (*path == '+')
+                {
+                    ret[i++] = ' ';
+                    path++;
+                }
+                else if (*path == '%' && path[1] && path[2])
+                {
+                    ret[i++] = hex_digit (path[1])*16 + hex_digit (path[2]);
+                    path = path + 3;
+                }
+                else
+                    ret[i++] = *path++;
+            }
+            ret[i] = '\0';
+            return ret;
+        }
+        path = strchr(p1, '&');
+        if (path)
+            path++;
+    }
+    return 0;
+}
+
+void uri_val_int(const char *path, const char *name, ODR o, int **intp)
+{
+    const char *v = uri_val(path, name, o);
+    if (v)
+        *intp = odr_intdup(o, atoi(v));
+}
+
+static void process_http_request(association *assoc, request *req)
+{
+    Z_HTTP_Request *hreq = req->gdu_request->u.HTTP_Request;
+    ODR o = assoc->encode;
+    Z_GDU *p = 0;
+    Z_HTTP_Response *hres = 0;
+    int keepalive = 1;
+
+    if (!strcmp(hreq->method, "GET"))
+    {
+        char *db = "Default";
+        const char *p0 = hreq->path, *p1;
+#if HAVE_XML2
+        int ret = -1;
+        char *charset = 0;
+        Z_SOAP *soap_package = 0;
+        static Z_SOAP_Handler soap_handlers[2] = {
+            {"http://www.loc.gov/zing/srw/v1.0/", 0,
+             (Z_SOAP_fun) yaz_srw_codec},
+            {0, 0, 0}
+        };
+#endif
+        
+        if (*p0 == '/')
+            p0++;
+        p1 = strchr(p0, '?');
+        if (!p1)
+            p1 = p0 + strlen(p0);
+        if (p1 != p0)
+        {
+            db = odr_malloc(assoc->decode, p1 - p0 + 1);
+            memcpy (db, p0, p1 - p0);
+            db[p1 - p0] = '\0';
+        }
+#if HAVE_XML2
+        if (p1 && *p1 == '?' && p1[1])
+        {
+            Z_SRW_PDU *res = yaz_srw_get(o, Z_SRW_searchRetrieve_response);
+            Z_SRW_PDU *sr = yaz_srw_get(o, Z_SRW_searchRetrieve_request);
+            char *query = uri_val(p1, "query", o);
+            char *pQuery = uri_val(p1, "pQuery", o);
+            char *sortKeys = uri_val(p1, "sortKeys", o);
+            
+            if (query)
+            {
+                sr->u.request->query_type = Z_SRW_query_type_cql;
+                sr->u.request->query.cql = query;
+            }
+            if (pQuery)
+            {
+                sr->u.request->query_type = Z_SRW_query_type_pqf;
+                sr->u.request->query.pqf = pQuery;
+            }
+            if (sortKeys)
+            {
+                sr->u.request->sort_type = Z_SRW_sort_type_sort;
+                sr->u.request->sort.sortKeys = sortKeys;
+            }
+            sr->u.request->recordSchema = uri_val(p1, "recordSchema", o);
+            sr->u.request->recordPacking = uri_val(p1, "recordPacking", o);
+            if (!sr->u.request->recordPacking)
+                sr->u.request->recordPacking = "xml";
+            uri_val_int(p1, "maximumRecords", o, 
+                        &sr->u.request->maximumRecords);
+            uri_val_int(p1, "startRecord", o,
+                        &sr->u.request->startRecord);
+            if (sr->u.request->startRecord)
+                yaz_log(LOG_LOG, "startRecord=%d", *sr->u.request->startRecord);
+            sr->u.request->database = db;
+            srw_bend_search(assoc, req, sr->u.request, res->u.response);
+            
+            soap_package = odr_malloc(o, sizeof(*soap_package));
+            soap_package->which = Z_SOAP_generic;
+
+            soap_package->u.generic =
+                odr_malloc(o, sizeof(*soap_package->u.generic));
+
+            soap_package->u.generic->p = res;
+            soap_package->u.generic->ns = soap_handlers[0].ns;
+            soap_package->u.generic->no = 0;
+            
+            soap_package->ns = "SRU";
+
+            p = z_get_HTTP_Response(o, 200);
+            hres = p->u.HTTP_Response;
+
+            ret = z_soap_codec_enc(assoc->encode, &soap_package,
+                                   &hres->content_buf, &hres->content_len,
+                                   soap_handlers, charset);
+            if (!charset)
+                z_HTTP_header_add(o, &hres->headers, "Content-Type", "text/xml");
+            else
+            {
+                char ctype[60];
+                strcpy(ctype, "text/xml; charset=");
+                strcat(ctype, charset);
+                z_HTTP_header_add(o, &hres->headers, "Content-Type", ctype);
+            }
+
+        }
+        else
+        {
+            Z_SRW_PDU *res = yaz_srw_get(o, Z_SRW_explain_response);
+            Z_SRW_PDU *sr = yaz_srw_get(o, Z_SRW_explain_request);
+
+            srw_bend_explain(assoc, req, sr->u.explain_request,
+                            res->u.explain_response);
+
+            if (res->u.explain_response->explainData_buf)
+            {
+                soap_package = odr_malloc(o, sizeof(*soap_package));
+                soap_package->which = Z_SOAP_generic;
+                
+                soap_package->u.generic =
+                    odr_malloc(o, sizeof(*soap_package->u.generic));
+                
+                soap_package->u.generic->p = res;
+                soap_package->u.generic->ns = soap_handlers[0].ns;
+                soap_package->u.generic->no = 0;
+                
+                soap_package->ns = "SRU";
+                
+                p = z_get_HTTP_Response(o, 200);
+                hres = p->u.HTTP_Response;
+                
+                ret = z_soap_codec_enc(assoc->encode, &soap_package,
+                                       &hres->content_buf, &hres->content_len,
+                                       soap_handlers, charset);
+                if (!charset)
+                    z_HTTP_header_add(o, &hres->headers, "Content-Type", "text/xml");
+                else
+                {
+                    char ctype[60];
+                    strcpy(ctype, "text/xml; charset=");
+                    strcat(ctype, charset);
+                    z_HTTP_header_add(o, &hres->headers, "Content-Type",
+                                      ctype);
+                }
+            }
+        }
+#endif
+#ifdef DOCDIR
+       if (strlen(hreq->path) >= 5 && strlen(hreq->path) < 80 &&
+                        !memcmp(hreq->path, "/doc/", 5))
+        {
+           FILE *f;
+            char fpath[120];
+
+           strcpy(fpath, DOCDIR);
+           strcat(fpath, hreq->path+4);
+           f = fopen(fpath, "rb");
+           if (f) {
+                struct stat sbuf;
+                if (fstat(fileno(f), &sbuf) || !S_ISREG(sbuf.st_mode))
+                {
+                    fclose(f);
+                    f = 0;
+                }
+            }
+            if (f)
+            {
+               long sz;
+               fseek(f, 0L, SEEK_END);
+               sz = ftell(f);
+               if (sz >= 0 && sz < 500000)
+               {
+                   const char *ctype = "application/octet-stream";
+                   const char *cp;
+
+                    p = z_get_HTTP_Response(o, 200);
+                    hres = p->u.HTTP_Response;
+                   hres->content_buf = (char *) odr_malloc(o, sz + 1);
+                   hres->content_len = sz;
+                   fseek(f, 0L, SEEK_SET);
+                   fread(hres->content_buf, 1, sz, f);
+                   if ((cp = strrchr(fpath, '.'))) {
+                       cp++;
+                       if (!strcmp(cp, "png"))
+                           ctype = "image/png";
+                       else if (!strcmp(cp, "gif"))
+                           ctype = "image/gif";
+                       else if (!strcmp(cp, "xml"))
+                           ctype = "text/xml";
+                       else if (!strcmp(cp, "html"))
+                           ctype = "text/html";
+                   }
+                    z_HTTP_header_add(o, &hres->headers, "Content-Type", ctype);
+               }
+               fclose(f);
+           }
+       }
+#endif
+
+#if 0
+       if (!strcmp(hreq->path, "/")) 
+        {
+#ifdef DOCDIR
+            struct stat sbuf;
+#endif
+            const char *doclink = "";
+            p = z_get_HTTP_Response(o, 200);
+            hres = p->u.HTTP_Response;
+            hres->content_buf = (char *) odr_malloc(o, 400);
+#ifdef DOCDIR
+            if (stat(DOCDIR "/yaz.html", &sbuf) == 0 && S_ISREG(sbuf.st_mode))
+                doclink = "<P><A HREF=\"/doc/yaz.html\">Documentation</A></P>";
+#endif
+            sprintf (hres->content_buf, 
+                     "<!DOCTYPE HTML PUBLIC \"-//IETF//DTD HTML 2.0//EN\">\n"
+                     "<HTML>\n"
+                     " <HEAD>\n"
+                     "  <TITLE>YAZ " YAZ_VERSION "</TITLE>\n"
+                     " </HEAD>\n"
+                     " <BODY>\n"
+                     "  <P><A HREF=\"http://www.indexdata.dk/yaz/\">YAZ</A> " 
+                     YAZ_VERSION "</P>\n"
+                     "%s"
+                     " </BODY>\n"
+                     "</HTML>\n", doclink);
+            hres->content_len = strlen(hres->content_buf);
+            z_HTTP_header_add(o, &hres->headers, "Content-Type", "text/html");
+        }
+#endif
+
+        if (!p)
+        {
+            p = z_get_HTTP_Response(o, 404);
+        }
+    }
+    else if (!strcmp(hreq->method, "POST"))
+    {
+        const char *content_type = z_HTTP_header_lookup(hreq->headers,
+                                                        "Content-Type");
+        if (content_type && !yaz_strcmp_del("text/xml", content_type, "; "))
+        {
+            Z_SOAP *soap_package = 0;
+            int ret = -1;
+            int http_code = 500;
+            const char *charset_p = 0;
+            char *charset = 0;
+
+            static Z_SOAP_Handler soap_handlers[2] = {
+#if HAVE_XML2
+                {"http://www.loc.gov/zing/srw/v1.0/", 0,
+                 (Z_SOAP_fun) yaz_srw_codec},
+#endif
+                {0, 0, 0}
+            };
+            if ((charset_p = strstr(content_type, "; charset=")))
+            {
+                int i = 0;
+                charset_p += 10;
+                while (i < 20 && charset_p[i] &&
+                       !strchr("; \n\r", charset_p[i]))
+                    i++;
+                charset = odr_malloc(assoc->encode, i+1);
+                memcpy(charset, charset_p, i);
+                charset[i] = '\0';
+                yaz_log(LOG_LOG, "SOAP encoding %s", charset);
+            }
+            ret = z_soap_codec(assoc->decode, &soap_package, 
+                               &hreq->content_buf, &hreq->content_len,
+                               soap_handlers);
+#if HAVE_XML2
+            if (!ret && soap_package->which == Z_SOAP_generic &&
+                soap_package->u.generic->no == 0)
+            {
+                /* SRW package */
+                Z_SRW_PDU *sr = soap_package->u.generic->p;
+                
+                if (sr->which == Z_SRW_searchRetrieve_request)
+                {
+                    Z_SRW_PDU *res =
+                        yaz_srw_get(assoc->encode,
+                                    Z_SRW_searchRetrieve_response);
+
+                    if (!sr->u.request->database)
+                    {
+                        const char *p0 = hreq->path, *p1;
+                        if (*p0 == '/')
+                            p0++;
+                        p1 = strchr(p0, '?');
+                        if (!p1)
+                            p1 = p0 + strlen(p0);
+                        if (p1 != p0)
+                        {
+                            sr->u.request->database =
+                                odr_malloc(assoc->decode, p1 - p0 + 1);
+                            memcpy (sr->u.request->database, p0, p1 - p0);
+                            sr->u.request->database[p1 - p0] = '\0';
+                        }
+                        else
+                            sr->u.request->database = "Default";
+                    }
+                    srw_bend_search(assoc, req, sr->u.request,
+                                    res->u.response);
+                    
+                    soap_package->u.generic->p = res;
+                    http_code = 200;
+                }
+                else if (sr->which == Z_SRW_explain_request)
+                {
+                    Z_SRW_PDU *res =
+                        yaz_srw_get(assoc->encode, Z_SRW_explain_response);
+
+                    srw_bend_explain(assoc, req, sr->u.explain_request,
+                                     res->u.explain_response);
+                    if (!res->u.explain_response->explainData_buf)
+                    {
+                        z_soap_error(assoc->encode, soap_package,
+                                     "SOAP-ENV:Client", "Explain Not Supported", 0);
+                    }
+                    else
+                    {
+                        soap_package->u.generic->p = res;
+                        http_code = 200;
+                    }
+                }
+                else
+                {
+                    z_soap_error(assoc->encode, soap_package,
+                                 "SOAP-ENV:Client", "Bad method", 0); 
+                }
+            }
+#endif
+            p = z_get_HTTP_Response(o, 200);
+            hres = p->u.HTTP_Response;
+            ret = z_soap_codec_enc(assoc->encode, &soap_package,
+                                   &hres->content_buf, &hres->content_len,
+                                   soap_handlers, charset);
+            hres->code = http_code;
+            if (!charset)
+                z_HTTP_header_add(o, &hres->headers, "Content-Type", "text/xml");
+            else
+            {
+                char ctype[60];
+                strcpy(ctype, "text/xml; charset=");
+                strcat(ctype, charset);
+                z_HTTP_header_add(o, &hres->headers, "Content-Type", ctype);
+            }
+        }
+        if (!p) /* still no response ? */
+            p = z_get_HTTP_Response(o, 500);
+    }
+    else
+    {
+        p = z_get_HTTP_Response(o, 405);
+        hres = p->u.HTTP_Response;
+
+        z_HTTP_header_add(o, &hres->headers, "Allow", "GET, POST");
+    }
+    hres = p->u.HTTP_Response;
+    if (!strcmp(hreq->version, "1.0")) 
+    {
+        const char *v = z_HTTP_header_lookup(hreq->headers, "Connection");
+        if (v && !strcmp(v, "Keep-Alive"))
+            keepalive = 1;
+        else
+            keepalive = 0;
+        hres->version = "1.0";
+    }
+    else
+    {
+        const char *v = z_HTTP_header_lookup(hreq->headers, "Connection");
+        if (v && !strcmp(v, "close"))
+            keepalive = 0;
+        else
+            keepalive = 1;
+        hres->version = "1.1";
+    }
+    if (!keepalive)
+    {
+        z_HTTP_header_add(o, &hres->headers, "Connection", "close");
+        assoc->state = ASSOC_DEAD;
+    }
+    else
+    {
+        int t;
+        const char *alive = z_HTTP_header_lookup(hreq->headers, "Keep-Alive");
+
+        if (alive && isdigit(*alive))
+            t = atoi(alive);
+        else
+            t = 15;
+        if (t < 0 || t > 3600)
+            t = 3600;
+        iochan_settimeout(assoc->client_chan,t);
+        z_HTTP_header_add(o, &hres->headers, "Connection", "Keep-Alive");
+    }
+    process_gdu_response(assoc, req, p);
+}
+
+static void process_gdu_request(association *assoc, request *req)
+{
+    if (req->gdu_request->which == Z_GDU_Z3950)
+    {
+        char *msg = 0;
+        req->apdu_request = req->gdu_request->u.z3950;
+        if (process_z_request(assoc, req, &msg) < 0)
+            do_close_req(assoc, Z_Close_systemProblem, msg, req);
+    }
+    else if (req->gdu_request->which == Z_GDU_HTTP_Request)
+        process_http_request(assoc, req);
+    else
+    {
+        do_close_req(assoc, Z_Close_systemProblem, "bad protocol packet", req);
+    }
+}
+
+/*
+ * Initiate request processing.
+ */
+static int process_z_request(association *assoc, request *req, char **msg)
+{
+    int fd = -1;
+    Z_APDU *res;
+    int retval;
+    
+    *msg = "Unknown Error";
+    assert(req && req->state == REQUEST_IDLE);
+    if (req->apdu_request->which != Z_APDU_initRequest && !assoc->init)
+    {
+       *msg = "Missing InitRequest";
+       return -1;
+    }
+    switch (req->apdu_request->which)
+    {
+    case Z_APDU_initRequest:
+        iochan_settimeout(assoc->client_chan,
+                          statserv_getcontrol()->idle_timeout * 60);
+       res = process_initRequest(assoc, req); break;
+    case Z_APDU_searchRequest:
+       res = process_searchRequest(assoc, req, &fd); break;
+    case Z_APDU_presentRequest:
+       res = process_presentRequest(assoc, req, &fd); break;
+    case Z_APDU_scanRequest:
+       if (assoc->init->bend_scan)
+           res = process_scanRequest(assoc, req, &fd);
+       else
+       {
+           *msg = "Cannot handle Scan APDU";
+           return -1;
+       }
+       break;
+    case Z_APDU_extendedServicesRequest:
+       if (assoc->init->bend_esrequest)
+           res = process_ESRequest(assoc, req, &fd);
+       else
+       {
+           *msg = "Cannot handle Extended Services APDU";
+           return -1;
+       }
+       break;
+    case Z_APDU_sortRequest:
+       if (assoc->init->bend_sort)
+           res = process_sortRequest(assoc, req, &fd);
+       else
+       {
+           *msg = "Cannot handle Sort APDU";
+           return -1;
+       }
+       break;
+    case Z_APDU_close:
+       process_close(assoc, req);
+       return 0;
+    case Z_APDU_deleteResultSetRequest:
+       if (assoc->init->bend_delete)
+           res = process_deleteRequest(assoc, req, &fd);
+       else
+       {
+           *msg = "Cannot handle Delete APDU";
+           return -1;
+       }
+       break;
+    case Z_APDU_segmentRequest:
+       if (assoc->init->bend_segment)
+       {
+           res = process_segmentRequest (assoc, req);
+       }
+       else
+       {
+           *msg = "Cannot handle Segment APDU";
+           return -1;
+       }
+       break;
+    default:
+       *msg = "Bad APDU received";
+       return -1;
+    }
+    if (res)
+    {
+       yaz_log(LOG_DEBUG, "  result immediately available");
+       retval = process_z_response(assoc, req, res);
+    }
+    else if (fd < 0)
+    {
+       yaz_log(LOG_DEBUG, "  result unavailble");
+       retval = 0;
+    }
+    else /* no result yet - one will be provided later */
+    {
+       IOCHAN chan;
+
+       /* Set up an I/O handler for the fd supplied by the backend */
+
+       yaz_log(LOG_DEBUG, "   establishing handler for result");
+       req->state = REQUEST_PENDING;
+       if (!(chan = iochan_create(fd, backend_response, EVENT_INPUT)))
+           abort();
+       iochan_setdata(chan, assoc);
+       retval = 0;
+    }
+    return retval;
+}
+
+/*
+ * Handle message from the backend.
+ */
+void backend_response(IOCHAN i, int event)
+{
+    association *assoc = (association *)iochan_getdata(i);
+    request *req = request_head(&assoc->incoming);
+    Z_APDU *res;
+    int fd;
+
+    yaz_log(LOG_DEBUG, "backend_response");
+    assert(assoc && req && req->state != REQUEST_IDLE);
+    /* determine what it is we're waiting for */
+    switch (req->apdu_request->which)
+    {
+       case Z_APDU_searchRequest:
+           res = response_searchRequest(assoc, req, 0, &fd); break;
+#if 0
+       case Z_APDU_presentRequest:
+           res = response_presentRequest(assoc, req, 0, &fd); break;
+       case Z_APDU_scanRequest:
+           res = response_scanRequest(assoc, req, 0, &fd); break;
+#endif
+       default:
+           yaz_log(LOG_WARN, "Serious programmer's lapse or bug");
+           abort();
+    }
+    if ((res && process_z_response(assoc, req, res) < 0) || fd < 0)
+    {
+       yaz_log(LOG_LOG, "Fatal error when talking to backend");
+       do_close(assoc, Z_Close_systemProblem, 0);
+       iochan_destroy(i);
+       return;
+    }
+    else if (!res) /* no result yet - try again later */
+    {
+       yaz_log(LOG_DEBUG, "   no result yet");
+       iochan_setfd(i, fd); /* in case fd has changed */
+    }
+}
+
+/*
+ * Encode response, and transfer the request structure to the outgoing queue.
+ */
+static int process_gdu_response(association *assoc, request *req, Z_GDU *res)
+{
+    odr_setbuf(assoc->encode, req->response, req->size_response, 1);
+
+    if (assoc->print && !z_GDU(assoc->print, &res, 0, 0))
+    {
+       yaz_log(LOG_WARN, "ODR print error: %s", 
+           odr_errmsg(odr_geterror(assoc->print)));
+       odr_reset(assoc->print);
+    }
+    if (!z_GDU(assoc->encode, &res, 0, 0))
+    {
+       yaz_log(LOG_WARN, "ODR error when encoding PDU: %s [element %s]",
+                odr_errmsg(odr_geterror(assoc->decode)),
+                odr_getelement(assoc->decode));
+       request_release(req);
+       return -1;
+    }
+    req->response = odr_getbuf(assoc->encode, &req->len_response,
+       &req->size_response);
+    odr_setbuf(assoc->encode, 0, 0, 0); /* don'txfree if we abort later */
+    odr_reset(assoc->encode);
+    req->state = REQUEST_IDLE;
+    request_enq(&assoc->outgoing, req);
+    /* turn the work over to the ir_session handler */
+    iochan_setflag(assoc->client_chan, EVENT_OUTPUT);
+    assoc->cs_put_mask = EVENT_OUTPUT;
+    /* Is there more work to be done? give that to the input handler too */
+#if 1
+    if (request_head(&assoc->incoming))
+    {
+       yaz_log (LOG_DEBUG, "more work to be done");
+       iochan_setevent(assoc->client_chan, EVENT_WORK);
+    }
+#endif
+    return 0;
+}
+
+/*
+ * Encode response, and transfer the request structure to the outgoing queue.
+ */
+static int process_z_response(association *assoc, request *req, Z_APDU *res)
+{
+    Z_GDU *gres = (Z_GDU *) odr_malloc(assoc->encode, sizeof(*res));
+    gres->which = Z_GDU_Z3950;
+    gres->u.z3950 = res;
+
+    return process_gdu_response(assoc, req, gres);
+}
+
+
+/*
+ * Handle init request.
+ * At the moment, we don't check the options
+ * anywhere else in the code - we just try not to do anything that would
+ * break a naive client. We'll toss 'em into the association block when
+ * we need them there.
+ */
+static Z_APDU *process_initRequest(association *assoc, request *reqb)
+{
+    statserv_options_block *cb = statserv_getcontrol();
+    Z_InitRequest *req = reqb->apdu_request->u.initRequest;
+    Z_APDU *apdu = zget_APDU(assoc->encode, Z_APDU_initResponse);
+    Z_InitResponse *resp = apdu->u.initResponse;
+    bend_initresult *binitres;
+
+    char options[140];
+
+    yaz_log(LOG_LOG, "Got initRequest");
+    if (req->implementationId)
+       yaz_log(LOG_LOG, "Id:        %s", req->implementationId);
+    if (req->implementationName)
+       yaz_log(LOG_LOG, "Name:      %s", req->implementationName);
+    if (req->implementationVersion)
+       yaz_log(LOG_LOG, "Version:   %s", req->implementationVersion);
+
+    assoc_init_reset(assoc);
+
+    assoc->init->auth = req->idAuthentication;
+    assoc->init->referenceId = req->referenceId;
+
+    if (ODR_MASK_GET(req->options, Z_Options_negotiationModel))
+    {
+        Z_CharSetandLanguageNegotiation *negotiation =
+            yaz_get_charneg_record (req->otherInfo);
+        if (negotiation->which == Z_CharSetandLanguageNegotiation_proposal)
+            assoc->init->charneg_request = negotiation;
+    }
+    
+    if (!(binitres = (*cb->bend_init)(assoc->init)))
+    {
+       yaz_log(LOG_WARN, "Bad response from backend.");
+       return 0;
+    }
+
+    assoc->backend = binitres->handle;
+    if ((assoc->init->bend_sort))
+       yaz_log (LOG_DEBUG, "Sort handler installed");
+    if ((assoc->init->bend_search))
+       yaz_log (LOG_DEBUG, "Search handler installed");
+    if ((assoc->init->bend_present))
+       yaz_log (LOG_DEBUG, "Present handler installed");   
+    if ((assoc->init->bend_esrequest))
+       yaz_log (LOG_DEBUG, "ESRequest handler installed");   
+    if ((assoc->init->bend_delete))
+       yaz_log (LOG_DEBUG, "Delete handler installed");   
+    if ((assoc->init->bend_scan))
+       yaz_log (LOG_DEBUG, "Scan handler installed");   
+    if ((assoc->init->bend_segment))
+       yaz_log (LOG_DEBUG, "Segment handler installed");   
+    
+    resp->referenceId = req->referenceId;
+    *options = '\0';
+    /* let's tell the client what we can do */
+    if (ODR_MASK_GET(req->options, Z_Options_search))
+    {
+       ODR_MASK_SET(resp->options, Z_Options_search);
+       strcat(options, "srch");
+    }
+    if (ODR_MASK_GET(req->options, Z_Options_present))
+    {
+       ODR_MASK_SET(resp->options, Z_Options_present);
+       strcat(options, " prst");
+    }
+    if (ODR_MASK_GET(req->options, Z_Options_delSet) &&
+       assoc->init->bend_delete)
+    {
+       ODR_MASK_SET(resp->options, Z_Options_delSet);
+       strcat(options, " del");
+    }
+    if (ODR_MASK_GET(req->options, Z_Options_extendedServices) &&
+       assoc->init->bend_esrequest)
+    {
+       ODR_MASK_SET(resp->options, Z_Options_extendedServices);
+       strcat (options, " extendedServices");
+    }
+    if (ODR_MASK_GET(req->options, Z_Options_namedResultSets))
+    {
+       ODR_MASK_SET(resp->options, Z_Options_namedResultSets);
+       strcat(options, " namedresults");
+    }
+    if (ODR_MASK_GET(req->options, Z_Options_scan) && assoc->init->bend_scan)
+    {
+       ODR_MASK_SET(resp->options, Z_Options_scan);
+       strcat(options, " scan");
+    }
+    if (ODR_MASK_GET(req->options, Z_Options_concurrentOperations))
+    {
+       ODR_MASK_SET(resp->options, Z_Options_concurrentOperations);
+       strcat(options, " concurrop");
+    }
+    if (ODR_MASK_GET(req->options, Z_Options_sort) && assoc->init->bend_sort)
+    {
+       ODR_MASK_SET(resp->options, Z_Options_sort);
+       strcat(options, " sort");
+    }
+
+    if (ODR_MASK_GET(req->options, Z_Options_negotiationModel)
+        && assoc->init->charneg_response)
+    {
+       Z_OtherInformation **p;
+       Z_OtherInformationUnit *p0;
+       
+       yaz_oi_APDU(apdu, &p);
+       
+       if ((p0=yaz_oi_update(p, assoc->encode, NULL, 0, 0))) {
+            ODR_MASK_SET(resp->options, Z_Options_negotiationModel);
+            
+            p0->which = Z_OtherInfo_externallyDefinedInfo;
+            p0->information.externallyDefinedInfo =
+                assoc->init->charneg_response;
+        }
+       ODR_MASK_SET(resp->options, Z_Options_negotiationModel);
+       strcat(options, " negotiation");
+    }
+
+    if (ODR_MASK_GET(req->protocolVersion, Z_ProtocolVersion_1))
+    {
+       ODR_MASK_SET(resp->protocolVersion, Z_ProtocolVersion_1);
+       assoc->version = 2; /* 1 & 2 are equivalent */
+    }
+    if (ODR_MASK_GET(req->protocolVersion, Z_ProtocolVersion_2))
+    {
+       ODR_MASK_SET(resp->protocolVersion, Z_ProtocolVersion_2);
+       assoc->version = 2;
+    }
+    if (ODR_MASK_GET(req->protocolVersion, Z_ProtocolVersion_3))
+    {
+       ODR_MASK_SET(resp->protocolVersion, Z_ProtocolVersion_3);
+       assoc->version = 3;
+    }
+
+    yaz_log(LOG_LOG, "Negotiated to v%d: %s", assoc->version, options);
+    assoc->maximumRecordSize = *req->maximumRecordSize;
+    if (assoc->maximumRecordSize > control_block->maxrecordsize)
+       assoc->maximumRecordSize = control_block->maxrecordsize;
+    assoc->preferredMessageSize = *req->preferredMessageSize;
+    if (assoc->preferredMessageSize > assoc->maximumRecordSize)
+       assoc->preferredMessageSize = assoc->maximumRecordSize;
+
+    resp->preferredMessageSize = &assoc->preferredMessageSize;
+    resp->maximumRecordSize = &assoc->maximumRecordSize;
+
+    resp->implementationName = "GFS/YAZ";
+
+    if (assoc->init->implementation_id)
+    {
+       char *nv = (char *)
+           odr_malloc (assoc->encode,
+                       strlen(assoc->init->implementation_id) + 10 + 
+                              strlen(resp->implementationId));
+       sprintf (nv, "%s / %s",
+                resp->implementationId, assoc->init->implementation_id);
+        resp->implementationId = nv;
+    }
+    if (assoc->init->implementation_name)
+    {
+       char *nv = (char *)
+           odr_malloc (assoc->encode,
+                       strlen(assoc->init->implementation_name) + 10 + 
+                              strlen(resp->implementationName));
+       sprintf (nv, "%s / %s",
+                resp->implementationName, assoc->init->implementation_name);
+        resp->implementationName = nv;
+    }
+    if (assoc->init->implementation_version)
+    {
+       char *nv = (char *)
+           odr_malloc (assoc->encode,
+                       strlen(assoc->init->implementation_version) + 10 + 
+                              strlen(resp->implementationVersion));
+       sprintf (nv, "YAZ %s / %s",
+                resp->implementationVersion,
+                assoc->init->implementation_version);
+        resp->implementationVersion = nv;
+    }
+
+    if (binitres->errcode)
+    {
+       yaz_log(LOG_LOG, "Connection rejected by backend.");
+       *resp->result = 0;
+       assoc->state = ASSOC_DEAD;
+       resp->userInformationField = init_diagnostics(assoc->encode,
+                                                     binitres->errcode,
+                                                     binitres->errstring);
+    }
+    else
+       assoc->state = ASSOC_UP;
+    return apdu;
+}
+
+/*
+ * Diagnostic in default format, to be returned as either a surrogate
+ * or non-surrogate diagnostic in the context of an open session, or
+ * as User-information when an Init is refused.
+ */
+static Z_DefaultDiagFormat *justdiag(ODR odr, int error, char *addinfo)
+{
+    int *err = odr_intdup(odr, error);
+    Z_DefaultDiagFormat *dr = (Z_DefaultDiagFormat *)
+       odr_malloc (odr, sizeof(*dr));
+
+    yaz_log(LOG_LOG, "[%d] %s%s%s", error, diagbib1_str(error),
+        addinfo ? " -- " : "", addinfo ? addinfo : "");
+
+    dr->diagnosticSetId =
+       yaz_oidval_to_z3950oid (odr, CLASS_DIAGSET, VAL_BIB1);
+    dr->condition = err;
+    dr->which = Z_DefaultDiagFormat_v2Addinfo;
+    dr->u.v2Addinfo = odr_strdup (odr, addinfo ? addinfo : "");
+    return dr;
+}
+
+/*
+ * Set the specified `errcode' and `errstring' into a UserInfo-1
+ * external to be returned to the client in accordance with Z35.90
+ * Implementor Agreement 5 (Returning diagnostics in an InitResponse):
+ *     http://lcweb.loc.gov/z3950/agency/agree/initdiag.html
+ */
+static Z_External *init_diagnostics(ODR odr, int error, char *addinfo)
+{
+    Z_External *x, *x2;
+    oident oid;
+    Z_OtherInformation *u;
+    Z_OtherInformationUnit *l;
+    Z_DiagnosticFormat *d;
+    Z_DiagnosticFormat_s *e;
+
+    x = (Z_External*) odr_malloc(odr, sizeof *x);
+    x->descriptor = 0;
+    x->indirect_reference = 0; 
+    oid.proto = PROTO_Z3950;
+    oid.oclass = CLASS_USERINFO;
+    oid.value = VAL_USERINFO1;
+    x->direct_reference = odr_oiddup(odr, oid_getoidbyent(&oid));
+    x->which = Z_External_userInfo1;
+
+    u = odr_malloc(odr, sizeof *u);
+    x->u.userInfo1 = u;
+    u->num_elements = 1;
+    u->list = (Z_OtherInformationUnit**) odr_malloc(odr, sizeof *u->list);
+    u->list[0] = (Z_OtherInformationUnit*) odr_malloc(odr, sizeof *u->list[0]);
+    l = u->list[0];
+    l->category = 0;
+    l->which = Z_OtherInfo_externallyDefinedInfo;
+
+    x2 = (Z_External*) odr_malloc(odr, sizeof *x);
+    l->information.externallyDefinedInfo = x2;
+    x2->descriptor = 0;
+    x2->indirect_reference = 0;
+    oid.oclass = CLASS_DIAGSET;
+    oid.value = VAL_DIAG1;
+    x2->direct_reference = odr_oiddup(odr, oid_getoidbyent(&oid));
+    x2->which = Z_External_diag1;
+
+    d = (Z_DiagnosticFormat*) odr_malloc(odr, sizeof *d);
+    x2->u.diag1 = d;
+    d->num = 1;
+    d->elements = (Z_DiagnosticFormat_s**) odr_malloc (odr, sizeof *d->elements);
+    d->elements[0] = (Z_DiagnosticFormat_s*) odr_malloc (odr, sizeof *d->elements[0]);
+    e = d->elements[0];
+
+    e->which = Z_DiagnosticFormat_s_defaultDiagRec;
+    e->u.defaultDiagRec = justdiag(odr, error, addinfo);
+    return x;
+}
+
+/*
+ * nonsurrogate diagnostic record.
+ */
+static Z_Records *diagrec(association *assoc, int error, char *addinfo)
+{
+    Z_Records *rec = (Z_Records *)
+       odr_malloc (assoc->encode, sizeof(*rec));
+    rec->which = Z_Records_NSD;
+    rec->u.nonSurrogateDiagnostic = justdiag(assoc->encode, error, addinfo);
+    return rec;
+}
+
+/*
+ * surrogate diagnostic.
+ */
+static Z_NamePlusRecord *surrogatediagrec(association *assoc, char *dbname,
+                                         int error, char *addinfo)
+{
+    Z_NamePlusRecord *rec = (Z_NamePlusRecord *)
+       odr_malloc (assoc->encode, sizeof(*rec));
+    Z_DiagRec *drec = (Z_DiagRec *)odr_malloc (assoc->encode, sizeof(*drec));
+    
+    yaz_log(LOG_DEBUG, "SurrogateDiagnotic: %d -- %s", error, addinfo);
+    rec->databaseName = dbname;
+    rec->which = Z_NamePlusRecord_surrogateDiagnostic;
+    rec->u.surrogateDiagnostic = drec;
+    drec->which = Z_DiagRec_defaultFormat;
+    drec->u.defaultFormat = justdiag(assoc->encode, error, addinfo);
+
+    return rec;
+}
+
+/*
+ * multiple nonsurrogate diagnostics.
+ */
+static Z_DiagRecs *diagrecs(association *assoc, int error, char *addinfo)
+{
+    Z_DiagRecs *recs = (Z_DiagRecs *)odr_malloc (assoc->encode, sizeof(*recs));
+    int *err = odr_intdup(assoc->encode, error);
+    Z_DiagRec **recp = (Z_DiagRec **)odr_malloc (assoc->encode, sizeof(*recp));
+    Z_DiagRec *drec = (Z_DiagRec *)odr_malloc (assoc->encode, sizeof(*drec));
+    Z_DefaultDiagFormat *rec = (Z_DefaultDiagFormat *)
+       odr_malloc (assoc->encode, sizeof(*rec));
+
+    yaz_log(LOG_DEBUG, "DiagRecs: %d -- %s", error, addinfo ? addinfo : "");
+
+    recs->num_diagRecs = 1;
+    recs->diagRecs = recp;
+    recp[0] = drec;
+    drec->which = Z_DiagRec_defaultFormat;
+    drec->u.defaultFormat = rec;
+
+    rec->diagnosticSetId =
+       yaz_oidval_to_z3950oid (assoc->encode, CLASS_DIAGSET, VAL_BIB1);
+    rec->condition = err;
+
+    rec->which = Z_DefaultDiagFormat_v2Addinfo;
+    rec->u.v2Addinfo = odr_strdup (assoc->encode, addinfo ? addinfo : "");
+    return recs;
+}
+
+static Z_Records *pack_records(association *a, char *setname, int start,
+                              int *num, Z_RecordComposition *comp,
+                              int *next, int *pres, oid_value format,
+                              Z_ReferenceId *referenceId,
+                              int *oid)
+{
+    int recno, total_length = 0, toget = *num, dumped_records = 0;
+    Z_Records *records =
+       (Z_Records *) odr_malloc (a->encode, sizeof(*records));
+    Z_NamePlusRecordList *reclist =
+       (Z_NamePlusRecordList *) odr_malloc (a->encode, sizeof(*reclist));
+    Z_NamePlusRecord **list =
+       (Z_NamePlusRecord **) odr_malloc (a->encode, sizeof(*list) * toget);
+
+    records->which = Z_Records_DBOSD;
+    records->u.databaseOrSurDiagnostics = reclist;
+    reclist->num_records = 0;
+    reclist->records = list;
+    *pres = Z_PRES_SUCCESS;
+    *num = 0;
+    *next = 0;
+
+    yaz_log(LOG_LOG, "Request to pack %d+%d+%s", start, toget, setname);
+    yaz_log(LOG_DEBUG, "pms=%d, mrs=%d", a->preferredMessageSize,
+       a->maximumRecordSize);
+    for (recno = start; reclist->num_records < toget; recno++)
+    {
+       bend_fetch_rr freq;
+       Z_NamePlusRecord *thisrec;
+       int this_length = 0;
+       /*
+        * we get the number of bytes allocated on the stream before any
+        * allocation done by the backend - this should give us a reasonable
+        * idea of the total size of the data so far.
+        */
+       total_length = odr_total(a->encode) - dumped_records;
+       freq.errcode = 0;
+       freq.errstring = 0;
+       freq.basename = 0;
+       freq.len = 0;
+       freq.record = 0;
+       freq.last_in_set = 0;
+       freq.setname = setname;
+       freq.surrogate_flag = 0;
+       freq.number = recno;
+       freq.comp = comp;
+       freq.request_format = format;
+       freq.request_format_raw = oid;
+       freq.output_format = format;
+       freq.output_format_raw = 0;
+       freq.stream = a->encode;
+       freq.print = a->print;
+       freq.referenceId = referenceId;
+        freq.schema = 0;
+       (*a->init->bend_fetch)(a->backend, &freq);
+       /* backend should be able to signal whether error is system-wide
+          or only pertaining to current record */
+       if (freq.errcode)
+       {
+           if (!freq.surrogate_flag)
+           {
+               char s[20];
+               *pres = Z_PRES_FAILURE;
+               /* for 'present request out of range',
+                   set addinfo to record position if not set */
+               if (freq.errcode == 13 && freq.errstring == 0)
+               {
+                   sprintf (s, "%d", recno);
+                   freq.errstring = s;
+               }
+               return diagrec(a, freq.errcode, freq.errstring);
+           }
+           reclist->records[reclist->num_records] =
+               surrogatediagrec(a, freq.basename, freq.errcode,
+                                freq.errstring);
+           reclist->num_records++;
+           *next = freq.last_in_set ? 0 : recno + 1;
+           continue;
+       }
+       if (freq.len >= 0)
+           this_length = freq.len;
+       else
+           this_length = odr_total(a->encode) - total_length;
+       yaz_log(LOG_DEBUG, "  fetched record, len=%d, total=%d",
+           this_length, total_length);
+       if (this_length + total_length > a->preferredMessageSize)
+       {
+           /* record is small enough, really */
+           if (this_length <= a->preferredMessageSize)
+           {
+               yaz_log(LOG_DEBUG, "  Dropped last normal-sized record");
+               *pres = Z_PRES_PARTIAL_2;
+               break;
+           }
+           /* record can only be fetched by itself */
+           if (this_length < a->maximumRecordSize)
+           {
+               yaz_log(LOG_DEBUG, "  Record > prefmsgsz");
+               if (toget > 1)
+               {
+                   yaz_log(LOG_DEBUG, "  Dropped it");
+                   reclist->records[reclist->num_records] =
+                        surrogatediagrec(a, freq.basename, 16, 0);
+                   reclist->num_records++;
+                   *next = freq.last_in_set ? 0 : recno + 1;
+                   dumped_records += this_length;
+                   continue;
+               }
+           }
+           else /* too big entirely */
+           {
+               yaz_log(LOG_LOG, "Record > maxrcdsz this=%d max=%d", this_length, a->maximumRecordSize);
+               reclist->records[reclist->num_records] =
+                   surrogatediagrec(a, freq.basename, 17, 0);
+               reclist->num_records++;
+               *next = freq.last_in_set ? 0 : recno + 1;
+               dumped_records += this_length;
+               continue;
+           }
+       }
+
+       if (!(thisrec = (Z_NamePlusRecord *)
+             odr_malloc(a->encode, sizeof(*thisrec))))
+           return 0;
+       if (!(thisrec->databaseName = (char *)odr_malloc(a->encode,
+           strlen(freq.basename) + 1)))
+           return 0;
+       strcpy(thisrec->databaseName, freq.basename);
+       thisrec->which = Z_NamePlusRecord_databaseRecord;
+
+       if (freq.output_format_raw)
+       {
+           struct oident *ident = oid_getentbyoid(freq.output_format_raw);
+           freq.output_format = ident->value;
+       }
+       thisrec->u.databaseRecord = z_ext_record(a->encode, freq.output_format,
+                                                freq.record, freq.len);
+       if (!thisrec->u.databaseRecord)
+           return 0;
+       reclist->records[reclist->num_records] = thisrec;
+       reclist->num_records++;
+       *next = freq.last_in_set ? 0 : recno + 1;
+    }
+    *num = reclist->num_records;
+    return records;
+}
+
+static Z_APDU *process_searchRequest(association *assoc, request *reqb,
+    int *fd)
+{
+    Z_SearchRequest *req = reqb->apdu_request->u.searchRequest;
+    bend_search_rr *bsrr = 
+       (bend_search_rr *)nmem_malloc (reqb->request_mem, sizeof(*bsrr));
+    
+    yaz_log(LOG_LOG, "Got SearchRequest.");
+    bsrr->fd = fd;
+    bsrr->request = reqb;
+    bsrr->association = assoc;
+    bsrr->referenceId = req->referenceId;
+    save_referenceId (reqb, bsrr->referenceId);
+
+    yaz_log (LOG_LOG, "ResultSet '%s'", req->resultSetName);
+    if (req->databaseNames)
+    {
+       int i;
+       for (i = 0; i < req->num_databaseNames; i++)
+           yaz_log (LOG_LOG, "Database '%s'", req->databaseNames[i]);
+    }
+    yaz_log_zquery(req->query);
+
+    if (assoc->init->bend_search)
+    {
+       bsrr->setname = req->resultSetName;
+       bsrr->replace_set = *req->replaceIndicator;
+       bsrr->num_bases = req->num_databaseNames;
+       bsrr->basenames = req->databaseNames;
+       bsrr->query = req->query;
+       bsrr->stream = assoc->encode;
+       bsrr->decode = assoc->decode;
+       bsrr->print = assoc->print;
+       bsrr->errcode = 0;
+       bsrr->hits = 0;
+       bsrr->errstring = NULL;
+        bsrr->search_info = NULL;
+       (assoc->init->bend_search)(assoc->backend, bsrr);
+       if (!bsrr->request)
+           return 0;
+    }
+    return response_searchRequest(assoc, reqb, bsrr, fd);
+}
+
+int bend_searchresponse(void *handle, bend_search_rr *bsrr) {return 0;}
+
+/*
+ * Prepare a searchresponse based on the backend results. We probably want
+ * to look at making the fetching of records nonblocking as well, but
+ * so far, we'll keep things simple.
+ * If bsrt is null, that means we're called in response to a communications
+ * event, and we'll have to get the response for ourselves.
+ */
+static Z_APDU *response_searchRequest(association *assoc, request *reqb,
+    bend_search_rr *bsrt, int *fd)
+{
+    Z_SearchRequest *req = reqb->apdu_request->u.searchRequest;
+    Z_APDU *apdu = (Z_APDU *)odr_malloc (assoc->encode, sizeof(*apdu));
+    Z_SearchResponse *resp = (Z_SearchResponse *)
+       odr_malloc (assoc->encode, sizeof(*resp));
+    int *nulint = odr_intdup (assoc->encode, 0);
+    bool_t *sr = odr_intdup(assoc->encode, 1);
+    int *next = odr_intdup(assoc->encode, 0);
+    int *none = odr_intdup(assoc->encode, Z_RES_NONE);
+
+    apdu->which = Z_APDU_searchResponse;
+    apdu->u.searchResponse = resp;
+    resp->referenceId = req->referenceId;
+    resp->additionalSearchInfo = 0;
+    resp->otherInfo = 0;
+    *fd = -1;
+    if (!bsrt && !bend_searchresponse(assoc->backend, bsrt))
+    {
+       yaz_log(LOG_FATAL, "Bad result from backend");
+       return 0;
+    }
+    else if (bsrt->errcode)
+    {
+       resp->records = diagrec(assoc, bsrt->errcode, bsrt->errstring);
+       resp->resultCount = nulint;
+       resp->numberOfRecordsReturned = nulint;
+       resp->nextResultSetPosition = nulint;
+       resp->searchStatus = nulint;
+       resp->resultSetStatus = none;
+       resp->presentStatus = 0;
+    }
+    else
+    {
+       int *toget = odr_intdup(assoc->encode, 0);
+        int *presst = odr_intdup(assoc->encode, 0);
+       Z_RecordComposition comp, *compp = 0;
+
+        yaz_log (LOG_LOG, "resultCount: %d", bsrt->hits);
+
+       resp->records = 0;
+       resp->resultCount = &bsrt->hits;
+
+       comp.which = Z_RecordComp_simple;
+       /* how many records does the user agent want, then? */
+       if (bsrt->hits <= *req->smallSetUpperBound)
+       {
+           *toget = bsrt->hits;
+           if ((comp.u.simple = req->smallSetElementSetNames))
+               compp = &comp;
+       }
+       else if (bsrt->hits < *req->largeSetLowerBound)
+       {
+           *toget = *req->mediumSetPresentNumber;
+           if (*toget > bsrt->hits)
+               *toget = bsrt->hits;
+           if ((comp.u.simple = req->mediumSetElementSetNames))
+               compp = &comp;
+       }
+       else
+           *toget = 0;
+
+       if (*toget && !resp->records)
+       {
+           oident *prefformat;
+           oid_value form;
+
+           if (!(prefformat = oid_getentbyoid(req->preferredRecordSyntax)))
+               form = VAL_NONE;
+           else
+               form = prefformat->value;
+           resp->records = pack_records(assoc, req->resultSetName, 1,
+               toget, compp, next, presst, form, req->referenceId,
+                                        req->preferredRecordSyntax);
+           if (!resp->records)
+               return 0;
+           resp->numberOfRecordsReturned = toget;
+           resp->nextResultSetPosition = next;
+           resp->searchStatus = sr;
+           resp->resultSetStatus = 0;
+           resp->presentStatus = presst;
+       }
+       else
+       {
+           if (*resp->resultCount)
+               *next = 1;
+           resp->numberOfRecordsReturned = nulint;
+           resp->nextResultSetPosition = next;
+           resp->searchStatus = sr;
+           resp->resultSetStatus = 0;
+           resp->presentStatus = 0;
+       }
+    }
+    resp->additionalSearchInfo = bsrt->search_info;
+    return apdu;
+}
+
+/*
+ * Maybe we got a little over-friendly when we designed bend_fetch to
+ * get only one record at a time. Some backends can optimise multiple-record
+ * fetches, and at any rate, there is some overhead involved in
+ * all that selecting and hopping around. Problem is, of course, that the
+ * frontend can't know ahead of time how many records it'll need to
+ * fill the negotiated PDU size. Annoying. Segmentation or not, Z/SR
+ * is downright lousy as a bulk data transfer protocol.
+ *
+ * To start with, we'll do the fetching of records from the backend
+ * in one operation: To save some trips in and out of the event-handler,
+ * and to simplify the interface to pack_records. At any rate, asynch
+ * operation is more fun in operations that have an unpredictable execution
+ * speed - which is normally more true for search than for present.
+ */
+static Z_APDU *process_presentRequest(association *assoc, request *reqb,
+                                     int *fd)
+{
+    Z_PresentRequest *req = reqb->apdu_request->u.presentRequest;
+    oident *prefformat;
+    oid_value form;
+    Z_APDU *apdu;
+    Z_PresentResponse *resp;
+    int *next;
+    int *num;
+
+    yaz_log(LOG_LOG, "Got PresentRequest.");
+
+    if (!(prefformat = oid_getentbyoid(req->preferredRecordSyntax)))
+       form = VAL_NONE;
+    else
+       form = prefformat->value;
+    resp = (Z_PresentResponse *)odr_malloc (assoc->encode, sizeof(*resp));
+    resp->records = 0;
+    resp->presentStatus = odr_intdup(assoc->encode, 0);
+    if (assoc->init->bend_present)
+    {
+       bend_present_rr *bprr = (bend_present_rr *)
+           nmem_malloc (reqb->request_mem, sizeof(*bprr));
+       bprr->setname = req->resultSetId;
+       bprr->start = *req->resultSetStartPoint;
+       bprr->number = *req->numberOfRecordsRequested;
+       bprr->format = form;
+       bprr->comp = req->recordComposition;
+       bprr->referenceId = req->referenceId;
+       bprr->stream = assoc->encode;
+       bprr->print = assoc->print;
+       bprr->request = reqb;
+       bprr->association = assoc;
+       bprr->errcode = 0;
+       bprr->errstring = NULL;
+       (*assoc->init->bend_present)(assoc->backend, bprr);
+       
+       if (!bprr->request)
+           return 0;
+       if (bprr->errcode)
+       {
+           resp->records = diagrec(assoc, bprr->errcode, bprr->errstring);
+           *resp->presentStatus = Z_PRES_FAILURE;
+       }
+    }
+    apdu = (Z_APDU *)odr_malloc (assoc->encode, sizeof(*apdu));
+    next = odr_intdup(assoc->encode, 0);
+    num = odr_intdup(assoc->encode, 0);
+    
+    apdu->which = Z_APDU_presentResponse;
+    apdu->u.presentResponse = resp;
+    resp->referenceId = req->referenceId;
+    resp->otherInfo = 0;
+    
+    if (!resp->records)
+    {
+       *num = *req->numberOfRecordsRequested;
+       resp->records =
+           pack_records(assoc, req->resultSetId, *req->resultSetStartPoint,
+                    num, req->recordComposition, next, resp->presentStatus,
+                        form, req->referenceId, req->preferredRecordSyntax);
+    }
+    if (!resp->records)
+       return 0;
+    resp->numberOfRecordsReturned = num;
+    resp->nextResultSetPosition = next;
+    
+    return apdu;
+}
+
+/*
+ * Scan was implemented rather in a hurry, and with support for only the basic
+ * elements of the service in the backend API. Suggestions are welcome.
+ */
+static Z_APDU *process_scanRequest(association *assoc, request *reqb, int *fd)
+{
+    Z_ScanRequest *req = reqb->apdu_request->u.scanRequest;
+    Z_APDU *apdu = (Z_APDU *)odr_malloc (assoc->encode, sizeof(*apdu));
+    Z_ScanResponse *res = (Z_ScanResponse *)
+       odr_malloc (assoc->encode, sizeof(*res));
+    int *scanStatus = odr_intdup(assoc->encode, Z_Scan_failure);
+    int *numberOfEntriesReturned = odr_intdup(assoc->encode, 0);
+    Z_ListEntries *ents = (Z_ListEntries *)
+       odr_malloc (assoc->encode, sizeof(*ents));
+    Z_DiagRecs *diagrecs_p = NULL;
+    oident *attset;
+    bend_scan_rr *bsrr = (bend_scan_rr *)
+        odr_malloc (assoc->encode, sizeof(*bsrr));
+    struct scan_entry *save_entries;
+
+    yaz_log(LOG_LOG, "Got ScanRequest");
+
+    apdu->which = Z_APDU_scanResponse;
+    apdu->u.scanResponse = res;
+    res->referenceId = req->referenceId;
+
+    /* if step is absent, set it to 0 */
+    res->stepSize = odr_intdup(assoc->encode, 0);
+    if (req->stepSize)
+       *res->stepSize = *req->stepSize;
+
+    res->scanStatus = scanStatus;
+    res->numberOfEntriesReturned = numberOfEntriesReturned;
+    res->positionOfTerm = 0;
+    res->entries = ents;
+    ents->num_entries = 0;
+    ents->entries = NULL;
+    ents->num_nonsurrogateDiagnostics = 0;
+    ents->nonsurrogateDiagnostics = NULL;
+    res->attributeSet = 0;
+    res->otherInfo = 0;
+
+    if (req->databaseNames)
+    {
+        int i;
+        for (i = 0; i < req->num_databaseNames; i++)
+            yaz_log (LOG_LOG, "Database '%s'", req->databaseNames[i]);
+    }
+    bsrr->num_bases = req->num_databaseNames;
+    bsrr->basenames = req->databaseNames;
+    bsrr->num_entries = *req->numberOfTermsRequested;
+    bsrr->term = req->termListAndStartPoint;
+    bsrr->referenceId = req->referenceId;
+    bsrr->stream = assoc->encode;
+    bsrr->print = assoc->print;
+    bsrr->step_size = res->stepSize;
+    bsrr->entries = 0;
+    /* Note that version 2.0 of YAZ and older did not set entries .. 
+       We do now. And when we do it's easier to extend the scan entry 
+       We know that if the scan handler did set entries, it will
+       not know of new member display_term.
+    */
+    if (bsrr->num_entries > 0) 
+    {
+        int i;
+        bsrr->entries = odr_malloc(assoc->decode, sizeof(*bsrr->entries) *
+                                   bsrr->num_entries);
+        for (i = 0; i<bsrr->num_entries; i++)
+        {
+            bsrr->entries[i].term = 0;
+            bsrr->entries[i].occurrences = 0;
+            bsrr->entries[i].errcode = 0;
+            bsrr->entries[i].errstring = 0;
+            bsrr->entries[i].display_term = 0;
+        }
+    }
+    save_entries = bsrr->entries;  /* save it so we can compare later */
+
+    if (req->attributeSet &&
+        (attset = oid_getentbyoid(req->attributeSet)) &&
+        (attset->oclass == CLASS_ATTSET || attset->oclass == CLASS_GENERAL))
+        bsrr->attributeset = attset->value;
+    else
+        bsrr->attributeset = VAL_NONE;
+    log_scan_term (req->termListAndStartPoint, bsrr->attributeset);
+    bsrr->term_position = req->preferredPositionInResponse ?
+        *req->preferredPositionInResponse : 1;
+    ((int (*)(void *, bend_scan_rr *))
+     (*assoc->init->bend_scan))(assoc->backend, bsrr);
+    if (bsrr->errcode)
+        diagrecs_p = diagrecs(assoc, bsrr->errcode, bsrr->errstring);
+    else
+    {
+        int i;
+        Z_Entry **tab = (Z_Entry **)
+            odr_malloc (assoc->encode, sizeof(*tab) * bsrr->num_entries);
+        
+        if (bsrr->status == BEND_SCAN_PARTIAL)
+            *scanStatus = Z_Scan_partial_5;
+        else
+            *scanStatus = Z_Scan_success;
+        ents->entries = tab;
+        ents->num_entries = bsrr->num_entries;
+        res->numberOfEntriesReturned = &ents->num_entries;         
+        res->positionOfTerm = &bsrr->term_position;
+        for (i = 0; i < bsrr->num_entries; i++)
+        {
+            Z_Entry *e;
+            Z_TermInfo *t;
+            Odr_oct *o;
+            
+            tab[i] = e = (Z_Entry *)odr_malloc(assoc->encode, sizeof(*e));
+            if (bsrr->entries[i].occurrences >= 0)
+            {
+                e->which = Z_Entry_termInfo;
+                e->u.termInfo = t = (Z_TermInfo *)
+                    odr_malloc(assoc->encode, sizeof(*t));
+                t->suggestedAttributes = 0;
+                t->displayTerm = 0;
+                if (save_entries == bsrr->entries && 
+                    bsrr->entries[i].display_term)
+                {
+                    /* the entries was NOT set by the handler. So it's
+                       safe to test for new member display_term. It is
+                       NULL'ed by us.
+                    */
+                    t->displayTerm = odr_strdup(assoc->encode,
+                                                bsrr->entries[i].display_term);
+                }
+                t->alternativeTerm = 0;
+                t->byAttributes = 0;
+                t->otherTermInfo = 0;
+                t->globalOccurrences = &bsrr->entries[i].occurrences;
+                t->term = (Z_Term *)
+                    odr_malloc(assoc->encode, sizeof(*t->term));
+                t->term->which = Z_Term_general;
+                t->term->u.general = o =
+                    (Odr_oct *)odr_malloc(assoc->encode, sizeof(Odr_oct));
+                o->buf = (unsigned char *)
+                    odr_malloc(assoc->encode, o->len = o->size =
+                               strlen(bsrr->entries[i].term));
+                memcpy(o->buf, bsrr->entries[i].term, o->len);
+                yaz_log(LOG_DEBUG, "  term #%d: '%s' (%d)", i,
+                        bsrr->entries[i].term, bsrr->entries[i].occurrences);
+            }
+            else
+            {
+                Z_DiagRecs *drecs = diagrecs (assoc,
+                                              bsrr->entries[i].errcode,
+                                              bsrr->entries[i].errstring);
+                assert (drecs->num_diagRecs == 1);
+                e->which = Z_Entry_surrogateDiagnostic;
+                assert (drecs->diagRecs[0]);
+                e->u.surrogateDiagnostic = drecs->diagRecs[0];
+            }
+        }
+    }
+    if (diagrecs_p)
+    {
+       ents->num_nonsurrogateDiagnostics = diagrecs_p->num_diagRecs;
+       ents->nonsurrogateDiagnostics = diagrecs_p->diagRecs;
+    }
+    return apdu;
+}
+
+static Z_APDU *process_sortRequest(association *assoc, request *reqb,
+    int *fd)
+{
+    Z_SortRequest *req = reqb->apdu_request->u.sortRequest;
+    Z_SortResponse *res = (Z_SortResponse *)
+       odr_malloc (assoc->encode, sizeof(*res));
+    bend_sort_rr *bsrr = (bend_sort_rr *)
+       odr_malloc (assoc->encode, sizeof(*bsrr));
+
+    Z_APDU *apdu = (Z_APDU *)odr_malloc (assoc->encode, sizeof(*apdu));
+
+    yaz_log(LOG_LOG, "Got SortRequest.");
+
+    bsrr->num_input_setnames = req->num_inputResultSetNames;
+    bsrr->input_setnames = req->inputResultSetNames;
+    bsrr->referenceId = req->referenceId;
+    bsrr->output_setname = req->sortedResultSetName;
+    bsrr->sort_sequence = req->sortSequence;
+    bsrr->stream = assoc->encode;
+    bsrr->print = assoc->print;
+
+    bsrr->sort_status = Z_SortStatus_failure;
+    bsrr->errcode = 0;
+    bsrr->errstring = 0;
+    
+    (*assoc->init->bend_sort)(assoc->backend, bsrr);
+    
+    res->referenceId = bsrr->referenceId;
+    res->sortStatus = odr_intdup(assoc->encode, bsrr->sort_status);
+    res->resultSetStatus = 0;
+    if (bsrr->errcode)
+    {
+       Z_DiagRecs *dr = diagrecs (assoc, bsrr->errcode, bsrr->errstring);
+       res->diagnostics = dr->diagRecs;
+       res->num_diagnostics = dr->num_diagRecs;
+    }
+    else
+    {
+       res->num_diagnostics = 0;
+       res->diagnostics = 0;
+    }
+    res->resultCount = 0;
+    res->otherInfo = 0;
+
+    apdu->which = Z_APDU_sortResponse;
+    apdu->u.sortResponse = res;
+    return apdu;
+}
+
+static Z_APDU *process_deleteRequest(association *assoc, request *reqb,
+    int *fd)
+{
+    Z_DeleteResultSetRequest *req =
+        reqb->apdu_request->u.deleteResultSetRequest;
+    Z_DeleteResultSetResponse *res = (Z_DeleteResultSetResponse *)
+       odr_malloc (assoc->encode, sizeof(*res));
+    bend_delete_rr *bdrr = (bend_delete_rr *)
+       odr_malloc (assoc->encode, sizeof(*bdrr));
+    Z_APDU *apdu = (Z_APDU *)odr_malloc (assoc->encode, sizeof(*apdu));
+
+    yaz_log(LOG_LOG, "Got DeleteRequest.");
+
+    bdrr->num_setnames = req->num_resultSetList;
+    bdrr->setnames = req->resultSetList;
+    bdrr->stream = assoc->encode;
+    bdrr->print = assoc->print;
+    bdrr->function = *req->deleteFunction;
+    bdrr->referenceId = req->referenceId;
+    bdrr->statuses = 0;
+    if (bdrr->num_setnames > 0)
+    {
+       int i;
+       bdrr->statuses = (int*) 
+           odr_malloc(assoc->encode, sizeof(*bdrr->statuses) *
+                      bdrr->num_setnames);
+       for (i = 0; i < bdrr->num_setnames; i++)
+           bdrr->statuses[i] = 0;
+    }
+    (*assoc->init->bend_delete)(assoc->backend, bdrr);
+    
+    res->referenceId = req->referenceId;
+
+    res->deleteOperationStatus = odr_intdup(assoc->encode,bdrr->delete_status);
+
+    res->deleteListStatuses = 0;
+    if (bdrr->num_setnames > 0)
+    {
+       int i;
+       res->deleteListStatuses = (Z_ListStatuses *)
+           odr_malloc(assoc->encode, sizeof(*res->deleteListStatuses));
+       res->deleteListStatuses->num = bdrr->num_setnames;
+       res->deleteListStatuses->elements =
+           (Z_ListStatus **)
+           odr_malloc (assoc->encode, 
+                       sizeof(*res->deleteListStatuses->elements) *
+                       bdrr->num_setnames);
+       for (i = 0; i<bdrr->num_setnames; i++)
+       {
+           res->deleteListStatuses->elements[i] =
+               (Z_ListStatus *)
+               odr_malloc (assoc->encode,
+                           sizeof(**res->deleteListStatuses->elements));
+           res->deleteListStatuses->elements[i]->status = bdrr->statuses+i;
+           res->deleteListStatuses->elements[i]->id =
+               odr_strdup (assoc->encode, bdrr->setnames[i]);
+           
+       }
+    }
+    res->numberNotDeleted = 0;
+    res->bulkStatuses = 0;
+    res->deleteMessage = 0;
+    res->otherInfo = 0;
+
+    apdu->which = Z_APDU_deleteResultSetResponse;
+    apdu->u.deleteResultSetResponse = res;
+    return apdu;
+}
+
+static void process_close(association *assoc, request *reqb)
+{
+    Z_Close *req = reqb->apdu_request->u.close;
+    static char *reasons[] =
+    {
+       "finished",
+       "shutdown",
+       "systemProblem",
+       "costLimit",
+       "resources",
+       "securityViolation",
+       "protocolError",
+       "lackOfActivity",
+       "peerAbort",
+       "unspecified"
+    };
+
+    yaz_log(LOG_LOG, "Got Close, reason %s, message %s",
+       reasons[*req->closeReason], req->diagnosticInformation ?
+       req->diagnosticInformation : "NULL");
+    if (assoc->version < 3) /* to make do_force respond with close */
+       assoc->version = 3;
+    do_close_req(assoc, Z_Close_finished,
+                "Association terminated by client", reqb);
+}
+
+void save_referenceId (request *reqb, Z_ReferenceId *refid)
+{
+    if (refid)
+    {
+       reqb->len_refid = refid->len;
+       reqb->refid = (char *)nmem_malloc (reqb->request_mem, refid->len);
+       memcpy (reqb->refid, refid->buf, refid->len);
+    }
+    else
+    {
+       reqb->len_refid = 0;
+       reqb->refid = NULL;
+    }
+}
+
+void bend_request_send (bend_association a, bend_request req, Z_APDU *res)
+{
+    process_z_response (a, req, res);
+}
+
+bend_request bend_request_mk (bend_association a)
+{
+    request *nreq = request_get (&a->outgoing);
+    nreq->request_mem = nmem_create ();
+    return nreq;
+}
+
+Z_ReferenceId *bend_request_getid (ODR odr, bend_request req)
+{
+    Z_ReferenceId *id;
+    if (!req->refid)
+       return 0;
+    id = (Odr_oct *)odr_malloc (odr, sizeof(*odr));
+    id->buf = (unsigned char *)odr_malloc (odr, req->len_refid);
+    id->len = id->size = req->len_refid;
+    memcpy (id->buf, req->refid, req->len_refid);
+    return id;
+}
+
+void bend_request_destroy (bend_request *req)
+{
+    nmem_destroy((*req)->request_mem);
+    request_release(*req);
+    *req = NULL;
+}
+
+int bend_backend_respond (bend_association a, bend_request req)
+{
+    char *msg;
+    int r;
+    r = process_z_request (a, req, &msg);
+    if (r < 0)
+       yaz_log (LOG_WARN, "%s", msg);
+    return r;
+}
+
+void bend_request_setdata(bend_request r, void *p)
+{
+    r->clientData = p;
+}
+
+void *bend_request_getdata(bend_request r)
+{
+    return r->clientData;
+}
+
+static Z_APDU *process_segmentRequest (association *assoc, request *reqb)
+{
+    bend_segment_rr req;
+
+    req.segment = reqb->apdu_request->u.segmentRequest;
+    req.stream = assoc->encode;
+    req.decode = assoc->decode;
+    req.print = assoc->print;
+    req.association = assoc;
+    
+    (*assoc->init->bend_segment)(assoc->backend, &req);
+
+    return 0;
+}
+
+static Z_APDU *process_ESRequest(association *assoc, request *reqb, int *fd)
+{
+    bend_esrequest_rr esrequest;
+
+    Z_ExtendedServicesRequest *req =
+        reqb->apdu_request->u.extendedServicesRequest;
+    Z_APDU *apdu = zget_APDU(assoc->encode, Z_APDU_extendedServicesResponse);
+
+    Z_ExtendedServicesResponse *resp = apdu->u.extendedServicesResponse;
+
+    yaz_log(LOG_DEBUG,"inside Process esRequest");
+
+    esrequest.esr = reqb->apdu_request->u.extendedServicesRequest;
+    esrequest.stream = assoc->encode;
+    esrequest.decode = assoc->decode;
+    esrequest.print = assoc->print;
+    esrequest.errcode = 0;
+    esrequest.errstring = NULL;
+    esrequest.request = reqb;
+    esrequest.association = assoc;
+    esrequest.taskPackage = 0;
+    esrequest.referenceId = req->referenceId;
+    
+    (*assoc->init->bend_esrequest)(assoc->backend, &esrequest);
+    
+    /* If the response is being delayed, return NULL */
+    if (esrequest.request == NULL)
+        return(NULL);
+
+    resp->referenceId = req->referenceId;
+
+    if (esrequest.errcode == -1)
+    {
+        /* Backend service indicates request will be processed */
+        yaz_log(LOG_DEBUG,"Request could be processed...Accepted !");
+        *resp->operationStatus = Z_ExtendedServicesResponse_accepted;
+    }
+    else if (esrequest.errcode == 0)
+    {
+        /* Backend service indicates request will be processed */
+        yaz_log(LOG_DEBUG,"Request could be processed...Done !");
+        *resp->operationStatus = Z_ExtendedServicesResponse_done;
+    }
+    else
+    {
+       Z_DiagRecs *diagRecs = diagrecs (assoc, esrequest.errcode,
+                                        esrequest.errstring);
+
+        /* Backend indicates error, request will not be processed */
+        yaz_log(LOG_DEBUG,"Request could not be processed...failure !");
+        *resp->operationStatus = Z_ExtendedServicesResponse_failure;
+       resp->num_diagnostics = diagRecs->num_diagRecs;
+       resp->diagnostics = diagRecs->diagRecs;
+    }
+    /* Do something with the members of bend_extendedservice */
+    if (esrequest.taskPackage)
+       resp->taskPackage = z_ext_record (assoc->encode, VAL_EXTENDED,
+                                        (const char *)  esrequest.taskPackage,
+                                         -1);
+    yaz_log(LOG_DEBUG,"Send the result apdu");
+    return apdu;
+}
+
diff --git a/src/session.h b/src/session.h
new file mode 100644 (file)
index 0000000..bf196e4
--- /dev/null
@@ -0,0 +1,107 @@
+/*
+ * Copyright (C) 1995-2003, Index Data
+ * See the file LICENSE for details.
+ * Sebastian Hammer, Adam Dickmeiss
+ *
+ * $Id: session.h,v 1.1 2003-10-27 12:21:35 adam Exp $
+ */
+
+#ifndef SESSION_H
+#define SESSION_H
+
+#include <sys/types.h>
+#include <yaz/comstack.h>
+#include <yaz/odr.h>
+#include <yaz/oid.h>
+#include <yaz/proto.h>
+#include "eventl.h"
+
+typedef enum {
+       REQUEST_IDLE,    /* the request is just sitting in the queue */
+       REQUEST_PENDING  /* operation pending (b'end processing or network I/O*/
+       /* this list will have more elements when acc/res control is added */
+} request_state;
+
+typedef struct request
+{
+    int len_refid;          /* length of referenceid */
+    char *refid;            /* referenceid */
+    request_state state;
+
+    Z_GDU *gdu_request;     /* Current request */
+    Z_APDU *apdu_request;   /* Current Z39.50 request */
+    NMEM request_mem;    /* memory handle for request */
+
+    int size_response;     /* size of buffer */
+    int len_response;      /* length of encoded data */
+    char *response;        /* encoded data waiting for transmission */
+
+    void *clientData;
+    struct request *next;
+    struct request_q *q; 
+} request;
+
+typedef struct request_q
+{
+    request *head;
+    request *tail;
+    request *list;
+    int num;
+} request_q;
+
+/*
+ * association state.
+ */
+typedef enum
+{
+    ASSOC_NEW,                /* not initialized yet */
+    ASSOC_UP,                 /* normal operation */
+    ASSOC_DEAD                /* dead. Close if input arrives */
+} association_state;
+
+typedef struct association
+{
+    IOCHAN client_chan;           /* event-loop control */
+    COMSTACK client_link;         /* communication handle */
+    ODR decode;                   /* decoding stream */
+    ODR encode;                   /* encoding stream */
+    ODR print;                    /* printing stream (for -a) */
+    char *encode_buffer;          /* temporary buffer for encoded data */
+    int encoded_len;              /* length of encoded data */
+    char *input_buffer;           /* input buffer (allocated by comstack) */
+    int input_buffer_len;         /* length (size) of buffer */
+    int input_apdu_len;           /* length of current incoming APDU */
+    oid_proto proto;              /* protocol (PROTO_Z3950/PROTO_SR) */
+    void *backend;                /* backend handle */
+    request_q incoming;           /* Q of incoming PDUs */
+    request_q outgoing;           /* Q of outgoing data buffers (enc. PDUs) */
+    association_state state;
+
+    /* session parameters */
+    int preferredMessageSize;
+    int maximumRecordSize;
+    int version;                  /* highest version-bit set (2 or 3) */
+
+    unsigned cs_get_mask;
+    unsigned cs_put_mask;
+    unsigned cs_accept_mask;
+
+    struct bend_initrequest *init;
+} association;
+
+association *create_association(IOCHAN channel, COMSTACK link);
+void destroy_association(association *h);
+void ir_session(IOCHAN h, int event);
+
+void request_enq(request_q *q, request *r);
+request *request_head(request_q *q);
+request *request_deq(request_q *q);
+request *request_deq_x(request_q *q, request *r);
+void request_initq(request_q *q);
+void request_delq(request_q *q);
+request *request_get(request_q *q);
+void request_release(request *r);
+
+int statserv_must_terminate(void);
+
+#endif
diff --git a/src/siconv.c b/src/siconv.c
new file mode 100644 (file)
index 0000000..36f2c2d
--- /dev/null
@@ -0,0 +1,541 @@
+/*
+ * Copyright (c) 1997-2003, Index Data
+ * See the file LICENSE for details.
+ *
+ * $Id: siconv.c,v 1.1 2003-10-27 12:21:35 adam Exp $
+ */
+
+/* mini iconv and wrapper for system iconv library (if present) */
+
+#if HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include <errno.h>
+#include <string.h>
+#include <ctype.h>
+#if HAVE_WCHAR_H
+#include <wchar.h>
+#endif
+
+#if HAVE_ICONV_H
+#include <iconv.h>
+#endif
+
+#include <yaz/yaz-util.h>
+
+unsigned long yaz_marc8_conv (unsigned char *inp, size_t inbytesleft,
+                              size_t *no_read);
+    
+struct yaz_iconv_struct {
+    int my_errno;
+    int init_flag;
+    size_t (*init_handle)(yaz_iconv_t cd, unsigned char *inbuf,
+                          size_t inbytesleft, size_t *no_read);
+    unsigned long (*read_handle)(yaz_iconv_t cd, unsigned char *inbuf,
+                                 size_t inbytesleft, size_t *no_read);
+    size_t (*write_handle)(yaz_iconv_t cd, unsigned long x,
+                           char **outbuf, size_t *outbytesleft);
+#if HAVE_ICONV_H
+    iconv_t iconv_cd;
+#endif
+};
+
+static unsigned long yaz_read_ISO8859_1 (yaz_iconv_t cd, unsigned char *inp,
+                                         size_t inbytesleft, size_t *no_read)
+{
+    unsigned long x = inp[0];
+    *no_read = 1;
+    return x;
+}
+
+static size_t yaz_init_UTF8 (yaz_iconv_t cd, unsigned char *inp,
+                             size_t inbytesleft, size_t *no_read)
+{
+    if (inp[0] != 0xef)
+    {
+        *no_read = 0;
+        return 0;
+    }
+    if (inbytesleft < 3)
+    {
+        cd->my_errno = YAZ_ICONV_EINVAL;
+        return (size_t) -1;
+    }
+    if (inp[1] != 0xbb || inp[2] != 0xbf)
+    {
+        cd->my_errno = YAZ_ICONV_EILSEQ;
+        return (size_t) -1;
+    }
+    *no_read = 3;
+    return 0;
+}
+
+static unsigned long yaz_read_UTF8 (yaz_iconv_t cd, unsigned char *inp,
+                                    size_t inbytesleft, size_t *no_read)
+{
+    unsigned long x = 0;
+
+    if (inp[0] <= 0x7f)
+    {
+        x = inp[0];
+        *no_read = 1;
+    }
+    else if (inp[0] <= 0xbf || inp[0] >= 0xfe)
+    {
+        *no_read = 0;
+        cd->my_errno = YAZ_ICONV_EILSEQ;
+    }
+    else if (inp[0] <= 0xdf && inbytesleft >= 2)
+    {
+        x = ((inp[0] & 0x1f) << 6) | (inp[1] & 0x3f);
+        if (x >= 0x80)
+            *no_read = 2;
+        else
+        {
+            *no_read = 0;
+            cd->my_errno = YAZ_ICONV_EILSEQ;
+        }
+    }
+    else if (inp[0] <= 0xef && inbytesleft >= 3)
+    {
+        x = ((inp[0] & 0x0f) << 12) | ((inp[1] & 0x3f) << 6) |
+            (inp[1] & 0x3f);
+        if (x >= 0x800)
+            *no_read = 3;
+        else
+        {
+            *no_read = 0;
+            cd->my_errno = YAZ_ICONV_EILSEQ;
+        }
+    }
+    else if (inp[0] <= 0xf7 && inbytesleft >= 4)
+    {
+        x =  ((inp[0] & 0x07) << 18) | ((inp[1] & 0x3f) << 12) |
+            ((inp[2] & 0x3f) << 6) | (inp[3] & 0x3f);
+        if (x >= 0x10000)
+            *no_read = 4;
+        else
+        {
+            *no_read = 0;
+            cd->my_errno = YAZ_ICONV_EILSEQ;
+        }
+    }
+    else if (inp[0] <= 0xfb && inbytesleft >= 5)
+    {
+        x =  ((inp[0] & 0x03) << 24) | ((inp[1] & 0x3f) << 18) |
+            ((inp[2] & 0x3f) << 12) | ((inp[3] & 0x3f) << 6) |
+            (inp[4] & 0x3f);
+        if (x >= 0x200000)
+            *no_read = 5;
+        else
+        {
+            *no_read = 0;
+            cd->my_errno = YAZ_ICONV_EILSEQ;
+        }
+    }
+    else if (inp[0] <= 0xfd && inbytesleft >= 6)
+    {
+        x =  ((inp[0] & 0x01) << 30) | ((inp[1] & 0x3f) << 24) |
+            ((inp[2] & 0x3f) << 18) | ((inp[3] & 0x3f) << 12) |
+            ((inp[4] & 0x3f) << 6) | (inp[5] & 0x3f);
+        if (x >= 0x4000000)
+            *no_read = 6;
+        else
+        {
+            *no_read = 0;
+            cd->my_errno = YAZ_ICONV_EILSEQ;
+        }
+    }
+    else
+    {
+        *no_read = 0;
+        cd->my_errno = YAZ_ICONV_EINVAL;
+    }
+    return x;
+}
+
+static unsigned long yaz_read_UCS4 (yaz_iconv_t cd, unsigned char *inp,
+                                    size_t inbytesleft, size_t *no_read)
+{
+    unsigned long x = 0;
+    
+    if (inbytesleft < 4)
+    {
+        cd->my_errno = YAZ_ICONV_EINVAL; /* incomplete input */
+        *no_read = 0;
+    }
+    else
+    {
+        x = (inp[0]<<24) | (inp[1]<<16) | (inp[2]<<8) | inp[3];
+        *no_read = 4;
+    }
+    return x;
+}
+
+static unsigned long yaz_read_UCS4LE (yaz_iconv_t cd, unsigned char *inp,
+                                      size_t inbytesleft, size_t *no_read)
+{
+    unsigned long x = 0;
+    
+    if (inbytesleft < 4)
+    {
+        cd->my_errno = YAZ_ICONV_EINVAL; /* incomplete input */
+        *no_read = 0;
+    }
+    else
+    {
+        x = (inp[3]<<24) | (inp[2]<<16) | (inp[1]<<8) | inp[0];
+        *no_read = 4;
+    }
+    return x;
+}
+
+#if HAVE_WCHAR_H
+static unsigned long yaz_read_wchar_t (yaz_iconv_t cd, unsigned char *inp,
+                                       size_t inbytesleft, size_t *no_read)
+{
+    unsigned long x = 0;
+    
+    if (inbytesleft < sizeof(wchar_t))
+    {
+        cd->my_errno = YAZ_ICONV_EINVAL; /* incomplete input */
+        *no_read = 0;
+    }
+    else
+    {
+        wchar_t wch;
+        memcpy (&wch, inp, sizeof(wch));
+        x = wch;
+        *no_read = sizeof(wch);
+    }
+    return x;
+}
+#endif
+
+static unsigned long yaz_read_marc8 (yaz_iconv_t cd, unsigned char *inp,
+                                     size_t inbytesleft, size_t *no_read)
+{
+    return yaz_marc8_conv(inp, inbytesleft, no_read);
+}
+
+static size_t yaz_write_UTF8 (yaz_iconv_t cd, unsigned long x,
+                              char **outbuf, size_t *outbytesleft)
+{
+    unsigned char *outp = (unsigned char *) *outbuf;
+    if (x <= 0x7f && *outbytesleft >= 1)
+    {
+        *outp++ = (unsigned char) x;
+        (*outbytesleft)--;
+    } 
+    else if (x <= 0x7ff && *outbytesleft >= 2)
+    {
+        *outp++ = (unsigned char) ((x >> 6) | 0xc0);
+        *outp++ = (unsigned char) ((x & 0x3f) | 0x80);
+        (*outbytesleft) -= 2;
+    }
+    else if (x <= 0xffff && *outbytesleft >= 3)
+    {
+        *outp++ = (unsigned char) ((x >> 12) | 0xe0);
+        *outp++ = (unsigned char) (((x >> 6) & 0x3f) | 0x80);
+        *outp++ = (unsigned char) ((x & 0x3f) | 0x80);
+        (*outbytesleft) -= 3;
+    }
+    else if (x <= 0x1fffff && *outbytesleft >= 4)
+    {
+        *outp++ = (unsigned char) ((x >> 18) | 0xf0);
+        *outp++ = (unsigned char) (((x >> 12) & 0x3f) | 0x80);
+        *outp++ = (unsigned char) (((x >> 6)  & 0x3f) | 0x80);
+        *outp++ = (unsigned char) ((x & 0x3f) | 0x80);
+        (*outbytesleft) -= 4;
+    }
+    else if (x <= 0x3ffffff && *outbytesleft >= 5)
+    {
+        *outp++ = (unsigned char) ((x >> 24) | 0xf8);
+        *outp++ = (unsigned char) (((x >> 18) & 0x3f) | 0x80);
+        *outp++ = (unsigned char) (((x >> 12) & 0x3f) | 0x80);
+        *outp++ = (unsigned char) (((x >> 6)  & 0x3f) | 0x80);
+        *outp++ = (unsigned char) ((x & 0x3f) | 0x80);
+        (*outbytesleft) -= 5;
+    }
+    else if (*outbytesleft >= 6)
+    {
+        *outp++ = (unsigned char) ((x >> 30) | 0xfc);
+        *outp++ = (unsigned char) (((x >> 24) & 0x3f) | 0x80);
+        *outp++ = (unsigned char) (((x >> 18) & 0x3f) | 0x80);
+        *outp++ = (unsigned char) (((x >> 12) & 0x3f) | 0x80);
+        *outp++ = (unsigned char) (((x >> 6)  & 0x3f) | 0x80);
+        *outp++ = (unsigned char) ((x & 0x3f) | 0x80);
+        (*outbytesleft) -= 6;
+    }
+    else 
+    {
+        cd->my_errno = YAZ_ICONV_E2BIG;  /* not room for output */
+        return (size_t)(-1);
+    }
+    *outbuf = (char *) outp;
+    return 0;
+}
+
+static size_t yaz_write_ISO8859_1 (yaz_iconv_t cd, unsigned long x,
+                                   char **outbuf, size_t *outbytesleft)
+{
+    unsigned char *outp = (unsigned char *) *outbuf;
+    if (x > 255 || x < 1)
+    {
+        cd->my_errno = YAZ_ICONV_EILSEQ;
+        return (size_t) -1;
+    }
+    else if (*outbytesleft >= 1)
+    {
+        *outp++ = (unsigned char) x;
+        (*outbytesleft)--;
+    }
+    else 
+    {
+        cd->my_errno = YAZ_ICONV_E2BIG;
+        return (size_t)(-1);
+    }
+    *outbuf = (char *) outp;
+    return 0;
+}
+
+
+static size_t yaz_write_UCS4 (yaz_iconv_t cd, unsigned long x,
+                              char **outbuf, size_t *outbytesleft)
+{
+    unsigned char *outp = (unsigned char *) *outbuf;
+    if (*outbytesleft >= 4)
+    {
+        *outp++ = (unsigned char) (x<<24);
+        *outp++ = (unsigned char) (x<<16);
+        *outp++ = (unsigned char) (x<<8);
+        *outp++ = (unsigned char) x;
+        (*outbytesleft) -= 4;
+    }
+    else
+    {
+        cd->my_errno = YAZ_ICONV_E2BIG;
+        return (size_t)(-1);
+    }
+    *outbuf = (char *) outp;
+    return 0;
+}
+
+static size_t yaz_write_UCS4LE (yaz_iconv_t cd, unsigned long x,
+                                char **outbuf, size_t *outbytesleft)
+{
+    unsigned char *outp = (unsigned char *) *outbuf;
+    if (*outbytesleft >= 4)
+    {
+        *outp++ = (unsigned char) x;
+        *outp++ = (unsigned char) (x<<8);
+        *outp++ = (unsigned char) (x<<16);
+        *outp++ = (unsigned char) (x<<24);
+        (*outbytesleft) -= 4;
+    }
+    else
+    {
+        cd->my_errno = YAZ_ICONV_E2BIG;
+        return (size_t)(-1);
+    }
+    *outbuf = (char *) outp;
+    return 0;
+}
+
+#if HAVE_WCHAR_H
+static size_t yaz_write_wchar_t (yaz_iconv_t cd, unsigned long x,
+                                 char **outbuf, size_t *outbytesleft)
+{
+    unsigned char *outp = (unsigned char *) *outbuf;
+
+    if (*outbytesleft >= sizeof(wchar_t))
+    {
+        wchar_t wch = x;
+        memcpy(outp, &wch, sizeof(wch));
+        outp += sizeof(wch);
+        (*outbytesleft) -= sizeof(wch);
+    }
+    else
+    {
+        cd->my_errno = YAZ_ICONV_E2BIG;
+        return (size_t)(-1);
+    }
+    *outbuf = (char *) outp;
+    return 0;
+}
+#endif
+
+int yaz_iconv_isbuiltin(yaz_iconv_t cd)
+{
+    return cd->read_handle && cd->write_handle;
+}
+
+yaz_iconv_t yaz_iconv_open (const char *tocode, const char *fromcode)
+{
+    yaz_iconv_t cd = (yaz_iconv_t) xmalloc (sizeof(*cd));
+
+    cd->write_handle = 0;
+    cd->read_handle = 0;
+    cd->init_handle = 0;
+    cd->my_errno = YAZ_ICONV_UNKNOWN;
+
+    /* a useful hack: if fromcode has leading @,
+       the library not use YAZ's own conversions .. */
+    if (fromcode[0] == '@')
+        fromcode++;
+    else
+    {
+        if (!yaz_matchstr(fromcode, "UTF8"))
+        {
+            cd->read_handle = yaz_read_UTF8;
+            cd->init_handle = yaz_init_UTF8;
+        }
+        else if (!yaz_matchstr(fromcode, "ISO88591"))
+            cd->read_handle = yaz_read_ISO8859_1;
+        else if (!yaz_matchstr(fromcode, "UCS4"))
+            cd->read_handle = yaz_read_UCS4;
+        else if (!yaz_matchstr(fromcode, "UCS4LE"))
+            cd->read_handle = yaz_read_UCS4LE;
+        else if (!yaz_matchstr(fromcode, "MARC8"))
+            cd->read_handle = yaz_read_marc8;
+#if HAVE_WCHAR_H
+        else if (!yaz_matchstr(fromcode, "WCHAR_T"))
+            cd->read_handle = yaz_read_wchar_t;
+#endif
+        
+        if (!yaz_matchstr(tocode, "UTF8"))
+            cd->write_handle = yaz_write_UTF8;
+        else if (!yaz_matchstr(tocode, "ISO88591"))
+            cd->write_handle = yaz_write_ISO8859_1;
+        else if (!yaz_matchstr (tocode, "UCS4"))
+            cd->write_handle = yaz_write_UCS4;
+        else if (!yaz_matchstr(tocode, "UCS4LE"))
+            cd->write_handle = yaz_write_UCS4LE;
+#if HAVE_WCHAR_H
+        else if (!yaz_matchstr(tocode, "WCHAR_T"))
+            cd->write_handle = yaz_write_wchar_t;
+#endif
+    }
+#if HAVE_ICONV_H
+    cd->iconv_cd = 0;
+    if (!cd->read_handle || !cd->write_handle)
+    {
+        cd->iconv_cd = iconv_open (tocode, fromcode);
+        if (cd->iconv_cd == (iconv_t) (-1))
+        {
+            xfree (cd);
+            return 0;
+        }
+    }
+#else
+    if (!cd->read_handle || !cd->write_handle)
+    {
+        xfree (cd);
+        return 0;
+    }
+#endif
+    cd->init_flag = 1;
+    return cd;
+}
+
+size_t yaz_iconv (yaz_iconv_t cd, char **inbuf, size_t *inbytesleft,
+                  char **outbuf, size_t *outbytesleft)
+{
+    char *inbuf0;
+    size_t r = 0;
+#if HAVE_ICONV_H
+    if (cd->iconv_cd)
+    {
+        size_t r =
+            iconv(cd->iconv_cd, inbuf, inbytesleft, outbuf, outbytesleft);
+        if (r == (size_t)(-1))
+        {
+            switch (yaz_errno())
+            {
+            case E2BIG:
+                cd->my_errno = YAZ_ICONV_E2BIG;
+                break;
+            case EINVAL:
+                cd->my_errno = YAZ_ICONV_EINVAL;
+                break;
+            case EILSEQ:
+                cd->my_errno = YAZ_ICONV_EILSEQ;
+                break;
+            default:
+                cd->my_errno = YAZ_ICONV_UNKNOWN;
+            }
+        }
+        return r;
+    }
+#endif
+    if (inbuf == 0 || *inbuf == 0)
+    {
+        cd->init_flag = 1;
+        cd->my_errno = YAZ_ICONV_UNKNOWN;
+        return 0;
+    }
+    inbuf0 = *inbuf;
+
+    if (cd->init_flag)
+    {
+        if (cd->init_handle)
+        {
+            size_t no_read;
+            size_t r = (cd->init_handle)(cd, (unsigned char *) *inbuf,
+                                         *inbytesleft, &no_read);
+            if (r)
+            {
+                if (cd->my_errno == YAZ_ICONV_EINVAL)
+                    return r;
+                cd->init_flag = 0;
+                return r;
+            }
+            *inbytesleft -= no_read;
+            *inbuf += no_read;
+        }
+        cd->init_flag = 0;
+    }
+    while (1)
+    {
+        unsigned long x;
+        size_t no_read;
+
+        if (*inbytesleft == 0)
+        {
+            r = *inbuf - inbuf0;
+            break;
+        }
+        
+        x = (cd->read_handle)(cd, (unsigned char *) *inbuf, *inbytesleft,
+                              &no_read);
+        if (no_read == 0)
+        {
+            r = (size_t)(-1);
+            break;
+        }
+        r = (cd->write_handle)(cd, x, outbuf, outbytesleft);
+        if (r)
+            break;
+        *inbytesleft -= no_read;
+        (*inbuf) += no_read;
+    }
+    return r;
+}
+
+int yaz_iconv_error (yaz_iconv_t cd)
+{
+    return cd->my_errno;
+}
+
+int yaz_iconv_close (yaz_iconv_t cd)
+{
+#if HAVE_ICONV_H
+    if (cd->iconv_cd)
+        iconv_close (cd->iconv_cd);
+#endif
+    xfree (cd);
+    return 0;
+}
+
+    
diff --git a/src/soap.c b/src/soap.c
new file mode 100644 (file)
index 0000000..ebcf158
--- /dev/null
@@ -0,0 +1,262 @@
+/*
+ * Copyright (c) 2002-2003, Index Data.
+ * See the file LICENSE for details.
+ *
+ * $Id: soap.c,v 1.1 2003-10-27 12:21:35 adam Exp $
+ */
+
+#include <yaz/soap.h>
+
+#if HAVE_XML2
+#include <libxml/parser.h>
+#include <libxml/tree.h>
+
+static const char *soap_v1_1 = "http://schemas.xmlsoap.org/soap/envelope/";
+static const char *soap_v1_2 = "http://www.w3.org/2001/06/soap-envelope";
+
+int z_soap_error(ODR o, Z_SOAP *p,
+                 const char *fault_code, const char *fault_string,
+                 const char *details)
+{
+    p->which = Z_SOAP_error;
+    p->u.soap_error = (Z_SOAP_Fault *) 
+        odr_malloc(o, sizeof(*p->u.soap_error));
+    p->u.soap_error->fault_code = odr_strdup(o, fault_code);
+    p->u.soap_error->fault_string = odr_strdup(o, fault_string);
+    if (details)
+        p->u.soap_error->details = odr_strdup(o, details);
+    else
+        p->u.soap_error->details = 0;
+    return -1;
+}
+
+int z_soap_codec_enc(ODR o, Z_SOAP **pp, 
+                 char **content_buf, int *content_len,
+                 Z_SOAP_Handler *handlers,
+                const char *encoding)
+{
+    if (o->direction == ODR_DECODE)
+    {
+        Z_SOAP *p;
+        xmlNodePtr ptr, pptr;
+        xmlDocPtr doc;
+        int i, ret;
+
+        if (!content_buf || !*content_buf || !content_len)
+            return -1;
+
+        *pp = p = (Z_SOAP *) odr_malloc(o, sizeof(*p));
+        p->ns = soap_v1_1;
+
+        doc = xmlParseMemory(*content_buf, *content_len);
+        if (!doc)
+            return z_soap_error(o, p, "SOAP-ENV:Client",
+                                "Bad XML Document", 0);
+        /* check that root node is Envelope */
+        ptr = xmlDocGetRootElement(doc);
+        if (!ptr || ptr->type != XML_ELEMENT_NODE ||
+            strcmp(ptr->name, "Envelope") || !ptr->ns)
+        {
+            xmlFreeDoc(doc);
+            return z_soap_error(o, p, "SOAP-ENV:Client",
+                                "No Envelope element", 0);
+        }
+        else
+        {
+            /* determine SOAP version */
+            const char * ns_envelope = ptr->ns->href;
+            if (!strcmp(ns_envelope, soap_v1_1))
+                p->ns = soap_v1_1;
+            else if (!strcmp(ns_envelope, soap_v1_2))
+                p->ns = soap_v1_2;
+            else
+            {
+                xmlFreeDoc(doc);
+                return z_soap_error(o, p, "SOAP-ENV:Client",
+                                    "Bad SOAP version", 0);
+            }
+        }
+        ptr = ptr->children;
+        while(ptr && ptr->type == XML_TEXT_NODE)
+            ptr = ptr->next;
+        if (ptr && ptr->type == XML_ELEMENT_NODE &&
+            !strcmp(ptr->ns->href, p->ns) &&
+            !strcmp(ptr->name, "Header"))
+        {
+            ptr = ptr->next;
+            while(ptr && ptr->type == XML_TEXT_NODE)
+                ptr = ptr->next;
+        }
+        /* check that Body is present */
+        if (!ptr || ptr->type != XML_ELEMENT_NODE || 
+            strcmp(ptr->name, "Body"))
+        {
+            xmlFreeDoc(doc);
+            return z_soap_error(o, p, "SOAP-ENV:Client",
+                                "SOAP Body element not found", 0);
+        }
+        if (strcmp(ptr->ns->href, p->ns))
+        {
+            xmlFreeDoc(doc);
+            return z_soap_error(o, p, "SOAP-ENV:Client",
+                                "SOAP bad NS for Body element", 0);
+        }
+        pptr = ptr;
+        ptr = ptr->children;
+        while (ptr && ptr->type == XML_TEXT_NODE)
+            ptr = ptr->next;
+        if (!ptr || ptr->type != XML_ELEMENT_NODE)
+        {
+            xmlFreeDoc(doc);
+            return z_soap_error(o, p, "SOAP-ENV:Client",
+                                "SOAP No content for Body", 0);
+        }
+        /* check for fault package */
+        if (!strcmp(ptr->ns->href, p->ns)
+            && !strcmp(ptr->name, "Fault") && ptr->children)
+        {
+            ptr = ptr->children;
+
+            p->which = Z_SOAP_fault;
+            p->u.fault = odr_malloc(o, sizeof(*p->u.fault));
+            p->u.fault->fault_code = 0;
+            p->u.fault->fault_string = 0;
+            p->u.fault->details = 0;
+            while (ptr)
+            {
+                if (ptr->children && ptr->children->type == XML_TEXT_NODE)
+                {
+                    if (!strcmp(ptr->name, "faultcode"))
+                        p->u.fault->fault_code =
+                            odr_strdup(o, ptr->children->content);
+                    if (!strcmp(ptr->name, "faultstring"))
+                        p->u.fault->fault_string =
+                            odr_strdup(o, ptr->children->content);
+                    if (!strcmp(ptr->name, "details"))
+                        p->u.fault->details =
+                            odr_strdup(o, ptr->children->content);
+                }
+                ptr = ptr->next;
+            }
+            ret = 0;
+        }
+        else
+        {
+            for (i = 0; handlers[i].ns; i++)
+                if (!strcmp(ptr->ns->href, handlers[i].ns))
+                    break;
+            if (handlers[i].ns)
+            {
+                void *handler_data = 0;
+                ret = (*handlers[i].f)(o, pptr, &handler_data,
+                                       handlers[i].client_data,
+                                       handlers[i].ns);
+                if (ret || !handler_data)
+                    z_soap_error(o, p, "SOAP-ENV:Client",
+                                 "SOAP Handler returned error", 0);
+                else
+                {
+                    p->which = Z_SOAP_generic;
+                    p->u.generic = odr_malloc(o, sizeof(*p->u.generic));
+                    p->u.generic->no = i;
+                    p->u.generic->ns = handlers[i].ns;
+                    p->u.generic->p = handler_data;
+                }
+            }
+            else
+            {
+                ret = z_soap_error(o, p, "SOAP-ENV:Client", 
+                                   "No handler for NS", ptr->ns->href);
+            }
+        }
+        xmlFreeDoc(doc);
+        return ret;
+    }
+    else if (o->direction == ODR_ENCODE)
+    {
+        Z_SOAP *p = *pp;
+        xmlNsPtr ns_env;
+        xmlNodePtr envelope_ptr, body_ptr;
+
+        xmlDocPtr doc = xmlNewDoc("1.0");
+
+        envelope_ptr = xmlNewNode(0, "Envelope");
+        ns_env = xmlNewNs(envelope_ptr, p->ns, "SOAP-ENV");
+        xmlSetNs(envelope_ptr, ns_env);
+
+        body_ptr = xmlNewChild(envelope_ptr, ns_env, "Body", 0);
+        xmlDocSetRootElement(doc, envelope_ptr);
+
+        if (p->which == Z_SOAP_fault || p->which == Z_SOAP_error)
+        {
+            Z_SOAP_Fault *f = p->u.fault;
+            xmlNodePtr fault_ptr = xmlNewChild(body_ptr, ns_env, "Fault", 0);
+            xmlNewChild(fault_ptr, ns_env, "faultcode",  f->fault_code);
+            xmlNewChild(fault_ptr, ns_env, "faultstring", f->fault_string);
+            if (f->details)
+                xmlNewChild(fault_ptr, ns_env, "details", f->details);
+        }
+        else if (p->which == Z_SOAP_generic)
+        {
+            int ret, no = p->u.generic->no;
+            
+            ret = (*handlers[no].f)(o, body_ptr, &p->u.generic->p,
+                                    handlers[no].client_data,
+                                    handlers[no].ns);
+            if (ret)
+                return ret;
+        }
+        if (p->which == Z_SOAP_generic && !strcmp(p->ns, "SRU"))
+        {
+            xmlDocSetRootElement(doc, body_ptr->children);
+        }
+        if (1)
+        {
+            xmlChar *buf_out;
+            int len_out;
+            if (encoding)
+                xmlDocDumpMemoryEnc(doc, &buf_out, &len_out, encoding);
+            else
+                xmlDocDumpMemory(doc, &buf_out, &len_out);
+            *content_buf = (char *) odr_malloc(o, len_out);
+            *content_len = len_out;
+            memcpy(*content_buf, buf_out, len_out);
+            xmlFree(buf_out);
+        }
+        xmlFreeDoc(doc);
+        return 0;
+    }
+    return 0;
+}
+#else
+int z_soap_codec_enc(ODR o, Z_SOAP **pp, 
+                     char **content_buf, int *content_len,
+                     Z_SOAP_Handler *handlers, const char *encoding)
+{
+    static char *err_xml =
+        "<?xml version=\"1.0\"?>\n"
+        "<SOAP-ENV:Envelope"
+        " xmlns:SOAP-ENV=\"http://schemas.xmlsoap.org/soap/envelope/\">\n"
+        "\t<SOAP-ENV:Body>\n"
+        "\t\t<SOAP-ENV:Fault>\n"
+        "\t\t\t<faultcode>SOAP-ENV:Server</faultcode>\n"
+        "\t\t\t<faultstring>HTTP error</faultstring>\n"
+        "\t\t\t<detail>SOAP not supported in this YAZ configuration</detail>\n"
+        "\t\t</SOAP-ENV:Fault>\n"
+        "\t</SOAP-ENV:Body>\n"
+        "</SOAP-ENV:Envelope>\n";
+    if (o->direction == ODR_ENCODE)
+    {
+        *content_buf = err_xml;
+        *content_len = strlen(err_xml);
+    }
+    return -1;
+}
+#endif
+int z_soap_codec(ODR o, Z_SOAP **pp, 
+                 char **content_buf, int *content_len,
+                 Z_SOAP_Handler *handlers)
+{
+    return z_soap_codec_enc(o, pp, content_buf, content_len, handlers, 0);
+}
+
diff --git a/src/sortspec.c b/src/sortspec.c
new file mode 100644 (file)
index 0000000..22ac90b
--- /dev/null
@@ -0,0 +1,114 @@
+/*
+ * Copyright (c) 1995-2001, Index Data.
+ * See the file LICENSE for details.
+ *
+ * $Id: sortspec.c,v 1.1 2003-10-27 12:21:35 adam Exp $
+ */
+
+#include <stdio.h>
+#include <string.h>
+#include <stdlib.h>
+
+#include <yaz/proto.h>
+#include <yaz/oid.h>
+#include <yaz/sortspec.h>
+
+Z_SortKeySpecList *yaz_sort_spec (ODR out, const char *arg)
+{
+    char sort_string_buf[32], sort_flags[32];
+    Z_SortKeySpecList *sksl = (Z_SortKeySpecList *)
+        odr_malloc (out, sizeof(*sksl));
+    int off;
+    
+    sksl->num_specs = 0;
+    sksl->specs = (Z_SortKeySpec **)odr_malloc (out, sizeof(sksl->specs) * 20);
+    
+    while ((sscanf (arg, "%31s %31s%n", sort_string_buf,
+                   sort_flags, &off)) == 2  && off > 1)
+    {
+        int i;
+        char *sort_string_sep;
+       char *sort_string = sort_string_buf;
+        Z_SortKeySpec *sks = (Z_SortKeySpec *)odr_malloc (out, sizeof(*sks));
+        Z_SortKey *sk = (Z_SortKey *)odr_malloc (out, sizeof(*sk));
+       
+        arg += off;
+        sksl->specs[sksl->num_specs++] = sks;
+        sks->sortElement = (Z_SortElement *)
+           odr_malloc (out, sizeof(*sks->sortElement));
+        sks->sortElement->which = Z_SortElement_generic;
+        sks->sortElement->u.generic = sk;
+        
+        if ((sort_string_sep = strchr (sort_string, '=')))
+        {
+           int i = 0;
+            sk->which = Z_SortKey_sortAttributes;
+            sk->u.sortAttributes = (Z_SortAttributes *)
+               odr_malloc (out, sizeof(*sk->u.sortAttributes));
+            sk->u.sortAttributes->id = 
+               yaz_oidval_to_z3950oid(out, CLASS_ATTSET, VAL_BIB1);
+            sk->u.sortAttributes->list = (Z_AttributeList *)
+               odr_malloc (out, sizeof(*sk->u.sortAttributes->list));
+            sk->u.sortAttributes->list->attributes = (Z_AttributeElement **)
+               odr_malloc (out, 10 * 
+                           sizeof(*sk->u.sortAttributes->list->attributes));
+           while (i < 10 && sort_string && sort_string_sep)
+           {
+               Z_AttributeElement *el = (Z_AttributeElement *)
+                   odr_malloc (out, sizeof(*el));
+               sk->u.sortAttributes->list->attributes[i] = el;
+               el->attributeSet = 0;
+               el->attributeType = odr_intdup (out, atoi (sort_string));
+               el->which = Z_AttributeValue_numeric;
+               el->value.numeric =
+                   odr_intdup (out, atoi (sort_string_sep + 1));
+               i++;
+               sort_string = strchr(sort_string, ',');
+               if (sort_string)
+               {
+                   sort_string++;
+                   sort_string_sep = strchr (sort_string, '=');
+               }
+           }
+            sk->u.sortAttributes->list->num_attributes = i;
+        }
+        else
+        {
+            sk->which = Z_SortKey_sortField;
+            sk->u.sortField = odr_strdup (out, sort_string);
+        }
+        sks->sortRelation = odr_intdup (out, Z_SortRelation_ascending);
+        sks->caseSensitivity = odr_intdup (out, Z_SortCase_caseSensitive);
+
+        sks->which = Z_SortKeySpec_null;
+        sks->u.null = odr_nullval ();
+       
+        for (i = 0; sort_flags[i]; i++)
+        {
+            switch (sort_flags[i])
+            {
+            case 'd':
+            case 'D':
+            case '>':
+                *sks->sortRelation = Z_SortRelation_descending;
+                break;
+            case 'a':
+            case 'A':
+            case '<':
+                *sks->sortRelation = Z_SortRelation_ascending;
+                break;
+            case 'i':
+            case 'I':
+                *sks->caseSensitivity = Z_SortCase_caseInsensitive;
+                break;
+            case 'S':
+            case 's':
+                *sks->caseSensitivity = Z_SortCase_caseSensitive;
+                break;
+            }
+        }
+    }
+    if (!sksl->num_specs)
+       return 0;
+    return sksl;
+}
diff --git a/src/srw.c b/src/srw.c
new file mode 100644 (file)
index 0000000..d215714
--- /dev/null
+++ b/src/srw.c
@@ -0,0 +1,855 @@
+/*
+ * Copyright (c) 2002-2003, Index Data.
+ * See the file LICENSE for details.
+ *
+ * $Id: srw.c,v 1.1 2003-10-27 12:21:35 adam Exp $
+ */
+
+#include <yaz/srw.h>
+
+#if HAVE_XML2
+#include <libxml/parser.h>
+#include <libxml/tree.h>
+
+static void add_XML_n(xmlNodePtr ptr, const char *elem, char *val, int len)
+{
+    if (val)
+    {
+        xmlDocPtr doc = xmlParseMemory(val,len);
+        if (doc)
+        {
+            xmlNodePtr c = xmlNewChild(ptr, 0, elem, 0);
+            xmlNodePtr t = xmlDocGetRootElement(doc);
+            xmlAddChild(c, xmlCopyNode(t,1));
+            xmlFreeDoc(doc);
+        }
+    }
+}
+
+static void add_xsd_string_n(xmlNodePtr ptr, const char *elem, char *val,
+                             int len)
+{
+    if (val)
+    {
+        xmlNodePtr c = xmlNewChild(ptr, 0, elem, 0);
+        xmlNodePtr t = xmlNewTextLen(val, len);
+        xmlAddChild(c, t);
+    }
+}
+
+static void add_xsd_string(xmlNodePtr ptr, const char *elem, char *val)
+{
+    if (val)
+        xmlNewChild(ptr, 0, elem, val);
+}
+
+static void add_xsd_integer(xmlNodePtr ptr, const char *elem, int *val)
+{
+    if (val)
+    {
+        char str[30];
+        sprintf(str, "%d", *val);
+        xmlNewChild(ptr, 0, elem, str);
+    }
+}
+
+static int match_element(xmlNodePtr ptr, const char *elem)
+{
+    if (ptr->type == XML_ELEMENT_NODE && !strcmp(ptr->name, elem))
+        return 1;
+    return 0;
+}
+
+#define CHECK_TYPE 0
+
+static int match_xsd_string_n(xmlNodePtr ptr, const char *elem, ODR o,
+                              char **val, int *len)
+{
+#if CHECK_TYPE
+    struct _xmlAttr *attr;
+#endif
+    if (!match_element(ptr, elem))
+        return 0;
+#if CHECK_TYPE
+    for (attr = ptr->properties; attr; attr = attr->next)
+        if (!strcmp(attr->name, "type") &&
+            attr->children && attr->children->type == XML_TEXT_NODE)
+        {
+            const char *t = strchr(attr->children->content, ':');
+            if (t)
+                t = t + 1;
+            else
+                t = attr->children->content;
+            if (!strcmp(t, "string"))
+                break;
+        }
+    if (!attr)
+        return 0;
+#endif
+    ptr = ptr->children;
+    if (!ptr || ptr->type != XML_TEXT_NODE)
+        return 0;
+    *val = odr_strdup(o, ptr->content);
+    if (len)
+        *len = strlen(ptr->content);
+    return 1;
+}
+
+
+static int match_xsd_string(xmlNodePtr ptr, const char *elem, ODR o,
+                            char **val)
+{
+    return match_xsd_string_n(ptr, elem, o, val, 0);
+}
+
+static int match_xsd_XML_n(xmlNodePtr ptr, const char *elem, ODR o,
+                           char **val, int *len)
+{
+    xmlBufferPtr buf;
+
+    if (!match_element(ptr, elem))
+        return 0;
+    ptr = ptr->children;
+    if (!ptr)
+        return 0;
+    buf = xmlBufferCreate();
+
+    xmlNodeDump(buf, ptr->doc, ptr, 0, 0);
+
+    *val = odr_malloc(o, buf->use+1);
+    memcpy (*val, buf->content, buf->use);
+    (*val)[buf->use] = '\0';
+
+    if (len)
+        *len = buf->use;
+
+    xmlBufferFree(buf);
+
+    return 1;
+}
+
+                     
+static int match_xsd_integer(xmlNodePtr ptr, const char *elem, ODR o, int **val)
+{
+#if CHECK_TYPE
+    struct _xmlAttr *attr;
+#endif
+    if (!match_element(ptr, elem))
+        return 0;
+#if CHECK_TYPE
+    for (attr = ptr->properties; attr; attr = attr->next)
+        if (!strcmp(attr->name, "type") &&
+            attr->children && attr->children->type == XML_TEXT_NODE)
+        {
+            const char *t = strchr(attr->children->content, ':');
+            if (t)
+                t = t + 1;
+            else
+                t = attr->children->content;
+            if (!strcmp(t, "integer"))
+                break;
+        }
+    if (!attr)
+        return 0;
+#endif
+    ptr = ptr->children;
+    if (!ptr || ptr->type != XML_TEXT_NODE)
+        return 0;
+    *val = odr_intdup(o, atoi(ptr->content));
+    return 1;
+}
+
+static int yaz_srw_records(ODR o, xmlNodePtr pptr, Z_SRW_record **recs,
+                           int *num, void *client_data, const char *ns)
+{
+    if (o->direction == ODR_DECODE)
+    {
+        int i;
+        xmlNodePtr ptr;
+        *num = 0;
+        for (ptr = pptr->children; ptr; ptr = ptr->next)
+        {
+            if (ptr->type == XML_ELEMENT_NODE &&
+                !strcmp(ptr->name, "record"))
+                (*num)++;
+        }
+        if (!*num)
+            return 1;
+        *recs = odr_malloc(o, *num * sizeof(**recs));
+        for (i = 0, ptr = pptr->children; ptr; ptr = ptr->next, i++)
+        {
+            if (ptr->type == XML_ELEMENT_NODE &&
+                !strcmp(ptr->name, "record"))
+            {
+                xmlNodePtr rptr;
+                (*recs)[i].recordSchema = 0;
+                (*recs)[i].recordPacking = Z_SRW_recordPacking_string;
+                (*recs)[i].recordData_buf = 0;
+                (*recs)[i].recordData_len = 0;
+                (*recs)[i].recordPosition = 0;
+                for (rptr = ptr->children; rptr; rptr = rptr->next)
+                {
+                    if (match_xsd_string(rptr, "recordSchema", o, 
+                                         &(*recs)[i].recordSchema))
+                        ;
+                    else if (match_xsd_string_n(rptr, "recordData", o, 
+                                                &(*recs)[i].recordData_buf,
+                                                &(*recs)[i].recordData_len))
+                        ;
+                    else if (match_xsd_XML_n(rptr, "recordXML", o, 
+                                             &(*recs)[i].recordData_buf,
+                                             &(*recs)[i].recordData_len))
+                        (*recs)[i].recordPacking = Z_SRW_recordPacking_XML;
+                    else if (match_xsd_integer(rptr, "recordPosition", o, 
+                                               &(*recs)[i].recordPosition))
+                        ;
+                }
+            }
+        }
+    }
+    else if (o->direction == ODR_ENCODE)
+    {
+        int i;
+        for (i = 0; i < *num; i++)
+        {
+            xmlNodePtr rptr = xmlNewChild(pptr, 0, "record", 0);
+            add_xsd_string(rptr, "recordSchema", (*recs)[i].recordSchema);
+            switch((*recs)[i].recordPacking)
+            {
+            case Z_SRW_recordPacking_string:
+                add_xsd_string_n(rptr, "recordData", (*recs)[i].recordData_buf,
+                                 (*recs)[i].recordData_len);
+                break;
+            case Z_SRW_recordPacking_XML:
+                add_XML_n(rptr, "recordXML", (*recs)[i].recordData_buf,
+                          (*recs)[i].recordData_len);
+                break;
+            }
+            add_xsd_integer(rptr, "recordPosition", (*recs)[i].recordPosition);
+        }
+    }
+    return 0;
+}
+
+static int yaz_srw_diagnostics(ODR o, xmlNodePtr pptr, Z_SRW_diagnostic **recs,
+                               int *num, void *client_data, const char *ns)
+{
+    if (o->direction == ODR_DECODE)
+    {
+        int i;
+        xmlNodePtr ptr;
+        *num = 0;
+        for (ptr = pptr->children; ptr; ptr = ptr->next)
+        {
+            if (ptr->type == XML_ELEMENT_NODE &&
+                !strcmp(ptr->name, "diagnostic"))
+                (*num)++;
+        }
+        if (!*num)
+            return 1;
+        *recs = odr_malloc(o, *num * sizeof(**recs));
+        for (i = 0, ptr = pptr->children; ptr; ptr = ptr->next, i++)
+        {
+            if (ptr->type == XML_ELEMENT_NODE &&
+                !strcmp(ptr->name, "diagnostic"))
+            {
+                xmlNodePtr rptr;
+                (*recs)[i].code = 0;
+                (*recs)[i].details = 0;
+                for (rptr = ptr->children; rptr; rptr = rptr->next)
+                {
+                    if (match_xsd_integer(rptr, "code", o, 
+                                               &(*recs)[i].code))
+                        ;
+                    else if (match_xsd_string(rptr, "details", o, 
+                                              &(*recs)[i].details))
+                        ;
+                }
+                i++;
+            }
+        }
+    }
+    else if (o->direction == ODR_ENCODE)
+    {
+        int i;
+        for (i = 0; i < *num; i++)
+        {
+            xmlNodePtr rptr = xmlNewChild(pptr, 0, "diagnostic", 0);
+            add_xsd_integer(rptr, "code", (*recs)[i].code);
+            add_xsd_string(rptr, "details", (*recs)[i].details);
+        }
+    }
+    return 0;
+}
+
+
+int yaz_srw_codec(ODR o, void * vptr, Z_SRW_PDU **handler_data,
+                  void *client_data, const char *ns)
+{
+    xmlNodePtr pptr = vptr;
+    if (o->direction == ODR_DECODE)
+    {
+        xmlNodePtr method = pptr->children;
+
+        while (method && method->type == XML_TEXT_NODE)
+            method = method->next;
+        
+        if (!method || method->type != XML_ELEMENT_NODE)
+            return -1;
+        if (!strcmp(method->name, "searchRetrieveRequest"))
+        {
+            Z_SRW_PDU **p = handler_data;
+            xmlNodePtr ptr = method->children;
+            Z_SRW_searchRetrieveRequest *req;
+
+            *p = odr_malloc(o, sizeof(**p));
+            (*p)->which = Z_SRW_searchRetrieve_request;
+            req = (*p)->u.request = odr_malloc(o, sizeof(*req));
+            req->query_type = Z_SRW_query_type_cql;
+            req->query.cql = 0;
+            req->sort_type = Z_SRW_sort_type_none;
+            req->sort.none = 0;
+            req->startRecord = 0;
+            req->maximumRecords = 0;
+            req->recordSchema = 0;
+            req->recordPacking = 0;
+            req->database = 0;
+
+            for (; ptr; ptr = ptr->next)
+            {
+                if (match_xsd_string(ptr, "query", o, 
+                                     &req->query.cql))
+                    req->query_type = Z_SRW_query_type_cql;
+                else if (match_xsd_string(ptr, "pQuery", o, 
+                                     &req->query.pqf))
+                    req->query_type = Z_SRW_query_type_pqf;
+                else if (match_xsd_string(ptr, "xQuery", o, 
+                                     &req->query.xcql))
+                    req->query_type = Z_SRW_query_type_xcql;
+                else if (match_xsd_string(ptr, "sortKeys", o, 
+                                          &req->sort.sortKeys))
+                    req->sort_type = Z_SRW_sort_type_sort;
+                else if (match_xsd_string(ptr, "recordSchema", o, 
+                                          &req->recordSchema))
+                    ;
+                else if (match_xsd_string(ptr, "recordPacking", o,
+                                          &req->recordPacking))
+                    ;
+                else if (match_xsd_integer(ptr, "startRecord", o,
+                                           &req->startRecord))
+                    ;
+                else if (match_xsd_integer(ptr, "maximumRecords", o,
+                                           &req->maximumRecords))
+                    ;
+                else if (match_xsd_string(ptr, "database", o,
+                                           &req->database))
+                    ;
+                /* missing is xQuery, xSortKeys .. */
+            }
+        }
+        else if (!strcmp(method->name, "searchRetrieveResponse"))
+        {
+            Z_SRW_PDU **p = handler_data;
+            xmlNodePtr ptr = method->children;
+            Z_SRW_searchRetrieveResponse *res;
+
+            *p = odr_malloc(o, sizeof(**p));
+            (*p)->which = Z_SRW_searchRetrieve_response;
+            res = (*p)->u.response = odr_malloc(o, sizeof(*res));
+
+            res->numberOfRecords = 0;
+            res->resultSetId = 0;
+            res->resultSetIdleTime = 0;
+            res->records = 0;
+            res->num_records = 0;
+            res->diagnostics = 0;
+            res->num_diagnostics = 0;
+            res->nextRecordPosition = 0;
+
+            for (; ptr; ptr = ptr->next)
+            {
+                if (match_xsd_integer(ptr, "numberOfRecords", o, 
+                                      &res->numberOfRecords))
+                    ;
+                else if (match_xsd_string(ptr, "resultSetId", o, 
+                                          &res->resultSetId))
+                    ;
+                else if (match_xsd_integer(ptr, "resultSetIdleTime", o, 
+                                           &res->resultSetIdleTime))
+                    ;
+                else if (match_element(ptr, "records"))
+                    yaz_srw_records(o, ptr, &res->records,
+                                    &res->num_records, client_data,
+                                    ns);
+                else if (match_element(ptr, "diagnostics"))
+                    yaz_srw_diagnostics(o, ptr, &res->diagnostics,
+                                        &res->num_diagnostics,
+                                        client_data, ns);
+                else if (match_xsd_integer(ptr, "nextRecordPosition", o,
+                                           &res->nextRecordPosition))
+                    ;
+            }
+        }
+        else if (!strcmp(method->name, "explainRequest"))
+        {
+            Z_SRW_PDU **p = handler_data;
+            Z_SRW_explainRequest *req;
+            
+            *p = odr_malloc(o, sizeof(**p));
+            (*p)->which = Z_SRW_explain_request;
+            req = (*p)->u.explain_request = odr_malloc(o, sizeof(*req));
+            req->dummy = 0;
+        }
+        else if (!strcmp(method->name, "explainResponse"))
+        {
+            Z_SRW_PDU **p = handler_data;
+            Z_SRW_explainResponse *res;
+            xmlNodePtr ptr = method->children;
+
+            *p = odr_malloc(o, sizeof(**p));
+            (*p)->which = Z_SRW_explain_response;
+            res = (*p)->u.explain_response = odr_malloc(o, sizeof(*res));
+            res->explainData_buf = 0;
+            res->explainData_len = 0;
+            res->explainPacking = Z_SRW_recordPacking_string;
+            for (; ptr; ptr = ptr->next)
+            {
+                match_xsd_string_n(ptr, "Explain", o, 
+                                   &res->explainData_buf,
+                                   &res->explainData_len);
+            }
+        }
+        else
+            return -1;
+
+    }
+    else if (o->direction == ODR_ENCODE)
+    {
+        Z_SRW_PDU **p = handler_data;
+        if ((*p)->which == Z_SRW_searchRetrieve_request)
+        {
+            Z_SRW_searchRetrieveRequest *req = (*p)->u.request;
+            xmlNodePtr ptr = xmlNewChild(pptr, 0,
+                                         "searchRetrieveRequest", 0);
+            xmlNsPtr ns_srw = xmlNewNs(ptr, ns, "zs");
+
+            xmlSetNs(ptr, ns_srw);
+
+            switch(req->query_type)
+            {
+            case Z_SRW_query_type_cql:
+                add_xsd_string(ptr, "query", req->query.cql);
+                break;
+            case Z_SRW_query_type_xcql:
+                add_xsd_string(ptr, "xQuery", req->query.xcql);
+                break;
+            case Z_SRW_query_type_pqf:
+                add_xsd_string(ptr, "pQuery", req->query.pqf);
+                break;
+            }
+            switch(req->sort_type)
+            {
+            case Z_SRW_sort_type_none:
+                break;
+            case Z_SRW_sort_type_sort:
+                add_xsd_string(ptr, "sortKeys", req->sort.sortKeys);
+                break;
+            case Z_SRW_sort_type_xSort:
+                add_xsd_string(ptr, "xSortKeys", req->sort.xSortKeys);
+                break;
+            }
+            add_xsd_integer(ptr, "startRecord", req->startRecord);
+            add_xsd_integer(ptr, "maximumRecords", req->maximumRecords);
+            add_xsd_string(ptr, "recordSchema", req->recordSchema);
+            add_xsd_string(ptr, "recordPacking", req->recordPacking);
+            add_xsd_string(ptr, "database", req->database);
+        }
+        else if ((*p)->which == Z_SRW_searchRetrieve_response)
+        {
+            Z_SRW_searchRetrieveResponse *res = (*p)->u.response;
+            xmlNodePtr ptr = xmlNewChild(pptr, 0,
+                                         "searchRetrieveResponse", 0);
+            xmlNsPtr ns_srw = xmlNewNs(ptr, ns, "zs");
+
+            xmlSetNs(ptr, ns_srw);
+            add_xsd_integer(ptr, "numberOfRecords", res->numberOfRecords);
+            add_xsd_string(ptr, "resultSetId", res->resultSetId);
+            add_xsd_integer(ptr, "resultSetIdleTime", res->resultSetIdleTime);
+            if (res->num_records)
+            {
+                xmlNodePtr rptr = xmlNewChild(ptr, 0, "records", 0);
+                yaz_srw_records(o, rptr, &res->records, &res->num_records,
+                                client_data, ns);
+            }
+            if (res->num_diagnostics)
+            {
+                xmlNodePtr rptr = xmlNewChild(ptr, 0, "diagnostics", 0);
+                yaz_srw_diagnostics(o, rptr, &res->diagnostics,
+                                    &res->num_diagnostics, client_data, ns);
+            }
+            add_xsd_integer(ptr, "nextRecordPosition", res->nextRecordPosition);
+        }
+        else if ((*p)->which == Z_SRW_explain_request)
+        {
+            xmlNodePtr ptr = xmlNewChild(pptr, 0, "explainRequest", 0);
+            xmlNsPtr ns_srw = xmlNewNs(ptr, ns, "zs");
+
+            xmlSetNs(ptr, ns_srw);
+        }
+        else if ((*p)->which == Z_SRW_explain_response)
+        {
+            Z_SRW_explainResponse *res = (*p)->u.explain_response;
+            xmlNodePtr ptr = xmlNewChild(pptr, 0, "explainResponse", 0);
+            xmlNsPtr ns_srw = xmlNewNs(ptr, ns, "zs");
+
+            xmlSetNs(ptr, ns_srw);
+
+            add_xsd_string_n(ptr, "Explain", res->explainData_buf,
+                             res->explainData_len);
+        }
+        else
+            return -1;
+
+    }
+    return 0;
+}
+
+Z_SRW_PDU *yaz_srw_get(ODR o, int which)
+{
+    Z_SRW_PDU *sr = odr_malloc(o, sizeof(*o));
+    sr->which = which;
+    switch(which)
+    {
+    case Z_SRW_searchRetrieve_request:
+        sr->u.request = (Z_SRW_searchRetrieveRequest *)
+            odr_malloc(o, sizeof(*sr->u.request));
+        sr->u.request->query_type = Z_SRW_query_type_cql;
+        sr->u.request->query.cql = 0;
+        sr->u.request->sort_type = Z_SRW_sort_type_none;
+        sr->u.request->sort.none = 0;
+        sr->u.request->startRecord = 0;
+        sr->u.request->maximumRecords = 0;
+        sr->u.request->recordSchema = 0;
+        sr->u.request->recordPacking = 0;
+        sr->u.request->database = 0;
+        break;
+    case Z_SRW_searchRetrieve_response:
+        sr->u.response = (Z_SRW_searchRetrieveResponse *)
+            odr_malloc(o, sizeof(*sr->u.response));
+        sr->u.response->numberOfRecords = 0;
+        sr->u.response->resultSetId = 0;
+        sr->u.response->resultSetIdleTime = 0;
+        sr->u.response->records = 0;
+        sr->u.response->num_records = 0;
+        sr->u.response->diagnostics = 0;
+        sr->u.response->num_diagnostics = 0;
+        sr->u.response->nextRecordPosition = 0;
+        break;
+    case Z_SRW_explain_request:
+        sr->u.explain_request = (Z_SRW_explainRequest *)
+            odr_malloc(o, sizeof(*sr->u.explain_request));
+        sr->u.explain_request->dummy = 0;
+        break;
+    case Z_SRW_explain_response:
+        sr->u.explain_response = (Z_SRW_explainResponse *)
+            odr_malloc(o, sizeof(*sr->u.explain_response));
+        sr->u.explain_response->explainPacking = 0; 
+        sr->u.explain_response->explainData_buf = 0;
+        sr->u.explain_response->explainData_len = 0;
+    }
+    return sr;
+}
+
+#endif
+
+
+static struct {
+    int code;
+    const char *msg;
+} yaz_srw_codes [] = {
+{1, "Permanent system error"}, 
+{2, "System temporarily unavailable"}, 
+{3, "Authentication error"}, 
+/* Diagnostics Relating to CQL */
+{10, "Illegal query"}, 
+{11, "Unsupported query type (XCQL vs CQL)"}, 
+{12, "Too many characters in query"}, 
+{13, "Unbalanced or illegal use of parentheses"}, 
+{14, "Unbalanced or illegal use of quotes"}, 
+{15, "Illegal or unsupported index set"}, 
+{16, "Illegal or unsupported index"}, 
+{17, "Illegal or unsupported combination of index and index set"}, 
+{18, "Illegal or unsupported combination of indexes"}, 
+{19, "Illegal or unsupported relation"}, 
+{20, "Illegal or unsupported relation modifier"}, 
+{21, "Illegal or unsupported combination of relation modifers"}, 
+{22, "Illegal or unsupported combination of relation and index"}, 
+{23, "Too many characters in term"}, 
+{24, "Illegal combination of relation and term"}, 
+{25, "Special characters not quoted in term"}, 
+{26, "Non special character escaped in term"}, 
+{27, "Empty term unsupported"}, 
+{28, "Masking character not supported"}, 
+{29, "Masked words too short"}, 
+{30, "Too many masking characters in term"}, 
+{31, "Anchoring character not supported"}, 
+{32, "Anchoring character in illegal or unsupported position"}, 
+{33, "Combination of proximity/adjacency and masking characters not supported"}, 
+{34, "Combination of proximity/adjacency and anchoring characters not supported"}, 
+{35, "Terms only exclusion (stop) words"}, 
+{36, "Term in invalid format for index or relation"}, 
+{37, "Illegal or unsupported boolean operator"}, 
+{38, "Too many boolean operators in query"}, 
+{39, "Proximity not supported"}, 
+{40, "Illegal or unsupported proximity relation"}, 
+{41, "Illegal or unsupported proximity distance"}, 
+{42, "Illegal or unsupported proximity unit"}, 
+{43, "Illegal or unsupported proximity ordering"}, 
+{44, "Illegal or unsupported combination of proximity modifiers"}, 
+{45, "Index set name (prefix) assigned to multiple identifiers"}, 
+/* Diagnostics Relating to Result Sets */
+{50, "Result sets not supported"}, 
+{51, "Result set does not exist"}, 
+{52, "Result set temporarily unavailable"}, 
+{53, "Result sets only supported for retrieval"}, 
+{54, "Retrieval may only occur from an existing result set"}, 
+{55, "Combination of result sets with search terms not supported"}, 
+{56, "Only combination of single result set with search terms supported"}, 
+{57, "Result set created but no records available"}, 
+{58, "Result set created with unpredictable partial results available"}, 
+{59, "Result set created with valid partial results available"}, 
+/* Diagnostics Relating to Records */
+{60, "Too many records retrieved"}, 
+{61, "First record position out of range"}, 
+{62, "Negative number of records requested"}, 
+{63, "System error in retrieving records"}, 
+{64, "Record temporarily unavailable"}, 
+{65, "Record does not exist"}, 
+{66, "Unknown schema for retrieval"}, 
+{67, "Record not available in this schema"}, 
+{68, "Not authorised to send record"}, 
+{69, "Not authorised to send record in this schema"}, 
+{70, "Record too large to send"}, 
+/* Diagnostics Relating to Sorting */
+{80, "Sort not supported"}, 
+{81, "Unsupported sort type (sortKeys vs xSortKeys)"}, 
+{82, "Illegal or unsupported sort sequence"}, 
+{83, "Too many records"}, 
+{84, "Too many sort keys"}, 
+{85, "Duplicate sort keys"}, 
+{86, "Incompatible record formats"}, 
+{87, "Unsupported schema for sort"}, 
+{88, "Unsupported tag path for sort"}, 
+{89, "Tag path illegal or unsupported for schema"}, 
+{90, "Illegal or unsupported direction value"}, 
+{91, "Illegal or unsupported case value"}, 
+{92, "Illegal or unsupported missing value action"}, 
+/* Diagnostics Relating to Explain */
+{100, "Explain not supported"}, 
+{101, "Explain request type not supported (SOAP vs GET)"}, 
+{102, "Explain record temporarily unavailable"},
+{0, 0}
+};
+
+const char *yaz_diag_srw_str (int code)
+{
+    int i;
+    for (i = 0; yaz_srw_codes[i].code; i++)
+        if (yaz_srw_codes[i].code == code)
+            return yaz_srw_codes[i].msg;
+    return 0;
+}
+
+
+/* bib1:srw */
+static int srw_bib1_map[] = {
+    1, 1,
+    2, 2,
+    3, 11,
+    4, 35,
+    5, 12,
+    6, 38,
+    7, 30,
+    8, 32,
+    9, 29,
+    10, 10,
+    11, 12,
+    11, 23,
+    12, 60,
+    13, 61,
+    13, 62,
+    14, 63,
+    14, 64,
+    14, 65,
+    15, 68,
+    15, 69,
+    16, 70,
+    17, 70,
+    18, 50,
+    19, 55,
+    20, 56, 
+    21, 52,
+    22, 50,
+    23, 1,  /* bad map */
+    24, 63, /* bad map */
+    25, 63, /* bad map */
+    26, 63, /* bad map */
+    27, 51,
+    28, 52,
+    29, 52,
+    30, 51,
+    31, 57,
+    32, 58,
+    33, 59,
+    100, 1, /* bad map */
+    101, 3,
+    102, 3,
+    103, 3,
+    104, 3,
+    105, 3, 
+    106, 66,
+    107, 11,
+    108, 10,
+    108, 13,
+    108, 14,
+    108, 25,
+    108, 26,
+    108, 27,
+    108, 45,
+        
+    109, 1,
+    110, 37,
+    111, 1,
+    112, 58,
+    113, 10,
+    114, 16,
+    115, 16,
+    116, 16,
+    117, 19,
+    118, 22,
+    119, 32,
+    119, 31,
+    120, 28,
+    121, 15,
+    122, 32,
+    123, 22,
+    123, 17,
+    123, 18,
+    124, 24,
+    125, 36,
+    126, 36, 
+    127, 36,
+    128, 51,
+    129, 39,
+    130, 43,
+    131, 40,
+    132, 42,
+    201, 44,
+    201, 33,
+    201, 34,
+    202, 41,
+    203, 43,
+    205, 1,  /* bad map */
+    206, 1,  /* bad map */
+    207, 89,
+    208, 1,  /* bad map */
+    209, 80,
+    210, 80,
+    210, 81,
+    211, 84,
+    212, 85,
+    213, 92,
+    214, 90,
+    215, 91,
+    216, 92,
+    217, 63,
+    218, 1,  /* bad map */
+    219, 1,  /* bad map */
+    220, 1,  /* bad map */
+    221, 1,  /* bad map */
+    222, 1,  /* bad map */
+    223, 1,  /* bad map */
+    224, 1,  /* bad map */
+    225, 1,  /* bad map */
+    226, 1,  /* bad map */
+    227, 66,
+    228, 1,  /* bad map */
+    229, 36,
+    230, 83,
+    231, 89,
+    232, 1,
+    233, 1, /* bad map */
+    234, 1, /* bad map */
+    235, 2,
+    236, 3, 
+    237, 82,
+    238, 67,
+    239, 66,
+    240, 1, /* bad map */
+    241, 1, /* bad map */
+    242, 70,
+    243, 1, /* bad map */
+    244, 66,
+    245, 10,
+    246, 10,
+    247, 10,
+    1001, 1, /* bad map */
+    1002, 1, /* bad map */
+    1003, 1, /* bad map */
+    1004, 1, /* bad map */
+    1005, 1, /* bad map */
+    1006, 1, /* bad map */
+    1007, 100,
+    1008, 1, 
+    1009, 1,
+    1010, 3,
+    1011, 3,
+    1012, 3,
+    1013, 3,
+    1014, 3,
+    1015, 3,
+    1015, 3,
+    1016, 3,
+    1017, 3,
+    1018, 2,
+    1019, 2,
+    1020, 2,
+    1021, 3,
+    1022, 3,
+    1023, 3,
+    1024, 16,
+    1025, 3,
+    1026, 64,
+    1027, 1,
+    1028, 65,
+    1029, 1,
+    1040, 1,
+    /* 1041-1065 */
+    1066, 66,
+    1066, 67,
+    0
+};
+
+int yaz_diag_bib1_to_srw (int code)
+{
+    const int *p = srw_bib1_map;
+    while (*p)
+    {
+        if (code == p[0])
+            return p[1];
+        p += 2;
+    }
+    return 1;
+}
+
+int yaz_diag_srw_to_bib1(int code)
+{
+    const int *p = srw_bib1_map;
+    while (*p)
+    {
+        if (code == p[1])
+            return p[0];
+        p += 2;
+    }
+    return 1;
+}
diff --git a/src/statserv.c b/src/statserv.c
new file mode 100644 (file)
index 0000000..8d2629d
--- /dev/null
@@ -0,0 +1,961 @@
+/*
+ * Copyright (c) 1995-2003, Index Data
+ * See the file LICENSE for details.
+ * Sebastian Hammer, Adam Dickmeiss
+ *
+ * NT threaded server code by
+ *   Chas Woodfield, Fretwell Downing Informatics.
+ *
+ * $Id: statserv.c,v 1.1 2003-10-27 12:21:35 adam Exp $
+ */
+
+#include <stdio.h>
+#include <string.h>
+#ifdef WIN32
+#include <process.h>
+#include <winsock.h>
+#include <direct.h>
+#include "service.h"
+#else
+#include <unistd.h>
+#include <pwd.h>
+#endif
+
+#if YAZ_POSIX_THREADS
+#include <pthread.h>
+#elif YAZ_GNU_THREADS
+#include <pth.h>
+#endif
+
+#include <fcntl.h>
+#include <signal.h>
+#include <errno.h>
+
+#include <yaz/comstack.h>
+#include <yaz/tcpip.h>
+#include <yaz/options.h>
+#ifdef USE_XTIMOSI
+#include <yaz/xmosi.h>
+#endif
+#include <yaz/log.h>
+#include "eventl.h"
+#include "session.h"
+#include <yaz/statserv.h>
+
+static IOCHAN pListener = NULL;
+
+static char *me = "statserver";
+/*
+ * default behavior.
+ */
+int check_options(int argc, char **argv);
+statserv_options_block control_block = {
+    1,                          /* dynamic mode */
+    0,                          /* threaded mode */
+    0,                          /* one shot (single session) */
+    LOG_DEFAULT_LEVEL,          /* log level */
+    "",                         /* no PDUs */
+    "",                         /* diagnostic output to stderr */
+    "tcp:@:9999",               /* default listener port */
+    PROTO_Z3950,                /* default application protocol */
+    15,                         /* idle timeout (minutes) */
+    1024*1024,                  /* maximum PDU size (approx.) to allow */
+    "default-config",           /* configuration name to pass to backend */
+    "",                         /* set user id */
+    0,                          /* bend_start handler */
+    0,                          /* bend_stop handler */
+    check_options,              /* Default routine, for checking the run-time arguments */
+    check_ip_tcpd,
+    "",
+    0,                          /* default value for inet deamon */
+    0,                          /* handle (for service, etc) */
+    0,                          /* bend_init handle */
+    0,                          /* bend_close handle */
+#ifdef WIN32
+    "Z39.50 Server",            /* NT Service Name */
+    "Server",                   /* NT application Name */
+    "",                         /* NT Service Dependencies */
+    "Z39.50 Server",            /* NT Service Display Name */
+#endif /* WIN32 */
+    0                           /* SOAP handlers */
+};
+
+static int max_sessions = 0;
+
+/*
+ * handle incoming connect requests.
+ * The dynamic mode is a bit tricky mostly because we want to avoid
+ * doing all of the listening and accepting in the parent - it's
+ * safer that way.
+ */
+#ifdef WIN32
+
+typedef struct _ThreadList ThreadList;
+
+struct _ThreadList
+{
+    HANDLE hThread;
+    IOCHAN pIOChannel;
+    ThreadList *pNext;
+};
+
+static ThreadList *pFirstThread;
+static CRITICAL_SECTION Thread_CritSect;
+static BOOL bInitialized = FALSE;
+
+static void ThreadList_Initialize()
+{
+    /* Initialize the critical Sections */
+    InitializeCriticalSection(&Thread_CritSect);
+
+     /* Set the first thraed */
+    pFirstThread = NULL;
+
+    /* we have been initialized */
+    bInitialized = TRUE;
+}
+
+static void statserv_add(HANDLE hThread, IOCHAN pIOChannel)
+{
+    /* Only one thread can go through this section at a time */
+    EnterCriticalSection(&Thread_CritSect);
+
+    {
+        /* Lets create our new object */
+        ThreadList *pNewThread = (ThreadList *)malloc(sizeof(ThreadList));
+        pNewThread->hThread = hThread;
+        pNewThread->pIOChannel = pIOChannel;
+        pNewThread->pNext = pFirstThread;
+        pFirstThread = pNewThread;
+
+        /* Lets let somebody else create a new object now */
+        LeaveCriticalSection(&Thread_CritSect);
+    }
+}
+
+void statserv_remove(IOCHAN pIOChannel)
+{
+    /* Only one thread can go through this section at a time */
+    EnterCriticalSection(&Thread_CritSect);
+
+    {
+        ThreadList *pCurrentThread = pFirstThread;
+        ThreadList *pNextThread;
+        ThreadList *pPrevThread =NULL;
+
+        /* Step through alll the threads */
+        for (; pCurrentThread != NULL; pCurrentThread = pNextThread)
+        {
+            /* We only need to compare on the IO Channel */
+            if (pCurrentThread->pIOChannel == pIOChannel)
+            {
+                /* We have found the thread we want to delete */
+                /* First of all reset the next pointers */
+                if (pPrevThread == NULL)
+                    pFirstThread = pCurrentThread->pNext;
+                else
+                    pPrevThread->pNext = pCurrentThread->pNext;
+
+                /* All we need todo now is delete the memory */
+                free(pCurrentThread);
+
+                /* No need to look at any more threads */
+                pNextThread = NULL;
+            }
+            else
+            {
+                /* We need to look at another thread */
+                pNextThread = pCurrentThread->pNext;
+                pPrevThread = pCurrentThread;
+            }
+        }
+
+        /* Lets let somebody else remove an object now */
+        LeaveCriticalSection(&Thread_CritSect);
+    }
+}
+
+/* WIN32 statserv_closedown */
+void statserv_closedown()
+{
+    /* Shouldn't do anything if we are not initialized */
+    if (bInitialized)
+    {
+        int iHandles = 0;
+        HANDLE *pThreadHandles = NULL;
+
+        /* We need to stop threads adding and removing while we */
+       /* start the closedown process */
+        EnterCriticalSection(&Thread_CritSect);
+
+        {
+            /* We have exclusive access to the thread stuff now */
+            /* Y didn't i use a semaphore - Oh well never mind */
+            ThreadList *pCurrentThread = pFirstThread;
+
+            /* Before we do anything else, we need to shutdown the listener */
+            if (pListener != NULL)
+                iochan_destroy(pListener);
+
+            for (; pCurrentThread != NULL; pCurrentThread = pCurrentThread->pNext)
+            {
+                /* Just destroy the IOCHAN, that should do the trick */
+                iochan_destroy(pCurrentThread->pIOChannel);
+                closesocket(pCurrentThread->pIOChannel->fd);
+
+                /* Keep a running count of our handles */
+                iHandles++;
+            }
+
+            if (iHandles > 0)
+            {
+                HANDLE *pCurrentHandle ;
+
+                /* Allocate the thread handle array */
+                pThreadHandles = (HANDLE *)malloc(sizeof(HANDLE) * iHandles);
+                pCurrentHandle = pThreadHandles; 
+
+                for (pCurrentThread = pFirstThread;
+                     pCurrentThread != NULL;
+                     pCurrentThread = pCurrentThread->pNext, pCurrentHandle++)
+                {
+                    /* Just the handle */
+                    *pCurrentHandle = pCurrentThread->hThread;
+                }
+            }
+
+            /* We can now leave the critical section */
+            LeaveCriticalSection(&Thread_CritSect);
+        }
+
+        /* Now we can really do something */
+        if (iHandles > 0)
+        {
+            logf (LOG_LOG, "waiting for %d to die", iHandles);
+            /* This will now wait, until all the threads close */
+            WaitForMultipleObjects(iHandles, pThreadHandles, TRUE, INFINITE);
+
+            /* Free the memory we allocated for the handle array */
+            free(pThreadHandles);
+        }
+
+       if (control_block.bend_stop)
+           (*control_block.bend_stop)(&control_block);
+        /* No longer require the critical section, since all threads are dead */
+        DeleteCriticalSection(&Thread_CritSect);
+    }
+}
+
+void __cdecl event_loop_thread (IOCHAN iochan)
+{
+    event_loop (&iochan);
+}
+
+/* WIN32 listener */
+static void listener(IOCHAN h, int event)   
+{
+    COMSTACK line = (COMSTACK) iochan_getdata(h);
+    association *newas;
+    int res;
+    HANDLE newHandle;
+
+    if (event == EVENT_INPUT)
+    {
+        if ((res = cs_listen(line, 0, 0)) < 0)
+        {
+           yaz_log(LOG_FATAL, "cs_listen failed");
+           return;
+        }
+        else if (res == 1)
+            return;
+        yaz_log(LOG_DEBUG, "listen ok");
+        iochan_setevent(h, EVENT_OUTPUT);
+        iochan_setflags(h, EVENT_OUTPUT | EVENT_EXCEPT); /* set up for acpt */
+    }
+    else if (event == EVENT_OUTPUT)
+    {
+       COMSTACK new_line = cs_accept(line);
+       IOCHAN new_chan;
+       char *a = NULL;
+
+       if (!new_line)
+       {
+           yaz_log(LOG_FATAL, "Accept failed.");
+           iochan_setflags(h, EVENT_INPUT | EVENT_EXCEPT);
+           return;
+       }
+       yaz_log(LOG_DEBUG, "Accept ok");
+
+       if (!(new_chan = iochan_create(cs_fileno(new_line), ir_session,
+                                      EVENT_INPUT)))
+       {
+           yaz_log(LOG_FATAL, "Failed to create iochan");
+            iochan_destroy(h);
+            return;
+       }
+
+       yaz_log(LOG_DEBUG, "Creating association");
+       if (!(newas = create_association(new_chan, new_line)))
+       {
+           yaz_log(LOG_FATAL, "Failed to create new assoc.");
+            iochan_destroy(h);
+            return;
+       }
+       newas->cs_get_mask = EVENT_INPUT;
+       newas->cs_put_mask = 0;
+       newas->cs_accept_mask = 0;
+
+       yaz_log(LOG_DEBUG, "Setting timeout %d", control_block.idle_timeout);
+       iochan_setdata(new_chan, newas);
+       iochan_settimeout(new_chan, 60);
+
+       /* Now what we need todo is create a new thread with this iochan as
+          the parameter */
+        newHandle = (HANDLE) _beginthread(event_loop_thread, 0, new_chan);
+        if (newHandle == (HANDLE) -1)
+       {
+           
+           yaz_log(LOG_FATAL|LOG_ERRNO, "Failed to create new thread.");
+            iochan_destroy(h);
+            return;
+       }
+        /* We successfully created the thread, so add it to the list */
+        statserv_add(newHandle, new_chan);
+
+        yaz_log(LOG_DEBUG, "Created new thread, id = %ld iochan %p",(long) newHandle, new_chan);
+        iochan_setflags(h, EVENT_INPUT | EVENT_EXCEPT); /* reset listener */
+    }
+    else
+    {
+       yaz_log(LOG_FATAL, "Bad event on listener.");
+        iochan_destroy(h);
+        return;
+    }
+}
+
+int statserv_must_terminate(void)
+{
+    return 0;
+}
+
+#else /* ! WIN32 */
+
+static int term_flag = 0;
+/* To save having an #ifdef in event_loop we need to
+   define this empty function 
+*/
+int statserv_must_terminate(void)
+{
+    return term_flag;
+}
+
+void statserv_remove(IOCHAN pIOChannel)
+{
+}
+
+void statserv_closedown()
+{
+    IOCHAN p;
+
+    if (control_block.bend_stop)
+        (*control_block.bend_stop)(&control_block);
+    for (p = pListener; p; p = p->next)
+    {
+        iochan_destroy(p);
+    }
+}
+
+void sigterm(int sig)
+{
+    term_flag = 1;
+}
+
+static void *new_session (void *vp);
+static int no_sessions = 0;
+
+/* UNIX listener */
+static void listener(IOCHAN h, int event)
+{
+    COMSTACK line = (COMSTACK) iochan_getdata(h);
+    static int hand[2];
+    static int child = 0;
+    int res;
+
+    if (event == EVENT_INPUT)
+    {
+       if (control_block.dynamic && !child) 
+       {
+           int res;
+
+            ++no_sessions;
+           if (pipe(hand) < 0)
+           {
+               yaz_log(LOG_FATAL|LOG_ERRNO, "pipe");
+                iochan_destroy(h);
+                return;
+           }
+           if ((res = fork()) < 0)
+           {
+               yaz_log(LOG_FATAL|LOG_ERRNO, "fork");
+                iochan_destroy(h);
+                return;
+           }
+           else if (res == 0) /* child */
+           {
+               char nbuf[100];
+               IOCHAN pp;
+
+               close(hand[0]);
+               child = 1;
+               for (pp = pListener; pp; pp = iochan_getnext(pp))
+               {
+                   if (pp != h)
+                   {
+                       COMSTACK l = (COMSTACK)iochan_getdata(pp);
+                       cs_close(l);
+                       iochan_destroy(pp);
+                   }
+               }
+               sprintf(nbuf, "%s(%d)", me, getpid());
+               yaz_log_init(control_block.loglevel, nbuf, 0);
+                /* ensure that bend_stop is not called when each child exits -
+                   only for the main process .. 
+                */
+                control_block.bend_stop = 0;
+           }
+           else /* parent */
+           {
+               close(hand[1]);
+               /* wait for child to take the call */
+               for (;;)
+               {
+                   char dummy[1];
+                   int res;
+                   
+                   if ((res = read(hand[0], dummy, 1)) < 0 &&
+                                    yaz_errno() != EINTR)
+                   {
+                       yaz_log(LOG_FATAL|LOG_ERRNO, "handshake read");
+                        return;
+                   }
+                   else if (res >= 0)
+                       break;
+               }
+               yaz_log(LOG_DEBUG, "P: Child has taken the call");
+               close(hand[0]);
+               return;
+           }
+       }
+       if ((res = cs_listen_check(line, 0, 0, control_block.check_ip,
+                                  control_block.daemon_name)) < 0)
+       {
+           yaz_log(LOG_WARN|LOG_ERRNO, "cs_listen failed");
+           return;
+       }
+       else if (res == 1)
+           return;
+       yaz_log(LOG_DEBUG, "listen ok");
+       iochan_setevent(h, EVENT_OUTPUT);
+       iochan_setflags(h, EVENT_OUTPUT | EVENT_EXCEPT); /* set up for acpt */
+    }
+    /* in dynamic mode, only the child ever comes down here */
+    else if (event == EVENT_OUTPUT)
+    {
+       COMSTACK new_line = cs_accept(line);
+
+       if (!new_line)
+       {
+           yaz_log(LOG_FATAL, "Accept failed.");
+           iochan_setflags(h, EVENT_INPUT | EVENT_EXCEPT); /* reset listener */
+           return;
+       }
+       yaz_log(LOG_DEBUG, "accept ok");
+       if (control_block.dynamic)
+       {
+           IOCHAN pp;
+           /* close our half of the listener socket */
+           for (pp = pListener; pp; pp = iochan_getnext(pp))
+           {
+               COMSTACK l = (COMSTACK)iochan_getdata(pp);
+               cs_close(l);
+               iochan_destroy(pp);
+           }
+           /* release dad */
+           yaz_log(LOG_DEBUG, "Releasing parent");
+           close(hand[1]);
+       }
+       else
+       {
+           iochan_setflags(h, EVENT_INPUT | EVENT_EXCEPT); /* reset listener */
+           ++no_sessions;
+       }
+#if YAZ_POSIX_THREADS
+       if (control_block.threads)
+       {
+           pthread_t child_thread;
+           pthread_create (&child_thread, 0, new_session, new_line);
+           pthread_detach (child_thread);
+       }
+       else
+           new_session(new_line);
+#elif YAZ_GNU_THREADS
+       if (control_block.threads)
+       {
+           pth_attr_t attr;
+           pth_t child_thread;
+
+            attr = pth_attr_new ();
+            pth_attr_set (attr, PTH_ATTR_JOINABLE, FALSE);
+            pth_attr_set (attr, PTH_ATTR_STACK_SIZE, 32*1024);
+            pth_attr_set (attr, PTH_ATTR_NAME, "session");
+            yaz_log (LOG_LOG, "pth_spawn begin");
+           child_thread = pth_spawn (attr, new_session, new_line);
+            yaz_log (LOG_LOG, "pth_spawn finish");
+            pth_attr_destroy (attr);
+       }
+       else
+           new_session(new_line);
+#else
+       new_session(new_line);
+#endif
+    }
+    else if (event == EVENT_TIMEOUT)
+    {
+       yaz_log(LOG_LOG, "Shutting down listener.");
+        iochan_destroy(h);
+    }
+    else
+    {
+       yaz_log(LOG_FATAL, "Bad event on listener.");
+        iochan_destroy(h);
+    }
+}
+
+static void *new_session (void *vp)
+{
+    char *a;
+    association *newas;
+    IOCHAN new_chan;
+    COMSTACK new_line = (COMSTACK) vp;
+
+    unsigned cs_get_mask, cs_accept_mask, mask =  
+       ((new_line->io_pending & CS_WANT_WRITE) ? EVENT_OUTPUT : 0) |
+       ((new_line->io_pending & CS_WANT_READ) ? EVENT_INPUT : 0);
+
+    if (mask)    
+    {
+       cs_accept_mask = mask;  /* accept didn't complete */
+       cs_get_mask = 0;
+    }
+    else
+    {
+       cs_accept_mask = 0;     /* accept completed.  */
+       cs_get_mask = mask = EVENT_INPUT;
+    }
+
+    if (!(new_chan = iochan_create(cs_fileno(new_line), ir_session, mask)))
+    {
+       yaz_log(LOG_FATAL, "Failed to create iochan");
+       return 0;
+    }
+    if (!(newas = create_association(new_chan, new_line)))
+    {
+       yaz_log(LOG_FATAL, "Failed to create new assoc.");
+       return 0;
+    }
+    newas->cs_accept_mask = cs_accept_mask;
+    newas->cs_get_mask = cs_get_mask;
+
+    iochan_setdata(new_chan, newas);
+    iochan_settimeout(new_chan, 60);
+#if 1
+    a = cs_addrstr(new_line);
+#else
+    a = 0;
+#endif
+    yaz_log(LOG_LOG, "Starting session %d from %s",
+        no_sessions, a ? a : "[Unknown]");
+    if (max_sessions && no_sessions == max_sessions)
+        control_block.one_shot = 1;
+    if (control_block.threads)
+    {
+       event_loop(&new_chan);
+    }
+    else
+    {
+       new_chan->next = pListener;
+       pListener = new_chan;
+    }
+    return 0;
+}
+
+/* UNIX */
+#endif
+
+static void inetd_connection(int what)
+{
+    COMSTACK line;
+    IOCHAN chan;
+    association *assoc;
+    char *addr;
+
+    if ((line = cs_createbysocket(0, tcpip_type, 0, what)))
+    {
+        if ((chan = iochan_create(cs_fileno(line), ir_session, EVENT_INPUT)))
+        {
+            if ((assoc = create_association(chan, line)))
+            {
+                iochan_setdata(chan, assoc);
+                iochan_settimeout(chan, 60);
+                addr = cs_addrstr(line);
+                yaz_log(LOG_LOG, "Inetd association from %s",
+                        addr ? addr : "[UNKNOWN]");
+               assoc->cs_get_mask = EVENT_INPUT;
+            }
+            else
+            {
+               yaz_log(LOG_FATAL, "Failed to create association structure");
+            }
+            chan->next = pListener;
+            pListener = chan;
+        }
+        else
+        {
+            yaz_log(LOG_FATAL, "Failed to create iochan");
+        }
+    }
+    else
+    {
+       yaz_log(LOG_ERRNO|LOG_FATAL, "Failed to create comstack on socket 0");
+    }
+}
+
+/*
+ * Set up a listening endpoint, and give it to the event-handler.
+ */
+static int add_listener(char *where, int what)
+{
+    COMSTACK l;
+    void *ap;
+    IOCHAN lst = NULL;
+    const char *mode;
+
+    if (control_block.dynamic)
+       mode = "dynamic";
+    else if (control_block.threads)
+       mode = "threaded";
+    else
+       mode = "static";
+
+    yaz_log(LOG_LOG, "Adding %s %s listener on %s", mode,
+           what == PROTO_SR ? "SR" : "Z3950", where);
+
+    l = cs_create_host(where, 0, &ap);
+    if (!l)
+    {
+       yaz_log(LOG_FATAL|LOG_ERRNO, "Failed to listen on %s", where);
+       return -1;
+    }
+    if (cs_bind(l, ap, CS_SERVER) < 0)
+    {
+       yaz_log(LOG_FATAL|LOG_ERRNO, "Failed to bind to %s", where);
+       cs_close (l);
+       return -1;
+    }
+    if (!(lst = iochan_create(cs_fileno(l), listener, EVENT_INPUT |
+        EVENT_EXCEPT)))
+    {
+       yaz_log(LOG_FATAL|LOG_ERRNO, "Failed to create IOCHAN-type");
+       cs_close (l);
+       return -1;
+    }
+    iochan_setdata(lst, l);
+
+    /* Ensure our listener chain is setup properly */
+    lst->next = pListener;
+    pListener = lst;
+    return 0; /* OK */
+}
+
+#ifndef WIN32
+/* UNIX only (for windows we don't need to catch the signals) */
+static void catchchld(int num)
+{
+    while (waitpid(-1, 0, WNOHANG) > 0)
+       ;
+    signal(SIGCHLD, catchchld);
+}
+#endif
+
+statserv_options_block *statserv_getcontrol(void)
+{
+    static statserv_options_block cb;
+
+    memcpy(&cb, &control_block, sizeof(cb));
+    return &cb;
+}
+
+void statserv_setcontrol(statserv_options_block *block)
+{
+    memcpy(&control_block, block, sizeof(*block));
+}
+
+static void statserv_reset(void)
+{
+}
+
+int statserv_start(int argc, char **argv)
+{
+    int ret;
+
+#ifdef WIN32
+    /* We need to initialize the thread list */
+    ThreadList_Initialize();
+/* WIN32 */
+#endif
+    
+#ifdef WIN32
+    if ((me = strrchr (argv[0], '\\')))
+       me++;
+    else
+       me = argv[0];
+#else
+    me = argv[0];
+#endif
+    if (control_block.options_func(argc, argv))
+        return(1);
+    
+    if (control_block.bend_start)
+        (*control_block.bend_start)(&control_block);
+#ifdef WIN32
+    yaz_log (LOG_LOG, "Starting server %s", me);
+#else
+/* UNIX */
+    if (control_block.inetd)
+       inetd_connection(control_block.default_proto);
+    else
+    {
+       yaz_log (LOG_LOG, "Starting server %s pid=%d", me, getpid());
+#if 0
+       sigset_t sigs_to_block;
+       
+       sigemptyset(&sigs_to_block);
+       sigaddset (&sigs_to_block, SIGTERM);
+       pthread_sigmask (SIG_BLOCK, &sigs_to_block, 0);
+       /* missing... */
+#endif
+       if (control_block.dynamic)
+           signal(SIGCHLD, catchchld);
+    }
+    signal (SIGPIPE, SIG_IGN);
+    signal (SIGTERM, sigterm);
+    if (*control_block.setuid)
+    {
+       struct passwd *pw;
+       
+       if (!(pw = getpwnam(control_block.setuid)))
+       {
+           yaz_log(LOG_FATAL, "%s: Unknown user", control_block.setuid);
+           return(1);
+       }
+       if (setuid(pw->pw_uid) < 0)
+       {
+           yaz_log(LOG_FATAL|LOG_ERRNO, "setuid");
+           exit(1);
+       }
+    }
+/* UNIX */
+#endif
+    
+    
+    if ((pListener == NULL) && *control_block.default_listen)
+       add_listener(control_block.default_listen,
+                    control_block.default_proto);
+       
+    if (pListener == NULL)
+       ret = 1;
+    else
+    {
+       yaz_log(LOG_LOG, "Entering event loop.");
+        ret = event_loop(&pListener);
+    }
+    return ret;
+}
+
+int check_options(int argc, char **argv)
+{
+    int ret = 0, r;
+    char *arg;
+
+    while ((ret = options("1a:iszSTl:v:u:c:w:t:k:d:D:", argv, argc, &arg)) != -2)
+    {
+       switch (ret)
+       {
+       case 0:
+           if (add_listener(arg, control_block.default_proto))
+                return 1;  /* failed to create listener */
+           break;
+       case '1':        
+           control_block.one_shot = 1;
+           control_block.dynamic = 0;
+           break;
+       case 'z':
+           control_block.default_proto = PROTO_Z3950;
+           break;
+       case 's':
+            fprintf (stderr, "%s: SR protocol no longer supported\n", me);
+            exit (1);
+           break;
+       case 'S':
+           control_block.dynamic = 0;
+           break;
+       case 'T':
+#if YAZ_POSIX_THREADS
+           control_block.dynamic = 0;
+           control_block.threads = 1;
+#elif YAZ_GNU_THREADS
+           control_block.dynamic = 0;
+           control_block.threads = 1;
+#else
+           fprintf(stderr, "%s: Threaded mode not available.\n", me);
+           return 1;
+#endif
+           break;
+       case 'l':
+           strcpy(control_block.logfile, arg ? arg : "");
+           yaz_log_init(control_block.loglevel, me, control_block.logfile);
+           break;
+       case 'v':
+           control_block.loglevel = yaz_log_mask_str(arg);
+           yaz_log_init(control_block.loglevel, me, control_block.logfile);
+           break;
+       case 'a':
+           strcpy(control_block.apdufile, arg ? arg : "");
+           break;
+       case 'u':
+           strcpy(control_block.setuid, arg ? arg : "");
+           break;
+       case 'c':
+           strcpy(control_block.configname, arg ? arg : "");
+           break;
+       case 'd':
+           strcpy(control_block.daemon_name, arg ? arg : "");
+           break;
+       case 't':
+           if (!arg || !(r = atoi(arg)))
+           {
+               fprintf(stderr, "%s: Specify positive timeout for -t.\n", me);
+               return(1);
+           }
+           control_block.idle_timeout = r;
+           break;
+       case  'k':
+           if (!arg || !(r = atoi(arg)))
+           {
+               fprintf(stderr, "%s: Specify positive size for -k.\n", me);
+               return(1);
+           }
+           control_block.maxrecordsize = r * 1024;
+           break;
+       case 'i':
+           control_block.inetd = 1;
+           break;
+       case 'w':
+           if (chdir(arg))
+           {
+               perror(arg);            
+               return 1;
+           }
+           break;
+        case 'D':
+            max_sessions = atoi(arg);
+            break;
+       default:
+           fprintf(stderr, "Usage: %s [ -a <pdufile> -v <loglevel>"
+                   " -l <logfile> -u <user> -c <config> -t <minutes>"
+                   " -k <kilobytes> -d <daemon>"
+                        " -ziST1 -w <directory> <listender-addr>... ]\n", me);
+           return 1;
+        }
+    }
+    return 0;
+}
+
+#ifdef WIN32
+typedef struct _Args
+{
+    char **argv;
+    int argc;
+} Args; 
+
+static Args ArgDetails;
+
+/* name of the executable */
+#define SZAPPNAME            "server"
+
+/* list of service dependencies - "dep1\0dep2\0\0" */
+#define SZDEPENDENCIES       ""
+
+int statserv_main(int argc, char **argv,
+                 bend_initresult *(*bend_init)(bend_initrequest *r),
+                 void (*bend_close)(void *handle))
+{
+    statserv_options_block *cb = statserv_getcontrol();
+    
+    cb->bend_init = bend_init;
+    cb->bend_close = bend_close;
+
+    statserv_setcontrol(cb);
+
+    /* Lets setup the Arg structure */
+    ArgDetails.argc = argc;
+    ArgDetails.argv = argv;
+    
+    /* Now setup the service with the service controller */
+    SetupService(argc, argv, &ArgDetails, SZAPPNAME,
+                cb->service_name, /* internal service name */
+                cb->service_display_name, /* displayed name */
+                SZDEPENDENCIES);
+    return 0;
+}
+
+int StartAppService(void *pHandle, int argc, char **argv)
+{
+    /* Initializes the App */
+    return 1;
+}
+
+void RunAppService(void *pHandle)
+{
+    Args *pArgs = (Args *)pHandle;
+    
+    /* Starts the app running */
+    statserv_start(pArgs->argc, pArgs->argv);
+}
+
+void StopAppService(void *pHandle)
+{
+    /* Stops the app */
+    statserv_closedown();
+    statserv_reset();
+}
+/* WIN32 */
+#else
+/* UNIX */
+int statserv_main(int argc, char **argv,
+                 bend_initresult *(*bend_init)(bend_initrequest *r),
+                 void (*bend_close)(void *handle))
+{
+    int ret;
+    statserv_options_block *cb = statserv_getcontrol();
+    
+    cb->bend_init = bend_init;
+    cb->bend_close = bend_close;
+
+    statserv_setcontrol(cb);
+    ret = statserv_start (argc, argv);
+    statserv_closedown ();
+    statserv_reset();
+    return ret;
+}
+#endif
diff --git a/src/tcpdchk.c b/src/tcpdchk.c
new file mode 100644 (file)
index 0000000..5b9d234
--- /dev/null
@@ -0,0 +1,100 @@
+/*
+ * Copyright (c) 1995-2000, Index Data
+ * See the file LICENSE for details.
+ * Sebastian Hammer, Adam Dickmeiss
+ *
+ * $Log: tcpdchk.c,v $
+ * Revision 1.1  2003-10-27 12:21:35  adam
+ * Source restructure. yaz-marcdump part of installation
+ *
+ * Revision 1.5  2000/02/28 11:20:06  adam
+ * Using autoconf. New definitions: YAZ_BEGIN_CDECL/YAZ_END_CDECL.
+ *
+ * Revision 1.4  1999/11/30 13:47:12  adam
+ * Improved installation. Moved header files to include/yaz.
+ *
+ * Revision 1.3  1999/08/27 09:40:32  adam
+ * Renamed logf function to yaz_log. Removed VC++ project files.
+ *
+ * Revision 1.2  1999/04/20 09:56:48  adam
+ * Added 'name' paramter to encoder/decoder routines (typedef Odr_fun).
+ * Modified all encoders/decoders to reflect this change.
+ *
+ * Revision 1.1  1999/04/16 14:45:55  adam
+ * Added interface for tcpd wrapper for access control.
+ *
+ */
+
+#include <stdio.h>
+#include <string.h>
+
+#include <yaz/yconfig.h>
+#include <yaz/comstack.h>
+
+#if HAVE_TCPD_H
+#include <syslog.h>
+#include <tcpd.h>
+
+
+int allow_severity = LOG_INFO;
+int deny_severity = LOG_WARNING;
+
+#ifdef LOG_DEBUG
+#undef LOG_DEBUG
+#endif
+#ifdef LOG_WARN
+#undef LOG_WARN
+#endif
+
+#endif
+
+#include <yaz/statserv.h>
+#include <yaz/log.h>
+
+int check_ip_tcpd(void *cd, const char *addr, int len, int type)
+{
+    const char *daemon_name = (const char *) cd;
+
+    if (type == AF_INET)
+    {
+       if (daemon_name && *daemon_name)
+       {
+#if HAVE_TCPD_H
+           struct request_info request_info;
+           int i;
+#endif
+           char *host_name = 0, *host_addr = 0;
+           struct hostent *host;
+
+           struct sockaddr_in *addr_in = (struct sockaddr_in *) addr;
+           
+           if ((host = gethostbyaddr((char*)&addr_in->sin_addr,
+                                     sizeof(addr_in->sin_addr),
+                                     AF_INET)))
+               host_name = (char*) host->h_name;
+           host_addr = inet_ntoa(addr_in->sin_addr);
+#if HAVE_TCPD_H
+           if (host_addr)
+               request_init(&request_info, RQ_DAEMON, daemon_name,
+                            RQ_CLIENT_NAME, host_name,
+                            RQ_CLIENT_SIN, addr_in,
+                            RQ_CLIENT_ADDR, host_addr, 0);
+           else
+               request_init(&request_info, RQ_DAEMON, daemon_name,
+                            RQ_CLIENT_SIN, addr_in,
+                            RQ_CLIENT_ADDR, host_addr, 0);
+           i = hosts_access(&request_info);
+           if (!i)
+           {
+               yaz_log (LOG_DEBUG, "access denied from %s",
+                        host_name ? host_name : host_addr);
+               return 1;
+           }
+           yaz_log (LOG_DEBUG, "access granted from %s",
+                    host_name ? host_name : host_addr);
+#endif
+       }
+    }
+    return 0;
+}
+
diff --git a/src/tcpip.c b/src/tcpip.c
new file mode 100644 (file)
index 0000000..4425867
--- /dev/null
@@ -0,0 +1,1100 @@
+/*
+ * Copyright (c) 1995-2003, Index Data
+ * See the file LICENSE for details.
+ *
+ * $Id: tcpip.c,v 1.1 2003-10-27 12:21:35 adam Exp $
+ */
+
+#include <stdio.h>
+#include <string.h>
+#include <stdlib.h>
+
+#ifdef WIN32
+#else
+#include <unistd.h>
+#endif
+
+#include <errno.h>
+#include <fcntl.h>
+#include <signal.h>
+#if HAVE_OPENSSL_SSL_H
+#include <openssl/ssl.h>
+#include <openssl/err.h>
+#endif
+
+#include <yaz/comstack.h>
+#include <yaz/tcpip.h>
+#include <yaz/log.h>
+#include <yaz/nmem.h>
+
+#ifdef WIN32
+#else
+#include <netinet/tcp.h>
+#endif
+
+static int tcpip_close(COMSTACK h);
+static int tcpip_put(COMSTACK h, char *buf, int size);
+static int tcpip_get(COMSTACK h, char **buf, int *bufsize);
+static int tcpip_connect(COMSTACK h, void *address);
+static int tcpip_more(COMSTACK h);
+static int tcpip_rcvconnect(COMSTACK h);
+static int tcpip_bind(COMSTACK h, void *address, int mode);
+static int tcpip_listen(COMSTACK h, char *raddr, int *addrlen,
+                int (*check_ip)(void *cd, const char *a, int len, int type),
+                void *cd);
+static int tcpip_set_blocking(COMSTACK p, int blocking);
+
+#if HAVE_OPENSSL_SSL_H
+static int ssl_get(COMSTACK h, char **buf, int *bufsize);
+static int ssl_put(COMSTACK h, char *buf, int size);
+#endif
+
+static COMSTACK tcpip_accept(COMSTACK h);
+static char *tcpip_addrstr(COMSTACK h);
+static void *tcpip_straddr(COMSTACK h, const char *str);
+
+#if 0
+#define TRC(x) x
+#else
+#define TRC(X)
+#endif
+
+#ifndef YAZ_SOCKLEN_T
+#define YAZ_SOCKLEN_T int
+#endif
+
+/* this state is used for both SSL and straight TCP/IP */
+typedef struct tcpip_state
+{
+    char *altbuf; /* alternate buffer for surplus data */
+    int altsize;  /* size as xmalloced */
+    int altlen;   /* length of data or 0 if none */
+
+    int written;  /* -1 if we aren't writing */
+    int towrite;  /* to verify against user input */
+    int (*complete)(const unsigned char *buf, int len); /* length/comple. */
+    struct sockaddr_in addr;  /* returned by cs_straddr */
+    char buf[128]; /* returned by cs_addrstr */
+#if HAVE_OPENSSL_SSL_H
+    SSL_CTX *ctx;
+    SSL_CTX *ctx_alloc;
+    SSL *ssl;
+#endif
+} tcpip_state;
+
+#ifdef WIN32
+static int tcpip_init (void)
+{
+    static int initialized = 0;
+    if (!initialized)
+    {
+        WORD requested;
+        WSADATA wd;
+
+        requested = MAKEWORD(1, 1);
+        if (WSAStartup(requested, &wd))
+            return 0;
+        initialized = 1;
+    }
+    return 1;
+}
+#else
+static int tcpip_init (void)
+{
+    return 1;
+}
+#endif
+
+/*
+ * This function is always called through the cs_create() macro.
+ * s >= 0: socket has already been established for us.
+ */
+COMSTACK tcpip_type(int s, int blocking, int protocol, void *vp)
+{
+    COMSTACK p;
+    tcpip_state *state;
+    int new_socket;
+#ifdef WIN32
+    unsigned long tru = 1;
+#endif
+
+    if (!tcpip_init ())
+        return 0;
+    if (s < 0)
+    {
+       if ((s = socket(AF_INET, SOCK_STREAM, 0)) < 0)
+           return 0;
+       new_socket = 1;
+    }
+    else
+       new_socket = 0;
+    if (!(p = (struct comstack *)xmalloc(sizeof(struct comstack))))
+       return 0;
+    if (!(state = (struct tcpip_state *)(p->cprivate =
+                                         xmalloc(sizeof(tcpip_state)))))
+       return 0;
+
+    if (!((p->blocking = blocking)&1))
+    {
+#ifdef WIN32
+        if (ioctlsocket(s, FIONBIO, &tru) < 0)
+            return 0;
+#else
+        if (fcntl(s, F_SETFL, O_NONBLOCK) < 0)
+            return 0;
+#ifndef MSG_NOSIGNAL
+        signal (SIGPIPE, SIG_IGN);
+#endif
+#endif
+    }
+
+    p->io_pending = 0;
+    p->iofile = s;
+    p->type = tcpip_type;
+    p->protocol = (enum oid_proto) protocol;
+
+    p->f_connect = tcpip_connect;
+    p->f_rcvconnect = tcpip_rcvconnect;
+    p->f_get = tcpip_get;
+    p->f_put = tcpip_put;
+    p->f_close = tcpip_close;
+    p->f_more = tcpip_more;
+    p->f_bind = tcpip_bind;
+    p->f_listen = tcpip_listen;
+    p->f_accept = tcpip_accept;
+    p->f_addrstr = tcpip_addrstr;
+    p->f_straddr = tcpip_straddr;
+    p->f_set_blocking = tcpip_set_blocking;
+
+    p->state = new_socket ? CS_ST_UNBND : CS_ST_IDLE; /* state of line */
+    p->event = CS_NONE;
+    p->cerrno = 0;
+    p->stackerr = 0;
+
+#if HAVE_OPENSSL_SSL_H
+    state->ctx = state->ctx_alloc = 0;
+    state->ssl = 0;
+#endif
+
+    state->altbuf = 0;
+    state->altsize = state->altlen = 0;
+    state->towrite = state->written = -1;
+    if (protocol == PROTO_WAIS)
+       state->complete = completeWAIS;
+    else
+       state->complete = cs_complete_auto;
+
+    p->timeout = COMSTACK_DEFAULT_TIMEOUT;
+    TRC(fprintf(stderr, "Created new TCPIP comstack\n"));
+
+    return p;
+}
+
+#if HAVE_OPENSSL_SSL_H
+
+COMSTACK ssl_type(int s, int blocking, int protocol, void *vp)
+{
+    tcpip_state *state;
+    COMSTACK p;
+    yaz_log(LOG_LOG, "ssl_type begin");
+
+    p = tcpip_type (s, blocking, protocol, 0);
+    if (!p)
+       return 0;
+    p->f_get = ssl_get;
+    p->f_put = ssl_put;
+    p->type = ssl_type;
+    state = (tcpip_state *) p->cprivate;
+    if (vp)
+       state->ctx = vp;
+    else
+    {
+       SSL_load_error_strings();
+       SSLeay_add_all_algorithms();
+
+       state->ctx = state->ctx_alloc = SSL_CTX_new (SSLv23_method());
+       if (!state->ctx)
+       {
+           tcpip_close(p);
+           return 0;
+       }
+    }
+    /* note: we don't handle already opened socket in SSL mode - yet */
+    yaz_log(LOG_LOG, "ssl_type end");
+    return p;
+}
+#endif
+
+int tcpip_strtoaddr_ex(const char *str, struct sockaddr_in *add,
+                       int default_port)
+{
+    struct hostent *hp;
+    char *p, buf[512];
+    short int port = default_port;
+    unsigned tmpadd;
+
+    if (!tcpip_init ())
+        return 0;
+    TRC(fprintf(stderr, "tcpip_strtoaddress: %s\n", str ? str : "NULL"));
+    add->sin_family = AF_INET;
+    strncpy(buf, str, 511);
+    buf[511] = 0;
+    if ((p = strchr(buf, '/')))
+        *p = 0;
+    if ((p = strchr(buf, ':')))
+    {
+        *p = 0;
+        port = atoi(p + 1);
+    }
+    add->sin_port = htons(port);
+    if (!strcmp("@", buf))
+        add->sin_addr.s_addr = INADDR_ANY;
+    else if ((hp = gethostbyname(buf)))
+        memcpy(&add->sin_addr.s_addr, *hp->h_addr_list,
+              sizeof(struct in_addr));
+    else if ((tmpadd = (unsigned) inet_addr(buf)) != 0)
+        memcpy(&add->sin_addr.s_addr, &tmpadd, sizeof(struct in_addr));
+    else
+        return 0;
+    return 1;
+}
+
+void *tcpip_straddr(COMSTACK h, const char *str)
+{
+    tcpip_state *sp = (tcpip_state *)h->cprivate;
+    int port = 210;
+
+    if (h->protocol == PROTO_HTTP)
+        port = 80;
+
+    if (!tcpip_strtoaddr_ex (str, &sp->addr, port))
+       return 0;
+    return &sp->addr;
+}
+
+struct sockaddr_in *tcpip_strtoaddr(const char *str)
+{
+    static struct sockaddr_in add;
+    
+    if (!tcpip_strtoaddr_ex (str, &add, 210))
+       return 0;
+    return &add;
+}
+
+int tcpip_more(COMSTACK h)
+{
+    tcpip_state *sp = (tcpip_state *)h->cprivate;
+    
+    return sp->altlen && (*sp->complete)((unsigned char *) sp->altbuf,
+       sp->altlen);
+}
+
+/*
+ * connect(2) will block (sometimes) - nothing we can do short of doing
+ * weird things like spawning subprocesses or threading or some weird junk
+ * like that.
+ */
+int tcpip_connect(COMSTACK h, void *address)
+{
+    struct sockaddr_in *add = (struct sockaddr_in *)address;
+#if HAVE_OPENSSL_SSL_H
+    tcpip_state *sp = (tcpip_state *)h->cprivate;
+#endif
+    int r;
+#ifdef __sun__
+    int recbuflen;
+    YAZ_SOCKLEN_T rbufsize = sizeof(recbuflen);
+#endif
+    TRC(fprintf(stderr, "tcpip_connect\n"));
+    h->io_pending = 0;
+    if (h->state != CS_ST_UNBND)
+    {
+        h->cerrno = CSOUTSTATE;
+       return -1;
+    }
+#ifdef __sun__
+    /* On Suns, you must set a bigger Receive Buffer BEFORE a call to connect
+     * This gives the connect a chance to negotiate with the other side
+     * (see 'man tcp') 
+     */
+    if ( getsockopt(h->iofile, SOL_SOCKET, SO_RCVBUF, (void *)&recbuflen, &rbufsize ) < 0 )
+    {
+        h->cerrno = CSYSERR;
+        return -1;
+    }
+    TRC(fprintf( stderr, "Current Size of TCP Receive Buffer= %d\n",
+                recbuflen ));
+    recbuflen *= 10; /* lets be optimistic */
+    if ( setsockopt(h->iofile, SOL_SOCKET, SO_RCVBUF, (void *)&recbuflen, rbufsize ) < 0 )
+    {
+        h->cerrno = CSYSERR;
+        return -1;
+    }
+    if ( getsockopt(h->iofile, SOL_SOCKET, SO_RCVBUF, (void *)&recbuflen, &rbufsize ) )
+    {
+        h->cerrno = CSYSERR;
+        return -1;
+    }
+    TRC(fprintf( stderr, "New Size of TCP Receive Buffer = %d\n",
+                recbuflen ));
+#endif
+    r = connect(h->iofile, (struct sockaddr *) add, sizeof(*add));
+    if (r < 0)
+    {
+#ifdef WIN32
+        if (WSAGetLastError() == WSAEWOULDBLOCK)
+        {
+            h->event = CS_CONNECT;
+            h->state = CS_ST_CONNECTING;
+            h->io_pending = CS_WANT_WRITE;
+            return 1;
+        }
+#else
+        if (yaz_errno() == EINPROGRESS)
+        {
+            h->event = CS_CONNECT;
+            h->state = CS_ST_CONNECTING;
+            h->io_pending = CS_WANT_WRITE|CS_WANT_READ;
+            return 1;
+        }
+#endif
+        h->cerrno = CSYSERR;
+        return -1;
+    }
+    h->event = CS_CONNECT;
+    h->state = CS_ST_CONNECTING;
+
+    return tcpip_rcvconnect (h);
+}
+
+/*
+ * nop
+ */
+int tcpip_rcvconnect(COMSTACK h)
+{
+#if HAVE_OPENSSL_SSL_H
+    tcpip_state *sp = (tcpip_state *)h->cprivate;
+#endif
+    TRC(fprintf(stderr, "tcpip_rcvconnect\n"));
+
+    if (h->state == CS_ST_DATAXFER)
+        return 0;
+    if (h->state != CS_ST_CONNECTING)
+    {
+        h->cerrno = CSOUTSTATE;
+       return -1;
+    }
+#if HAVE_OPENSSL_SSL_H
+    if (sp->ctx)
+    {
+       int res;
+
+       if (!sp->ssl)
+       {
+           sp->ssl = SSL_new (sp->ctx);
+           SSL_set_fd (sp->ssl, h->iofile);
+       }
+       res = SSL_connect (sp->ssl);
+       if (res <= 0)
+       {
+           int err = SSL_get_error(sp->ssl, res);
+           if (err == SSL_ERROR_WANT_READ)
+           {
+               h->io_pending = CS_WANT_READ;
+               return 1;
+           }
+           if (err == SSL_ERROR_WANT_WRITE)
+           {
+               h->io_pending = CS_WANT_WRITE;
+               return 1;
+           }
+           h->cerrno = CSERRORSSL;
+           return -1;
+       }
+    }
+#endif
+    h->event = CS_DATA;
+    h->state = CS_ST_DATAXFER;
+    return 0;
+}
+
+#define CERTF "ztest.pem"
+#define KEYF "ztest.pem"
+
+static void tcpip_setsockopt (int fd)
+{
+#if 0
+    int len = 4096;
+    int set = 1;
+    
+    if (setsockopt(fd, IPPROTO_TCP, TCP_NODELAY, (char*)&set, sizeof(int)))
+    {
+        yaz_log(LOG_WARN|LOG_ERRNO, "setsockopt TCP_NODELAY");
+    }
+    if (setsockopt(fd, SOL_SOCKET, SO_SNDBUF, (char*)&len, sizeof(int)))
+    {
+        yaz_log(LOG_WARN|LOG_ERRNO, "setsockopt SNDBUF");
+    }
+    if (setsockopt(fd, SOL_SOCKET, SO_RCVBUF, (char*)&len, sizeof(int)))
+    {
+        yaz_log(LOG_WARN|LOG_ERRNO, "setsockopt RCVBUF");
+    }
+#endif
+}
+
+static int tcpip_bind(COMSTACK h, void *address, int mode)
+{
+    struct sockaddr *addr = (struct sockaddr *)address;
+#ifdef WIN32
+    BOOL one = 1;
+#else
+    unsigned long one = 1;
+#endif
+
+#if HAVE_OPENSSL_SSL_H
+    tcpip_state *sp = (tcpip_state *)h->cprivate;
+    if (sp->ctx)
+    {
+       if (sp->ctx_alloc)
+       {
+           int res;
+           res = SSL_CTX_use_certificate_file (sp->ctx, CERTF,
+                                               SSL_FILETYPE_PEM);
+           if (res <= 0)
+           {
+               ERR_print_errors_fp(stderr);
+               exit (2);
+           }
+           res = SSL_CTX_use_PrivateKey_file (sp->ctx, KEYF,
+                                              SSL_FILETYPE_PEM);
+           if (res <= 0)
+           {
+               ERR_print_errors_fp(stderr);
+               exit (3);
+           }
+           res = SSL_CTX_check_private_key (sp->ctx);
+           if (res <= 0)
+           {
+               ERR_print_errors_fp(stderr);
+               exit(5);
+           }
+       }
+       TRC (fprintf (stderr, "ssl_bind\n"));
+    }
+    else
+    {
+       TRC (fprintf (stderr, "tcpip_bind\n"));
+    }
+#else
+    TRC (fprintf (stderr, "tcpip_bind\n"));
+#endif
+#ifndef WIN32
+    if (setsockopt(h->iofile, SOL_SOCKET, SO_REUSEADDR, (char*) 
+       &one, sizeof(one)) < 0)
+    {
+        h->cerrno = CSYSERR;
+        return -1;
+    }
+#endif
+    tcpip_setsockopt(h->iofile);
+    if (bind(h->iofile, addr, sizeof(struct sockaddr_in)))
+    {
+        h->cerrno = CSYSERR;
+        return -1;
+    }
+    if (mode == CS_SERVER && listen(h->iofile, 3) < 0)
+    {
+        h->cerrno = CSYSERR;
+        return -1;
+    }
+    h->state = CS_ST_IDLE;
+    h->event = CS_LISTEN;
+    return 0;
+}
+
+int tcpip_listen(COMSTACK h, char *raddr, int *addrlen,
+                int (*check_ip)(void *cd, const char *a, int len, int t),
+                void *cd)
+{
+    struct sockaddr_in addr;
+    YAZ_SOCKLEN_T len = sizeof(addr);
+
+    TRC(fprintf(stderr, "tcpip_listen pid=%d\n", getpid()));
+    if (h->state != CS_ST_IDLE)
+    {
+        h->cerrno = CSOUTSTATE;
+        return -1;
+    }
+    h->newfd = accept(h->iofile, (struct sockaddr*)&addr, &len);
+    if (h->newfd < 0)
+    {
+       if (
+#ifdef WIN32
+           WSAGetLastError() == WSAEWOULDBLOCK
+#else
+           yaz_errno() == EWOULDBLOCK 
+#ifdef EAGAIN
+#if EAGAIN != EWOULDBLOCK
+            || yaz_errno() == EAGAIN
+#endif
+#endif
+#endif
+           )
+           h->cerrno = CSNODATA;
+       else
+           h->cerrno = CSYSERR;
+        return -1;
+    }
+    if (addrlen && (size_t) (*addrlen) >= sizeof(struct sockaddr_in))
+        memcpy(raddr, &addr, *addrlen = sizeof(struct sockaddr_in));
+    else if (addrlen)
+        *addrlen = 0;
+    if (check_ip && (*check_ip)(cd, (const char *) &addr,
+        sizeof(addr), AF_INET))
+    {
+       h->cerrno = CSDENY;
+#ifdef WIN32
+        closesocket(h->newfd);
+#else
+        close(h->newfd);
+#endif
+       h->newfd = -1;
+       return -1;
+    }
+    h->state = CS_ST_INCON;
+    tcpip_setsockopt (h->newfd);
+    return 0;
+}
+
+COMSTACK tcpip_accept(COMSTACK h)
+{
+    COMSTACK cnew;
+    tcpip_state *state, *st = (tcpip_state *)h->cprivate;
+#ifdef WIN32
+    unsigned long tru = 1;
+#endif
+
+    TRC(fprintf(stderr, "tcpip_accept\n"));
+    if (h->state == CS_ST_INCON)
+    {
+       if (!(cnew = (COMSTACK)xmalloc(sizeof(*cnew))))
+       {
+           h->cerrno = CSYSERR;
+#ifdef WIN32
+           closesocket(h->newfd);
+#else
+           close(h->newfd);
+#endif
+           h->newfd = -1;
+           return 0;
+       }
+       memcpy(cnew, h, sizeof(*h));
+       cnew->iofile = h->newfd;
+       cnew->io_pending = 0;
+       if (!(state = (tcpip_state *)
+             (cnew->cprivate = xmalloc(sizeof(tcpip_state)))))
+       {
+           h->cerrno = CSYSERR;
+           if (h->newfd != -1)
+           {
+#ifdef WIN32
+               closesocket(h->newfd);
+#else
+               close(h->newfd);
+#endif
+               h->newfd = -1;
+           }
+           return 0;
+       }
+       if (!(cnew->blocking&1) && 
+#ifdef WIN32
+           (ioctlsocket(cnew->iofile, FIONBIO, &tru) < 0)
+#else
+           (fcntl(cnew->iofile, F_SETFL, O_NONBLOCK) < 0)
+#endif
+           )
+       {
+           h->cerrno = CSYSERR;
+           if (h->newfd != -1)
+           {
+#ifdef WIN32
+               closesocket(h->newfd);
+#else
+               close(h->newfd);
+#endif
+               h->newfd = -1;
+           }
+           xfree (cnew);
+           xfree (state);
+           return 0;
+       }
+       h->newfd = -1;
+       state->altbuf = 0;
+       state->altsize = state->altlen = 0;
+       state->towrite = state->written = -1;
+       state->complete = st->complete;
+       cnew->state = CS_ST_ACCEPT;
+       h->state = CS_ST_IDLE;
+       
+#if HAVE_OPENSSL_SSL_H
+       state->ctx = st->ctx;
+       state->ctx_alloc = 0;
+       state->ssl = st->ssl;
+       if (state->ctx)
+       {
+           state->ssl = SSL_new (state->ctx);
+           SSL_set_fd (state->ssl, cnew->iofile);
+       }
+#endif
+       h = cnew;
+    }
+    if (h->state == CS_ST_ACCEPT)
+    {
+#if HAVE_OPENSSL_SSL_H
+       tcpip_state *state = (tcpip_state *)h->cprivate;
+       if (state->ctx)
+       {
+           int res = SSL_accept (state->ssl);
+           TRC(fprintf(stderr, "SSL_accept\n"));
+           if (res <= 0)
+           {
+               int err = SSL_get_error(state->ssl, res);
+               if (err == SSL_ERROR_WANT_READ)
+               {
+                   h->io_pending = CS_WANT_READ;
+                   return h;
+               }
+               if (err == SSL_ERROR_WANT_WRITE)
+               {
+                   h->io_pending = CS_WANT_WRITE;
+                   return h;
+               }
+               cs_close (h);
+               return 0;
+           }
+       }
+#endif
+    }
+    else
+    {
+        h->cerrno = CSOUTSTATE;
+        return 0;
+    }
+    h->io_pending = 0;
+    h->state = CS_ST_DATAXFER;
+    h->event = CS_DATA;
+    return h;
+}
+
+#define CS_TCPIP_BUFCHUNK 4096
+
+/*
+ * Return: -1 error, >1 good, len of buffer, ==1 incomplete buffer,
+ * 0=connection closed.
+ */
+int tcpip_get(COMSTACK h, char **buf, int *bufsize)
+{
+    tcpip_state *sp = (tcpip_state *)h->cprivate;
+    char *tmpc;
+    int tmpi, berlen, rest, req, tomove;
+    int hasread = 0, res;
+
+    TRC(fprintf(stderr, "tcpip_get: bufsize=%d\n", *bufsize));
+    if (sp->altlen) /* switch buffers */
+    {
+        TRC(fprintf(stderr, "  %d bytes in altbuf (0x%x)\n", sp->altlen,
+            (unsigned) sp->altbuf));
+        tmpc = *buf;
+        tmpi = *bufsize;
+        *buf = sp->altbuf;
+        *bufsize = sp->altsize;
+        hasread = sp->altlen;
+        sp->altlen = 0;
+        sp->altbuf = tmpc;
+        sp->altsize = tmpi;
+    }
+    h->io_pending = 0;
+    while (!(berlen = (*sp->complete)((unsigned char *)*buf, hasread)))
+    {
+        if (!*bufsize)
+        {
+            if (!(*buf = (char *)xmalloc(*bufsize = CS_TCPIP_BUFCHUNK)))
+                return -1;
+        }
+        else if (*bufsize - hasread < CS_TCPIP_BUFCHUNK)
+            if (!(*buf =(char *)xrealloc(*buf, *bufsize *= 2)))
+                return -1;
+#ifdef __sun__
+       yaz_set_errno( 0 );
+       /* unfortunatly, sun sometimes forgets to set errno in recv
+          when EWOULDBLOCK etc. would be required (res = -1) */
+#endif
+       res = recv(h->iofile, *buf + hasread, CS_TCPIP_BUFCHUNK, 0);
+       TRC(fprintf(stderr, "  recv res=%d, hasread=%d\n", res, hasread));
+       if (res < 0)
+       {
+         TRC(fprintf(stderr, "  recv errno=%d, (%s)\n", yaz_errno(), 
+                     strerror(yaz_errno())));
+#ifdef WIN32
+           if (WSAGetLastError() == WSAEWOULDBLOCK)
+           {
+               h->io_pending = CS_WANT_READ;
+               break;
+           }
+           else
+               return -1;
+#else
+           if (yaz_errno() == EWOULDBLOCK 
+#ifdef EAGAIN   
+#if EAGAIN != EWOULDBLOCK
+                || yaz_errno() == EAGAIN
+#endif
+#endif
+               || yaz_errno() == EINPROGRESS
+#ifdef __sun__
+               || yaz_errno() == ENOENT /* Sun's sometimes set errno to this */
+#endif
+               )
+           {
+               h->io_pending = CS_WANT_READ;
+               break;
+           }
+           else if (yaz_errno() == 0)
+               continue;
+           else
+               return -1;
+#endif
+       }
+       else if (!res)
+           return 0;
+        hasread += res;
+    }
+    TRC (fprintf (stderr, "  Out of read loop with hasread=%d, berlen=%d\n",
+                 hasread, berlen));
+    /* move surplus buffer (or everything if we didn't get a BER rec.) */
+    if (hasread > berlen)
+    {
+        tomove = req = hasread - berlen;
+        rest = tomove % CS_TCPIP_BUFCHUNK;
+        if (rest)
+            req += CS_TCPIP_BUFCHUNK - rest;
+        if (!sp->altbuf)
+        {
+            if (!(sp->altbuf = (char *)xmalloc(sp->altsize = req)))
+                return -1;
+        } else if (sp->altsize < req)
+            if (!(sp->altbuf =(char *)xrealloc(sp->altbuf, sp->altsize = req)))
+                return -1;
+        TRC(fprintf(stderr, "  Moving %d bytes to altbuf(0x%x)\n", tomove,
+            (unsigned) sp->altbuf));
+        memcpy(sp->altbuf, *buf + berlen, sp->altlen = tomove);
+    }
+    if (berlen < CS_TCPIP_BUFCHUNK - 1)
+        *(*buf + berlen) = '\0';
+    return berlen ? berlen : 1;
+}
+
+
+#if HAVE_OPENSSL_SSL_H
+/*
+ * Return: -1 error, >1 good, len of buffer, ==1 incomplete buffer,
+ * 0=connection closed.
+ */
+int ssl_get(COMSTACK h, char **buf, int *bufsize)
+{
+    tcpip_state *sp = (tcpip_state *)h->cprivate;
+    char *tmpc;
+    int tmpi, berlen, rest, req, tomove;
+    int hasread = 0, res;
+
+    TRC(fprintf(stderr, "ssl_get: bufsize=%d\n", *bufsize));
+    if (sp->altlen) /* switch buffers */
+    {
+        TRC(fprintf(stderr, "  %d bytes in altbuf (0x%x)\n", sp->altlen,
+            (unsigned) sp->altbuf));
+        tmpc = *buf;
+        tmpi = *bufsize;
+        *buf = sp->altbuf;
+        *bufsize = sp->altsize;
+        hasread = sp->altlen;
+        sp->altlen = 0;
+        sp->altbuf = tmpc;
+        sp->altsize = tmpi;
+    }
+    h->io_pending = 0;
+    while (!(berlen = (*sp->complete)((unsigned char *)*buf, hasread)))
+    {
+        if (!*bufsize)
+        {
+            if (!(*buf = (char *)xmalloc(*bufsize = CS_TCPIP_BUFCHUNK)))
+                return -1;
+        }
+        else if (*bufsize - hasread < CS_TCPIP_BUFCHUNK)
+            if (!(*buf =(char *)xrealloc(*buf, *bufsize *= 2)))
+                return -1;
+       res = SSL_read (sp->ssl, *buf + hasread, CS_TCPIP_BUFCHUNK);
+       TRC(fprintf(stderr, "  SSL_read res=%d, hasread=%d\n", res, hasread));
+       if (res <= 0)
+       {
+           int ssl_err = SSL_get_error(sp->ssl, res);
+           if (ssl_err == SSL_ERROR_WANT_READ)
+           {
+               h->io_pending = CS_WANT_READ;
+               break;
+           }
+           if (ssl_err == SSL_ERROR_WANT_WRITE)
+           {
+               h->io_pending = CS_WANT_WRITE;
+               break;
+           }
+           if (res == 0)
+               return 0;
+           h->cerrno = CSERRORSSL;
+           return -1;
+       }
+       hasread += res;
+    }
+    TRC (fprintf (stderr, "  Out of read loop with hasread=%d, berlen=%d\n",
+        hasread, berlen));
+    /* move surplus buffer (or everything if we didn't get a BER rec.) */
+    if (hasread > berlen)
+    {
+        tomove = req = hasread - berlen;
+        rest = tomove % CS_TCPIP_BUFCHUNK;
+        if (rest)
+            req += CS_TCPIP_BUFCHUNK - rest;
+        if (!sp->altbuf)
+        {
+            if (!(sp->altbuf = (char *)xmalloc(sp->altsize = req)))
+                return -1;
+        } else if (sp->altsize < req)
+            if (!(sp->altbuf =(char *)xrealloc(sp->altbuf, sp->altsize = req)))
+                return -1;
+        TRC(fprintf(stderr, "  Moving %d bytes to altbuf(0x%x)\n", tomove,
+            (unsigned) sp->altbuf));
+        memcpy(sp->altbuf, *buf + berlen, sp->altlen = tomove);
+    }
+    if (berlen < CS_TCPIP_BUFCHUNK - 1)
+        *(*buf + berlen) = '\0';
+    return berlen ? berlen : 1;
+}
+#endif
+
+/*
+ * Returns 1, 0 or -1
+ * In nonblocking mode, you must call again with same buffer while
+ * return value is 1.
+ */
+int tcpip_put(COMSTACK h, char *buf, int size)
+{
+    int res;
+    struct tcpip_state *state = (struct tcpip_state *)h->cprivate;
+
+    TRC(fprintf(stderr, "tcpip_put: size=%d\n", size));
+    h->io_pending = 0;
+    h->event = CS_DATA;
+    if (state->towrite < 0)
+    {
+        state->towrite = size;
+        state->written = 0;
+    }
+    else if (state->towrite != size)
+    {
+        h->cerrno = CSWRONGBUF;
+        return -1;
+    }
+    while (state->towrite > state->written)
+    {
+       if ((res =
+            send(h->iofile, buf + state->written, size -
+                 state->written, 
+#ifdef MSG_NOSIGNAL
+                 MSG_NOSIGNAL
+#else
+                 0
+#endif
+                )) < 0)
+       {
+           if (
+#ifdef WIN32
+               WSAGetLastError() == WSAEWOULDBLOCK
+#else
+               yaz_errno() == EWOULDBLOCK 
+#ifdef EAGAIN
+#if EAGAIN != EWOULDBLOCK
+             || yaz_errno() == EAGAIN
+#endif
+#endif
+#ifdef __sun__
+                || yaz_errno() == ENOENT /* Sun's sometimes set errno to this value! */
+#endif
+               || yaz_errno() == EINPROGRESS
+#endif
+               )
+           {
+               TRC(fprintf(stderr, "  Flow control stop\n"));
+               h->io_pending = CS_WANT_WRITE;
+               return 1;
+           }
+           h->cerrno = CSYSERR;
+           return -1;
+       }
+       state->written += res;
+       TRC(fprintf(stderr, "  Wrote %d, written=%d, nbytes=%d\n",
+                   res, state->written, size));
+    }
+    state->towrite = state->written = -1;
+    TRC(fprintf(stderr, "  Ok\n"));
+    return 0;
+}
+
+
+#if HAVE_OPENSSL_SSL_H
+/*
+ * Returns 1, 0 or -1
+ * In nonblocking mode, you must call again with same buffer while
+ * return value is 1.
+ */
+int ssl_put(COMSTACK h, char *buf, int size)
+{
+    int res;
+    struct tcpip_state *state = (struct tcpip_state *)h->cprivate;
+
+    TRC(fprintf(stderr, "ssl_put: size=%d\n", size));
+    h->io_pending = 0;
+    h->event = CS_DATA;
+    if (state->towrite < 0)
+    {
+        state->towrite = size;
+        state->written = 0;
+    }
+    else if (state->towrite != size)
+    {
+        h->cerrno = CSWRONGBUF;
+        return -1;
+    }
+    while (state->towrite > state->written)
+    {
+       res = SSL_write (state->ssl, buf + state->written,
+                        size - state->written);
+       if (res <= 0)
+       {
+           int ssl_err = SSL_get_error(state->ssl, res);
+           if (ssl_err == SSL_ERROR_WANT_READ)
+           {
+               h->io_pending = CS_WANT_READ;
+               return 1;
+           }
+           if (ssl_err == SSL_ERROR_WANT_WRITE)
+           {
+               h->io_pending = CS_WANT_WRITE;
+               return 1;
+           }
+           h->cerrno = CSERRORSSL;
+           return -1;
+       }
+       state->written += res;
+       TRC(fprintf(stderr, "  Wrote %d, written=%d, nbytes=%d\n",
+                   res, state->written, size));
+    }
+    state->towrite = state->written = -1;
+    TRC(fprintf(stderr, "  Ok\n"));
+    return 0;
+}
+#endif
+
+int tcpip_close(COMSTACK h)
+{
+    tcpip_state *sp = (struct tcpip_state *)h->cprivate;
+
+    TRC(fprintf(stderr, "tcpip_close\n"));
+    if (h->iofile != -1)
+    {
+#if HAVE_OPENSSL_SSL_H
+       if (sp->ssl)
+       {
+           SSL_shutdown (sp->ssl);
+       }
+#endif
+#ifdef WIN32
+        closesocket(h->iofile);
+#else
+        close(h->iofile);
+#endif
+    }
+    if (sp->altbuf)
+        xfree(sp->altbuf);
+#if HAVE_OPENSSL_SSL_H
+    if (sp->ssl)
+    {
+       TRC (fprintf(stderr, "SSL_free\n"));
+       SSL_free (sp->ssl);
+    }
+    sp->ssl = 0;
+    if (sp->ctx_alloc)
+       SSL_CTX_free (sp->ctx_alloc);
+#endif
+    xfree(sp);
+    xfree(h);
+    return 0;
+}
+
+char *tcpip_addrstr(COMSTACK h)
+{
+    struct sockaddr_in addr;
+    tcpip_state *sp = (struct tcpip_state *)h->cprivate;
+    char *r = 0, *buf = sp->buf;
+    YAZ_SOCKLEN_T len;
+    struct hostent *host;
+    
+    len = sizeof(addr);
+    if (getpeername(h->iofile, (struct sockaddr*) &addr, &len) < 0)
+    {
+       h->cerrno = CSYSERR;
+       return 0;
+    }
+    if (!(h->blocking&2)) {
+        if ((host = gethostbyaddr((char*)&addr.sin_addr, sizeof(addr.sin_addr),
+                             AF_INET)))
+           r = (char*) host->h_name;
+    }
+    if (!r)
+       r = inet_ntoa(addr.sin_addr);
+    if (h->protocol == PROTO_HTTP)
+        sprintf(buf, "http:%s", r);
+    else
+        sprintf(buf, "tcp:%s", r);
+#if HAVE_OPENSSL_SSL_H
+    if (sp->ctx)
+    {
+        if (h->protocol == PROTO_HTTP)
+            sprintf(buf, "https:%s", r);
+        else
+            sprintf(buf, "ssl:%s", r);
+    }
+#endif
+    return buf;
+}
+
+int static tcpip_set_blocking(COMSTACK p, int blocking)
+{
+    unsigned long flag;
+    
+    if (p->blocking == blocking)
+       return 1;
+#ifdef WIN32
+    flag = 1;
+    if (ioctlsocket(p->iofile, FIONBIO, &flag) < 0)
+       return 0;
+#else
+    flag = fcntl(p->iofile, F_GETFL, 0);
+    if(!(blocking&1))
+       flag = flag & ~O_NONBLOCK;
+    else
+        flag = flag | O_NONBLOCK;
+    if (fcntl(p->iofile, F_SETFL, flag) < 0)
+       return 0;
+#endif
+    p->blocking = blocking;
+    return 1;
+}
diff --git a/src/tpath.c b/src/tpath.c
new file mode 100644 (file)
index 0000000..58ac639
--- /dev/null
@@ -0,0 +1,91 @@
+/*
+ * Copyright (c) 1995-2003, Index Data.
+ * See the file LICENSE for details.
+ * Sebastian Hammer, Adam Dickmeiss
+ *
+ * $Id: tpath.c,v 1.1 2003-10-27 12:21:35 adam Exp $
+ */
+#if HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+
+#include <stdio.h>
+#include <string.h>
+#include <ctype.h>
+#include <yaz/tpath.h>
+#include <yaz/log.h>
+
+FILE *yaz_path_fopen(const char *path, const char *name, const char *mode)
+{
+    return yaz_fopen (path, name, mode, 0);
+}
+
+int yaz_fclose (FILE *f)
+{
+    return fclose (f);
+}
+
+FILE *yaz_fopen(const char *path, const char *name, const char *mode,
+                const char *base)
+{
+    char spath[1024];
+
+    for(;;)
+    {
+       FILE *f;
+
+        const char *path_sep = 0;
+        size_t len = 0;
+        size_t slen = 0;
+        
+        *spath = '\0';
+        if (path)
+        {
+            /* somewhat dirty since we have to consider Windows
+             * drive letters..
+             */
+            if (strchr ("/\\.", *path))
+            {
+                path_sep = strchr (path+1, ':');
+            }
+            else if (path[0] && path[1])
+                path_sep = strchr (path+2, ':');
+            if (path_sep)
+                len = path_sep - path;
+            else
+                len = strlen(path);
+            if (!strchr ("/\\", *path) && base)
+            {
+                strcpy (spath, base);
+                slen = strlen(spath);
+                spath[slen++] = '/';
+            }
+            memcpy (spath+slen, path, len);
+            slen += len;
+            if (!strchr("/\\", spath[slen-1]))
+                spath[slen++] = '/';
+        }
+        strcpy (spath+slen, name);
+       if ((f = fopen(spath, mode)))
+           return f;
+        
+        if (!path_sep)
+            break;
+        path = path_sep+1;
+    }
+    return 0;
+}
+
+int yaz_is_abspath (const char *p)
+{
+    if (*p == '/')
+        return 1;
+#ifdef WIN32
+    if (*p == '\\')
+        return 1;
+    if (*p && p[1] == ':' && isalpha(*p))
+        return 1;
+#endif
+    return 0;
+}
diff --git a/src/univres.asn b/src/univres.asn
new file mode 100644 (file)
index 0000000..f83320d
--- /dev/null
@@ -0,0 +1,23 @@
+ResourceReport-Format-Universe-1
+{Z39-50-resourceReport universe-1 (1000)} DEFINITIONS ::=
+BEGIN
+IMPORTS StringOrNumeric FROM Z39-50-APDU-1995;
+--
+
+UniverseReportHits ::= SEQUENCE {
+       database        StringOrNumeric,
+       hits    StringOrNumeric
+}
+
+UniverseReportDuplicate ::= SEQUENCE {
+       hitno StringOrNumeric
+}
+
+UniverseReport ::= SEQUENCE {
+       totalHits INTEGER,
+       report CHOICE {
+               databaseHits    [0] IMPLICIT UniverseReportHits,
+               duplicate               [1] IMPLICIT UniverseReportDuplicate
+       }
+}
+END
diff --git a/src/unix.c b/src/unix.c
new file mode 100644 (file)
index 0000000..2c1c979
--- /dev/null
@@ -0,0 +1,601 @@
+/*
+ * Copyright (c) 1995-2003, Index Data
+ * See the file LICENSE for details.
+ *
+ * $Id: unix.c,v 1.1 2003-10-27 12:21:36 adam Exp $
+ * UNIX socket COMSTACK. By Morten Bøgeskov.
+ */
+#ifndef WIN32
+
+#include <stdio.h>
+#include <string.h>
+#include <stdlib.h>
+#include <unistd.h>
+#include <errno.h>
+#include <fcntl.h>
+#include <signal.h>
+
+#include <sys/socket.h>
+#include <sys/stat.h>
+#include <sys/un.h>
+
+#include <yaz/comstack.h>
+#include <yaz/unix.h>
+#include <yaz/log.h>
+#include <yaz/nmem.h>
+
+#ifndef YAZ_SOCKLEN_T
+#define YAZ_SOCKLEN_T int
+#endif
+
+static int unix_close(COMSTACK h);
+static int unix_put(COMSTACK h, char *buf, int size);
+static int unix_get(COMSTACK h, char **buf, int *bufsize);
+static int unix_connect(COMSTACK h, void *address);
+static int unix_more(COMSTACK h);
+static int unix_rcvconnect(COMSTACK h);
+static int unix_bind(COMSTACK h, void *address, int mode);
+static int unix_listen(COMSTACK h, char *raddr, int *addrlen,
+               int (*check_ip)(void *cd, const char *a, int len, int type),
+               void *cd);
+static int unix_set_blocking(COMSTACK p, int blocking);
+
+static COMSTACK unix_accept(COMSTACK h);
+static char *unix_addrstr(COMSTACK h);
+static void *unix_straddr(COMSTACK h, const char *str);
+
+#ifndef SUN_LEN
+#define SUN_LEN(ptr) ((size_t) (((struct sockaddr_un *) 0)->sun_path) \
+                     + strlen ((ptr)->sun_path))
+#endif
+#if 0
+#define TRC(x) x
+#else
+#define TRC(X)
+#endif
+
+/* this state is used for both SSL and straight TCP/IP */
+typedef struct unix_state
+{
+    char *altbuf; /* alternate buffer for surplus data */
+    int altsize;  /* size as xmalloced */
+    int altlen;   /* length of data or 0 if none */
+
+    int written;  /* -1 if we aren't writing */
+    int towrite;  /* to verify against user input */
+    int (*complete)(const unsigned char *buf, int len); /* length/comple. */
+    struct sockaddr_un addr;  /* returned by cs_straddr */
+    char buf[128]; /* returned by cs_addrstr */
+} unix_state;
+
+static int unix_init (void)
+{
+    return 1;
+}
+
+/*
+ * This function is always called through the cs_create() macro.
+ * s >= 0: socket has already been established for us.
+ */
+COMSTACK unix_type(int s, int blocking, int protocol, void *vp)
+{
+    COMSTACK p;
+    unix_state *state;
+    int new_socket;
+
+    if (!unix_init ())
+       return 0;
+    if (s < 0)
+    {
+       if ((s = socket(AF_UNIX, SOCK_STREAM, 0)) < 0)
+           return 0;
+       new_socket = 1;
+    }
+    else
+       new_socket = 0;
+    if (!(p = (struct comstack *)xmalloc(sizeof(struct comstack))))
+       return 0;
+    if (!(state = (struct unix_state *)(p->cprivate =
+                                       xmalloc(sizeof(unix_state)))))
+       return 0;
+
+    if (!((p->blocking = blocking)&1))
+    {
+       if (fcntl(s, F_SETFL, O_NONBLOCK) < 0)
+           return 0;
+#ifndef MSG_NOSIGNAL
+       signal (SIGPIPE, SIG_IGN);
+#endif
+    }
+
+    p->io_pending = 0;
+    p->iofile = s;
+    p->type = unix_type;
+    p->protocol = (enum oid_proto) protocol;
+
+    p->f_connect = unix_connect;
+    p->f_rcvconnect = unix_rcvconnect;
+    p->f_get = unix_get;
+    p->f_put = unix_put;
+    p->f_close = unix_close;
+    p->f_more = unix_more;
+    p->f_bind = unix_bind;
+    p->f_listen = unix_listen;
+    p->f_accept = unix_accept;
+    p->f_addrstr = unix_addrstr;
+    p->f_straddr = unix_straddr;
+    p->f_set_blocking = unix_set_blocking;
+
+    p->state = new_socket ? CS_ST_UNBND : CS_ST_IDLE; /* state of line */
+    p->event = CS_NONE;
+    p->cerrno = 0;
+    p->stackerr = 0;
+
+    state->altbuf = 0;
+    state->altsize = state->altlen = 0;
+    state->towrite = state->written = -1;
+    if (protocol == PROTO_WAIS)
+       state->complete = completeWAIS;
+    else
+       state->complete = cs_complete_auto;
+
+    p->timeout = COMSTACK_DEFAULT_TIMEOUT;
+    TRC(fprintf(stderr, "Created new UNIX comstack\n"));
+
+    return p;
+}
+
+
+static int unix_strtoaddr_ex(const char *str, struct sockaddr_un *add)
+{
+    char *cp;
+    if (!unix_init ())
+       return 0;
+    TRC(fprintf(stderr, "unix_strtoaddress: %s\n", str ? str : "NULL"));
+    add->sun_family = AF_UNIX;
+    strncpy(add->sun_path, str, sizeof(add->sun_path));
+    cp = strchr (add->sun_path, ':');
+    if (cp)
+       *cp = '\0';
+    return 1;
+}
+
+static void *unix_straddr(COMSTACK h, const char *str)
+{
+    unix_state *sp = (unix_state *)h->cprivate;
+
+    TRC(fprintf(stderr, "unix_straddr: %s\n", str ? str : "NULL"));
+
+    if (!unix_strtoaddr_ex (str, &sp->addr))
+       return 0;
+    return &sp->addr;
+}
+
+struct sockaddr_un *unix_strtoaddr(const char *str)
+{
+    static struct sockaddr_un add;
+
+    TRC(fprintf(stderr, "unix_strtoaddr: %s\n", str ? str : "NULL"));
+
+    if (!unix_strtoaddr_ex (str, &add))
+       return 0;
+    return &add;
+}
+
+static int unix_more(COMSTACK h)
+{
+    unix_state *sp = (unix_state *)h->cprivate;
+
+    return sp->altlen && (*sp->complete)((unsigned char *) sp->altbuf,
+                                        sp->altlen);
+}
+
+/*
+ * connect(2) will block (sometimes) - nothing we can do short of doing
+ * weird things like spawning subprocesses or threading or some weird junk
+ * like that.
+ */
+static int unix_connect(COMSTACK h, void *address)
+{
+    struct sockaddr_un *add = (struct sockaddr_un *)address;
+    int r;
+
+    TRC(fprintf(stderr, "unix_connect\n"));
+    h->io_pending = 0;
+    if (h->state != CS_ST_UNBND)
+    {
+       h->cerrno = CSOUTSTATE;
+       return -1;
+    }
+    r = connect(h->iofile, (struct sockaddr *) add, SUN_LEN(add));
+    if (r < 0)
+    {
+       if (yaz_errno() == EINPROGRESS)
+       {
+           h->event = CS_CONNECT;
+           h->state = CS_ST_CONNECTING;
+           h->io_pending = CS_WANT_WRITE|CS_WANT_READ;
+           return 1;
+       }
+       h->cerrno = CSYSERR;
+       return -1;
+    }
+    h->event = CS_CONNECT;
+    h->state = CS_ST_CONNECTING;
+
+    return unix_rcvconnect (h);
+}
+
+/*
+ * nop
+ */
+static int unix_rcvconnect(COMSTACK h)
+{
+    TRC(fprintf(stderr, "unix_rcvconnect\n"));
+
+    if (h->state == CS_ST_DATAXFER)
+       return 0;
+    if (h->state != CS_ST_CONNECTING)
+    {
+       h->cerrno = CSOUTSTATE;
+       return -1;
+    }
+    h->event = CS_DATA;
+    h->state = CS_ST_DATAXFER;
+    return 0;
+}
+
+#define CERTF "ztest.pem"
+#define KEYF "ztest.pem"
+
+static int unix_bind(COMSTACK h, void *address, int mode)
+{
+    struct sockaddr *addr = (struct sockaddr *)address;
+    const char * path = ((struct sockaddr_un *)addr)->sun_path;
+    struct stat stat_buf;
+
+    TRC (fprintf (stderr, "unix_bind\n"));
+
+    if(stat(path, &stat_buf) != -1) {
+       struct sockaddr_un socket_unix;
+       int socket_out = -1;
+       if(! S_ISSOCK(stat_buf.st_mode)) {
+           h->cerrno = CSYSERR;
+           yaz_set_errno(EEXIST); /* Not a socket (File exists) */
+           return -1;
+       }
+       if((socket_out = socket(AF_UNIX, SOCK_STREAM, 0)) < 0) {
+           h->cerrno = CSYSERR;
+           return -1;
+       }
+       socket_unix.sun_family = AF_UNIX;
+       strncpy(socket_unix.sun_path, path, sizeof(socket_unix.sun_path));
+       if(connect(socket_out, (struct sockaddr *) &socket_unix, SUN_LEN(&socket_unix)) < 0) {
+           if(yaz_errno() == ECONNREFUSED) {
+               TRC (fprintf (stderr, "Socket exists but nobody is listening\n"));
+           } else {
+               h->cerrno = CSYSERR;
+               return -1;
+           }
+       } else {
+           close(socket_out);
+           h->cerrno = CSYSERR;
+           yaz_set_errno(EADDRINUSE);
+           return -1;
+       }
+       unlink(path);
+    }
+
+    if (bind(h->iofile, (struct sockaddr *) addr, SUN_LEN((struct sockaddr_un *)addr)))
+    {
+       h->cerrno = CSYSERR;
+       return -1;
+    }
+    chmod(path, 0777);
+    if (mode == CS_SERVER && listen(h->iofile, 3) < 0)
+    {
+       h->cerrno = CSYSERR;
+       return -1;
+    }
+    h->state = CS_ST_IDLE;
+    h->event = CS_LISTEN;
+    return 0;
+}
+
+static int unix_listen(COMSTACK h, char *raddr, int *addrlen,
+                    int (*check_ip)(void *cd, const char *a, int len, int t),
+                   void *cd)
+{
+    struct sockaddr_un addr;
+    YAZ_SOCKLEN_T len = sizeof(addr);
+
+    TRC(fprintf(stderr, "unix_listen pid=%d\n", getpid()));
+    if (h->state != CS_ST_IDLE)
+    {
+       h->cerrno = CSOUTSTATE;
+       return -1;
+    }
+    h->newfd = accept(h->iofile, (struct sockaddr*)&addr, &len);
+    if (h->newfd < 0)
+    {
+       if (
+           yaz_errno() == EWOULDBLOCK
+#ifdef EAGAIN
+#if EAGAIN != EWOULDBLOCK
+           || yaz_errno() == EAGAIN
+#endif
+#endif
+           )
+           h->cerrno = CSNODATA;
+       else
+           h->cerrno = CSYSERR;
+       return -1;
+    }
+    if (addrlen && (size_t) (*addrlen) >= sizeof(struct sockaddr_un))
+       memcpy(raddr, &addr, *addrlen = sizeof(struct sockaddr_un));
+    else if (addrlen)
+       *addrlen = 0;
+    h->state = CS_ST_INCON;
+    return 0;
+}
+
+static COMSTACK unix_accept(COMSTACK h)
+{
+    COMSTACK cnew;
+    unix_state *state, *st = (unix_state *)h->cprivate;
+
+    TRC(fprintf(stderr, "unix_accept\n"));
+    if (h->state == CS_ST_INCON)
+    {
+       if (!(cnew = (COMSTACK)xmalloc(sizeof(*cnew))))
+       {
+           h->cerrno = CSYSERR;
+           close(h->newfd);
+           h->newfd = -1;
+           return 0;
+       }
+       memcpy(cnew, h, sizeof(*h));
+       cnew->iofile = h->newfd;
+       cnew->io_pending = 0;
+       if (!(state = (unix_state *)
+             (cnew->cprivate = xmalloc(sizeof(unix_state)))))
+       {
+           h->cerrno = CSYSERR;
+           if (h->newfd != -1)
+           {
+               close(h->newfd);
+               h->newfd = -1;
+           }
+           return 0;
+       }
+       if (!(cnew->blocking&1) && 
+            (fcntl(cnew->iofile, F_SETFL, O_NONBLOCK) < 0)
+           )
+       {
+           h->cerrno = CSYSERR;
+           if (h->newfd != -1)
+           {
+               close(h->newfd);
+               h->newfd = -1;
+           }
+           xfree (cnew);
+           xfree (state);
+           return 0;
+       }
+       h->newfd = -1;
+       state->altbuf = 0;
+       state->altsize = state->altlen = 0;
+       state->towrite = state->written = -1;
+       state->complete = st->complete;
+       memcpy(&state->addr, &st->addr, sizeof(state->addr));
+       cnew->state = CS_ST_ACCEPT;
+       cnew->event = CS_NONE;
+       h->state = CS_ST_IDLE;
+
+       h = cnew;
+    }
+    if (h->state == CS_ST_ACCEPT)
+    {
+    }
+    else
+    {
+       h->cerrno = CSOUTSTATE;
+       return 0;
+    }
+    h->io_pending = 0;
+    h->state = CS_ST_DATAXFER;
+    h->event = CS_DATA;
+    return h;
+}
+
+#define CS_UNIX_BUFCHUNK 4096
+
+/*
+ * Return: -1 error, >1 good, len of buffer, ==1 incomplete buffer,
+ * 0=connection closed.
+ */
+static int unix_get(COMSTACK h, char **buf, int *bufsize)
+{
+    unix_state *sp = (unix_state *)h->cprivate;
+    char *tmpc;
+    int tmpi, berlen, rest, req, tomove;
+    int hasread = 0, res;
+
+    TRC(fprintf(stderr, "unix_get: bufsize=%d\n", *bufsize));
+    if (sp->altlen) /* switch buffers */
+    {
+       TRC(fprintf(stderr, "  %d bytes in altbuf (0x%x)\n", sp->altlen,
+                   (unsigned) sp->altbuf));
+       tmpc = *buf;
+       tmpi = *bufsize;
+       *buf = sp->altbuf;
+       *bufsize = sp->altsize;
+       hasread = sp->altlen;
+       sp->altlen = 0;
+       sp->altbuf = tmpc;
+       sp->altsize = tmpi;
+    }
+    h->io_pending = 0;
+    while (!(berlen = (*sp->complete)((unsigned char *)*buf, hasread)))
+    {
+       if (!*bufsize)
+       {
+           if (!(*buf = (char *)xmalloc(*bufsize = CS_UNIX_BUFCHUNK)))
+               return -1;
+       }
+       else if (*bufsize - hasread < CS_UNIX_BUFCHUNK)
+           if (!(*buf =(char *)xrealloc(*buf, *bufsize *= 2)))
+               return -1;
+       res = recv(h->iofile, *buf + hasread, CS_UNIX_BUFCHUNK, 0);
+       TRC(fprintf(stderr, "  recv res=%d, hasread=%d\n", res, hasread));
+       if (res < 0)
+       {
+           if (yaz_errno() == EWOULDBLOCK
+#ifdef EAGAIN
+#if EAGAIN != EWOULDBLOCK
+               || yaz_errno() == EAGAIN
+#endif
+#endif
+               || yaz_errno() == EINPROGRESS
+               )
+           {
+               h->io_pending = CS_WANT_READ;
+               break;
+           }
+           else if (yaz_errno() == 0)
+               continue;
+           else
+               return -1;
+       }
+       else if (!res)
+           return 0;
+       hasread += res;
+    }
+    TRC (fprintf (stderr, "  Out of read loop with hasread=%d, berlen=%d\n",
+                 hasread, berlen));
+    /* move surplus buffer (or everything if we didn't get a BER rec.) */
+    if (hasread > berlen)
+    {
+       tomove = req = hasread - berlen;
+       rest = tomove % CS_UNIX_BUFCHUNK;
+       if (rest)
+           req += CS_UNIX_BUFCHUNK - rest;
+       if (!sp->altbuf)
+       {
+           if (!(sp->altbuf = (char *)xmalloc(sp->altsize = req)))
+               return -1;
+       } else if (sp->altsize < req)
+           if (!(sp->altbuf =(char *)xrealloc(sp->altbuf, sp->altsize = req)))
+               return -1;
+       TRC(fprintf(stderr, "  Moving %d bytes to altbuf(0x%x)\n", tomove,
+                   (unsigned) sp->altbuf));
+       memcpy(sp->altbuf, *buf + berlen, sp->altlen = tomove);
+    }
+    if (berlen < CS_UNIX_BUFCHUNK - 1)
+       *(*buf + berlen) = '\0';
+    return berlen ? berlen : 1;
+}
+
+
+
+/*
+ * Returns 1, 0 or -1
+ * In nonblocking mode, you must call again with same buffer while
+ * return value is 1.
+ */
+static int unix_put(COMSTACK h, char *buf, int size)
+{
+    int res;
+    struct unix_state *state = (struct unix_state *)h->cprivate;
+
+    TRC(fprintf(stderr, "unix_put: size=%d\n", size));
+    h->io_pending = 0;
+    h->event = CS_DATA;
+    if (state->towrite < 0)
+    {
+       state->towrite = size;
+       state->written = 0;
+    }
+    else if (state->towrite != size)
+    {
+       h->cerrno = CSWRONGBUF;
+       return -1;
+    }
+    while (state->towrite > state->written)
+    {
+       if ((res =
+            send(h->iofile, buf + state->written, size -
+                 state->written,
+#ifdef MSG_NOSIGNAL
+                 MSG_NOSIGNAL
+#else
+                 0
+#endif
+                )) < 0)
+       {
+           if (
+               yaz_errno() == EWOULDBLOCK
+#ifdef EAGAIN
+#if EAGAIN != EWOULDBLOCK
+               || yaz_errno() == EAGAIN
+#endif
+#endif
+               )
+           {
+               TRC(fprintf(stderr, "  Flow control stop\n"));
+               h->io_pending = CS_WANT_WRITE;
+               return 1;
+           }
+           h->cerrno = CSYSERR;
+           return -1;
+       }
+       state->written += res;
+       TRC(fprintf(stderr, "  Wrote %d, written=%d, nbytes=%d\n",
+                   res, state->written, size));
+    }
+    state->towrite = state->written = -1;
+    TRC(fprintf(stderr, "  Ok\n"));
+    return 0;
+}
+
+static int unix_close(COMSTACK h)
+{
+    unix_state *sp = (struct unix_state *)h->cprivate;
+
+    TRC(fprintf(stderr, "unix_close\n"));
+    if (h->iofile != -1)
+    {
+       close(h->iofile);
+    }
+    if (sp->altbuf)
+       xfree(sp->altbuf);
+    xfree(sp);
+    xfree(h);
+    return 0;
+}
+
+static char *unix_addrstr(COMSTACK h)
+{
+    unix_state *sp = (struct unix_state *)h->cprivate;
+    char *buf = sp->buf;
+    sprintf(buf, "unix:%s", sp->addr.sun_path);
+    return buf;
+}
+
+static int unix_set_blocking(COMSTACK p, int blocking)
+{
+    unsigned long flag;
+
+    if (p->blocking == blocking)
+       return 1;
+    flag = fcntl(p->iofile, F_GETFL, 0);
+    if(!blocking)
+       flag = flag & ~O_NONBLOCK;
+    else
+       flag = flag | O_NONBLOCK;
+    if (fcntl(p->iofile, F_SETFL, flag) < 0)
+       return 0;
+    p->blocking = blocking;
+    return 1;
+}
+#endif
diff --git a/src/version.c b/src/version.c
new file mode 100644 (file)
index 0000000..a819d2c
--- /dev/null
@@ -0,0 +1,22 @@
+/*
+ * Copyright (c) 1995-2003, Index Data.
+ * See the file LICENSE for details.
+ * Sebastian Hammer, Adam Dickmeiss
+ *
+ * $Id: version.c,v 1.1 2003-10-27 12:21:36 adam Exp $
+ */
+#if HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include <string.h>
+#include <yaz/yaz-version.h>
+
+unsigned long yaz_version(char *version_str, char *sys_str)
+{
+    if (version_str)
+        strcpy(version_str, YAZ_VERSION);
+    if (sys_str)
+        strcpy(sys_str, "");
+    return YAZ_VERSIONL;
+}
diff --git a/src/waislen.c b/src/waislen.c
new file mode 100644 (file)
index 0000000..38ddf0a
--- /dev/null
@@ -0,0 +1,49 @@
+/*
+ * Copyright (c) 1995-1999, Index Data.
+ * See the file LICENSE for details.
+ * Sebastian Hammer, Adam Dickmeiss
+ *
+ * $Log: waislen.c,v $
+ * Revision 1.1  2003-10-27 12:21:36  adam
+ * Source restructure. yaz-marcdump part of installation
+ *
+ * Revision 1.5  1999/11/30 13:47:11  adam
+ * Improved installation. Moved header files to include/yaz.
+ *
+ * Revision 1.4  1999/01/08 11:23:15  adam
+ * Added const modifier to some of the BER/ODR encoding routines.
+ *
+ * Revision 1.3  1996/02/29 14:23:13  adam
+ * Bug fix.
+ *
+ * Revision 1.2  1996/02/26  18:34:44  adam
+ * Bug fix.
+ *
+ * Revision 1.1  1996/02/20  13:02:58  quinn
+ * Wais length.
+ *
+ *
+ */
+
+#include <stdio.h>
+#include <yaz/comstack.h>
+#include <yaz/tcpip.h>
+/*
+ * Return length of WAIS package or 0
+ */
+int completeWAIS(const unsigned char *buf, int len)
+{
+    int i, lval = 0;
+
+    if (len < 25)
+       return 0;
+    if (*buf != '0')
+       return 0;
+    /* calculate length */
+    for (i = 0; i < 10; i++)
+       lval = lval * 10 + (buf[i] - '0');
+    lval += 25;
+    if (len >= lval)
+       return lval;
+    return 0;
+}
diff --git a/src/wrbuf.c b/src/wrbuf.c
new file mode 100644 (file)
index 0000000..d4fc08a
--- /dev/null
@@ -0,0 +1,133 @@
+/*
+ * Copyright (c) 1995-2003, Index Data.
+ * See the file LICENSE for details.
+ *
+ * $Id: wrbuf.c,v 1.1 2003-10-27 12:21:36 adam Exp $
+ */
+
+/*
+ * Growing buffer for writing various stuff.
+ */
+
+#if HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <stdarg.h>
+
+#include <yaz/wrbuf.h>
+
+WRBUF wrbuf_alloc(void)
+{
+    WRBUF n;
+
+    if (!(n = (WRBUF)xmalloc(sizeof(*n))))
+       abort();
+    n->buf = 0;
+    n->size = 0;
+    n->pos = 0;
+    return n;
+}
+
+void wrbuf_free(WRBUF b, int free_buf)
+{
+    if (free_buf && b->buf)
+       xfree(b->buf);
+    xfree(b);
+}
+
+void wrbuf_rewind(WRBUF b)
+{
+    b->pos = 0;
+}
+
+int wrbuf_grow(WRBUF b, int minsize)
+{
+    int togrow;
+
+    if (!b->size)
+       togrow = 1024;
+    else
+       togrow = b->size;
+    if (togrow < minsize)
+       togrow = minsize;
+    if (b->size && !(b->buf =(char *)xrealloc(b->buf, b->size += togrow)))
+       abort();
+    else if (!b->size && !(b->buf = (char *)xmalloc(b->size = togrow)))
+       abort();
+    return 0;
+}
+
+int wrbuf_write(WRBUF b, const char *buf, int size)
+{
+    if (size <= 0)
+        return 0;
+    if (b->pos + size >= b->size)
+       wrbuf_grow(b, size);
+    memcpy(b->buf + b->pos, buf, size);
+    b->pos += size;
+    return 0;
+}
+
+int wrbuf_puts(WRBUF b, const char *buf)
+{
+    wrbuf_write(b, buf, strlen(buf)+1);  /* '\0'-terminate as well */
+    (b->pos)--;                          /* don't include '\0' in count */
+    return 0;
+}
+
+int wrbuf_xmlputs(WRBUF b, const char *cp)
+{
+    while (*cp)
+    {
+       switch(*cp)
+       {
+       case '<':
+           wrbuf_puts(b, "&lt;");
+           break;
+       case '>':
+           wrbuf_puts(b, "&gt;");
+           break;
+       case '&':
+           wrbuf_puts(b, "&amp;");
+           break;
+       case '"':
+           wrbuf_puts(b, "&quot;");
+           break;
+       case '\'':
+           wrbuf_puts(b, "&apos;");
+           break;
+       default:
+           wrbuf_putc(b, *cp);
+       }
+       cp++;
+    }
+    wrbuf_putc(b, 0);
+    (b->pos)--;
+    return 0;
+}
+
+void wrbuf_printf(WRBUF b, const char *fmt, ...)
+{
+    va_list ap;
+    char buf[4096];
+
+    va_start(ap, fmt);
+#ifdef WIN32
+    _vsnprintf(buf, sizeof(buf)-1, fmt, ap);
+#else
+/* !WIN32 */
+#if HAVE_VSNPRINTF
+    vsnprintf(buf, sizeof(buf)-1, fmt, ap);
+#else
+    vsprintf(buf, fmt, ap);
+#endif
+#endif
+    wrbuf_puts (b, buf);
+
+    va_end(ap);
+}
+
diff --git a/src/xcqlutil.c b/src/xcqlutil.c
new file mode 100644 (file)
index 0000000..9c38de1
--- /dev/null
@@ -0,0 +1,210 @@
+/* $Id: xcqlutil.c,v 1.1 2003-10-27 12:21:36 adam Exp $
+   Copyright (C) 2002-2003
+   Index Data Aps
+
+This file is part of the YAZ toolkit.
+
+See the file LICENSE.
+*/
+#include <stdlib.h>
+#include <string.h>
+#include <stdio.h>
+
+#include <yaz/cql.h>
+
+static void pr_n(const char *buf, 
+                void (*pr)(const char *buf, void *client_data),
+                void *client_data, int n)
+{
+    int i;
+    for (i = 0; i<n; i++)
+        (*pr)(" ", client_data);
+    (*pr)(buf, client_data);
+}
+
+static void pr_cdata(const char *buf,
+                     void (*pr)(const char *buf, void *client_data),
+                     void *client_data)
+{
+    const char *src = buf;
+    char bf[2];
+    while (*src)
+    {
+        switch(*src)
+        {
+        case '&':
+            (*pr)("&amp;", client_data);
+            break;
+        case '<':
+            (*pr)("&lt;", client_data);
+            break;
+        case '>':
+            (*pr)("&gt;", client_data);
+            break;
+        default:
+            bf[0] = *src;
+            bf[1] = 0;
+            (*pr)(bf, client_data);
+        }
+        src++;
+    }
+}
+                    
+static void prefixes(struct cql_node *cn,
+                     void (*pr)(const char *buf, void *client_data),
+                     void *client_data, int level)
+{
+    if (cn)
+    {
+        pr_n("<prefixes>\n", pr, client_data, level);
+        for (; cn; cn = cn->u.mod.next)
+        {
+            pr_n("<prefix>\n", pr, client_data, level+2);
+            if (cn->u.mod.name)
+            {
+                pr_n("<name>", pr, client_data, level+4);
+                pr_cdata(cn->u.mod.name, pr, client_data);
+                pr_n("</name>\n", pr, client_data, 0);
+            }
+            if (cn->u.mod.value)
+            {
+                pr_n("<identifier>", pr, client_data, level+4);
+                pr_cdata(cn->u.mod.value, pr, client_data);
+                pr_n("</identifier>\n", pr, client_data, 0);
+            }
+            pr_n("</prefix>\n", pr, client_data, level+2);
+        }
+        pr_n("</prefixes>\n", pr, client_data, level);
+    }
+}
+                     
+static void cql_to_xml_r(struct cql_node *cn,
+                         void (*pr)(const char *buf, void *client_data),
+                         void *client_data, int level)
+{
+    if (!cn)
+        return;
+    switch (cn->which)
+    {
+    case CQL_NODE_ST:
+        pr_n("<searchClause>\n", pr, client_data, level);
+        prefixes(cn->u.st.prefixes, pr, client_data, level+2);
+        if (cn->u.st.index)
+        {
+            pr_n("<index>", pr, client_data, level+2);
+            pr_cdata(cn->u.st.index, pr, client_data);
+            pr_n("</index>\n", pr, client_data, 0);
+        }
+        if (cn->u.st.relation)
+        {
+            struct cql_node *m = cn->u.st.modifiers;
+            pr_n("<relation>\n", pr, client_data, level+2);
+            pr_n("<value>", pr, client_data, level+4);
+            pr_cdata(cn->u.st.relation, pr, client_data);
+            pr_n("</value>\n", pr, client_data, 0);
+            if (m)
+            {
+                pr_n("<modifiers>\n", pr, client_data, level+4);
+                for (; m; m = m->u.mod.next)
+                {
+                    pr_n("<modifier><value>", pr, client_data, level+6);
+                    pr_cdata(m->u.mod.value, pr, client_data);
+                    pr_n("</value></modifier>\n", pr, client_data, 0);
+                }
+                pr_n("</modifiers>\n", pr, client_data, level+4);
+            }
+            pr_n("</relation>\n", pr, client_data, level+2);
+        }
+        if (cn->u.st.term)
+        {
+            pr_n("<term>", pr, client_data, level+2);
+            pr_cdata(cn->u.st.term, pr, client_data);
+            pr_n("</term>\n", pr, client_data, 0);
+        }
+        pr_n("</searchClause>\n", pr, client_data, level);
+        break;
+    case CQL_NODE_BOOL:
+        pr_n("<triple>\n", pr, client_data, level);
+        prefixes(cn->u.st.prefixes, pr, client_data, level+2);
+        if (cn->u.boolean.value)
+        {
+            struct cql_node *m = cn->u.boolean.modifiers;
+            pr_n("<boolean>\n", pr, client_data, level+2);
+
+            pr_n("<value>", pr, client_data, level+4);
+            pr_cdata(cn->u.boolean.value, pr, client_data);
+            pr_n("</value>\n", pr, client_data, 0);
+
+            if (m)
+            {
+                pr_n("<modifiers>\n", pr, client_data, level+4);
+                for (; m; m = m->u.mod.next)
+                {
+                    pr_n("<modifier><type>", pr, client_data, level+6);
+                    pr_cdata(m->u.mod.name, pr, client_data);
+                    pr_n("</type>", pr, client_data, 0);
+                    if (m->u.mod.value)
+                    {
+                        pr_n("<value>", pr, client_data, 0);
+                        pr_cdata(m->u.mod.value, pr, client_data);
+                        pr_n("</value>", pr, client_data, 0);
+                    }
+                    pr_n("</modifier>\n", pr, client_data, 0);
+                }
+                pr_n("</modifiers>\n", pr, client_data, level+4);
+            }
+            pr_n("</boolean>\n", pr, client_data, level+2);
+        }
+        if (cn->u.boolean.left)
+        {
+            printf ("%*s<leftOperand>\n", level+2, "");
+            cql_to_xml_r(cn->u.boolean.left, pr, client_data, level+4);
+            printf ("%*s</leftOperand>\n", level+2, "");
+        }
+        if (cn->u.boolean.right)
+        {
+            printf ("%*s<rightOperand>\n", level+2, "");
+            cql_to_xml_r(cn->u.boolean.right, pr, client_data, level+4);
+            printf ("%*s</rightOperand>\n", level+2, "");
+        }
+        pr_n("</triple>\n", pr, client_data, level);
+    }
+}
+
+void cql_to_xml(struct cql_node *cn, 
+                void (*pr)(const char *buf, void *client_data),
+                void *client_data)
+{
+    cql_to_xml_r(cn, pr, client_data, 0);
+}
+
+void cql_to_xml_stdio(struct cql_node *cn, FILE *f)
+{
+    cql_to_xml(cn, cql_fputs, f);
+}
+
+void cql_buf_write_handler (const char *b, void *client_data)
+{
+    struct cql_buf_write_info *info = (struct cql_buf_write_info *)client_data;
+    int l = strlen(b);
+    if (info->off < 0 || (info->off + l >= info->max))
+    {
+        info->off = -1;
+        return;
+    }
+    memcpy (info->buf + info->off, b, l);
+    info->off += l;
+}
+
+int cql_to_xml_buf(struct cql_node *cn, char *out, int max)
+{
+    struct cql_buf_write_info info;
+    info.off = 0;
+    info.max = max;
+    info.buf = out;
+    cql_to_xml(cn, cql_buf_write_handler, &info);
+    if (info.off >= 0)
+        info.buf[info.off] = '\0';
+    return info.off;
+}
+
diff --git a/src/xmalloc.c b/src/xmalloc.c
new file mode 100644 (file)
index 0000000..4365eff
--- /dev/null
@@ -0,0 +1,277 @@
+/*
+ * Copyright (C) 1994-2003, Index Data
+ * All rights reserved.
+ * Sebastian Hammer, Adam Dickmeiss
+ *
+ * $Id: xmalloc.c,v 1.1 2003-10-27 12:21:36 adam Exp $
+ */
+
+#if HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+#include <yaz/log.h>
+#include <yaz/xmalloc.h>
+
+#ifndef TRACE_XMALLOC
+#define TRACE_XMALLOC 1
+#endif
+
+#if TRACE_XMALLOC > 1
+
+static const unsigned char head[] = {88, 77, 66, 55, 44, 33, 22, 11};
+static const unsigned char tail[] = {11, 22, 33, 44, 55, 66, 77, 88};
+static const unsigned char freed[] = {11, 22, 33, 44, 55, 66, 77, 88};
+
+struct dmalloc_info {
+    int len;
+    char file[16];
+    int line;
+    struct dmalloc_info *next;
+    struct dmalloc_info *prev;
+};
+
+struct dmalloc_info *dmalloc_list = 0;
+
+void *xmalloc_d(size_t nbytes, const char *file, int line)
+{
+    char *res;
+    struct dmalloc_info *dinfo;
+    
+    if (!(res = (char*) malloc(nbytes + sizeof(*dinfo)+16*sizeof(char))))
+       return 0;
+    dinfo = (struct dmalloc_info *) res;
+    strncpy (dinfo->file, file, sizeof(dinfo->file)-1);
+    dinfo->file[sizeof(dinfo->file)-1] = '\0';
+    dinfo->line = line;
+    dinfo->len = nbytes;
+    
+    dinfo->prev = 0;
+    dinfo->next = dmalloc_list;
+    if (dinfo->next)
+       dinfo->next->prev = dinfo;
+    dmalloc_list = dinfo;
+    
+    memcpy(res + sizeof(*dinfo), head, 8*sizeof(char));
+    res += sizeof(*dinfo) + 8*sizeof(char);
+    memcpy(res + nbytes, tail, 8*sizeof(char));
+    return res;
+}
+
+void xfree_d(void *ptr, const char *file, int line)
+{
+    struct dmalloc_info *dinfo;
+
+    if (!ptr)
+       return;
+    dinfo = (struct dmalloc_info *)
+       ((char*)ptr - 8*sizeof(char) - sizeof(*dinfo));
+    if (memcmp(head, (char*) ptr - 8*sizeof(char), 8*sizeof(char)))
+    {
+       yaz_log(LOG_FATAL, "xfree_d bad head, %s:%d, %p", file, line, ptr);
+        abort();
+    }
+    if (memcmp((char*) ptr + dinfo->len, tail, 8*sizeof(char)))
+    {
+       yaz_log(LOG_FATAL, "xfree_d bad tail, %s:%d, %p", file, line, ptr);
+        abort();
+    }
+    if (dinfo->prev)
+       dinfo->prev->next = dinfo->next;
+    else
+       dmalloc_list = dinfo->next;
+    if (dinfo->next)
+       dinfo->next->prev = dinfo->prev;
+    memcpy ((char*) ptr - 8*sizeof(char), freed, 8*sizeof(char));
+    free(dinfo);
+    return;
+}
+
+void *xrealloc_d(void *p, size_t nbytes, const char *file, int line)
+{
+    struct dmalloc_info *dinfo;
+    char *ptr = (char*) p;
+    char *res;
+    
+    if (!ptr)
+    {
+       if (!nbytes)
+           return 0;
+       res = (char *) malloc(nbytes + sizeof(*dinfo) + 16*sizeof(char));
+    }
+    else
+    {
+       if (memcmp(head, ptr - 8*sizeof(char), 8*sizeof(char)))
+       {
+           yaz_log(LOG_FATAL, "xrealloc_d bad head, %s:%d, %p",
+                   file, line, ptr);
+           abort();
+       }
+       dinfo = (struct dmalloc_info *) (ptr-8*sizeof(char) - sizeof(*dinfo));
+       if (memcmp(ptr + dinfo->len, tail, 8*sizeof(char)))
+       {
+           yaz_log(LOG_FATAL, "xrealloc_d bad tail, %s:%d, %p",
+                   file, line, ptr);
+           abort();
+       }
+       if (dinfo->prev)
+           dinfo->prev->next = dinfo->next;
+       else
+           dmalloc_list = dinfo->next;
+       if (dinfo->next)
+           dinfo->next->prev = dinfo->prev;
+       
+       if (!nbytes)
+       {
+           free (dinfo);
+           return 0;
+       }
+       res = (char *)
+           realloc(dinfo, nbytes + sizeof(*dinfo) + 16*sizeof(char));
+    }
+    if (!res)
+       return 0;
+    dinfo = (struct dmalloc_info *) res;
+    strncpy (dinfo->file, file, sizeof(dinfo->file)-1);
+    dinfo->file[sizeof(dinfo->file)-1] = '\0';
+    dinfo->line = line;
+    dinfo->len = nbytes;
+
+    dinfo->prev = 0;
+    dinfo->next = dmalloc_list;
+    if (dmalloc_list)
+       dmalloc_list->prev = dinfo;
+    dmalloc_list = dinfo;
+    
+    memcpy(res + sizeof(*dinfo), head, 8*sizeof(char));
+    res += sizeof(*dinfo) + 8*sizeof(char);
+    memcpy(res + nbytes, tail, 8*sizeof(char));
+    return res;
+}
+
+void *xcalloc_d(size_t nmemb, size_t size, const char *file, int line)
+{
+    char *res;
+    struct dmalloc_info *dinfo;
+    size_t nbytes = nmemb * size;
+    
+    if (!(res = (char*) calloc(1, nbytes+sizeof(*dinfo)+16*sizeof(char))))
+       return 0;
+    dinfo = (struct dmalloc_info *) res;
+    strncpy (dinfo->file, file, sizeof(dinfo->file)-1);
+    dinfo->file[sizeof(dinfo->file)-1] = '\0';
+    dinfo->line = line;
+    dinfo->len = nbytes;
+    
+    dinfo->prev = 0;
+    dinfo->next = dmalloc_list;
+    if (dinfo->next)
+       dinfo->next->prev = dinfo;
+    dmalloc_list = dinfo;
+    
+    memcpy(res + sizeof(*dinfo), head, 8*sizeof(char));
+    res += sizeof(*dinfo) + 8*sizeof(char);
+    memcpy(res + nbytes, tail, 8*sizeof(char));
+    return res;
+}
+
+void xmalloc_trav_d(const char *file, int line)
+{
+    size_t size = 0;
+    struct dmalloc_info *dinfo = dmalloc_list;
+    
+    yaz_log (LOG_MALLOC, "malloc_trav %s:%d", file, line);
+    while (dinfo)
+    {
+       yaz_log (LOG_MALLOC, " %20s:%d p=%p size=%d", dinfo->file, dinfo->line,
+             ((char*) dinfo)+sizeof(*dinfo)+8*sizeof(char), dinfo->len);
+       size += dinfo->len;
+       dinfo = dinfo->next;
+    }
+    yaz_log (LOG_MALLOC, "total bytes %ld", (long) size);
+}
+
+#else
+/* TRACE_XMALLOC <= 1 */
+#define xrealloc_d(o, x, f, l) realloc(o, x)
+#define xmalloc_d(x, f, l) malloc(x)
+#define xcalloc_d(x,y, f, l) calloc(x,y)
+#define xfree_d(x, f, l) free(x)
+#define xmalloc_trav_d(f, l) 
+#endif
+
+void xmalloc_trav_f(const char *s, const char *file, int line)
+{
+    xmalloc_trav_d(file, line);
+}
+
+void *xrealloc_f (void *o, size_t size, const char *file, int line)
+{
+    void *p = xrealloc_d (o, size, file, line);
+
+#if TRACE_XMALLOC
+    yaz_log (LOG_MALLOC,
+            "%s:%d: xrealloc(s=%d) %p -> %p", file, line, size, o, p);
+#endif
+    if (!p)
+    {
+       yaz_log (LOG_FATAL|LOG_ERRNO, "Out of memory, realloc (%d bytes)",
+                size);
+       exit(1);
+    }
+    return p;
+}
+
+void *xmalloc_f (size_t size, const char *file, int line)
+{
+    void *p = xmalloc_d (size, file, line);
+    
+#if TRACE_XMALLOC
+    yaz_log (LOG_MALLOC, "%s:%d: xmalloc(s=%d) %p", file, line, size, p);
+#endif
+    if (!p)
+    {
+        yaz_log (LOG_FATAL, "Out of memory - malloc (%d bytes)", size);
+        exit (1);
+    }
+    return p;
+}
+
+void *xcalloc_f (size_t nmemb, size_t size, const char *file, int line)
+{
+    void *p = xcalloc_d (nmemb, size, file, line);
+#if TRACE_XMALLOC
+    yaz_log (LOG_MALLOC, "%s:%d: xcalloc(s=%d) %p", file, line, size, p);
+#endif
+    if (!p)
+    {
+        yaz_log (LOG_FATAL, "Out of memory - calloc (%d, %d)", nmemb, size);
+        exit (1);
+    }
+    return p;
+}
+
+char *xstrdup_f (const char *s, const char *file, int line)
+{
+    char *p = (char *)xmalloc_d (strlen(s)+1, file, line);
+#if TRACE_XMALLOC
+    yaz_log (LOG_MALLOC, "%s:%d: xstrdup(s=%d) %p", file, line, strlen(s)+1, p);
+#endif
+    strcpy (p, s);
+    return p;
+}
+
+void xfree_f(void *p, const char *file, int line)
+{
+    if (!p)
+        return ;
+#if TRACE_XMALLOC
+    if (p)
+        yaz_log (LOG_MALLOC, "%s:%d: xfree %p", file, line, p);
+#endif
+    xfree_d(p, file, line);
+}
diff --git a/src/yaz-ccl.c b/src/yaz-ccl.c
new file mode 100644 (file)
index 0000000..41ab879
--- /dev/null
@@ -0,0 +1,46 @@
+/*
+ * Copyright (c) 1996-2003, Index Data.
+ * See the file LICENSE for details.
+ *
+ * $Id: yaz-ccl.c,v 1.1 2003-10-27 12:21:36 adam Exp $
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <ctype.h>
+
+#include <yaz/yaz-ccl.h>
+#include <yaz/pquery.h>
+
+Z_RPNQuery *ccl_rpn_query (ODR o, struct ccl_rpn_node *p)
+{
+    YAZ_PQF_Parser parser = yaz_pqf_create();
+    WRBUF wr = wrbuf_alloc();
+    Z_RPNQuery *q;
+
+    ccl_pquery(wr, p);
+
+    q = yaz_pqf_parse(parser, o, wrbuf_buf(wr));
+
+    wrbuf_free(wr, 1);
+    yaz_pqf_destroy(parser);
+    return q;
+}
+
+Z_AttributesPlusTerm *ccl_scan_query (ODR o, struct ccl_rpn_node *p)
+{
+    YAZ_PQF_Parser parser = yaz_pqf_create();
+    WRBUF wr = wrbuf_alloc();
+    Z_AttributesPlusTerm *q;
+    Odr_oid *setp;
+
+    ccl_pquery(wr, p);
+
+    q = yaz_pqf_scan(parser, o, &setp, wrbuf_buf(wr));
+
+    wrbuf_free(wr, 1);
+    yaz_pqf_destroy(parser);
+    return q;
+}
+
diff --git a/src/z.tcl b/src/z.tcl
new file mode 100644 (file)
index 0000000..38dee6c
--- /dev/null
+++ b/src/z.tcl
@@ -0,0 +1,351 @@
+# YC Sample Config File for Z39.50
+# $Id: z.tcl,v 1.1 2003-10-27 12:21:36 adam Exp $
+# ----------------------------------------------------------
+# Prefix Specifications
+#  
+#    1: C function prefix
+#    2: C type prefix
+#    3: C preprocessor prefix
+
+# Default prefix
+set default-prefix {z_ Z_ Z_}
+
+# Name clash in extended services (TargetPart, OriginPartToKeep, etc)
+# You can possibly think of better names :)
+set prefix(ESFormat-PersistentResultSet) {z_PR Z_PR Z_PR}
+set prefix(ESFormat-PersistentQuery) {z_PQuery Z_PQuery Z_PQuery}
+set prefix(ESFormat-PeriodicQuerySchedule) {z_PQS Z_PQS Z_PQS}
+set prefix(ESFormat-ItemOrder) {z_IO Z_IO Z_IO}
+set prefix(ESFormat-Update0) {z_IU0 Z_IU0 Z_IU0}
+set prefix(ESFormat-Update) {z_IU Z_IU Z_IU}
+set prefix(ESFormat-ExportSpecification) {z_ES Z_ES Z_ES}
+set prefix(ESFormat-ExportInvocation) {z_EI Z_EI Z_EI}
+
+# ----------------------------------------------------------
+# Settings for core of the protocol
+set m Z39-50-APDU-1995
+
+# Filename
+set filename($m) z-core
+
+# Public header initialization code
+set init($m,h) {
+typedef struct Z_External Z_External;
+YAZ_EXPORT int z_External(ODR o, Z_External **p, int opt, const char *name);
+}
+
+set body($m,h) "
+#ifdef __cplusplus
+extern \"C\" \{
+#endif
+
+int z_ANY_type_0 (ODR o, void **p, int opt);
+
+#ifdef __cplusplus
+\}
+#endif
+"
+set body($m,c) {
+
+/* the type-0 query ... */
+int z_ANY_type_0 (ODR o, void **p, int opt)
+{
+    return 0;
+}
+
+}
+
+# Type Name overrides
+set map($m,PDU) APDU
+set membermap($m,Operator,and) {Operator_and op_and}
+set membermap($m,Operator,or) {Operator_or op_or}
+#set membermap($m,Operator,and-not) {Operator_and_not op_and_not}
+set map($m,AttributeElement_complex) ComplexAttribute
+set map($m,DeleteSetStatus) DeleteStatus
+set membermap($m,ProximityOperator,private) {ProximityOperator_private zprivate}
+set unionmap($m,AttributeElement,attributeValue) {which value AttributeValue}
+set membermap($m,ElementSpec,externalEspec) externalSpec
+set membermap($m,RPNStructure,op) simple
+set membermap($m,RPNStructure,rpnRpnOp) complex
+set map($m,RPNStructure_complex) Complex
+set membermap($m,Operand,attrTerm) {Operand_APT attributesPlusTerm}
+set membermap($m,Operand,resultSet) {Operand_resultSetId resultSetId}
+set membermap($m,Operand,resultAttr) {Operand_resultAttr resultAttr}
+set membermap($m,Complex,rpn1) s1
+set membermap($m,Complex,rpn2) s2
+set membermap($m,Complex,op) roperator
+set membermap($m,RPNQuery,attributeSet) attributeSetId
+set membermap($m,RPNQuery,rpn) RPNStructure
+set map($m,KnownProximityUnit) ProxUnit
+set membermap($m,ProximityOperator,lessThan) {Prox_lessThan 1}
+set membermap($m,ProximityOperator,lessThanOrEqual) {Prox_lessThanOrEqual 1}
+set membermap($m,ProximityOperator,equal) {Prox_equal 1}
+set membermap($m,ProximityOperator,greaterThanOrEqual) {Prox_greaterThanOrEqual 1}
+set membermap($m,ProximityOperator,greaterThan) {Prox_greaterThan 1}
+set membermap($m,ProximityOperator,notEqual) {Prox_notEqual 1}
+#
+set membermap($m,Records,responseRecords) {Records_DBOSD databaseOrSurDiagnostics}
+set membermap($m,Records,nonSurrogateDiagnostic) {Records_NSD nonSurrogateDiagnostic}
+set membermap($m,Records,multipleNonSurDiagnostics) {Records_multipleNSD multipleNonSurDiagnostics}
+set map($m,Records_DBOSD) NamePlusRecordList
+set map($m,Records_NSD) DiagRec
+set map($m,Records_multipleNSD) DiagRecs
+set membermap($m,NamePlusRecord,name) databaseName
+set unionmap($m,DiagRecs) {num_diagRecs diagRecs}
+set unionmap($m,NamePlusRecordList) {num_records records}
+#
+set membermap($m,ElementSetNames,genericElementSetName) generic
+set map($m,ElementSetNames_databaseSpecific) DatabaseSpecific
+#
+set map($m,OccurrenceByAttributes_s) OccurrenceByAttributesElem
+set map($m,OccurrenceByAttributesElem_byDatabase) byDatabaseList
+#
+set membermap($m,SortElement,datbaseSpecific) databaseSpecific
+set map($m,SortElement_databaseSpecific) SortDbSpecificList
+#
+set map($m,SortKey_sortAttributes) SortAttributes
+set unionmap($m,PresentRequest,recordComposition) {}
+set map($m,PresentRequest_0) RecordComposition
+set unionmap($m,PresentRequest,additionalRanges) {num_ranges additionalRanges}
+set unionmap($m,SortRequest,sortSequence) {}
+set map($m,SortRequest_0) SortKeySpecList
+set unionmap($m,SortKeySpecList) {num_specs specs}
+set map($m,InitializeRequest) InitRequest
+set map($m,InitializeResponse) InitResponse
+set unionmap($m,CloseReason) Close
+set membermap($m,ProtocolVersion,version-1) 1
+set membermap($m,ProtocolVersion,version-2) 2
+set membermap($m,ProtocolVersion,version-3) 3
+set membermap($m,InitRequest,exceptionalRecordSize) maximumRecordSize
+set membermap($m,InitResponse,exceptionalRecordSize) maximumRecordSize
+set map($m,RecordsMultipleNonSurDiagnostics) DiagRecs
+set map($m,RecordsDatabaseOrSurDiagnostics) NamePlusRecordList
+set membermap($m,NamePlusRecord,retrievalRecord) databaseRecord
+set unionmap($m,RecordComposition) {which u RecordComp}
+set unionmap($m,ScanResponse,scanStatus) Scan
+set unionmap($m,AttributeList) {num_attributes attributes}
+set membermap($m,SortKey,sortfield) sortField
+set map($m,CompSpec_0) DbSpecific
+set map($m,DatabaseSpecific_s) DatabaseSpecificUnit
+set map($m,ListStatuses_s) ListStatus
+set map($m,IdAuthenticationIdPass) IdPass
+set map($m,OtherInformation_s) OtherInformationUnit
+set unionmap($m,OtherInformationUnit,information) {which information OtherInfo}
+set unionmap($m,OtherInformation) {num_elements list}
+set unionmap($m,Specification,elementSpec) {}
+set map($m,Specification_0) ElementSpec
+set unionmap($m,Specification,schema) {which schema Schema}
+
+# ----
+set m DiagnosticFormatDiag1
+set filename($m) z-diag1
+set map($m,DiagFormat_tooMany) TooMany
+set map($m,DiagFormat_badSpec) BadSpec
+set map($m,DiagFormat_dbUnavail) DbUnavail
+set map($m,DiagFormat_attribute) Attribute
+set map($m,DiagFormat_attCombo) AttCombo
+set map($m,DiagFormat_term) DiagTerm
+set map($m,DiagFormat_proximity) Proximity
+set map($m,DiagFormat_scan) Scan
+set map($m,DiagFormat_sort) Sort
+set unionmap($m,Sort) {which u SortD}
+set map($m,DiagFormat_segmentation) Segmentation
+set map($m,DiagFormat_extServices) ExtServices
+set map($m,DiagFormat_accessCtrl) AccessCtrl
+set map($m,DiagFormat_recordSyntax) RecordSyntax
+#
+set map($m,Scan_termList2) AttrListList
+set map($m,Sort_inputTooLarge) StringList
+#
+set map($m,AccessCtrl_oid) OidList
+set map($m,AccessCtrl_alternative) AltOidList
+# ----
+set m RecordSyntax-explain
+set filename($m) z-exp
+set map($m,Explain-Record) ExplainRecord
+set map($m,ElementDataType_structured) ElementInfoList
+set map($m,HumanString_s) HumanStringUnit
+set unionmap($m,HumanString) {num_strings strings}
+set membermap($m,CommonInfo,humanString-Language) humanStringLanguage
+set unionmap($m,AttributeOccurrence,attributeValues) {which attributeValues AttributeOcc}
+set unionmap($m,AttributeCombination) {num_occurrences occurrences}
+#
+set membermap($m,NetworkAddress,internetAddress) {NetworkAddress_iA internetAddress}
+set map($m,NetworkAddress_iA) NetworkAddressIA
+set membermap($m,NetworkAddress,osiPresentationAddress) {NetworkAddress_oPA osiPresentationAddress}
+set map($m,NetworkAddress_oPA) NetworkAddressOPA
+set map($m,NetworkAddress_other) NetworkAddressOther
+set unionmap($m,DatabaseList) {num_databases databases}
+set membermap($m,TargetInfo,recent-news) recentNews
+set membermap($m,TargetInfo,usage-restrictions) usageRest
+set membermap($m,DatabaseInfo,user-fee) userFee
+#
+set map($m,ProximitySupport_0) ProxSupportUnit
+set map($m,ProxSupportUnitZprivate) ProxSupportPrivate
+set membermap($m,ProxSupportUnit,private) {ProxSupportUnit_private zprivate}
+#
+set map($m,AttributeOccurrence_specific) AttributeValueList
+set unionmap($m,AttributeValueList) {num_attributes attributes}
+
+set unionmap($m,ExplainRecord) {which u Explain}
+set map($m,SchemaInfo_0) TagTypeMapping
+set map($m,TagSetInfo_0) TagSetElements
+set map($m,TermListInfo_0) TermListElement
+set map($m,TermListDetails_0) EScanInfo
+set map($m,PrivateCapabilities_0) PrivateCapOperator
+set map($m,Costs_0) CostsOtherCharge
+set map($m,Path_s) PathUnit
+set map($m,IconObject_s) IconObjectUnit
+set map($m,NetworkAddressInternetAddress) NetworkAddressIA
+set map($m,NetworkAddressOsiPresentationAddress) NetworkAddressOPA
+set membermap($m,QueryTypeDetails,private) {QueryTypeDetails_private zprivate}
+set membermap($m,PrivateCapOperator,operator) roperator
+set map($m,AccessRestrictions_s) AccessRestrictionsUnit
+# ----
+set m RecordSyntax-SUTRS
+set filename($m) z-sutrs
+#set map($m,SutrsRecord) SUTRS
+set body($m,c) {
+int z_SUTRS (ODR o, Odr_oct **p, int opt, const char *name)
+{
+    return odr_implicit_tag(o, odr_octetstring, p, ODR_UNIVERSAL,
+        ODR_GENERALSTRING, opt, name);
+}
+}
+
+set init($m,h) {
+typedef Odr_oct Z_SUTRS;
+YAZ_EXPORT int z_SUTRS (ODR o, Odr_oct **p, int opt, const char *name);
+}
+# ----
+set m RecordSyntax-opac
+set filename($m) z-opac
+# ----
+set m RecordSyntax-summary
+set filename($m) z-sum
+# ----
+set m RecordSyntax-generic
+set filename($m) z-grs
+set map($m,ElementData_subtree) GenericRecord
+set map($m,Variant_0) Triple
+set membermap($m,Triple,class) zclass
+set unionmap($m,Triple,value) {which value Triple}
+set unionmap($m,GenericRecord) {num_elements elements}
+# ----
+set m RecordSyntax-ESTaskPackage
+set filename($m) z-estask
+# ----
+set m ResourceReport-Format-Resource-1
+set filename($m) z-rrf1
+set map($m,ResourceReport) ResourceReport1
+set map($m,Estimate) Estimate1
+# ----
+set m ResourceReport-Format-Resource-2
+set filename($m) z-rrf2
+set map($m,ResourceReport) ResourceReport2
+set map($m,Estimate) Estimate2
+# ----
+set m AccessControlFormat-prompt-1
+set filename($m) z-accform1
+set membermap($m,PromptId,enummeratedPrompt) enumeratedPrompt 
+set map($m,PromptObject) PromptObject1
+set map($m,Challenge) Challenge1
+set map($m,Challenge1_s) ChallengeUnit1
+set map($m,Response) Response1
+set map($m,Response1_s) ResponseUnit1
+set map($m,PromptObject) PromptObject1
+# ----
+set m AccessControlFormat-des-1
+set filename($m) z-accdes1
+# ----
+set m AccessControlFormat-krb-1
+set filename($m) z-acckrb1
+# ----
+set m ESFormat-PersistentResultSet
+set filename($m) zes-pset
+# ----
+set m ESFormat-PersistentQuery
+set filename($m) zes-pquery
+# ----
+set m ESFormat-PeriodicQuerySchedule 
+set filename($m) zes-psched
+# ----
+set m ESFormat-ItemOrder
+set filename($m) zes-order
+set map($m,ItemOrderEsRequest) Request
+set map($m,ItemOrderTaskPackage) TaskPackage
+set map($m,OriginPartToKeep_0) Contact
+set map($m,OriginPartToKeep_1) Billing
+set map($m,OriginPartNotToKeep_0) ResultSetItem
+#
+# ---- (old version)
+set m ESFormat-Update0
+set filename($m) zes-update0
+set map($m,SuppliedRecords_s) SuppliedRecords_elem
+set map($m,SuppliedRecords_elem_0) SuppliedRecordsId
+#
+# ---- (new, current version)
+set m ESFormat-Update
+set filename($m) zes-update
+set map($m,SuppliedRecords_s) SuppliedRecords_elem
+set map($m,SuppliedRecords_elem_0) SuppliedRecordsId
+# ----
+set m ESFormat-ExportSpecification
+set filename($m) zes-exps
+# ----
+set m ESFormat-ExportInvocation
+set filename($m) zes-expi
+# ----
+set m UserInfoFormat-searchResult-1
+set filename($m) z-uifr1
+# ----
+set m ElementSpecificationFormat-eSpec-1
+set filename($m) z-espec1
+set map($m,Espec-1) Espec1
+set map($m,TagPath) ETagPath
+set map($m,ETagPath_s) ETagUnit
+set map($m,ETagUnitSpecificTag) SpecificTag
+set membermap($m,SpecificTag,occurrence) occurrences
+set unionmap($m,ElementRequest) {which u ERequest}
+set unionmap($m,ETagPath) {num_tags tags}
+set map($m,OccurrencesValues) OccurValues
+# ----
+set m UserInfoFormat-dateTime
+set filename($m) z-date
+set map($m,Z3950Date) Date
+set map($m,Z3950Time) Time
+set unionmap($m,Z3950Date,era) {}
+set map($m,DateFlags_0) Era
+set map($m,Z3950DateMonthAndDay) MonthAndDay
+set map($m,Z3950DateQuarter) DateQuater
+set map($m,Z3950DateSeason) DateSeason
+set map($m,Date_0) DateFlags
+set unionmap($m,DateFlags,era) {}
+# ----
+set m UserInfoFormat-multipleSearchTerms-2
+set filename($m) z-mterm2
+# ----
+set m ResourceReport-Format-Universe-1 
+set filename($m) z-univ
+# ----
+set m UserInfoFormat-oclcUserInformation
+set filename($m) z-oclcui
+# ----
+set m ESFormat-Admin
+set filename($m) zes-admin
+set map($m,EsRequest) ESAdminRequest
+set map($m,TaskPackage) ESAdminTaskPackage
+set map($m,OriginPartToKeep) ESAdminOriginPartToKeep
+set map($m,OriginPartNotToKeep) ESAdminOriginPartNotToKeep
+set map($m,TargetPart) ESAdminTargetPart
+# ----
+set m NegotiationRecordDefinition-charSetandLanguageNegotiation-3
+set filename($m) z-charneg
+set membermap($m,OriginProposal_0,private) {OriginProposal_0_private zprivate}
+set membermap($m,TargetResponse,private) {TargetResponse_private zprivate}
+# ----------------------------------------------------------
+# "Constructed" types defined by means of C-types are declared here.
+# Each function returns the C-handler and the C-type.
+proc asnBasicEXTERNAL {} {
+    return {z_External Z_External}
+}
diff --git a/src/z3950oid.c b/src/z3950oid.c
new file mode 100644 (file)
index 0000000..86f500a
--- /dev/null
@@ -0,0 +1,82 @@
+/*
+ * Copyright (c) 1995-2003, Index Data
+ * See the file LICENSE for details.
+ *
+ * $Id: z3950oid.c,v 1.1 2003-10-27 12:21:36 adam Exp $
+ */
+
+#if HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include <yaz/proto.h>
+
+Odr_oid *yaz_oidval_to_z3950oid (ODR o, int oid_class, int oid_value)
+{
+    oident ident;
+    int oid[OID_SIZE];
+
+    ident.proto = PROTO_Z3950;
+    ident.oclass = (enum oid_class) oid_class;
+    ident.value = (enum oid_value) oid_value;
+
+    if (ident.value == VAL_NONE)
+       return 0;
+
+    return odr_oiddup(o, oid_ent_to_oid(&ident, oid));
+}
+
+Odr_oid *yaz_str_to_z3950oid (ODR o, int oid_class, const char *str)
+{
+    struct oident ident;
+    int oid[OID_SIZE];
+
+    ident.proto = PROTO_Z3950;
+    ident.oclass = (enum oid_class) oid_class;
+    ident.value = oid_getvalbyname(str);
+
+    if (ident.value == VAL_NONE)
+       return 0;
+
+    return odr_oiddup(o, oid_ent_to_oid(&ident, oid));
+}
+
+const char *yaz_z3950oid_to_str (Odr_oid *oid, int *oid_class)
+{
+    struct oident *ident = oid_getentbyoid(oid);
+
+    if (!ident || ident->value == VAL_NONE)
+       return 0;
+    *oid_class = ident->oclass;
+    return ident->desc;
+}
+
+
+const char* yaz_z3950_oid_value_to_str(oid_value ov, oid_class oc)
+{
+    struct oident tmpentry;
+    int tmp_oid[OID_SIZE];
+     
+    tmpentry.proto = PROTO_Z3950;
+    tmpentry.oclass = oc;
+    tmpentry.value = ov; 
+    
+    if( oid_ent_to_oid(&tmpentry,tmp_oid) ) 
+    {
+        return tmpentry.desc;
+    } 
+    else 
+    {
+        return "";
+    }
+}
+
+
+/*
+ * Local variables:
+ * tab-width: 8
+ * c-basic-offset: 4
+ * End:
+ * vim600: sw=4 ts=8 fdm=marker
+ * vim<600: sw=4 ts=8
+ */
diff --git a/src/z3950v3.asn b/src/z3950v3.asn
new file mode 100644 (file)
index 0000000..98cf885
--- /dev/null
@@ -0,0 +1,2667 @@
+Z39-50-APDU-1995 -- OID for this definition, assigned in OID.3.1, is {Z39-50 2 1} 
+DEFINITIONS ::=  
+BEGIN   -- Z39.50 Maintenance Agency Official Text for ANSI/NISO Z39.50-1995 - July 1995
+--
+EXPORTS OtherInformation, Term, AttributeSetId, AttributeList, AttributeElement, ElementSetName, SortElement, DatabaseName,
+CompSpec, Specification, Permissions, InternationalString, IntUnit, Unit, StringOrNumeric, Query, Records, ResultSetId,
+DefaultDiagFormat, DiagRec, Segment;
+--
+
+PDU ::= CHOICE{
+ initRequest        [20] IMPLICIT InitializeRequest,
+ initResponse      [21] IMPLICIT InitializeResponse,
+ searchRequest      [22] IMPLICIT SearchRequest,
+ searchResponse      [23] IMPLICIT SearchResponse,
+ presentRequest      [24] IMPLICIT PresentRequest,
+ presentResponse      [25] IMPLICIT PresentResponse,
+ deleteResultSetRequest    [26] IMPLICIT DeleteResultSetRequest,
+ deleteResultSetResponse    [27] IMPLICIT DeleteResultSetResponse,
+ accessControlRequest    [28] IMPLICIT AccessControlRequest,
+ accessControlResponse    [29] IMPLICIT AccessControlResponse,
+ resourceControlRequest         [30] IMPLICIT ResourceControlRequest,
+ resourceControlResponse    [31] IMPLICIT ResourceControlResponse,
+ triggerResourceControlRequest  [32] IMPLICIT TriggerResourceControlRequest,
+ resourceReportRequest          [33] IMPLICIT ResourceReportRequest,
+ resourceReportResponse    [34] IMPLICIT ResourceReportResponse,
+ scanRequest         [35] IMPLICIT ScanRequest,
+ scanResponse      [36] IMPLICIT ScanResponse,
+              -- [37] through [42] reserved
+ sortRequest        [43] IMPLICIT SortRequest,
+ sortResponse      [44] IMPLICIT SortResponse,
+ segmentRequest      [45] IMPLICIT Segment,
+ extendedServicesRequest    [46] IMPLICIT ExtendedServicesRequest,
+ extendedServicesResponse    [47] IMPLICIT ExtendedServicesResponse,
+ close          [48] IMPLICIT Close,
+ duplicateDetectionRequest      [49] IMPLICIT DuplicateDetectionRequest,
+ duplicateDetectionResponse     [50] IMPLICIT DuplicateDetectionResponse}
+
+
+-- Initialize APDUs
+--
+  InitializeRequest ::= SEQUENCE{
+  referenceId        ReferenceId OPTIONAL,
+  protocolVersion      ProtocolVersion,
+  options        Options,
+  preferredMessageSize  [5]  IMPLICIT INTEGER,
+   exceptionalRecordSize  [6]  IMPLICIT INTEGER,
+   idAuthentication    [7]    IdAuthentication OPTIONAL, -- see note below
+  implementationId    [110]  IMPLICIT InternationalString OPTIONAL,
+  implementationName  [111]  IMPLICIT InternationalString OPTIONAL,
+   implementationVersion  [112]  IMPLICIT InternationalString OPTIONAL,   
+  userInformationField  [11]  EXTERNAL OPTIONAL,
+  otherInfo        OtherInformation OPTIONAL}
+--Note:
+-- For idAuthentication, the type ANY is retained for compatibility with earlier versions. 
+-- For interoperability, the following is recommended:
+IdAuthentication ::=
+   CHOICE{
+      open   VisibleString,
+      idPass  SEQUENCE {
+      groupId  [0]  IMPLICIT InternationalString OPTIONAL,
+      userId   [1]  IMPLICIT InternationalString OPTIONAL,
+      password  [2]  IMPLICIT InternationalString OPTIONAL },
+      anonymous  NULL,
+      other    EXTERNAL
+   }
+-- May use access control formats for 'other'.  See Appendix 7 ACC.
+--
+  InitializeResponse ::= SEQUENCE{
+  referenceId        ReferenceId OPTIONAL,
+   protocolVersion                ProtocolVersion,
+  options              Options,
+  preferredMessageSize  [5]  IMPLICIT INTEGER,
+   exceptionalRecordSize  [6]  IMPLICIT INTEGER,
+  result        [12]  IMPLICIT BOOLEAN,    -- reject = FALSE; Accept = TRUE
+  implementationId    [110]  IMPLICIT InternationalString OPTIONAL,
+  implementationName  [111]  IMPLICIT InternationalString OPTIONAL,
+   implementationVersion  [112]  IMPLICIT InternationalString OPTIONAL,   
+  userInformationField  [11]  EXTERNAL OPTIONAL,
+  otherInfo        OtherInformation OPTIONAL}
+-- Begin auxiliary definitions for Init PDUs
+  ProtocolVersion  ::=  [3]   IMPLICIT BIT STRING{
+    version-1      (0),       -- This bit should always be set, but does not
+              -- correspond to any Z39.50 version.
+    version-2      (1),              -- "Version 2 supported."
+              -- This bit should always be set.
+    version-3      (2)        -- "Version 3 supported."
+-- Values higher than 'version-3' should be ignored. Both the Initialize request and Initialize Response APDUs
+-- include a value string corresponding to the supported versions. The highest common version is selected
+-- for use. If there are no versions in common, "Result" in the Init Response should indicate "reject."
+-- Note: Versions 1 and 2 are identical. Systems supporting version 2 should indicate support for version
+-- 1 as well, for interoperability with systems that indicate support for version 1 only (e.g. ISO 10163-1991
+-- implementations).  
+  }
+  Options  ::= [4] IMPLICIT BIT STRING{ 
+      search        (0), 
+      present       (1), 
+      delSet        (2),
+       resourceReport    (3),
+      triggerResourceCtrl    (4),
+      resourceCtrl       (5), 
+      accessCtrl       (6),
+      scan         (7),
+      sort        (8), 
+      -- (not used) (9),
+      extendedServices    (10),
+      level-1Segmentation    (11),
+      level-2Segmentation    (12),
+      concurrentOperations  (13),
+      namedResultSets    (14),
+      encapsulation    (15),
+      resultCount    (16),
+      negotiationModel (17),
+      duplicateDetection (18),
+      queryType104 (19),
+      pQESCorrection (20),
+      stringSchema (21)
+}
+-- end auxiliary definitions for Init PDUs
+
+
+--Search APDUs
+  SearchRequest ::= SEQUENCE{
+  referenceId          ReferenceId OPTIONAL,
+      smallSetUpperBound    [13]  IMPLICIT INTEGER,
+  largeSetLowerBound    [14]  IMPLICIT INTEGER,
+  mediumSetPresentNumber    [15]  IMPLICIT INTEGER,
+  replaceIndicator      [16]  IMPLICIT BOOLEAN,
+  resultSetName      [17]  IMPLICIT InternationalString,
+   databaseNames      [18]   IMPLICIT SEQUENCE OF DatabaseName,
+   smallSetElementSetNames    [100]  ElementSetNames OPTIONAL,
+    mediumSetElementSetNames  [101]  ElementSetNames OPTIONAL,
+  preferredRecordSyntax    [104]  IMPLICIT OBJECT IDENTIFIER OPTIONAL,
+  query          [21]  Query,
+    -- Following two parameters may be used only if version 3 is in force.
+   additionalSearchInfo    [203]  IMPLICIT OtherInformation OPTIONAL,
+  otherInfo          OtherInformation OPTIONAL}
+
+
+-- Query Definitions
+  Query  ::=  CHOICE{
+      type-0  [0]  ANY,  
+        type-1    [1]  IMPLICIT RPNQuery,
+        type-2      [2]  OCTET STRING,
+        type-100  [100]  OCTET STRING,
+        type-101  [101]  IMPLICIT RPNQuery,
+       type-102  [102]  OCTET STRING,
+       type-104  [104]  IMPLICIT EXTERNAL
+}
+--
+-- Definitions for RPN query
+     RPNQuery ::= SEQUENCE{
+      attributeSet    AttributeSetId,
+      rpn      RPNStructure}
+--
+  RPNStructure ::= CHOICE{
+    op    [0] Operand, 
+     rpnRpnOp  [1] IMPLICIT SEQUENCE{
+          rpn1    RPNStructure,
+                rpn2    RPNStructure,
+                op    Operator }} 
+  Operand ::= CHOICE{
+    attrTerm  AttributesPlusTerm, 
+    resultSet  ResultSetId, 
+          -- If version 2 is in force: 
+          --   - If query type is 1, one of the above two must be chosen; 
+          --   - resultAttr (below) may be used only if query type is 101. 
+    resultAttr  ResultSetPlusAttributes}
+
+  AttributesPlusTerm ::= [102] IMPLICIT SEQUENCE{
+         attributes  AttributeList, 
+        term    Term}
+  ResultSetPlusAttributes ::= [214] IMPLICIT SEQUENCE{
+        resultSet  ResultSetId,
+        attributes  AttributeList}
+  AttributeList ::=    [44]  IMPLICIT SEQUENCE OF AttributeElement
+--
+  Term ::= CHOICE{
+    general      [45]  IMPLICIT OCTET STRING,
+              -- values below may be used only if version 3 is in force
+    numeric      [215]  IMPLICIT INTEGER,
+    characterString    [216]  IMPLICIT InternationalString,
+    oid        [217]  IMPLICIT OBJECT IDENTIFIER,
+    dateTime      [218]  IMPLICIT GeneralizedTime,
+    external      [219]  IMPLICIT EXTERNAL,
+    integerAndUnit    [220] IMPLICIT IntUnit,
+    null        [221] IMPLICIT NULL}   
+
+  Operator ::= [46] CHOICE{
+         and    [0] IMPLICIT NULL,
+            or    [1] IMPLICIT NULL,
+                and-not  [2] IMPLICIT NULL,
+              -- If version 2 is in force: 
+              --  - For query type 1, one of the above three must be chosen;
+              --  - prox (below) may be used only if query type is 101. 
+        prox    [3] IMPLICIT ProximityOperator}
+  AttributeElement  ::=  SEQUENCE{
+    attributeSet    [1]    IMPLICIT AttributeSetId OPTIONAL,
+                -- Must be omitted if version 2 is in force.
+                -- If included, overrides value of attributeSet
+                -- in RPNQuery above, but only for this attribute.
+    attributeType  [120]  IMPLICIT INTEGER,
+    attributeValue    CHOICE{
+              numeric  [121]   IMPLICIT INTEGER,
+                  -- If version 2 is in force, 
+                  -- Must select 'numeric' for attributeValue.
+
+      complex  [224] IMPLICIT SEQUENCE{ 
+               list      [1] IMPLICIT SEQUENCE OF StringOrNumeric,
+                    semanticAction  [2] IMPLICIT SEQUENCE OF INTEGER OPTIONAL}}}
+                       
+
+  ProximityOperator ::= SEQUENCE{
+    exclusion      [1] IMPLICIT BOOLEAN OPTIONAL,
+    distance      [2] IMPLICIT INTEGER,
+    ordered      [3] IMPLICIT BOOLEAN,
+    relationType      [4] IMPLICIT INTEGER{
+              lessThan      (1),
+              lessThanOrEqual    (2),
+              equal        (3),
+              greaterThanOrEqual    (4),
+              greaterThan      (5),
+              notEqual      (6)},
+    proximityUnitCode    [5] CHOICE{
+              known  [1] IMPLICIT KnownProximityUnit,
+              private  [2] IMPLICIT INTEGER}}
+--
+    KnownProximityUnit ::= INTEGER{
+          character  (1),
+          word     (2),
+          sentence   (3),
+          paragraph   (4),
+          section   (5),
+          chapter   (6),
+          document   (7),
+          element  (8),
+          subelement  (9),
+          elementType  (10),
+           byte    (11) -- Version 3 only
+          }
+-- End definitions for RPN Query
+
+
+SearchResponse ::= SEQUENCE{
+  referenceId        ReferenceId OPTIONAL,
+  resultCount       [23]  IMPLICIT INTEGER,
+  numberOfRecordsReturned  [24]  IMPLICIT INTEGER,
+  nextResultSetPosition  [25]  IMPLICIT INTEGER,
+  searchStatus      [22]  IMPLICIT BOOLEAN,
+  resultSetStatus    [26]  IMPLICIT INTEGER{
+              subset    (1),
+                 interim  (2), 
+               none    (3)} OPTIONAL,
+  presentStatus        PresentStatus  OPTIONAL,
+    records        Records OPTIONAL,
+    -- Following two parameters may be used only if version 3 is in force.
+  additionalSearchInfo  [203]  IMPLICIT OtherInformation OPTIONAL,
+  otherInfo        OtherInformation OPTIONAL}
+--Retrieval APDUs 
+  PresentRequest ::= SEQUENCE{
+  referenceId          ReferenceId OPTIONAL,
+      resultSetId          ResultSetId,
+  resultSetStartPoint      [30]  IMPLICIT INTEGER,
+  numberOfRecordsRequested  [29]  IMPLICIT INTEGER,
+  additionalRanges      [212]  IMPLICIT SEQUENCE OF Range OPTIONAL,
+      -- additionalRanges may be included only if version 3 is in force.
+  recordComposition      CHOICE{
+                simple  [19]         ElementSetNames,
+                -- must choose 'simple' if version 2 is in force
+                complex  [209]               IMPLICIT CompSpec} OPTIONAL,
+  preferredRecordSyntax    [104]  IMPLICIT OBJECT IDENTIFIER OPTIONAL,
+  maxSegmentCount      [204]  IMPLICIT INTEGER OPTIONAL, -- level 1 or 2
+  maxRecordSize      [206]  IMPLICIT INTEGER OPTIONAL, -- level 2 only
+  maxSegmentSize      [207]  IMPLICIT INTEGER OPTIONAL, -- level 2 only
+  otherInfo          OtherInformation OPTIONAL}
+--
+  Segment ::= SEQUENCE{
+      -- Segment PDU may only be used when version 3 is in force, 
+      -- and only when segmentation is in effect.
+   referenceId          ReferenceId OPTIONAL,
+     numberOfRecordsReturned    [24]  IMPLICIT INTEGER,
+  segmentRecords      [0]  IMPLICIT SEQUENCE OF NamePlusRecord,
+  otherInfo          OtherInformation OPTIONAL}
+--
+  PresentResponse ::= SEQUENCE{
+  referenceId          ReferenceId OPTIONAL,
+  numberOfRecordsReturned    [24]  IMPLICIT INTEGER,
+   nextResultSetPosition    [25]  IMPLICIT INTEGER,
+    presentStatus          PresentStatus,
+  records          Records OPTIONAL,
+  otherInfo          OtherInformation OPTIONAL} 
+-- begin auxiliary definitions for Search and Present APDUs
+
+-- begin definition of records
+  Records ::= CHOICE{
+  responseRecords      [28]  IMPLICIT SEQUENCE OF NamePlusRecord,
+  nonSurrogateDiagnostic     [130]  IMPLICIT DefaultDiagFormat,
+  multipleNonSurDiagnostics   [205]  IMPLICIT SEQUENCE OF DiagRec} 
+--
+  NamePlusRecord  ::=  SEQUENCE{
+  name    [0] IMPLICIT DatabaseName OPTIONAL,
+  record  [1] CHOICE{
+        retrievalRecord        [1] EXTERNAL,
+        surrogateDiagnostic    [2] DiagRec, 
+          -- Must select one of the above two, retrievalRecord or
+          -- surrogateDiagnostic, unless 'level 2 segmentation' is in effect.
+        startingFragment    [3] FragmentSyntax,
+        intermediateFragment  [4] FragmentSyntax,
+        finalFragment    [5] FragmentSyntax}}
+  FragmentSyntax ::= CHOICE{
+    externallyTagged    EXTERNAL,
+    notExternallyTagged  OCTET STRING}
+
+  DiagRec ::= CHOICE{
+      defaultFormat    DefaultDiagFormat,
+                -- Must choose defaultFormat if version 2 is in effect.
+      externallyDefined    EXTERNAL}
+
+  DefaultDiagFormat::= SEQUENCE{ 
+  diagnosticSetId  OBJECT IDENTIFIER,
+  condition    INTEGER,
+  addinfo      CHOICE{
+           v2Addinfo  VisibleString,  -- version 2
+           v3Addinfo  InternationalString  -- version 3
+            }}
+  -- end definition of records
+  Range  ::= SEQUENCE{
+    startingPosition    [1] IMPLICIT INTEGER,
+    numberOfRecords    [2] IMPLICIT INTEGER} 
+--
+  ElementSetNames ::= CHOICE {
+    genericElementSetName  [0] IMPLICIT InternationalString,
+    databaseSpecific    [1] IMPLICIT SEQUENCE OF SEQUENCE{
+              dbName  DatabaseName,
+              esn    ElementSetName}}
+
+  PresentStatus   ::=    [27]  IMPLICIT INTEGER{
+                            success  (0),
+                             partial-1   (1),
+                              partial-2   (2),
+              partial-3   (3),
+                                      partial-4   (4),
+                               failure    (5)}
+
+-- begin definition of composition specification
+  CompSpec ::= SEQUENCE{
+  selectAlternativeSyntax  [1] IMPLICIT BOOLEAN,
+            -- See comment for recordSyntax, below.
+  generic             [2] IMPLICIT Specification OPTIONAL,
+  dbSpecific      [3] IMPLICIT SEQUENCE OF SEQUENCE{
+                db  [1] DatabaseName,
+                spec  [2] IMPLICIT Specification} OPTIONAL,
+    -- At least one of generic and dbSpecific must occur, and both may occur. If both, then for
+     -- any record not in the list of databases within dbSpecific, generic applies.
+   recordSyntax               [4] IMPLICIT SEQUENCE OF OBJECT IDENTIFIER OPTIONAL
+               -- For each record, the target selects the first record syntax
+               -- in this list that it can support.  If the list is exhausted, the
+               -- target may select an alternative syntax if
+               -- selectAlternativeSyntax is 'true'.
+        }
+  Specification ::= SEQUENCE{
+  schema CHOICE {
+              oid [1]   IMPLICIT OBJECT IDENTIFIER,
+              uri [300] IMPLICIT InternationalString
+  } OPTIONAL,
+  elementSpec    [2] CHOICE{
+              elementSetName   [1] IMPLICIT InternationalString,
+          externalEspec  [2] IMPLICIT EXTERNAL} OPTIONAL}
+-- end definition of composition specification
+-- end auxiliary definitions for search and response APDUs
+
+-- Delete APDUs
+  DeleteResultSetRequest ::= SEQUENCE{
+  referenceId          ReferenceId OPTIONAL,
+      deleteFunction      [32]  IMPLICIT INTEGER{
+                    list   (0),
+                    all   (1)},
+   resultSetList          SEQUENCE OF ResultSetId OPTIONAL,
+  otherInfo          OtherInformation OPTIONAL} 
+--
+  DeleteResultSetResponse ::= SEQUENCE{
+  referenceId          ReferenceId OPTIONAL,
+    deleteOperationStatus    [0]  IMPLICIT DeleteSetStatus,
+  deleteListStatuses      [1]  IMPLICIT ListStatuses OPTIONAL,
+  numberNotDeleted       [34]  IMPLICIT INTEGER OPTIONAL,
+     bulkStatuses        [35]   IMPLICIT ListStatuses OPTIONAL,
+   deleteMessage      [36]  IMPLICIT InternationalString OPTIONAL,
+  otherInfo          OtherInformation OPTIONAL}
+  ListStatuses ::= SEQUENCE OF SEQUENCE{ 
+        id  ResultSetId, 
+        status  DeleteSetStatus}
+
+  DeleteSetStatus ::= [33] IMPLICIT INTEGER{
+                  success          (0),
+                   resultSetDidNotExist      (1),
+                    previouslyDeletedByTarget      (2),
+                     systemProblemAtTarget      (3),
+                   accessNotAllowed        (4),
+      resourceControlAtOrigin      (5),
+                   resourceControlAtTarget      (6),
+                    bulkDeleteNotSupported      (7),
+                   notAllRsltSetsDeletedOnBulkDlte    (8),
+      notAllRequestedResultSetsDeleted    (9),
+      resultSetInUse        (10)}
+--
+
+--Access- and Resource-control APDUs
+--
+  AccessControlRequest ::= SEQUENCE{
+  referenceId        ReferenceId OPTIONAL,
+  securityChallenge      CHOICE{
+              simpleForm      [37] IMPLICIT OCTET STRING,
+               externallyDefined    [0]  EXTERNAL},
+  otherInfo        OtherInformation OPTIONAL}
+
+  AccessControlResponse ::= SEQUENCE{
+  referenceId        ReferenceId OPTIONAL,
+  securityChallengeResponse  CHOICE{
+              simpleForm      [38]   IMPLICIT OCTET STRING,
+               externallyDefined    [0]  EXTERNAL} OPTIONAL,
+              -- Optional only in version 3; mandatory in version 2. If
+              -- omitted (in version 3) then diagnostic must occur.
+  diagnostic    [223]    DiagRec OPTIONAL, -- Version 3 only.
+  otherInfo        OtherInformation OPTIONAL}
+
+
+
+  ResourceControlRequest ::= SEQUENCE{
+  referenceId          ReferenceId OPTIONAL,
+  suspendedFlag      [39]  IMPLICIT BOOLEAN OPTIONAL,
+  resourceReport      [40]  ResourceReport OPTIONAL,
+  partialResultsAvailable    [41]  IMPLICIT INTEGER{
+                subset    (1),
+                interim  (2),
+                none    (3)} OPTIONAL,
+  responseRequired      [42]   IMPLICIT BOOLEAN, 
+  triggeredRequestFlag    [43]   IMPLICIT BOOLEAN OPTIONAL,
+  otherInfo          OtherInformation OPTIONAL}
+
+
+  ResourceControlResponse ::= SEQUENCE{
+     referenceId          ReferenceId OPTIONAL,
+    continueFlag       [44]   IMPLICIT BOOLEAN, 
+  resultSetWanted      [45]  IMPLICIT BOOLEAN OPTIONAL,
+  otherInfo          OtherInformation OPTIONAL}
+
+
+
+  TriggerResourceControlRequest ::= SEQUENCE{
+     referenceId          ReferenceId OPTIONAL,
+  requestedAction      [46]  IMPLICIT INTEGER{
+                resourceReport  (1),
+                resourceControl  (2),
+                cancel      (3)}, 
+  prefResourceReportFormat    [47]   IMPLICIT ResourceReportId OPTIONAL,
+  resultSetWanted      [48]   IMPLICIT BOOLEAN OPTIONAL,
+  otherInfo          OtherInformation OPTIONAL}
+
+
+
+  ResourceReportRequest ::= SEQUENCE{
+     referenceId          ReferenceId OPTIONAL,
+  opId          [210]  IMPLICIT ReferenceId OPTIONAL,
+  prefResourceReportFormat    [49]   IMPLICIT ResourceReportId OPTIONAL,
+  otherInfo          OtherInformation OPTIONAL}
+--
+  ResourceReportResponse ::= SEQUENCE{
+     referenceId          ReferenceId OPTIONAL,
+  resourceReportStatus    [50]   IMPLICIT INTEGER{
+                success    (0),
+                partial    (1),
+                failure-1    (2),
+                failure-2    (3),
+                failure-3    (4),
+                failure-4    (5),
+                failure-5    (6),
+                failure-6    (7)},
+  resourceReport               [51]   ResourceReport OPTIONAL,
+  otherInfo          OtherInformation OPTIONAL}
+--
+   ResourceReport     ::=   EXTERNAL
+  ResourceReportId    ::=    OBJECT IDENTIFIER
+
+--Scan APDUs
+  ScanRequest ::= SEQUENCE{
+  referenceId              ReferenceId OPTIONAL,
+    databaseNames        [3]  IMPLICIT SEQUENCE OF DatabaseName,
+    attributeSet            AttributeSetId OPTIONAL,
+    termListAndStartPoint        AttributesPlusTerm,
+    stepSize           [5]   IMPLICIT INTEGER OPTIONAL,
+    numberOfTermsRequested         [6]   IMPLICIT INTEGER,
+    preferredPositionInResponse      [7]   IMPLICIT INTEGER OPTIONAL,
+    otherInfo            OtherInformation OPTIONAL}
+
+  ScanResponse ::= SEQUENCE{
+   referenceId              ReferenceId OPTIONAL,
+   stepSize           [3]  IMPLICIT INTEGER OPTIONAL,
+   scanStatus           [4]  IMPLICIT INTEGER {
+                                success   (0),
+                                partial-1   (1),
+                                partial-2   (2),
+                                partial-3   (3),
+                                partial-4   (4),
+                                partial-5   (5),
+                                failure  (6) },
+   numberOfEntriesReturned       [5]  IMPLICIT INTEGER,
+   positionOfTerm         [6]  IMPLICIT INTEGER OPTIONAL,
+   entries           [7]  IMPLICIT ListEntries  OPTIONAL,  
+   attributeSet          [8]  IMPLICIT AttributeSetId OPTIONAL,
+   otherInfo            OtherInformation OPTIONAL}
+
+-- begin auxiliary definitions for Scan
+  ListEntries ::= SEQUENCE{
+  entries        [1]   IMPLICIT SEQUENCE OF Entry OPTIONAL,
+    nonsurrogateDiagnostics    [2]  IMPLICIT SEQUENCE OF DiagRec OPTIONAL
+    -- At least one of entries and nonsurrogateDiagnostics must occur
+          }
+
+  Entry  ::= CHOICE {
+     termInfo               [1]   IMPLICIT TermInfo,
+     surrogateDiagnostic    [2]   DiagRec}
+--
+  TermInfo ::= SEQUENCE {
+   term                    Term,
+     displayTerm      [0]   IMPLICIT InternationalString OPTIONAL,
+                                     -- Presence of displayTerm means that term is not considered by
+              -- the target to be suitable for display, and displayTerm should
+              -- instead be displayed. 'term' is the actual term in the term list;
+               -- 'displayTerm' is for display purposes only, and is not an actual
+              -- term in the term list.
+  suggestedAttributes            AttributeList OPTIONAL,
+     alternativeTerm    [4]  IMPLICIT SEQUENCE OF AttributesPlusTerm OPTIONAL, 
+     globalOccurrences    [2]  IMPLICIT INTEGER OPTIONAL,
+     byAttributes      [3]  IMPLICIT OccurrenceByAttributes OPTIONAL,
+     otherTermInfo      OtherInformation OPTIONAL} 
+
+  OccurrenceByAttributes ::= SEQUENCE OF SEQUENCE{
+     attributes    [1]  AttributeList, 
+     occurrences       CHOICE{
+               global    [2] INTEGER,
+            byDatabase  [3] IMPLICIT SEQUENCE OF SEQUENCE{ 
+              db      DatabaseName,
+              num     [1]  IMPLICIT INTEGER OPTIONAL,
+              otherDbInfo    OtherInformation OPTIONAL}} OPTIONAL,
+     otherOccurInfo    OtherInformation OPTIONAL} 
+-- end auxiliary definitions for Scan
+
+-- Sort APDUs
+SortRequest  ::= SEQUENCE{
+  referenceId              ReferenceId OPTIONAL,
+  inputResultSetNames  [3]  IMPLICIT SEQUENCE OF InternationalString,
+  sortedResultSetName  [4]    IMPLICIT InternationalString,
+  sortSequence     [5]  IMPLICIT SEQUENCE OF SortKeySpec,
+              -- order of occurrence is from major to minor
+  otherInfo        OtherInformation OPTIONAL}
+
+SortResponse  ::= SEQUENCE{
+  referenceId          ReferenceId OPTIONAL,
+  sortStatus         [3]  IMPLICIT INTEGER{
+                            success  (0), 
+              partial-1  (1),
+              failure  (2)},
+  resultSetStatus    [4]  IMPLICIT INTEGER{
+              empty    (1), 
+                  interim  (2), 
+                  unchanged  (3),
+              none    (4)} OPTIONAL,
+  diagnostics        [5]             IMPLICIT SEQUENCE OF DiagRec OPTIONAL,
+  resultCount        [6]             IMPLICIT INTEGER OPTIONAL,
+  otherInfo        OtherInformation OPTIONAL}
+
+-- begin auxiliary definitions for Sort
+  SortKeySpec ::= SEQUENCE{
+    sortElement      SortElement, 
+       sortRelation    [1]  IMPLICIT INTEGER{
+                                ascending      (0),
+              descending      (1),
+              ascendingByFrequency    (3),
+              descendingByfrequency  (4)},
+      caseSensitivity    [2]   IMPLICIT INTEGER{
+                                 caseSensitive      (0), 
+              caseInsensitive    (1)},
+      missingValueAction    [3]   CHOICE{
+                                     abort    [1] IMPLICIT NULL,
+                                     null      [2] IMPLICIT NULL,
+                    --supply a null value for missing value
+          missingValueData  [3] IMPLICIT OCTET STRING} OPTIONAL}
+
+  SortElement ::=   CHOICE{
+    generic        [1] SortKey,
+       datbaseSpecific    [2] IMPLICIT SEQUENCE OF SEQUENCE{
+                       databaseName  DatabaseName,
+                       dbSort    SortKey}} 
+
+  SortKey ::= CHOICE{
+    sortfield       [0]  IMPLICIT InternationalString,
+                  -- An element, element-group-tag, or alias supported by the target
+               -- and denoting a set of elements associated with each record.
+     elementSpec    [1]  IMPLICIT Specification,
+        sortAttributes    [2]  IMPLICIT SEQUENCE{
+              id  AttributeSetId,
+              list  AttributeList}}
+-- end auxiliary definitions for sort
+
+
+
+-- Extended Service APDUs
+  ExtendedServicesRequest  ::= SEQUENCE{
+  referenceId              ReferenceId OPTIONAL,
+  function      [3]  IMPLICIT INTEGER {
+              create    (1),
+              delete    (2),
+              modify  (3)},
+  packageType      [4]  IMPLICIT OBJECT IDENTIFIER,
+  packageName    [5]  IMPLICIT InternationalString OPTIONAL,
+              -- PackageName mandatory for 'modify' or 'delete'; optional for
+              -- 'create'. Following four parameters mandatory for 'create'; should
+              -- be included on 'modify' if being modified; not needed on 'delete'.
+  userId        [6]   IMPLICIT InternationalString OPTIONAL,
+  retentionTime    [7]   IMPLICIT IntUnit OPTIONAL,
+  permissions      [8]   IMPLICIT Permissions OPTIONAL,
+  description      [9]   IMPLICIT InternationalString OPTIONAL,
+
+-- (ExtendedServiceRequest APDU continued)
+  taskSpecificParameters  [10]  IMPLICIT EXTERNAL OPTIONAL, 
+              -- Mandatory for 'create'; included on 'modify' if specific
+              -- parameters being modified; not necessary on 'delete'. For the
+              -- 'EXTERNAL,' use OID of specific ES definition and select
+              --  CHOICE [1]: 'esRequest'.
+  waitAction      [11]  IMPLICIT INTEGER{
+              wait      (1),
+              waitIfPossible  (2),
+              dontWait    (3),
+              dontReturnPackage  (4)},
+  elements          ElementSetName OPTIONAL,
+  otherInfo          OtherInformation OPTIONAL}
+--
+
+ExtendedServicesResponse ::= SEQUENCE{
+  referenceId                ReferenceId OPTIONAL,
+  operationStatus    [3]    IMPLICIT INTEGER{
+                done      (1),
+                accepted    (2),  
+                failure    (3)},
+  diagnostics      [4]    IMPLICIT SEQUENCE OF DiagRec OPTIONAL,
+  taskPackage      [5]    IMPLICIT EXTERNAL OPTIONAL,
+                -- Use OID: {Z39-50-recordSyntax (106)} and corresponding
+                -- syntax. For the EXTERNAL, 'taskSpecific,' within that
+                -- definition, use OID of the specific es, and choose [2],
+                -- 'taskPackage'.
+  otherInfo          OtherInformation OPTIONAL}
+
+ Permissions ::= SEQUENCE OF SEQUENCE{
+  userId      [1] IMPLICIT InternationalString,
+  allowableFunctions  [2] IMPLICIT SEQUENCE OF INTEGER{
+              delete      (1),
+              modifyContents  (2),
+              modifyPermissions  (3),
+              present    (4),
+                 invoke    (5)}} 
+
+Close ::= SEQUENCE{
+  referenceId          ReferenceId OPTIONAL,  -- See 3.2.11.1.5.
+  closeReason          CloseReason,
+  diagnosticInformation    [3]  IMPLICIT InternationalString OPTIONAL,
+  resourceReportFormat    [4]  IMPLICIT ResourceReportId OPTIONAL, 
+                -- For use by origin only, and only on Close request;
+                -- origin requests target to include report in response.
+   resourceReport      [5]  ResourceReport OPTIONAL,
+                -- For use by target only, unilaterally on Close request;
+                -- on Close response may be unilateral or in response
+                -- to origin request.
+  otherInfo          OtherInformation OPTIONAL}
+
+  CloseReason ::=  [211]  IMPLICIT INTEGER{
+            finished      (0),
+            shutdown      (1),
+            systemProblem    (2),
+            costLimit      (3),
+            resources      (4),
+            securityViolation    (5),
+            protocolError    (6),
+            lackOfActivity    (7),
+            peerAbort      (8),
+            unspecified      (9)}
+
+--Duplicate detection APDUs
+DuplicateDetectionRequest ::= SEQUENCE {
+  referenceId                      ReferenceId  OPTIONAL,
+  inputResultSetIds            [3] IMPLICIT SEQUENCE OF InternationalString,
+  outputResultSetName          [4] IMPLICIT InternationalString,
+  applicablePortionOfRecord    [5] IMPLICIT EXTERNAL OPTIONAL,
+  duplicateDetectionCriteria   [6] IMPLICIT SEQUENCE OF
+                                   DuplicateDetectionCriterion OPTIONAL,
+  clustering                   [7] IMPLICIT BOOLEAN OPTIONAL,
+                                        -- 'true' means "clustered".
+                                        -- This parameter may be omitted
+                                        -- only if retentionCriteria CHOICE is
+                                        -- 'numberOfEntries' and its value is 1.
+  retentionCriteria            [8] IMPLICIT SEQUENCE OF
+                                            RetentionCriterion,
+  sortCriteria                 [9] IMPLICIT SEQUENCE OF
+                                            SortCriterion OPTIONAL,
+  otherInfo                        OtherInformation OPTIONAL}
+
+DuplicateDetectionCriterion ::= CHOICE{
+                           levelOfMatch         [1] IMPLICIT INTEGER,
+                                -- a percentage; 1-100.
+                           caseSensitive        [2] IMPLICIT NULL,
+                           punctuationSensitive [3] IMPLICIT NULL,
+                           regularExpression    [4] IMPLICIT EXTERNAL,
+                           rsDuplicates         [5] IMPLICIT NULL
+                 -- values 6-100 reserved for future assignment.
+                                                       }
+
+RetentionCriterion ::= CHOICE{
+                          numberOfEntries       [1] IMPLICIT INTEGER, 
+                                                        --  greater than 0
+                          percentOfEntries      [2] IMPLICIT INTEGER,
+                                                        -- 1-100,
+                          duplicatesOnly        [3] IMPLICIT NULL,
+                                                 -- should not be chosen 
+                                                 -- if clustering is 'true'
+                          discardRsDuplicates   [4] IMPLICIT NULL
+                 -- values 5-100 reserved for future assignment.
+                                                       }
+
+SortCriterion ::= CHOICE{
+                         mostComprehensive      [1] IMPLICIT NULL,
+                         leastConmprehensive    [2] IMPLICIT NULL,
+                         mostRecent             [3] IMPLICIT NULL,
+                         oldest                 [4] IMPLICIT NULL,
+                         leastCost              [5] IMPLICIT NULL,
+                         preferredDatabases     [6] IMPLICIT
+                                     SEQUENCE OF InternationalString
+                 -- values 7-100 reserved for future assignment.
+}
+
+DuplicateDetectionResponse ::= SEQUENCE {
+  referenceId                          ReferenceId  OPTIONAL,
+  status                       [3]     IMPLICIT INTEGER{
+                                         success               (0),
+                                         failure               (1)},
+  resultSetCount               [4]     IMPLICIT INTEGER OPTIONAL,
+  diagnostics                  [5]     IMPLICIT SEQUENCE OF DiagRec OPTIONAL,
+  otherInfo                           OtherInformation OPTIONAL}
+
+-- Global auxiliary definitions
+  ReferenceId       ::=      [2]  IMPLICIT OCTET STRING
+  ResultSetId        ::=      [31]    IMPLICIT InternationalString
+  ElementSetName     ::=     [103]   IMPLICIT InternationalString
+  DatabaseName     ::=    [105]   IMPLICIT InternationalString
+  AttributeSetId     ::=       OBJECT IDENTIFIER
+
+
+-- OtherInformation
+  OtherInformation   ::= [201] IMPLICIT SEQUENCE OF SEQUENCE{
+    category            [1]   IMPLICIT InfoCategory OPTIONAL, 
+    information        CHOICE{
+      characterInfo        [2]  IMPLICIT InternationalString,
+      binaryInfo        [3]  IMPLICIT OCTET STRING,
+      externallyDefinedInfo    [4]  IMPLICIT EXTERNAL,
+      oid          [5]  IMPLICIT OBJECT IDENTIFIER}}
+--
+  InfoCategory ::= SEQUENCE{
+      categoryTypeId  [1]   IMPLICIT OBJECT IDENTIFIER OPTIONAL,
+      categoryValue  [2]   IMPLICIT INTEGER}
+
+
+-- Units
+  -- IntUnit is used when value and unit are supplied together. Unit, alone, is used when just
+  -- specifying a unit (without a value).  For example, IntUnit is used in Term, in an RPNQuery, or
+  -- it can be the datatype of an element within a retrieval record. Unit (alone) would be used in an
+  -- element request, when requesting data be returned according to a particular unit.
+
+  IntUnit ::= SEQUENCE{
+    value    [1] IMPLICIT INTEGER,
+    unitUsed  [2] IMPLICIT Unit}
+--
+  Unit ::= SEQUENCE{
+    unitSystem    [1] InternationalString OPTIONAL,    -- e.g. 'SI'
+    unitType    [2] StringOrNumeric OPTIONAL,    -- e.g. 'mass'
+    unit      [3] StringOrNumeric OPTIONAL,    -- e.g. 'kilograms'
+    scaleFactor    [4] IMPLICIT INTEGER OPTIONAL    -- e.g. 9 means 10**9
+        }
+
+--CharacterString
+  InternationalString ::= GeneralString
+    -- When version 2 is in force, this collapses to VisibleString. That is, only characters in the
+    -- visibleString repertoire may be used. (Datatype compatibility with version 2 is not affected,
+     -- because references are IMPLICIT.)  When version 3 is in force, the semantics of the
+    -- GeneralString content may be altered by negotiation during initialization. If no such
+    -- negotiation is in effect, then GeneralString semantics are in force.
+
+StringOrNumeric ::= CHOICE{
+  string    [1] IMPLICIT InternationalString,
+  numeric  [2] IMPLICIT INTEGER}
+
+END -- IR DEFINITIONS
+
+
+
+DiagnosticFormatDiag1 
+{Z39-50-diagnosticFormat diag-1 (2)} DEFINITIONS ::=
+BEGIN
+IMPORTS Term, Specification, AttributeList, SortElement, DatabaseName, 
+DefaultDiagFormat, InternationalString FROM Z39-50-APDU-1995;
+
+
+DiagnosticFormat ::=  SEQUENCE OF SEQUENCE{ 
+  diagnostic  [1] CHOICE{
+              defaultDiagRec    [1]  IMPLICIT DefaultDiagFormat,
+              explicitDiagnostic    [2]  DiagFormat} OPTIONAL, 
+  message  [2] IMPLICIT InternationalString OPTIONAL} 
+
+
+DiagFormat ::= CHOICE{
+
+tooMany  [1000]   IMPLICIT SEQUENCE{
+                tooManyWhat   [1]  IMPLICIT INTEGER{
+                                  argumentWords        (1), 
+                                  truncatedWords        (2), 
+                                  booleanOperators      (3),
+                                  incompleteSubfields    (4), 
+                                  characters          (5),
+                                  recordsRetrieved      (6), 
+                                  dataBasesSpecified      (7),
+                                  resultSetsCreated      (8), 
+                                  indexTermsProcessed    (9)},
+                max        [2]  IMPLICIT INTEGER OPTIONAL},
+
+
+
+
+
+
+
+badSpec    [1001]  IMPLICIT SEQUENCE{  -- element set name or specification
+                spec        [1] IMPLICIT Specification, -- esn or element spec not supported
+                db        [2] IMPLICIT DatabaseName OPTIONAL,
+                            -- if db specified, above spec not supported for db; otherwise,
+                            -- spec not supported period.
+                goodOnes    [3] IMPLICIT SEQUENCE OF Specification OPTIONAL  
+                            -- target supplies ones that are supported
+                            },
+
+
+dbUnavail  [1002]  IMPLICIT SEQUENCE{ -- database unavailable
+                db  [1] IMPLICIT DatabaseName,
+                why  [2] IMPLICIT SEQUENCE{
+                        reasonCode  [1] IMPLICIT INTEGER{
+                                      doesNotExist    (0),
+                                      existsButUnavail  (1),
+                                      locked      (2),
+                                      accessDenied    (3)} OPTIONAL,
+                        message    [2] IMPLICIT InternationalString OPTIONAL}},
+
+
+unSupOp  [1003]  IMPLICIT INTEGER{  -- unsupported operator
+                and     (0),
+                or      (1),
+                and-not  (2),
+                prox    (3)},
+
+
+attribute    [1004]  IMPLICIT SEQUENCE{
+                    -- Applies for unsupported attribute set, attribute type, 
+                    -- attribute value, or term (for a given attribute type or value).
+
+                id      [1]  IMPLICIT OBJECT IDENTIFIER,
+                   -- if only "id" occurs, then attribute set is not supported
+                type    [2]  IMPLICIT INTEGER OPTIONAL,
+                   -- must occur if value occurs.
+                value    [3]   IMPLICIT INTEGER OPTIONAL,
+                    -- if omitted, and Type occurs, then Type is what is unsupported
+                term    [4]  Term OPTIONAL
+                    -- If occurs, term is illegal or not supported, for attribute value,
+                    -- if value occurs; otherwise, for type.
+                                },
+
+
+attCombo  [1005]  IMPLICIT SEQUENCE{ -- attribute combination not supported
+              unsupportedCombination  [1] IMPLICIT AttributeList, 
+              recommendedAlternatives  [2] IMPLICIT SEQUENCE OF AttributeList OPTIONAL}, 
+
+
+
+
+term      [1006]  IMPLICIT SEQUENCE{
+                problem    [1] IMPLICIT INTEGER{
+                            codedValue  (1),
+                            unparsable  (2),
+                            tooShort    (3),
+                            type      (4)} OPTIONAL,
+                term      [2] Term},
+
+
+proximity  [1007] CHOICE{        -- proximity diagnostics:
+               resultSets  [1]    IMPLICIT NULL,         -- proximity between sets not supported
+              badSet    [2]    IMPLICIT InternationalString,  -- bad result set specified
+                 relation    [3]   IMPLICIT INTEGER,      -- 1 to 6 ; relation not supported
+              unit      [4]  IMPLICIT INTEGER,      -- unsupported unit code
+              distance    [5]  IMPLICIT INTEGER,      -- unsupported distance
+              attributes  [6]  AttributeList,             --  proximity not supported with specified
+                                                   -- attribute combination
+              ordered    [7]  IMPLICIT NULL,        -- ordered flag not supported
+              exclusion  [8]  IMPLICIT NULL          -- exclusion flag not supported
+                    },
+
+
+
+
+
+scan     [1008] CHOICE{      -- scan diagnostics:
+              nonZeroStepSize  [0] IMPLICIT NULL,  -- only zero step size supported
+              specifiedStepSize  [1] IMPLICIT NULL,  -- specified step size not supported
+              termList1      [3] IMPLICIT NULL,  -- term list not supported (no alternative supplied)
+              termList2      [4] IMPLICIT SEQUENCE OF AttributeList,
+                                          -- term list not supported (alternatives supplied)
+              posInResponse    [5] IMPLICIT INTEGER{  --value of positionInResponse not supported
+                              mustBeOne        (1),
+                              mustBePositive    (2),
+                              mustBeNonNegative  (3),
+                              other            (4)},
+              resources      [6] IMPLICIT NULL,   -- resources exhausted looking for satisfying terms
+              endOfList      [7] IMPLICIT NULL  -- beginning or end of term list
+                },
+
+
+sort       [1009] CHOICE{
+              sequence    [0]  IMPLICIT NULL,        -- cannot sort according to sequence
+              noRsName    [1]  IMPLICIT NULL,        -- no result set name supplied
+              tooMany    [2]  IMPLICIT INTEGER,      --  Too many input result sets,
+                                                --  maximum supplied.
+              incompatible  [3]  IMPLICIT NULL,        -- records with different formats
+                                                 -- not compatible for sorting
+              generic      [4]  IMPLICIT NULL,        -- generic sort not supported 
+                                                -- (db specific only)
+              dbSpecific    [5]  IMPLICIT NULL,        -- db specific sort not supported
+              sortElement    [6]  SortElement,
+              key        [7]  IMPLICIT INTEGER{
+                              tooMany  (1),    -- too many sort keys
+                              duplicate  (2)},    -- duplicate sort keys
+              action      [8]  IMPLICIT NULL,  -- unsupported missing data action
+              illegal      [9]  IMPLICIT INTEGER{
+                              relation  (1),  -- illegal sort relation
+                              case    (2),  -- illegal case value
+                              action  (3),   -- illegal missing data action
+                              sort    (4)},  -- illegal sort
+            inputTooLarge    [10]  IMPLICIT SEQUENCE OF InternationalString,
+                                      --   one or more of the input result sets too large to sort
+          aggregateTooLarge  [11]  IMPLICIT NULL  --  aggregate result set too large
+                          },
+
+segmentation  [1010]  CHOICE{
+                segmentCount  [0]    IMPLICIT NULL,
+                                  -- Cannot guarantee record will fit within max segments. Target
+                                  -- suggests that origin try again to retrieve record, without
+                                  -- including max-segment-count.
+                segmentSize  [1]    IMPLICIT INTEGER
+                                -- record cannot be segmented into fragments such that the largest
+                                -- will fit within max segment size specified. Target supplies (in
+                                -- bytes) the smallest acceptable value of Max-segment-size to
+                                -- retrieve the record.
+                          },
+
+
+extServices  [1011] CHOICE{
+                req        [1] IMPLICIT INTEGER{   -- bad request
+                            nameInUse    (1),  -- package name already in use
+                            noSuchName  (2),  -- no such package, on modify/delete
+                            quota        (3),  -- quota exceeded
+                            type        (4)},  -- extended service type not supported
+                permission  [2] IMPLICIT INTEGER{ -- permission denied on ES, because: 
+                            id         (1),    --   id not authorized, or
+                            modifyDelete  (2)},    -- cannot modify or delete
+                immediate  [3] IMPLICIT INTEGER{ -- immediate execution:
+                            failed      (1),    -- failed, 
+                            service      (2),    -- not supported for this service, or
+                            parameters    (3)    -- for these parameters.
+                                }},
+
+
+accessCtrl    [1012] CHOICE{
+                noUser    [1] IMPLICIT NULL,    -- no user to display challenge to
+                refused    [2] IMPLICIT NULL,    -- access control information refused by user
+                simple    [3] IMPLICIT NULL,    -- only simple form supported (target used
+                                          -- externally defined)
+                oid      [4] IMPLICIT SEQUENCE OF OBJECT IDENTIFIER,
+                                          -- oid not supported (origin supplies alternative
+                                          -- suggested oids)
+                alternative  [5] IMPLICIT SEQUENCE OF OBJECT IDENTIFIER,
+                                          -- origin insists that target use an alternative
+                                          -- challenge for this data (e.g. stronger                                     
+   
+                                          -- authentication or stronger Access control). The                            
+              -- origin supplies suggested alternative oids.
+                pwdInv    [6] IMPLICIT NULL,    -- password invalid
+                pwdExp    [7] IMPLICIT NULL      -- password expired
+                    },
+
+
+recordSyntax  [1013] IMPLICIT SEQUENCE{ -- record cannot be transferred in requested syntax
+              unsupportedSyntax    [1] IMPLICIT OBJECT IDENTIFIER, 
+              suggestedAlternatives  [2] IMPLICIT SEQUENCE OF OBJECT IDENTIFIER OPTIONAL}
+}
+
+END
+
+
+
+
+
+RecordSyntax-explain 
+{Z39-50-recordSyntax explain (100)} DEFINITIONS ::=
+
+BEGIN 
+IMPORTS AttributeSetId, Term, OtherInformation, DatabaseName, ElementSetName, IntUnit, Unit,
+ StringOrNumeric, Specification, InternationalString, AttributeList, AttributeElement FROM Z39-50-APDU-1995;
+EXPORTS LanguageCode;
+
+Explain-Record ::= CHOICE{
+  -- Each of these may be used as search term  when Use attribute is 'explain-category'.
+  targetInfo         [0]    IMPLICIT TargetInfo,
+  databaseInfo      [1]    IMPLICIT DatabaseInfo,
+  schemaInfo        [2]    IMPLICIT SchemaInfo,
+  tagSetInfo         [3]    IMPLICIT TagSetInfo,
+  recordSyntaxInfo    [4]    IMPLICIT RecordSyntaxInfo,
+  attributeSetInfo    [5]    IMPLICIT AttributeSetInfo,
+  termListInfo      [6]    IMPLICIT TermListInfo,
+  extendedServicesInfo  [7]    IMPLICIT ExtendedServicesInfo,
+  attributeDetails      [8]    IMPLICIT AttributeDetails,
+  termListDetails    [9]    IMPLICIT TermListDetails,
+  elementSetDetails    [10]  IMPLICIT ElementSetDetails,
+  retrievalRecordDetails  [11]   IMPLICIT RetrievalRecordDetails,
+  sortDetails             [12]   IMPLICIT SortDetails,
+  processing           [13]  IMPLICIT ProcessingInformation,
+  variants          [14]  IMPLICIT VariantSetInfo,
+  units          [15]    IMPLICIT UnitInfo,
+  categoryList            [100]  IMPLICIT CategoryList}
+
+-- Element set name 'B' (brief)  retrieves:
+--  -  'commonInfo' (except for otherInfo within commonInfo)
+--  -  key elements
+--  -  other elements designated as 'non-key brief elements'
+-- Esn 'description' retrieves brief elements as well as 'description', and specific additional descriptive
+-- elements if designated.  
+-- Element set name 'F' (full) retrieves all of the above, as well as those designated as "non-brief elements". Some
+-- elements designated as OPTIONAL may be mandatory in full records, and are so identified. (Note that all elements
+-- that are not part of the brief element set must be designated as OPTIONAL in the ASN.1, otherwise it would be
+-- illegal to omit them.)
+-- Other esns are defined (below) as needed.
+
+-- - - - - - - - - - - - -   Info Records
+  -- Info records are mainly for software consumption
+  -- They describe individual entities within the target system:
+  --   The target itself
+  --   Individual databases
+  --   Schemas
+  --   Tag sets
+  --   Record syntaxes
+  --   Attribute sets
+  --   Term lists
+  --   Extended services
+ --     The information about each Schema, Tag Set, Record Syntax and Attribute Set should
+  -- match the universal definitions of these items. The only exception is that a target may omit any
+  -- items it doesn't support, for example the description of the bib-1 attribute set may omit attributes
+  -- that the target does not support under any circumstances.
+  --      Databases that may be searched together can be listed in the dbCominations element of the TargetInfo record.  
+TargetInfo ::= SEQUENCE {
+  commonInfo      [0]    IMPLICIT CommonInfo OPTIONAL,
+    -- Key elements follow:
+  name          [1]    IMPLICIT InternationalString,
+    -- Non-key brief elements follow:
+  recent-news      [2]    IMPLICIT HumanString OPTIONAL,
+  icon          [3]    IMPLICIT IconObject OPTIONAL,
+  namedResultSets    [4]    IMPLICIT BOOLEAN,
+  multipleDBsearch    [5]    IMPLICIT BOOLEAN,
+  maxResultSets      [6]    IMPLICIT INTEGER OPTIONAL,
+  maxResultSize      [7]    IMPLICIT INTEGER OPTIONAL,
+  maxTerms        [8]    IMPLICIT INTEGER OPTIONAL,
+  timeoutInterval      [9]    IMPLICIT IntUnit OPTIONAL,
+  welcomeMessage    [10]  IMPLICIT HumanString OPTIONAL,
+    -- non-brief elements follow:
+  -- 'description' esn retrieves the following two (as well as brief):
+  contactInfo      [11]  IMPLICIT ContactInfo OPTIONAL,
+  description      [12]  IMPLICIT HumanString OPTIONAL,
+  nicknames        [13]  IMPLICIT SEQUENCE OF InternationalString OPTIONAL,
+  usage-restrictions    [14]  IMPLICIT HumanString OPTIONAL,
+  paymentAddr      [15]  IMPLICIT HumanString OPTIONAL,
+  hours          [16]  IMPLICIT HumanString OPTIONAL,
+  dbCombinations    [17]  IMPLICIT SEQUENCE OF DatabaseList OPTIONAL,
+  addresses        [18]  IMPLICIT SEQUENCE OF NetworkAddress OPTIONAL,
+  languages        [101]  IMPLICIT SEQUENCE OF InternationalString OPTIONAL,
+                  -- Languages supported for message strings.  Each is a three-character
+                  -- language code from Z39.53-1994.
+-- characterSets      [102]  this tag reserved for "character sets supported for name and message strings".
+  -- commonAccessInfo elements list objects the target supports. All objects listed in
+  -- AccessInfo for any individual database should also be listed here.
+  commonAccessInfo  [19]  IMPLICIT AccessInfo OPTIONAL}
+
+
+DatabaseInfo ::= SEQUENCE {
+      -- A target may provide "virtual databases" that are combinations of individual database. These
+      -- databases are indicated by the presence of subDbs in the combination database's DatabaseDescription.
+  commonInfo        [0]    IMPLICIT CommonInfo OPTIONAL,
+    -- Key elements follow:
+  name            [1]    IMPLICIT DatabaseName,
+    -- Non-key brief elements follow:
+  explainDatabase      [2]             IMPLICIT NULL OPTIONAL,
+                       -- If present, this database is the Explain database, or an Explain database
+                    -- for a different server, possibly on a different host. The means by which
+                    -- that server may be accessed is not addressed by this standard. One
+                    -- suggested possibility is an implementor agreement whereby the
+                    -- database name is a url which may be used to connect to the server.
+  nicknames          [3]    IMPLICIT SEQUENCE OF DatabaseName OPTIONAL,
+  icon            [4]    IMPLICIT IconObject OPTIONAL,
+  user-fee          [5]    IMPLICIT BOOLEAN,
+  available          [6]    IMPLICIT BOOLEAN,
+  titleString          [7]    IMPLICIT HumanString OPTIONAL,
+    -- Non-brief elements follow:
+  keywords          [8]    IMPLICIT SEQUENCE OF HumanString OPTIONAL,
+  description        [9]    IMPLICIT HumanString OPTIONAL,
+  associatedDbs        [10]  IMPLICIT DatabaseList OPTIONAL,
+                    -- databases that may be searched in combination with this one 
+
+  subDbs          [11]  IMPLICIT DatabaseList OPTIONAL,
+                        -- When present, this database is a composite representing the combined
+                     -- databases 'subDbs'. The individual subDbs are also available.
+  disclaimers        [12]  IMPLICIT HumanString OPTIONAL,
+  news            [13]  IMPLICIT HumanString OPTIONAL,
+  recordCount           [14]    CHOICE {
+                                   actualNumber  [0] IMPLICIT INTEGER,
+                                    approxNumber  [1] IMPLICIT INTEGER} OPTIONAL,
+  defaultOrder        [15]  IMPLICIT HumanString OPTIONAL,
+  avRecordSize        [16]  IMPLICIT INTEGER OPTIONAL,
+  maxRecordSize      [17]  IMPLICIT INTEGER OPTIONAL,
+  hours            [18]  IMPLICIT HumanString OPTIONAL,
+  bestTime          [19]  IMPLICIT HumanString OPTIONAL,
+  lastUpdate          [20]  IMPLICIT GeneralizedTime OPTIONAL,
+  updateInterval        [21]  IMPLICIT IntUnit OPTIONAL,
+  coverage          [22]  IMPLICIT HumanString OPTIONAL,
+  proprietary        [23]  IMPLICIT BOOLEAN OPTIONAL, -- mandatory in full record
+  copyrightText        [24]  IMPLICIT HumanString OPTIONAL,
+  copyrightNotice      [25]  IMPLICIT HumanString OPTIONAL,
+  producerContactInfo    [26]  IMPLICIT ContactInfo OPTIONAL,
+  supplierContactInfo      [27]  IMPLICIT ContactInfo OPTIONAL,
+  submissionContactInfo    [28]  IMPLICIT ContactInfo OPTIONAL,
+    -- accessInfo lists items connected with the database. All listed items should be in the target's AccessInfo.
+  accessInfo                [29]  IMPLICIT AccessInfo OPTIONAL}
+
+
+SchemaInfo ::= SEQUENCE {
+  commonInfo    [0]  IMPLICIT CommonInfo OPTIONAL,
+    -- Key elements follow:
+  schema      [1]  IMPLICIT OBJECT IDENTIFIER,
+    -- Non-key brief elements follow:
+  name        [2]  IMPLICIT InternationalString,
+    -- Non-brief elements follow:
+  description    [3]  IMPLICIT HumanString OPTIONAL,
+  tagTypeMapping  [4]  IMPLICIT SEQUENCE OF SEQUENCE {
+              tagType    [0] IMPLICIT INTEGER,
+              tagSet       [1] IMPLICIT OBJECT IDENTIFIER OPTIONAL,
+                -- If tagSet is omitted, then this tagType is for a tagSet locally defined
+                -- within the schema that cannot be referenced by another schema.
+              defaultTagType  [2] IMPLICIT NULL OPTIONAL
+                        } OPTIONAL,
+  recordStructure  [5]  IMPLICIT SEQUENCE OF ElementInfo OPTIONAL}
+
+
+  --  ElementInfo referenced in SchemaInfo and RecordSyntaxInfo
+    ElementInfo ::= SEQUENCE {
+      elementName  [1] IMPLICIT InternationalString,
+      elementTagPath  [2] IMPLICIT Path,
+      dataType      [3] ElementDataType OPTIONAL, -- If omitted, not specified. 
+       required         [4] IMPLICIT BOOLEAN,
+      repeatable     [5] IMPLICIT BOOLEAN,
+       description    [6] IMPLICIT HumanString OPTIONAL}
+
+
+  -- Path is referenced by ElementInfo as well as PerElementDetails
+             Path ::= SEQUENCE OF SEQUENCE{
+              tagType  [1] IMPLICIT INTEGER,
+              tagValue     [2] StringOrNumeric}
+      ElementDataType ::= CHOICE{
+            primitive  [0] IMPLICIT PrimitiveDataType,
+           structured  [1] IMPLICIT SEQUENCE OF ElementInfo}
+      PrimitiveDataType ::= INTEGER{
+            octetString        (0),
+            numeric           (1),
+            date            (2),
+            external        (3),
+            string          (4),
+            trueOrFalse       (5),
+            oid         (6),
+            intUnit        (7),
+        empty        (8),
+            noneOfTheAbove  (100) -- see 'description'
+            }
+
+
+TagSetInfo ::= SEQUENCE {
+  commonInfo  [0]  IMPLICIT CommonInfo OPTIONAL,
+    -- Key elements follow:
+  tagSet      [1]  IMPLICIT OBJECT IDENTIFIER,
+    -- non-key brief elements follow:
+  name      [2]  IMPLICIT InternationalString,
+    -- non-brief elements follow:
+  description  [3]  IMPLICIT HumanString OPTIONAL,
+  elements    [4]  IMPLICIT SEQUENCE OF SEQUENCE {
+              elementname  [1]  IMPLICIT InternationalString,
+               nicknames    [2]  IMPLICIT SEQUENCE OF InternationalString OPTIONAL,
+              elementTag     [3]  StringOrNumeric, 
+              description    [4]  IMPLICIT HumanString OPTIONAL, 
+            dataType       [5]  PrimitiveDataType OPTIONAL,
+              -- If the data type is expected to be structured, that is described in the schema info,
+              -- and datatype is omitted here.
+             otherTagInfo       OtherInformation OPTIONAL} OPTIONAL}
+
+RecordSyntaxInfo ::= SEQUENCE {
+  commonInfo    [0]  IMPLICIT CommonInfo OPTIONAL,
+    -- Key elements follow:
+  recordSyntax    [1]  IMPLICIT OBJECT IDENTIFIER,
+    -- Non-key brief elements follow:
+  name        [2]  IMPLICIT InternationalString,
+    -- non-brief elements follow:
+  transferSyntaxes  [3]  IMPLICIT SEQUENCE OF OBJECT IDENTIFIER OPTIONAL,
+  description    [4]  IMPLICIT HumanString OPTIONAL,
+  asn1Module    [5]  IMPLICIT InternationalString OPTIONAL,
+  abstractStructure  [6]  IMPLICIT SEQUENCE OF ElementInfo OPTIONAL
+               -- Omitting abstractStructure only means target isn't using
+                 -- Explain to describe the structure, not that there is no structure.
+              }
+
+AttributeSetInfo ::= SEQUENCE {
+  commonInfo  [0]  IMPLICIT CommonInfo OPTIONAL,
+    -- Key elements follow:
+  attributeSet  [1]  IMPLICIT AttributeSetId,
+    -- non-key brief elements follow:
+  name      [2]  IMPLICIT InternationalString,
+    -- non-brief elements follow:
+  attributes    [3]  IMPLICIT SEQUENCE OF AttributeType OPTIONAL,
+            -- mandatory in full record
+  description   [4] IMPLICIT HumanString OPTIONAL}
+-- AttributeType referenced in AttributeSetInfo
+  AttributeType ::= SEQUENCE {
+      name             [0] IMPLICIT InternationalString OPTIONAL,
+      description      [1] IMPLICIT HumanString OPTIONAL,
+       attributeType    [2] IMPLICIT INTEGER,
+      attributeValues  [3] IMPLICIT SEQUENCE OF AttributeDescription}
+    AttributeDescription ::= SEQUENCE {
+        name                 [0] IMPLICIT InternationalString OPTIONAL,
+        description          [1] IMPLICIT HumanString OPTIONAL,
+        attributeValue       [2] StringOrNumeric,
+        equivalentAttributes  [3]  IMPLICIT SEQUENCE OF StringOrNumeric OPTIONAL
+                  -- each is an occurrence of 'attributeValue' from AttributeDescription for a
+                  -- different attribute. Equivalences listed here should be derived from the 
+                  -- attribute set definition, not from a particular server's behavior.  
+                    }
+
+
+TermListInfo ::= SEQUENCE{
+  commonInfo    [0]  IMPLICIT CommonInfo OPTIONAL,
+    -- Key elements follow:
+  databaseName  [1]  IMPLICIT DatabaseName,
+    -- Non-key brief elements follow:
+  termLists      [2] IMPLICIT SEQUENCE OF SEQUENCE{
+            name    [1] IMPLICIT InternationalString,
+            title    [2] IMPLICIT HumanString OPTIONAL,
+                                            -- Title is for users to see and can differ by language. Name, on the
+                      -- other hand is typically a short string not necessarily meant to be
+                       -- human-readable, and not variable by language.
+            searchCost   [3]   IMPLICIT INTEGER {
+                  optimized  (0),    -- The attribute (or combination) associated
+                            -- with this   list will do fast searches. 
+                      normal      (1),    -- The attribute (combination) will work as
+                            -- expected. So there's probably an index for the
+                            -- attribute (combination) or some similar
+                             -- mechanism.
+                      expensive   (2),    -- Can use the attribute (combination), but it
+                            -- might not provide satisfactory results.
+                            -- Probably there is no index, or post-
+                            -- processing of records is required.
+                      filter      (3)    -- can't search with this attribute (combination) alone.
+                         } OPTIONAL,
+              scanable  [4]  IMPLICIT BOOLEAN, -- 'true' means this list can be scanned.
+               broader    [5] IMPLICIT SEQUENCE OF InternationalString OPTIONAL,
+               narrower  [6] IMPLICIT SEQUENCE OF InternationalString OPTIONAL
+                       -- broader and narrower list alternative term lists related to this one.
+                       -- The term lists so listed should also be in this termLists structure.
+                          }
+  -- no non-brief elements
+            }
+
+
+ExtendedServicesInfo ::= SEQUENCE {
+  commonInfo          [0]  IMPLICIT CommonInfo OPTIONAL,
+    -- Key elements follow:
+  type          [1]  IMPLICIT OBJECT IDENTIFIER,
+    -- Non-key brief elements follow:
+  name                [2]  IMPLICIT InternationalString OPTIONAL,
+                -- should be supplied if privateType is 'true'
+  privateType      [3]  IMPLICIT BOOLEAN,
+  restrictionsApply    [5]  IMPLICIT BOOLEAN,  -- if 'true' see 'description'
+  feeApply              [6]  IMPLICIT BOOLEAN,  -- if 'true' see 'description'
+  available             [7]  IMPLICIT BOOLEAN,
+  retentionSupported    [8]  IMPLICIT BOOLEAN,
+  waitAction      [9]  IMPLICIT INTEGER{
+                waitSupported    (1),
+                waitAlways      (2),
+                waitNotSupported  (3),
+                depends      (4),
+                notSaying      (5)},
+  -- non-brief elements follow:
+    -- To get brief plus 'description' use esn 'description'
+  description           [10]  IMPLICIT HumanString OPTIONAL,
+      -- to get above elements and 'specificExplain' use esn 'specificExplain'
+  specificExplain    [11]  IMPLICIT EXTERNAL OPTIONAL,
+                  -- Use oid of specific ES, and select choice [3] 'explain'. Format
+                  -- to be developed in conjunction with the specific ES definition.
+    -- to get all elements except 'specificExplain', use esn 'asn'
+  esASN          [12]  IMPLICIT InternationalString OPTIONAL -- the ASN.1 for this ES
+                }
+
+-- - - - - - - - - - - - - Detail records
+ -- The detail records describe relationships among entities supported by the target. RetrievalRecordDetails describes
+ -- the way that schema elements are mapped into record elements. This mapping may be different for each
+ -- combination of database, schema, record syntax. The per-element details describe the default mapping.
+ -- Origin-request re-tagging can change that mapping. When multiple databases are listed in a databaseNames
+ -- element, the record applies equally to all of the listed databases.  This is unrelated to searching the databases
+ -- together. AttributeDetails describes how databases can be searched. Each supported attribute is listed, and the
+ -- allowable combinations can be described.
+
+
+AttributeDetails ::= SEQUENCE {
+  commonInfo        [0]  IMPLICIT CommonInfo OPTIONAL,
+    -- Key elements follow:
+  databaseName        [1]  IMPLICIT DatabaseName,
+    -- Non-brief elements follow:
+  attributesBySet        [2]  IMPLICIT SEQUENCE OF AttributeSetDetails OPTIONAL, 
+                  -- mandatory in full record
+  attributeCombinations    [3]  IMPLICIT AttributeCombinations OPTIONAL}
+
+
+
+
+-- AttributeSetDetails referenced by AttributeDetails
+  AttributeSetDetails ::= SEQUENCE {
+        attributeSet      [0] IMPLICIT AttributeSetId,
+          attributesByType  [1] IMPLICIT SEQUENCE OF AttributeTypeDetails }
+    AttributeTypeDetails ::= SEQUENCE {
+         attributeType     [0] IMPLICIT INTEGER,
+          defaultIfOmitted    [1] IMPLICIT OmittedAttributeInterpretation OPTIONAL,
+          attributeValues    [2] IMPLICIT SEQUENCE OF AttributeValue OPTIONAL }
+                          -- If no attributeValues are supplied, all values of this type are fully
+                    -- supported, and the descriptions in AttributeSetInfo are adequate.
+
+    OmittedAttributeInterpretation ::= SEQUENCE {
+        defaultValue           [0] StringOrNumeric OPTIONAL,
+                                -- A default value is listed if that's how the server works
+        defaultDescription  [1] IMPLICIT HumanString OPTIONAL }
+                          -- The human-readable description should generally be provided.
+                    -- It is legal for both default elements to be missing, which
+                    -- means that the target will allow the attribute type to be
+                    -- omitted, but isn't saying what it will do.
+
+    AttributeValue ::= SEQUENCE {
+        value              [0]  StringOrNumeric,
+        description        [1]  IMPLICIT HumanString OPTIONAL,
+        subAttributes     [2]  IMPLICIT SEQUENCE OF StringOrNumeric OPTIONAL,
+        superAttributes    [3]  IMPLICIT SEQUENCE OF StringOrNumeric OPTIONAL,
+        partialSupport    [4]  IMPLICIT NULL OPTIONAL }
+        -- partialSupport indicates that an attributeValue is accepted, but may not be processed in the
+        -- "expected" way. One important reason for this is composite databases: in this case partialSupport
+        -- may indicate that only some of the subDbs support the attribute, and others ignore it.
+
+
+
+TermListDetails ::= SEQUENCE{  -- one for each termList in TermListInfo
+  commonInfo    [0]  IMPLICIT CommonInfo OPTIONAL,
+    -- Key elements follow:
+  termListName    [1]  IMPLICIT InternationalString,
+    -- Non-key elements (all non-brief) follow:
+  description    [2]  IMPLICIT HumanString OPTIONAL,
+  attributes      [3]  IMPLICIT AttributeCombinations OPTIONAL,
+                          -- Pattern for attributes that hit this list. Mandatory in full record
+  scanInfo      [4]  IMPLICIT SEQUENCE {
+                maxStepSize         [0] IMPLICIT INTEGER OPTIONAL,
+                collatingSequence  [1] IMPLICIT HumanString OPTIONAL,
+                increasing            [2] IMPLICIT BOOLEAN OPTIONAL} OPTIONAL,
+            -- Occurs only if list is scanable. If list is scanable and if scanInfo is omitted, 
+            -- target doesn't consider these important.
+  estNumberTerms  [5]  IMPLICIT INTEGER OPTIONAL,
+  sampleTerms    [6]  IMPLICIT SEQUENCE OF Term OPTIONAL}
+
+
+
+ElementSetDetails ::= SEQUENCE {
+  -- ElementSetDetails describes the way that database records are mapped to record elements. This
+  -- mapping may be different for each combination of database name and element set. The database record
+   -- description is a schema, which may be private to the target. The schema's abstract record structure
+  -- and tag sets provide the vocabulary for discussing record content; their presence in the Explain
+  -- database does not imply support for complex retrieval specification.
+  commonInfo      [0]  IMPLICIT CommonInfo OPTIONAL,
+    -- Key elements follow:
+  databaseName      [1]  IMPLICIT DatabaseName,
+  elementSetName    [2]  IMPLICIT ElementSetName,
+  recordSyntax      [3]  IMPLICIT OBJECT IDENTIFIER,
+    -- Non-key Brief elements follow:
+  schema        [4]  IMPLICIT OBJECT IDENTIFIER,
+    -- Non-brief elements follow:
+  description      [5]  IMPLICIT HumanString OPTIONAL,
+  detailsPerElement    [6]  IMPLICIT SEQUENCE OF PerElementDetails OPTIONAL -- mandatory in full record
+              }
+
+
+RetrievalRecordDetails ::= SEQUENCE {
+  commonInfo      [0]  IMPLICIT CommonInfo OPTIONAL,
+    -- Key elements follow:
+  databaseName      [1]  IMPLICIT DatabaseName,
+  schema        [2]  IMPLICIT OBJECT IDENTIFIER,
+  recordSyntax      [3]  IMPLICIT OBJECT IDENTIFIER,
+    -- Non-brief elements follow:
+  description      [4]  IMPLICIT HumanString OPTIONAL,
+  detailsPerElement    [5]  IMPLICIT SEQUENCE OF PerElementDetails OPTIONAL
+                -- mandatory in full record
+            }
+
+-- PerElementDetails is referenced in RetrievalRecordDetails and ElementSetDetails.
+  PerElementDetails ::= SEQUENCE {
+      name      [0]    IMPLICIT InternationalString OPTIONAL,
+                   -- If the name is omitted, the record syntax's name for this element
+                  -- is appropriate.
+      recordTag    [1]    IMPLICIT RecordTag OPTIONAL,
+                   -- The record tag may be omitted if tags are inappropriate for the record
+                  -- syntax, or if the origin can be expected to know it for some other reason.
+      schemaTags    [2]    IMPLICIT SEQUENCE OF Path OPTIONAL,
+                      -- The information from the listed schema elements is combined
+                  -- in some way to produce the data sent in the listed record tag. The
+                  -- 'contents' element below may describe the logic used.
+      maxSize    [3]    IMPLICIT INTEGER OPTIONAL,
+      minSize    [4]    IMPLICIT INTEGER OPTIONAL,
+      avgSize      [5]    IMPLICIT INTEGER OPTIONAL,
+      fixedSize    [6]    IMPLICIT INTEGER OPTIONAL,
+      repeatable    [8]    IMPLICIT BOOLEAN,
+      required    [9]    IMPLICIT BOOLEAN, 
+                  -- 'required' really means that target will always supply the element.
+      description    [12]  IMPLICIT HumanString OPTIONAL,
+      contents    [13]  IMPLICIT HumanString OPTIONAL,
+      billingInfo    [14]  IMPLICIT HumanString OPTIONAL,
+      restrictions    [15]  IMPLICIT HumanString OPTIONAL,
+      alternateNames  [16]  IMPLICIT SEQUENCE OF InternationalString OPTIONAL,
+      genericNames  [17]  IMPLICIT SEQUENCE OF InternationalString OPTIONAL,
+      searchAccess  [18]  IMPLICIT AttributeCombinations OPTIONAL }
+      -- RecordTag referenced in PerElementDetails above
+        RecordTag ::= SEQUENCE {
+              qualifier  [0] StringOrNumeric OPTIONAL,
+                    -- E.g. tag set for GRS-1
+              tagValue  [1] StringOrNumeric}
+
+SortDetails ::= SEQUENCE {
+  commonInfo    [0]  IMPLICIT CommonInfo OPTIONAL,
+  -- Key elements follow:
+  databaseName    [1]  IMPLICIT DatabaseName,
+    -- No non-key brief elements
+    -- Non-brief elements follow:
+  sortKeys      [2]  IMPLICIT SEQUENCE OF SortKeyDetails OPTIONAL
+              -- mandatory in full record
+          }
+  SortKeyDetails ::= SEQUENCE {
+      description        [0]  IMPLICIT HumanString OPTIONAL,
+      elementSpecifications  [1]  IMPLICIT SEQUENCE OF Specification OPTIONAL,
+                      -- each specification is a way of specifying this same sort key
+      attributeSpecifications  [2]  IMPLICIT AttributeCombinations OPTIONAL,
+                      -- each combination is a way of specifying this same sort key
+      sortType                   [3]  CHOICE {
+                    character    [0]  IMPLICIT NULL,
+                    numeric    [1]  IMPLICIT NULL,
+                    structured    [2]  IMPLICIT HumanString} OPTIONAL,
+      caseSensitivity      [4]  IMPLICIT INTEGER {
+                      always    (0),  -- always case-sensitive
+                    never    (1),            -- never case-sensitive
+                    default-yes  (2),               -- case-sensitivity is as specified on request, and if not
+                            -- specified, case-sensitive.
+                    default-no  (3)} -- case-sensitivity is as specified on request, and if not
+                            -- specified, not case-sensitive.
+                          OPTIONAL}
+
+ProcessingInformation ::= SEQUENCE{
+  commonInfo      [0]  IMPLICIT CommonInfo OPTIONAL,
+    -- Key elements follow:
+  databaseName      [1]  IMPLICIT DatabaseName,
+  processingContext    [2]  IMPLICIT INTEGER {
+                  access        (0),   -- e.g. choosing databases
+                  search        (1),   -- e.g. "search strategies" or search forms 
+                  retrieval      (2),   -- e.g. recommended element combinations 
+                  record-presentation  (3),    -- display of retrieved records
+                  record-handling    (4)    -- handling (e.g. saving) of retrieved records
+        },
+  name          [3]  IMPLICIT InternationalString,
+  oid          [4]  IMPLICIT OBJECT IDENTIFIER,
+    -- No non-key brief elements
+    -- Non-brief elements follow:
+  description      [5]  IMPLICIT HumanString OPTIONAL,
+                -- use element set name 'description' to retrieve all except instructions.
+  instructions      [6]  IMPLICIT EXTERNAL OPTIONAL -- mandatory in full record
+              }
+
+
+VariantSetInfo ::= SEQUENCE {
+    -- A record in this category describes a variant set definition, i.e., classes, types, and values, for a specific
+    -- variant set definition supported by the target. Support by the target of a particular variant set definition
+    -- does not imply that the definition is supported for any specific database or element. 
+  commonInfo    [0] IMPLICIT CommonInfo OPTIONAL,
+  -- Key elements follow:
+  variantSet    [1] IMPLICIT OBJECT IDENTIFIER,
+  -- Non-key brief elements follow:
+  name      [2] IMPLICIT InternationalString,
+  -- Non-brief elements follow:
+  variants    [3] IMPLICIT SEQUENCE OF VariantClass OPTIONAL
+                   -- mandatory in full record
+           }
+
+  -- Subsidiary structures for VariantSetInfo
+    VariantClass ::= SEQUENCE {
+          name        [0] IMPLICIT InternationalString OPTIONAL,
+          description    [1] IMPLICIT HumanString OPTIONAL,
+          variantClass    [2] IMPLICIT INTEGER,
+          variantTypes  [3] IMPLICIT SEQUENCE OF VariantType}
+    VariantType ::= SEQUENCE {
+          name            [0] IMPLICIT InternationalString OPTIONAL,
+          description     [1] IMPLICIT HumanString OPTIONAL,
+          variantType    [2] IMPLICIT INTEGER,
+          variantValue  [3] IMPLICIT VariantValue OPTIONAL}
+    VariantValue ::= SEQUENCE {
+          dataType     [0] PrimitiveDataType,
+          values        [1] ValueSet OPTIONAL }
+    ValueSet ::= CHOICE {
+          range       [0] IMPLICIT ValueRange,
+          enumerated  [1] IMPLICIT SEQUENCE OF ValueDescription }
+    ValueRange ::= SEQUENCE {
+            -- At last one the following must be supplied, both may be supplied.
+          lower      [0] ValueDescription OPTIONAL,
+          upper     [1] ValueDescription OPTIONAL }
+    ValueDescription ::= CHOICE{
+      integer             INTEGER,
+          string              InternationalString,
+          octets              OCTET STRING,
+          oid                 OBJECT IDENTIFIER,
+          unit               [1]  IMPLICIT Unit,
+          valueAndUnit   [2]  IMPLICIT IntUnit 
+            -- oid and unit can't be used in a ValueRange
+            }
+
+
+
+UnitInfo ::= SEQUENCE {
+  commonInfo  [0] IMPLICIT CommonInfo OPTIONAL,
+  -- Key elements follow:
+  unitSystem   [1] IMPLICIT InternationalString,
+   -- No non-key brief elements
+   -- Non-brief elements follow:
+  description   [2] IMPLICIT HumanString OPTIONAL,
+  units      [3] IMPLICIT SEQUENCE OF UnitType OPTIONAL
+                         -- mandatory in full record
+           }
+
+  -- Subsidiary structures for UnitInfo
+    UnitType ::= SEQUENCE {
+      name    [0] IMPLICIT InternationalString OPTIONAL,
+      description  [1] IMPLICIT HumanString OPTIONAL,
+      unitType  [2] StringOrNumeric,
+      units     [3] IMPLICIT SEQUENCE OF Units}
+
+    Units ::= SEQUENCE {
+      name     [0] IMPLICIT InternationalString OPTIONAL,
+      description  [1] IMPLICIT HumanString OPTIONAL,
+      unit      [2] StringOrNumeric}
+
+CategoryList ::= SEQUENCE {
+  commonInfo      [0] IMPLICIT CommonInfo OPTIONAL,
+    -- Only one record expected per Explain database. All elements appear in brief presentation.
+  categories      [1] IMPLICIT SEQUENCE OF CategoryInfo }
+    CategoryInfo ::= SEQUENCE {
+           category          [1] IMPLICIT InternationalString,
+            originalCategory    [2] IMPLICIT InternationalString OPTIONAL,
+          description         [3] IMPLICIT HumanString OPTIONAL,
+         asn1Module      [4] IMPLICIT InternationalString OPTIONAL}
+
+
+-- - - - - - - - - - - - - - Subsidiary definitions
+
+CommonInfo ::= SEQUENCE {
+  dateAdded         [0] IMPLICIT GeneralizedTime OPTIONAL,
+  dateChanged       [1] IMPLICIT GeneralizedTime OPTIONAL,
+  expiry                [2] IMPLICIT GeneralizedTime OPTIONAL,
+  humanString-Language  [3] IMPLICIT LanguageCode OPTIONAL,
+  -- following not to occur for brief:
+  otherInfo          OtherInformation OPTIONAL}
+
+
+HumanString ::= SEQUENCE OF SEQUENCE {
+          language  [0] IMPLICIT LanguageCode OPTIONAL,
+        text        [1] IMPLICIT InternationalString}
+
+IconObject ::= SEQUENCE OF SEQUENCE{
+      -- Note that the "SEQUENCE OF" is to allow alternative representations of the same Icon; it is not
+      -- intended to allow multiple icons.
+  bodyType [1] CHOICE{
+           ianaType  [1] IMPLICIT InternationalString,
+          z3950type  [2] IMPLICIT InternationalString,
+           otherType  [3] IMPLICIT InternationalString},
+  content  [2] IMPLICIT OCTET STRING}
+
+
+LanguageCode ::= InternationalString  -- from ANSI/NISO Z39.53-1994 
+
+ContactInfo ::= SEQUENCE {
+  name           [0] IMPLICIT InternationalString OPTIONAL,
+  description  [1] IMPLICIT HumanString OPTIONAL,
+  address        [2] IMPLICIT HumanString OPTIONAL,
+  email         [3] IMPLICIT InternationalString OPTIONAL,
+  phone         [4] IMPLICIT InternationalString OPTIONAL}
+
+NetworkAddress ::= CHOICE {
+  internetAddress      [0] IMPLICIT SEQUENCE {
+                  hostAddress    [0]  IMPLICIT InternationalString,
+                  port       [1]  IMPLICIT INTEGER},
+  osiPresentationAddress    [1] IMPLICIT SEQUENCE { 
+                    pSel         [0] IMPLICIT InternationalString,  
+                    sSel         [1] IMPLICIT InternationalString OPTIONAL,  
+                    tSel        [2] IMPLICIT InternationalString OPTIONAL,  
+                    nSap      [3] IMPLICIT InternationalString},
+  other            [2] IMPLICIT SEQUENCE {  
+                      type        [0] IMPLICIT InternationalString,
+                address    [1] IMPLICIT InternationalString}}
+
+AccessInfo ::= SEQUENCE {
+    -- AccessInfo contains the fundamental information about what facilities are required to use this target
+    -- or server. For example, if an origin can handle none of the record syntaxes a database can provide, 
+    -- it might choose not to access the database.
+  queryTypesSupported  [0]    IMPLICIT SEQUENCE OF QueryTypeDetails OPTIONAL,
+  diagnosticsSets        [1]    IMPLICIT SEQUENCE OF OBJECT IDENTIFIER OPTIONAL,
+  attributeSetIds          [2]    IMPLICIT SEQUENCE OF AttributeSetId OPTIONAL,
+  schemas                [3]    IMPLICIT SEQUENCE OF OBJECT IDENTIFIER OPTIONAL,
+  recordSyntaxes         [4]    IMPLICIT SEQUENCE OF OBJECT IDENTIFIER OPTIONAL,
+  resourceChallenges    [5]    IMPLICIT SEQUENCE OF OBJECT IDENTIFIER OPTIONAL,
+  restrictedAccess       [6]    IMPLICIT AccessRestrictions OPTIONAL,
+  costInfo                 [8]    IMPLICIT Costs OPTIONAL,
+  variantSets       [9]    IMPLICIT SEQUENCE OF OBJECT IDENTIFIER OPTIONAL,
+  elementSetNames    [10]  IMPLICIT SEQUENCE OF ElementSetName OPTIONAL,
+  unitSystems      [11]  IMPLICIT SEQUENCE OF InternationalString}
+
+-- begin auxiliary definitions for AccessInfo
+-- Begin Query Details
+QueryTypeDetails ::= CHOICE {
+  private       [0]    IMPLICIT PrivateCapabilities,
+  rpn            [1]    IMPLICIT RpnCapabilities,
+  iso8777          [2]    IMPLICIT Iso8777Capabilities,
+  z39-58      [100]  IMPLICIT HumanString,
+  erpn        [101]  IMPLICIT RpnCapabilities,
+  rankedList      [102]  IMPLICIT HumanString}
+
+PrivateCapabilities ::= SEQUENCE {
+  operators       [0]  IMPLICIT SEQUENCE OF SEQUENCE {
+              operator  [0] IMPLICIT InternationalString,
+              description  [1] IMPLICIT HumanString OPTIONAL } OPTIONAL,
+  searchKeys    [1]  IMPLICIT SEQUENCE OF SearchKey OPTIONAL,  -- field names that can be searched
+  description    [2]  IMPLICIT SEQUENCE OF HumanString OPTIONAL }
+
+RpnCapabilities ::= SEQUENCE {
+  operators                    [0] IMPLICIT SEQUENCE OF INTEGER OPTIONAL,
+                                        -- Omitted means all operators are supported.
+  resultSetAsOperandSupported  [1] IMPLICIT BOOLEAN,
+  restrictionOperandSupported    [2] IMPLICIT BOOLEAN,
+  proximity                    [3] IMPLICIT ProximitySupport OPTIONAL}
+
+Iso8777Capabilities ::= SEQUENCE {
+  searchKeys  [0]  IMPLICIT SEQUENCE OF SearchKey,  -- field names that may be searched
+  restrictions   [1]  IMPLICIT HumanString OPTIONAL 
+            -- Omitted means supported, not specifying units.
+              }
+
+ProximitySupport ::= SEQUENCE {
+  anySupport      [0]   IMPLICIT BOOLEAN,
+          -- 'false' means no proximity support, in which case unitsSupported not supplied.
+  unitsSupported  [1]   IMPLICIT SEQUENCE OF CHOICE{  
+             known  [1] IMPLICIT INTEGER, -- values from KnownProximityUnit
+          private  [2] IMPLICIT SEQUENCE{  
+                      unit    [0] IMPLICIT INTEGER,  
+                description  [1] HumanString OPTIONAL}} OPTIONAL}
+
+SearchKey ::= SEQUENCE {
+  searchKey     [0]  IMPLICIT InternationalString,
+  description     [1]  IMPLICIT HumanString OPTIONAL }
+-- End Query details
+AccessRestrictions ::= SEQUENCE OF SEQUENCE {
+  accessType      [0] INTEGER {
+                  any         (0),
+                  search         (1),
+                  present         (2),
+                  specific-elements  (3),
+                  extended-services  (4),
+            by-database      (5)},
+  accessText         [1]  IMPLICIT HumanString OPTIONAL,
+  accessChallenges  [2]  IMPLICIT SEQUENCE OF OBJECT IDENTIFIER OPTIONAL}
+
+Costs ::= SEQUENCE {
+  connectCharge    [0] IMPLICIT Charge OPTIONAL,    -- Per-connection charge
+  connectTime    [1] IMPLICIT Charge OPTIONAL,    -- Time-based charge
+  displayCharge     [2] IMPLICIT Charge OPTIONAL,    -- Per-record charge
+  searchCharge     [3] IMPLICIT Charge OPTIONAL,    -- Per-search charge
+  subscriptCharge  [4]  IMPLICIT Charge OPTIONAL,  -- Subscription charges
+  otherCharges    [5] IMPLICIT SEQUENCE OF SEQUENCE{   -- Other charges
+            forWhat  [1]  IMPLICIT HumanString,
+            charge    [2]  IMPLICIT Charge} OPTIONAL} 
+    Charge ::= SEQUENCE{
+        cost          [1] IMPLICIT IntUnit,
+        perWhat  [2] IMPLICIT Unit OPTIONAL,
+                      -- e.g. "second," "minute," "line," "record"...
+        text          [3] IMPLICIT HumanString OPTIONAL} 
+-- End Auxiliary definitions for AccessInfo
+
+DatabaseList ::= SEQUENCE OF DatabaseName
+
+AttributeCombinations ::= SEQUENCE {
+  defaultAttributeSet  [0] IMPLICIT AttributeSetId,
+                 -- Default for the combinations. Also probably a good choice for the default
+              -- in searches, but that isn't required.
+  legalCombinations  [1] IMPLICIT SEQUENCE OF AttributeCombination }
+
+
+AttributeCombination ::= SEQUENCE OF AttributeOccurrence
+            -- An AttributeCombination is a pattern for legal combination of attributes
+
+
+AttributeOccurrence ::= SEQUENCE {   
+      -- An AttributeOccurrence lists the legal values for a specific attribute type in a combination.
+       attributeSet       [0]  IMPLICIT AttributeSetId OPTIONAL,
+       attributeType      [1]  IMPLICIT INTEGER,
+       mustBeSupplied  [2]  IMPLICIT NULL OPTIONAL,
+       attributeValues    CHOICE {
+                      any-or-none  [3] IMPLICIT NULL, -- All supported values are OK 
+                      specific    [4] IMPLICIT SEQUENCE OF StringOrNumeric}}
+                                                  -- Only these values allowed
+END
+
+
+
+
+
+
+
+
+
+RecordSyntax-SUTRS
+{Z39-50-recordSyntax SUTRS (101)} DEFINITIONS ::=
+BEGIN 
+IMPORTS InternationalString  FROM Z39-50-APDU-1995;
+        SutrsRecord ::=  InternationalString
+-- Line terminator is ASCII LF (X'0A').
+-- Recommended maximum line length is 72 characters.
+END
+
+
+
+
+
+RecordSyntax-opac
+{Z39-50-recordSyntax opac (102)} DEFINITIONS ::=
+BEGIN 
+IMPORTS InternationalString  FROM Z39-50-APDU-1995;
+OPACRecord ::= SEQUENCE {
+  bibliographicRecord   [1]   IMPLICIT EXTERNAL OPTIONAL,
+  holdingsData     [2]   IMPLICIT SEQUENCE OF HoldingsRecord OPTIONAL}
+HoldingsRecord ::=  CHOICE {
+  marcHoldingsRecord  [1]   IMPLICIT EXTERNAL,
+  holdingsAndCirc  [2]  IMPLICIT HoldingsAndCircData}
+HoldingsAndCircData ::=  SEQUENCE {
+-- the following elements are required to display holdings in conformance with NISO standards.
+  typeOfRecord    [1]   IMPLICIT InternationalString OPTIONAL, -- LDR 06
+  encodingLevel    [2]   IMPLICIT InternationalString OPTIONAL, -- LDR 017
+  format      [3]   IMPLICIT InternationalString OPTIONAL, -- 007 00-01
+  receiptAcqStatus    [4]   IMPLICIT InternationalString OPTIONAL, -- 008 06
+  generalRetention    [5]   IMPLICIT InternationalString OPTIONAL, -- 008 12
+  completeness    [6]   IMPLICIT InternationalString OPTIONAL, -- 008 16
+       dateOfReport     [7]   IMPLICIT InternationalString OPTIONAL, -- 008 26-31
+  nucCode    [8]   IMPLICIT InternationalString OPTIONAL, -- 852 $a
+  localLocation    [9]   IMPLICIT InternationalString OPTIONAL, -- 852 $b
+  shelvingLocation  [10]   IMPLICIT InternationalString OPTIONAL, -- 852 $c
+  callNumber    [11]   IMPLICIT InternationalString OPTIONAL, -- 852 $h and $i
+  shelvingData     [12]   IMPLICIT InternationalString OPTIONAL, -- 852 $j thru $m
+  copyNumber    [13]   IMPLICIT InternationalString OPTIONAL, -- 852 $t
+  publicNote    [14]   IMPLICIT InternationalString OPTIONAL, -- 852 $z
+  reproductionNote  [15]   IMPLICIT InternationalString OPTIONAL, -- 843
+  termsUseRepro     [16]   IMPLICIT InternationalString OPTIONAL, -- 845
+  enumAndChron    [17]   IMPLICIT InternationalString OPTIONAL, -- all 85x, 86x
+  volumes     [18]   IMPLICIT SEQUENCE OF Volume OPTIONAL, 
+            -- repeats for each volume held
+  circulationData    [19]   IMPLICIT SEQUENCE OF CircRecord OPTIONAL 
+            -- repeats for each circulating item.
+            }
+Volume ::=  SEQUENCE {
+  enumeration    [1]   IMPLICIT InternationalString OPTIONAL,
+  chronology     [2]   IMPLICIT InternationalString OPTIONAL,
+  enumAndChron    [3]   IMPLICIT InternationalString OPTIONAL }
+CircRecord ::=  SEQUENCE {
+  availableNow    [1]   IMPLICIT BOOLEAN,
+  availablityDate    [2]   IMPLICIT InternationalString OPTIONAL,
+  availableThru      [3]   IMPLICIT InternationalString OPTIONAL,
+  restrictions     [4]   IMPLICIT InternationalString OPTIONAL,
+  itemId        [5]   IMPLICIT InternationalString OPTIONAL,
+  renewable        [6]   IMPLICIT BOOLEAN,
+  onHold        [7]   IMPLICIT BOOLEAN,
+  enumAndChron     [8]   IMPLICIT InternationalString OPTIONAL,
+  midspine    [9]   IMPLICIT InternationalString OPTIONAL,
+  temporaryLocation  [10]   IMPLICIT InternationalString OPTIONAL}
+END
+
+
+
+RecordSyntax-summary
+
+{Z39-50-recordSyntax summary (103)} DEFINITIONS ::=
+BEGIN 
+IMPORTS OtherInformation, InternationalString  FROM Z39-50-APDU-1995;
+BriefBib ::= SEQUENCE {
+  title           [1]   IMPLICIT InternationalString,
+  author            [2]   IMPLICIT InternationalString OPTIONAL,
+  callNumber         [3]   IMPLICIT InternationalString OPTIONAL,
+  recordType      [4]   IMPLICIT InternationalString OPTIONAL,
+  bibliographicLevel  [5]   IMPLICIT InternationalString OPTIONAL,
+  format        [6]   IMPLICIT SEQUENCE OF FormatSpec OPTIONAL,
+  publicationPlace    [7]   IMPLICIT InternationalString OPTIONAL,
+  publicationDate     [8]   IMPLICIT InternationalString OPTIONAL,
+  targetSystemKey   [9]   IMPLICIT InternationalString OPTIONAL,
+  satisfyingElement  [10]   IMPLICIT InternationalString OPTIONAL,
+  rank         [11]   IMPLICIT INTEGER OPTIONAL,
+  documentId     [12]   IMPLICIT InternationalString OPTIONAL,
+  abstract       [13]   IMPLICIT InternationalString OPTIONAL,
+  otherInfo        OtherInformation OPTIONAL}
+
+FormatSpec     ::=  SEQUENCE {
+  type         [1]   IMPLICIT InternationalString,
+  size      [2]   IMPLICIT INTEGER OPTIONAL,
+  bestPosn     [3]   IMPLICIT INTEGER OPTIONAL}
+END
+
+
+
+
+
+
+
+
+
+
+RecordSyntax-generic  -- For detailed semantics, see Appendix RET.
+{Z39-50-recordSyntax GRS-1 (105)} DEFINITIONS ::=
+BEGIN 
+EXPORTS Variant;
+IMPORTS IntUnit, Unit, InternationalString, StringOrNumeric, Term FROM Z39-50-APDU-1995;
+
+GenericRecord ::= SEQUENCE OF TaggedElement  
+TaggedElement ::= SEQUENCE {
+  tagType    [1] IMPLICIT INTEGER OPTIONAL,
+              -- If omitted, default should be supplied dynamically by tagSet-M; 
+              -- otherwise it should be statically specified by the schema.
+  tagValue    [2] StringOrNumeric,
+  tagOccurrence  [3] IMPLICIT INTEGER OPTIONAL,
+                             -- Occurrence within the database record, and relative to the parent. No
+              -- default; if omitted, target not telling or it is irrelevant.
+  content      [4] ElementData,
+  metaData    [5] IMPLICIT ElementMetaData OPTIONAL,
+  appliedVariant  [6] IMPLICIT Variant OPTIONAL}
+
+ElementData ::= CHOICE{
+  octets      OCTET STRING,
+  numeric    INTEGER,
+  date      GeneralizedTime,
+  ext        EXTERNAL,
+  string      InternationalString,
+  trueOrFalse    BOOLEAN,
+  oid        OBJECT IDENTIFIER,
+  intUnit          [1]  IMPLICIT IntUnit,
+   elementNotThere    [2] IMPLICIT NULL,  -- element requested but not there
+  elementEmpty      [3] IMPLICIT NULL,  -- element there, but empty
+  noDataRequested    [4] IMPLICIT NULL,  -- variant request said 'no data'
+  diagnostic        [5] IMPLICIT EXTERNAL,
+  subtree          [6] SEQUENCE OF TaggedElement -- recursive, for nested tags
+              }
+
+
+ElementMetaData ::= SEQUENCE{
+  seriesOrder        [1]   IMPLICIT Order OPTIONAL, -- only for a non-leaf node
+  usageRight        [2]   IMPLICIT Usage OPTIONAL,
+  hits            [3]    IMPLICIT SEQUENCE OF HitVector OPTIONAL,
+  displayName      [4]    IMPLICIT InternationalString OPTIONAL, 
+                    -- name for element that origin can use for display
+  supportedVariants    [5]   IMPLICIT SEQUENCE OF Variant OPTIONAL,
+  message        [6]    IMPLICIT InternationalString OPTIONAL,
+  elementDescriptor    [7]   IMPLICIT OCTET STRING OPTIONAL,
+  surrogateFor      [8]   IMPLICIT TagPath OPTIONAL,  
+                    -- the retrieved element is a surrogate for the element given by this path  
+  surrogateElement    [9]   IMPLICIT TagPath OPTIONAL,
+                    -- the element given by this path is a surrogate for the retrieved element
+    other          [99]  IMPLICIT EXTERNAL OPTIONAL}
+
+        TagPath ::= SEQUENCE  OF SEQUENCE{
+          tagType      [1]  IMPLICIT INTEGER OPTIONAL,
+            tagValue      [2]  StringOrNumeric,
+            tagOccurrence    [3]  IMPLICIT INTEGER OPTIONAL}
+
+
+
+Order ::= SEQUENCE{
+  ascending    [1] IMPLICIT BOOLEAN,
+              -- "true" means monotonically increasing (i.e. non-decreasing); 
+              -- "false" means monotonically decreasing (i.e. non-increasing).
+  order      [2] IMPLICIT INTEGER
+              -- Same as defined by 'elementOrdering' in tagSet-M, though this may be
+              -- overridden by schema.
+          }
+
+
+
+Usage ::= SEQUENCE  {
+  type        [1] IMPLICIT INTEGER{
+              redistributable    (1),   -- Element is freely redistributable.
+              restricted      (2),   -- Restriction contains statement.
+              licensePointer    (3)   -- Restriction contains license pointer.
+              },
+  restriction    [2] IMPLICIT InternationalString OPTIONAL}
+
+
+
+HitVector ::= SEQUENCE{ 
+    -- Each hit vector points to a fragment within the element, via location and/or token.
+  satisfier            Term OPTIONAL, -- sourceword, etc.
+  offsetIntoElement    [1] IMPLICIT IntUnit OPTIONAL,
+  length          [2] IMPLICIT IntUnit OPTIONAL,
+  hitRank          [3] IMPLICIT INTEGER OPTIONAL,
+  targetToken        [4] IMPLICIT OCTET STRING OPTIONAL
+                  -- Origin may use token subsequently within a variantRequest (in
+                  --  an elementRequest) to retrieve (or to refer to) the fragment.  
+              }
+
+
+
+
+Variant ::= SEQUENCE{
+    globalVariantSetId    [1] IMPLICIT OBJECT IDENTIFIER OPTIONAL,
+                  -- Applies to the triples below, when variantSetId omitted. If
+                  -- globalVariantSetId omitted, default applies. Default may be provided by
+                  -- the tagSet-M element defaultVariantSetId.
+
+
+
+
+  triples          [2]  IMPLICIT SEQUENCE OF SEQUENCE{
+                  variantSetId  [0]  IMPLICIT OBJECT IDENTIFIER OPTIONAL,
+                              -- If omitted, globalVariantSetId (above)
+                              -- applies, unless that too is omitted, in
+                               -- which case, default used.
+                  class      [1]  IMPLICIT INTEGER,
+                  type      [2]  IMPLICIT INTEGER,
+                  value      [3]  CHOICE{
+                               integer INTEGER,
+                               internationalString InternationalString,
+                               octetString OCTET STRING,
+                               objectIdentifier OBJECT IDENTIFIER,
+                               boolean BOOLEAN,
+                              null NULL,
+                          -- Following need context tags:
+                            unit      [1] IMPLICIT Unit, 
+                            valueAndUnit  [2] IMPLICIT IntUnit}}}
+END
+
+
+
+RecordSyntax-ESTaskPackage
+{Z39-50-recordSyntax ESTaskPackage (106)} DEFINITIONS ::=
+BEGIN 
+IMPORTS Permissions, InternationalString, IntUnit, DiagRec FROM Z39-50-APDU-1995;
+
+TaskPackage ::= SEQUENCE{
+  packageType      [1]   IMPLICIT OBJECT IDENTIFIER,
+                    -- oid of specific ES definition
+  packageName      [2]   IMPLICIT InternationalString OPTIONAL,
+  userId          [3]   IMPLICIT InternationalString OPTIONAL,
+  retentionTime      [4]   IMPLICIT IntUnit OPTIONAL,
+  permissions        [5]   IMPLICIT Permissions OPTIONAL,
+  description        [6]   IMPLICIT InternationalString OPTIONAL,
+  targetReference      [7]   IMPLICIT OCTET STRING OPTIONAL,
+  creationDateTime    [8]   IMPLICIT GeneralizedTime OPTIONAL,
+  taskStatus        [9]   IMPLICIT INTEGER{
+                      pending    (0),
+                      active    (1),
+                      complete  (2),
+                      aborted    (3)},
+  packageDiagnostics    [10]  IMPLICIT SEQUENCE OF DiagRec OPTIONAL,
+  taskSpecificParameters  [11]  IMPLICIT EXTERNAL
+                    -- Use oid for specific ES definition
+                    -- (same oid as packageType above)
+                    -- and select [2] "taskPackage."
+    } 
+END
+
+
+
+
+ResourceReport-Format-Resource-1
+{Z39-50-resourceReport resource-1 (1)} DEFINITIONS ::=
+BEGIN 
+IMPORTS InternationalString FROM Z39-50-APDU-1995;  
+--
+ResourceReport ::= SEQUENCE{
+estimates    [1]   IMPLICIT SEQUENCE OF Estimate,
+message      [2]   IMPLICIT InternationalString}
+--
+Estimate ::= SEQUENCE{
+type        [1]   IMPLICIT EstimateType,
+value        [2]   IMPLICIT INTEGER,  -- the actual estimate
+currency-code  [3]   IMPLICIT INTEGER OPTIONAL
+                -- code for representation of currencies defined in ISO 4217-1990.  
+                -- Applicable only to monetary estimates.
+                              }
+EstimateType ::= INTEGER{
+currentSearchRecords    (1),         -- estimated no. records in current (incomplete) result set for search
+finalSearchRecords       (2),        -- estimated no. records that will be in result set if search completes
+currentPresentRecords    (3),        -- estimated number of records in current (incomplete) set of
+                      -- records to be returned on Present
+finalPresentRecords      (4),  -- estimated number of records that will be in the set of records
+                      -- to be returned by Present if Present completes
+currentOpTimeProcessing  (5),  -- processing time (in .001 CPU seconds) used by operation so far
+finalOpTimeProcessing    (6),                -- estimated total processing time (in .001 CPU seconds) that will
+                              -- be used by this operation if it completes
+currentAssocTime      (7),  -- estimated processing time used by association (in .001 CPU sec.)
+currentOperationCost      (8),  -- estimated cost for this operation so far
+finalOperationCost      (9),  -- estimated cost for this operation if it completes
+currentAssocCost        (10),  -- estimated cost for this association so far
+finalOpTimeElapsed            (11),  -- estimated elapsed time for operation if it completes (in .001 sec.) 
+percentComplete         (12), -- estimated percent complete
+currentSearchAssocCost    (13),  -- estimated search cost for association so far
+currentPresentAssocCost  (14),  -- estimated present cost for this association so far
+currentConnectAssocCost    (15),  -- estimated connect time cost for association so far
+currentOtherAssocCost    (16)  -- estimated other cost (not included in 13-15) for association so far
+                  }
+END
+
+
+
+
+
+
+
+
+
+
+
+
+
+ResourceReport-Format-Resource-2
+{Z39-50-resourceReport resource-2 (2)} DEFINITIONS ::=
+BEGIN 
+IMPORTS InternationalString, StringOrNumeric, IntUnit FROM Z39-50-APDU-1995;  
+--
+ResourceReport ::= SEQUENCE{
+estimates    [1]   IMPLICIT SEQUENCE OF Estimate OPTIONAL,
+message      [2]   IMPLICIT InternationalString OPTIONAL}
+--
+Estimate ::= SEQUENCE{
+type      [1]   StringOrNumeric,
+              -- Numeric values of 1-16 are the same as used in Resource-1.
+value      [2]   IMPLICIT IntUnit
+              -- When expressing currency:
+              --    unitSystem (of Unit) is 'z3950'  (case insensitive)
+              --    unitType is 'iso4217-1990'       (case insensitive)
+              --    unit is currency code from ISO 4217-1990.
+}
+END
+
+
+
+
+
+AccessControlFormat-prompt-1
+{Z39-50-accessControl prompt-1 (1)} DEFINITIONS ::=
+BEGIN
+IMPORTS InternationalString, DiagRec FROM Z39-50-APDU-1995;
+--
+PromptObject ::= CHOICE{
+  challenge      [1] IMPLICIT Challenge,
+   response        [2] IMPLICIT Response}
+
+  Challenge ::= SEQUENCE OF SEQUENCE {
+    promptId      [1] PromptId,
+                    -- Target supplies a number (for an enumerated prompt) or string (for a non
+                    -- -enumerated prompt), for each prompt, and the origin returns it in response, for
+                    -- this prompt, so target may correlate the prompt response with the prompt.
+    defaultResponse  [2] IMPLICIT InternationalString OPTIONAL,
+     promptInfo      [3] CHOICE{ 
+                    character  [1] IMPLICIT InternationalString,
+                    encrypted  [2] IMPLICIT Encryption} OPTIONAL,
+                    -- Information corresponding to an enumerated prompt. For example if 'type', within
+                    -- PromptId, is 'copyright', then promptInfo may contain a copyright statement.  
+    regExpr        [4] IMPLICIT InternationalString OPTIONAL,
+                              -- A regular expression that promptResponse should match. See IEEE 1003.2
+                    -- Volume 1, Section 2.8 "Regular Expression Notation." For example if promptId
+                    -- is "Year of publication," regExpr might be "19[89][0-9]|20[0-9][0-9]".
+    responseRequired  [5] IMPLICIT NULL OPTIONAL,
+     allowedValues    [6] IMPLICIT SEQUENCE OF InternationalString OPTIONAL,
+                        -- e.g. promptId="Desired color"; allowed = 'red', 'blue','Green'.
+    shouldSave      [7] IMPLICIT NULL OPTIONAL,
+                        -- Target recommends that origin save the data that it prompts from the
+                     -- user corresponding to this prompt, because it is likely to be requested again (so
+                    -- origin might not have to prompt the user next time).
+        dataType        [8] IMPLICIT INTEGER{
+                             integer        (1),
+                          date            (2),
+                        float           (3),
+                        alphaNumeric  (4),
+                        url-urn       (5),
+                        boolean       (6)} OPTIONAL,
+                        -- Target telling origin type of data it wants. E.g., if "date" is specified,
+                        -- presumably the origin will try to prompt something "date-like" from the user.
+        diagnostic       [9] IMPLICIT EXTERNAL OPTIONAL
+                          -- Intended for repeat requests when there is an error the origin 
+                        -- should report to the user from previous attempt.
+                }
+
+
+  Response ::= SEQUENCE OF SEQUENCE {
+      promptId    [1] PromptId,
+                  -- Corresponds to a prompt in the challenge, or may be unprompted, for
+                  -- example "newPassword." If unprompted, should be "enumerated." 
+                  -- If this responds to a non-enumerated prompt, then nonEnumeratedPrompt
+                   -- should contain the prompt string from the challenge.
+    promptResponse  [2] CHOICE{
+                    string      [1] IMPLICIT InternationalString,
+                    accept      [2] IMPLICIT BOOLEAN,
+                    acknowledge  [3] IMPLICIT NULL,
+                    diagnostic    [4] DiagRec,
+                     encrypted    [5] IMPLICIT Encryption}}
+
+
+ PromptId ::= CHOICE{
+  enummeratedPrompt    [1] IMPLICIT SEQUENCE{
+                      type            [1] IMPLICIT INTEGER{
+                                      groupId    (0),
+                                      userId     (1),
+                                      password   (2),
+                                      newPassword  (3),
+                                      copyright    (4),
+                            -- When type on Challenge is 'copyright', promptInfo has text of
+                            -- copyright message to be displayed verbatim to the user. If
+                            -- promptResponse indicates 'acceptance', this indicates the user has been
+                            -- shown, and accepted, the terms of the copyright. This is not intended
+                            -- to be legally binding, but provides a good-faith attempt on
+                            -- the part of the target to inform the user of the copyright.
+                                      sessionId      (5)},
+                      suggestedString    [2] IMPLICIT InternationalString OPTIONAL},
+   nonEnumeratedPrompt  [2] IMPLICIT InternationalString}
+
+
+ Encryption ::= SEQUENCE{
+  cryptType    [1] IMPLICIT OCTET STRING OPTIONAL, 
+  credential    [2] IMPLICIT OCTET STRING OPTIONAL,
+                    --random number, SALT, or other factor
+  data        [3] IMPLICIT OCTET STRING}
+
+END
+
+
+
+
+AccessControlFormat-des-1
+{Z39-50-accessControlFormat  des-1 (2)} DEFINITIONS ::=
+BEGIN
+    DES-RN-Object ::= CHOICE {
+      challenge    [1]    IMPLICIT DRNType,
+      response      [2]    IMPLICIT DRNType}
+    DRNType ::= SEQUENCE{
+          userId        [1]    IMPLICIT OCTET STRING OPTIONAL,
+          salt          [2]    IMPLICIT OCTET STRING OPTIONAL,
+          randomNumber  [3]    IMPLICIT OCTET STRING}
+END
+
+
+AccessControlFormat-krb-1
+{Z39-50-accessControlFormat  krb-1 (3)} DEFINITIONS ::=
+BEGIN
+IMPORTS InternationalString FROM Z39-50-APDU-1995;
+
+     KRBObject ::= CHOICE {
+       challenge   [1]    IMPLICIT KRBRequest,
+       response    [2]    IMPLICIT KRBResponse}
+     KRBRequest ::= SEQUENCE{
+           service         [1]   IMPLICIT InternationalString,
+           instance        [2]   IMPLICIT InternationalString OPTIONAL,
+           realm          [3]   IMPLICIT InternationalString OPTIONAL}
+        -- target requests a ticket for the given service, instance, and realm
+     KRBResponse ::= SEQUENCE{
+           userid            [1]   IMPLICIT InternationalString OPTIONAL,
+           ticket           [2]  IMPLICIT OCTET STRING}
+        -- origin responds with a ticket for the requested service
+END
+
+
+
+
+
+
+
+
+
+ESFormat-PersistentResultSet
+{Z39-50-extendedService PersistentResultSet (1)} DEFINITIONS ::=
+BEGIN
+IMPORTS InternationalString FROM Z39-50-APDU-1995;
+PersistentResultSet ::= CHOICE{
+    esRequest    [1] IMPLICIT SEQUENCE{
+        toKeep    [1] IMPLICIT NULL,
+        notToKeep  [2] OriginPartNotToKeep OPTIONAL},
+    taskPackage  [2] IMPLICIT SEQUENCE{
+        originPart  [1] IMPLICIT NULL,
+        targetPart  [2] TargetPart OPTIONAL}}
+OriginPartNotToKeep ::= SEQUENCE{
+  originSuppliedResultSet  [1] IMPLICIT InternationalString OPTIONAL,
+          -- name of transient result set, supplied on request, mandatory unless function is 'delete'
+  replaceOrAppend    [2] IMPLICIT INTEGER{  -- only if function is "modify"
+          replace    (1),
+          append    (2)} OPTIONAL}
+TargetPart ::= SEQUENCE{
+  targetSuppliedResultSet  [1] IMPLICIT InternationalString OPTIONAL, 
+          -- Name of transient result set, supplied by target, representing the persistent result set to which
+          -- package pertains. Meaningful only when package  is presented. (i.e. not on ES response).
+  numberOfRecords  [2] IMPLICIT INTEGER OPTIONAL}
+END
+
+
+ESFormat-PersistentQuery
+{Z39-50-extendedService PersistentQuery (2)} DEFINITIONS ::=
+BEGIN
+IMPORTS Query, InternationalString, OtherInformation FROM Z39-50-APDU-1995;
+PersistentQuery ::= CHOICE{
+    esRequest      [1] IMPLICIT SEQUENCE{
+        toKeep    [1] OriginPartToKeep OPTIONAL,
+        notToKeep  [2] OriginPartNotToKeep},
+    taskPackage    [2] IMPLICIT SEQUENCE{
+        originPart  [1] OriginPartToKeep OPTIONAL,
+        targetPart  [2] TargetPart}}
+OriginPartToKeep ::= SEQUENCE{
+  dbNames        [2] IMPLICIT SEQUENCE OF InternationalString OPTIONAL,
+  additionalSearchInfo  [3] OtherInformation OPTIONAL}
+OriginPartNotToKeep ::= CHOICE{
+  package    [1] IMPLICIT InternationalString,
+  query    [2] Query}
+TargetPart ::= Query          
+END
+
+ESFormat-PeriodicQuerySchedule
+{Z39-50-extendedService PeriodicQuerySchedule (3)} DEFINITIONS ::=
+BEGIN
+IMPORTS Query, InternationalString, IntUnit FROM Z39-50-APDU-1995 
+ExportSpecification, Destination FROM ESFormat-ExportSpecification;
+
+PeriodicQuerySchedule ::= CHOICE{
+    esRequest    [1] IMPLICIT SEQUENCE{
+              toKeep    [1] OriginPartToKeep,
+              notToKeep  [2] OriginPartNotToKeep},
+    taskPackage    [2] IMPLICIT SEQUENCE{
+              originPart  [1] OriginPartToKeep,
+              targetPart  [2] TargetPart}}
+
+OriginPartToKeep ::=SEQUENCE{
+  activeFlag          [1] IMPLICIT BOOLEAN,
+  databaseNames        [2] IMPLICIT SEQUENCE OF InternationalString OPTIONAL,
+  resultSetDisposition      [3] IMPLICIT INTEGER{
+                    replace    (1),
+                    append    (2),
+                    createNew  (3)  -- Only if origin and target have agreement about
+                            -- naming convention for the resulting package,
+                             -- and only if no result set is specified.
+                } OPTIONAL,   -- Mandatory on 'create' if result set is specified, in
+                        -- which case it must be 'replace' or 'append.
+  alertDestination        [4] Destination OPTIONAL,
+  exportParameters      [5] CHOICE{
+                    packageName  [1]   IMPLICIT InternationalString,
+                    exportPackage  [2] ExportSpecification} OPTIONAL}
+
+OriginPartNotToKeep ::= SEQUENCE{
+  querySpec           [1] CHOICE{
+                    actualQuery    [1] Query,
+                    packageName  [2] IMPLICIT InternationalString} OPTIONAL,
+                  -- mandatory for 'create'
+  originSuggestedPeriod    [2] Period OPTIONAL,  -- mandatory for 'create'
+  expiration          [3] IMPLICIT GeneralizedTime OPTIONAL,
+  resultSetPackage        [4] IMPLICIT InternationalString OPTIONAL}
+
+TargetPart ::= SEQUENCE{
+  actualQuery        [1] Query,
+  targetStatedPeriod    [2] Period,
+                  -- Target supplies the period, which may be same as origin proposed.
+  expiration        [3] IMPLICIT GeneralizedTime OPTIONAL,
+                  -- Target supplies value for task package. It may be the same as origin
+                  -- proposed or different from (and overrides) origin proposal, but if
+                  -- omitted, there is no expiration.
+  resultSetPackage      [4] IMPLICIT InternationalString OPTIONAL,
+                  -- May be omitted only if exportParameters was supplied. Target
+                  -- supplies same name as origin supplied, if origin did supply a name.
+  lastQueryTime      [5] IMPLICIT GeneralizedTime,
+  lastResultNumber    [6] IMPLICIT INTEGER,
+  numberSinceModify    [7] IMPLICIT INTEGER OPTIONAL}
+
+
+
+
+  Period ::= CHOICE{
+                unit             [1] IMPLICIT IntUnit,
+                 businessDaily     [2] IMPLICIT NULL,
+              continuous       [3] IMPLICIT NULL,
+              other         [4] IMPLICIT InternationalString}
+END
+
+
+ESFormat-ItemOrder
+{Z39-50-extendedService ItemOrder (4)} DEFINITIONS ::=
+BEGIN
+IMPORTS InternationalString FROM Z39-50-APDU-1995;
+ItemOrder ::= CHOICE{
+    esRequest  [1] IMPLICIT SEQUENCE{
+              toKeep    [1] OriginPartToKeep OPTIONAL,
+              notToKeep  [2] OriginPartNotToKeep},
+    taskPackage  [2] IMPLICIT SEQUENCE{
+              originPart  [1] OriginPartToKeep OPTIONAL,
+              targetPart  [2] TargetPart}}
+OriginPartToKeep ::= SEQUENCE{
+  supplDescription    [1] IMPLICIT EXTERNAL OPTIONAL,
+  contact        [2] IMPLICIT SEQUENCE{
+                       name  [1]   IMPLICIT InternationalString OPTIONAL,
+                         phone  [2]   IMPLICIT InternationalString OPTIONAL,
+                       email  [3]   IMPLICIT InternationalString OPTIONAL} OPTIONAL,
+  addlBilling      [3] IMPLICIT SEQUENCE{
+                paymentMethod    [1]   CHOICE{
+                                  billInvoice              [0] IMPLICIT NULL,
+                                    prepay                [1] IMPLICIT NULL,
+                                    depositAccount        [2] IMPLICIT NULL,
+                                    creditCard          [3] IMPLICIT CreditCardInfo,
+                    cardInfoPreviouslySupplied  [4] IMPLICIT NULL,
+                    privateKnown        [5] IMPLICIT NULL,
+                    privateNotKnown      [6] IMPLICIT EXTERNAL},
+                customerReference  [2] IMPLICIT InternationalString OPTIONAL,
+                     customerPONumber  [3] IMPLICIT InternationalString OPTIONAL}
+                                 OPTIONAL}
+CreditCardInfo   ::= SEQUENCE{
+       nameOnCard    [1] IMPLICIT InternationalString,
+      expirationDate    [2] IMPLICIT InternationalString,
+    cardNumber      [3] IMPLICIT InternationalString} 
+
+OriginPartNotToKeep ::= SEQUENCE{ -- Corresponds to 'requestedItem' in service definition.
+      --  Must supply at least one, and may supply both.
+  resultSetItem    [1]   IMPLICIT SEQUENCE{  
+                resultSetId    [1]   IMPLICIT InternationalString,
+                    item      [2]   IMPLICIT INTEGER} OPTIONAL,
+  itemRequest      [2] IMPLICIT EXTERNAL OPTIONAL
+                -- When itemRequest is an ILL-Request APDU, 
+                -- use OID {iso standard 10161 abstract-syntax (2) ill-apdus (1)}
+              }
+
+TargetPart ::= SEQUENCE{
+  itemRequest      [1]  IMPLICIT EXTERNAL OPTIONAL,
+    -- When itemRequest is an ILL-Request APDU, use OID 1.0.10161.2.1 (as above)
+  statusOrErrorReport  [2] IMPLICIT EXTERNAL OPTIONAL,
+    -- When statusOrErrorReport is an ILL Status-Or-Error-Report APDU, use OID  1.0.10161.2.1 (as above)
+  auxiliaryStatus    [3]  IMPLICIT INTEGER{
+                notReceived      (1),
+                loanQueue      (2),
+                forwarded      (3),
+                unfilledCopyright  (4),
+                filledCopyright    (5)} OPTIONAL}
+END
+
+
+
+
+ESFormat-Update0
+{Z39-50-extendedService Update (5)} DEFINITIONS ::=
+BEGIN
+IMPORTS DiagRec, InternationalString FROM Z39-50-APDU-1995; 
+Update ::= CHOICE{
+    esRequest  [1] IMPLICIT SEQUENCE{
+              toKeep    [1] OriginPartToKeep,
+              notToKeep  [2] OriginPartNotToKeep},
+    taskPackage  [2] IMPLICIT SEQUENCE{
+              originPart  [1] OriginPartToKeep,
+              targetPart  [2] TargetPart}}
+
+
+OriginPartToKeep ::= SEQUENCE{
+  action          [1] IMPLICIT INTEGER{
+                   recordInsert    (1),
+                   recordReplace  (2),
+                  recordDelete  (3),
+                  elementUpdate  (4)},
+  databaseName      [2] IMPLICIT InternationalString,
+  schema          [3] IMPLICIT OBJECT IDENTIFIER OPTIONAL,
+  elementSetName      [4] IMPLICIT InternationalString OPTIONAL}
+
+
+OriginPartNotToKeep ::= SuppliedRecords
+
+
+TargetPart ::= SEQUENCE{
+  updateStatus    [1] IMPLICIT INTEGER{
+                  success  (1),
+                  partial  (2),
+                  failure  (3)},
+  globalDiagnostics  [2] IMPLICIT SEQUENCE OF DiagRec OPTIONAL,
+                -- These are non-surrogate diagnostics relating to the task, 
+                -- not to individual records.
+  taskPackageRecords  [3] IMPLICIT SEQUENCE OF TaskPackageRecordStructure
+                -- There should be a TaskPackageRecordStructure for every record
+                -- supplied. The target should create such a structure for every
+                      -- record immediately upon creating the task package to include
+                -- correlation information and status. The record itself would not
+                -- be included until processing for that record is complete.
+            }
+
+-- Auxiliary definitions for Update
+SuppliedRecords ::= SEQUENCE OF SEQUENCE{
+  recordId    [1] CHOICE{
+              number  [1] IMPLICIT INTEGER,
+              string  [2] IMPLICIT InternationalString,
+              opaque  [3]  IMPLICIT OCTET STRING} OPTIONAL,
+  supplementalId  [2] CHOICE{
+              timeStamp    [1] IMPLICIT GeneralizedTime,
+              versionNumber  [2] IMPLICIT InternationalString,
+              previousVersion  [3] IMPLICIT EXTERNAL} OPTIONAL,
+  correlationInfo  [3] IMPLICIT CorrelationInfo OPTIONAL,
+  record      [4] IMPLICIT EXTERNAL}
+
+CorrelationInfo ::= SEQUENCE{
+          -- origin may supply one or both for any record:
+  note  [1] IMPLICIT InternationalString OPTIONAL,
+  id    [2] IMPLICIT INTEGER OPTIONAL}
+
+TaskPackageRecordStructure ::= SEQUENCE{
+    recordOrSurDiag  [1] CHOICE {
+                record    [1] IMPLICIT EXTERNAL,
+                        -- Choose 'record' if recordStatus is 'success', and
+                        -- elementSetName was supplied.
+                diagnostic  [2] DiagRec
+                        -- Choose 'diagnostic', if RecordStatus is failure.
+                                } OPTIONAL,
+                -- The parameter recordOrSurDiag will thus be omitted only if
+                -- 'elementSetName' was omitted and recordStatus is
+                -- 'success'; or if record status is 'queued' or in 'process'.
+    correlationInfo    [2] IMPLICIT CorrelationInfo OPTIONAL,
+                -- This should be included if it was supplied by the origin.
+    recordStatus      [3] IMPLICIT INTEGER{
+                  success    (1),
+                  queued    (2),
+                  inProcess  (3),
+                  failure    (4)}}
+END
+
+
+ESFormat-ExportSpecification
+{Z39-50-extendedService ExportSpecification (6)} DEFINITIONS ::=
+BEGIN
+EXPORTS ExportSpecification, Destination; IMPORTS CompSpec, InternationalString FROM Z39-50-APDU-1995;
+ExportSpecification ::= CHOICE{
+    esRequest    [1] IMPLICIT SEQUENCE{
+        toKeep    [1] OriginPartToKeep,
+        notToKeep  [2] IMPLICIT NULL},
+    taskPackage    [2] IMPLICIT SEQUENCE{
+        originPart  [1] OriginPartToKeep,
+        targetPart  [2] IMPLICIT NULL}}
+OriginPartToKeep ::= SEQUENCE{
+  composition        [1] IMPLICIT CompSpec,
+  exportDestination    [2] Destination}
+
+  Destination ::= CHOICE{
+  phoneNumber    [1]    IMPLICIT InternationalString,
+  faxNumber      [2]   IMPLICIT InternationalString,
+  x400address      [3]   IMPLICIT InternationalString,
+  emailAddress    [4]   IMPLICIT InternationalString,
+  pagerNumber    [5]   IMPLICIT InternationalString,
+  ftpAddress      [6]   IMPLICIT InternationalString,
+  ftamAddress    [7]   IMPLICIT InternationalString,
+  printerAddress    [8]   IMPLICIT InternationalString,
+  other        [100]  IMPLICIT SEQUENCE{
+                  vehicle      [1]  IMPLICIT InternationalString  OPTIONAL,
+                  destination    [2] IMPLICIT InternationalString}}
+END
+
+
+
+
+ESFormat-ExportInvocation
+{Z39-50-extendedService ExportInvocation (7)} DEFINITIONS ::=
+BEGIN
+IMPORTS InternationalString, IntUnit FROM Z39-50-APDU-1995 
+ExportSpecification FROM ESFormat-ExportSpecification;
+ExportInvocation ::= CHOICE{
+    esRequest    [1] IMPLICIT SEQUENCE{
+        toKeep    [1] OriginPartToKeep,
+        notToKeep  [2] OriginPartNotToKeep},
+    taskPackage    [2] IMPLICIT SEQUENCE{
+        originPart  [1] OriginPartToKeep,
+        targetPart  [2] TargetPart OPTIONAL}}
+
+OriginPartToKeep ::= SEQUENCE{
+  exportSpec    [1] CHOICE{
+              packageName    [1] IMPLICIT InternationalString,
+              packageSpec    [2] ExportSpecification},
+  numberOfCopies  [2] IMPLICIT INTEGER}
+
+
+
+
+
+OriginPartNotToKeep  ::= SEQUENCE{
+  resultSetId      [1] IMPLICIT InternationalString,
+  records        [2] CHOICE{
+                all    [1] IMPLICIT NULL,
+                ranges  [2]   IMPLICIT SEQUENCE OF SEQUENCE{
+                        start  [1] IMPLICIT INTEGER,
+                        count  [2] IMPLICIT INTEGER OPTIONAL
+                          -- Count may be omitted only on last range, to indicate
+                          -- "all remaining records beginning with 'start'."
+                    }}}
+
+TargetPart   ::= SEQUENCE{
+    estimatedQuantity    [1] IMPLICIT IntUnit OPTIONAL,
+    quantitySoFar      [2] IMPLICIT IntUnit OPTIONAL,
+    estimatedCost      [3] IMPLICIT IntUnit OPTIONAL,
+    costSoFar        [4] IMPLICIT IntUnit OPTIONAL}
+END
+
+
+
+UserInfoFormat-searchResult-1
+{Z39-50-userInfoFormat searchResult-1 (1)} DEFINITIONS ::=
+BEGIN
+IMPORTS DatabaseName, Term, Query, IntUnit, InternationalString FROM Z39-50-APDU-1995;
+SearchInfoReport ::= SEQUENCE OF SEQUENCE{
+  subqueryId      [1] IMPLICIT InternationalString OPTIONAL, 
+                           -- shorthand identifier of subquery
+  fullQuery        [2] IMPLICIT BOOLEAN,     -- 'true' means this is the full query; 'false',
+                          -- a sub-query 
+  subqueryExpression    [3] QueryExpression OPTIONAL,  -- A subquery of the query as
+                          -- submitted. May be whole query;
+                          -- if so, "fullQuery" should be 'true'.
+  subqueryInterpretation  [4] QueryExpression OPTIONAL,  -- how target interpreted subquery
+  subqueryRecommendation  [5] QueryExpression OPTIONAL,  -- target-recommended alternative
+  subqueryCount      [6] IMPLICIT INTEGER OPTIONAL,  -- Number of records for this
+                          -- subQuery, across all of the specified
+                          -- databases. (If during search, via resource
+                           -- control, number of records so far).
+  subqueryWeight     [7] IMPLICIT IntUnit OPTIONAL,  -- relative weight of this subquery
+  resultsByDB          [8] IMPLICIT ResultsByDB OPTIONAL}
+
+ResultsByDB ::= SEQUENCE OF SEQUENCE{
+  databases      [1] CHOICE{
+            all     [1] IMPLICIT NULL,
+                  -- applies across all of the databases in Search PDU
+            list    [2]  IMPLICIT SEQUENCE OF DatabaseName
+                  -- applies across all databases in this list
+              },
+  count        [2] IMPLICIT INTEGER OPTIONAL,
+            -- Number of records for query component (and, as above, if during search,
+             -- via resource control, number of records so far).
+  resultSetName    [3] IMPLICIT InternationalString OPTIONAL
+                        -- Target-assigned result set by which subQuery is available. Should not
+             -- be provided unless processing for this query component is concluded (i.e.,
+            -- when this report comes during search, via resource control, as opposed
+            -- to after search, via additionalSearchInfo).
+              }
+
+QueryExpression ::=  CHOICE {
+                term   [1] IMPLICIT SEQUENCE{
+              queryTerm  [1]  Term,
+              termComment            [2] IMPLICIT InternationalString OPTIONAL},
+           query  [2] Query}
+END
+
+
+
+ElementSpecificationFormat-eSpec-1
+{Z39-50-elementSpec eSpec-1 (1)} DEFINITIONS ::=
+BEGIN
+IMPORTS Variant FROM RecordSyntax-generic
+StringOrNumeric, InternationalString FROM Z39-50-APDU-1995;
+--
+Espec-1 ::= SEQUENCE{
+  elementSetNames    [1] IMPLICIT SEQUENCE OF InternationalString OPTIONAL,
+                  -- Origin may include one or more element set names, each
+                  -- specifying a set of elements. Each of the elements is to be
+                  -- treated as an elementRequest in the form of simpleElement,
+                  -- where occurrence is 1. 
+  defaultVariantSetId    [2] IMPLICIT OBJECT IDENTIFIER OPTIONAL,
+                  -- If supplied, applies whenever variantRequest 
+                  -- does not include variantSetId. 
+  defaultVariantRequest  [3] IMPLICIT Variant OPTIONAL,
+                  -- If supplied, then for each simple elementRequest that does not
+                   -- include a variantRequest, the defaultVariantRequest applies.
+                  -- (defaultVariantRequest does not apply to a compositeRequest.)
+  defaultTagType      [4] IMPLICIT INTEGER OPTIONAL,
+                  -- If supplied, applies whenever 'tagType' (within 'tag' within TagPath) 
+                  -- is omitted.
+  elements        [5] IMPLICIT SEQUENCE OF ElementRequest OPTIONAL}
+--
+
+ElementRequest::= CHOICE{
+  simpleElement    [1]   IMPLICIT SimpleElement,
+  compositeElement  [2] IMPLICIT SEQUENCE{
+            elementList    [1] CHOICE{
+                  primitives    [1]   IMPLICIT SEQUENCE OF InternationalString,
+                              -- Origin may specify one or more element
+                              -- set names, each identifying a set of elements,
+                              -- and the composite element is the union.
+                  specs      [2] IMPLICIT SEQUENCE OF SimpleElement},
+
+            deliveryTag    [2] IMPLICIT TagPath,
+                          -- DeliveryTag tagPath for compositeElement may not
+                          -- include wildThing or wildPath.
+            variantRequest  [3] IMPLICIT Variant OPTIONAL}}
+
+SimpleElement ::= SEQUENCE{
+      path        [1] IMPLICIT TagPath,
+      variantRequest  [2] IMPLICIT Variant OPTIONAL}
+  
+
+TagPath ::= SEQUENCE OF CHOICE{  
+  specificTag  [1] IMPLICIT SEQUENCE{
+            tagType  [1] IMPLICIT INTEGER OPTIONAL,
+                      -- If omitted, then 'defaultTagType' (above) applies, if supplied, and
+                      -- if not supplied, then default listed in schema applies.
+            tagValue  [2] StringOrNumeric,
+             occurrence  [3] Occurrences OPTIONAL 
+                      -- default is "first occurrence"
+                  },
+  wildThing  [2] Occurrences,
+              -- Get Nth "thing" at this level, regardless of tag, for each N specified by
+            -- "Occurrences" (which may be 'all' meaning match every element at this level).
+            -- E.g., if "Occurrences" is 3, get third element regardless of its tag or the tag of
+            -- the first two elements.
+  wildPath  [3] IMPLICIT NULL
+              -- Match any tag, at this level or below, that is on a path for which next tag in this 
+              -- TagPath sequence occurs. WildPath may not be last member of the TagPath
+            -- sequence.
+                      }
+--
+
+Occurrences ::= CHOICE{
+  all    [1] IMPLICIT NULL,
+  last    [2] IMPLICIT NULL,
+  values  [3] IMPLICIT SEQUENCE{
+          start    [1] IMPLICIT INTEGER,
+                  -- if 'start' alone is included, then single occurrence is requested
+          howMany  [2] IMPLICIT INTEGER OPTIONAL
+                  -- For example, if 'start' is 5 and 'howMany' is 6, then request is for
+                  -- "occurrences 5 through 10."
+                  }}
+END
+
diff --git a/src/zgdu.c b/src/zgdu.c
new file mode 100644 (file)
index 0000000..a37a96e
--- /dev/null
@@ -0,0 +1,364 @@
+/*
+ * Copyright (c) 2002-2003, Index Data.
+ * See the file LICENSE for details.
+ *
+ * $Id: zgdu.c,v 1.1 2003-10-27 12:21:36 adam Exp $
+ */
+
+#include <yaz/odr.h>
+#include <yaz/yaz-version.h>
+#include <yaz/zgdu.h>
+
+static int decode_headers_content(ODR o, int off, Z_HTTP_Header **headers,
+                                  char **content_buf, int *content_len)
+{
+    int i = off;
+
+    *headers = 0;
+    while (i < o->size-1 && o->buf[i] == '\r')
+    {
+        int po;
+        i++;
+        if (o->buf[i] != '\n')
+        {
+            o->error = OHTTP;
+            return 0;
+        }
+       i++;
+       if (o->buf[i] == '\r')
+            break;
+        for (po = i; ; i++)
+        {
+            if (i == o->size)
+            {
+                o->error = OHTTP;
+                return 0;
+            }
+            else if (o->buf[i] == ':')
+                break;
+        }
+        *headers = (Z_HTTP_Header *) odr_malloc(o, sizeof(**headers));
+        (*headers)->name = (char*) odr_malloc(o, i - po + 1);
+        memcpy ((*headers)->name, o->buf + po, i - po);
+        (*headers)->name[i - po] = '\0';
+        i++;
+        while (i < o->size-1 && o->buf[i] == ' ')
+            i++;
+        for (po = i; i < o->size-1 && o->buf[i] != '\r' ; i++)
+           ;
+        
+        (*headers)->value = (char*) odr_malloc(o, i - po + 1);
+        memcpy ((*headers)->value, o->buf + po, i - po);
+        (*headers)->value[i - po] = '\0';
+        
+        headers = &(*headers)->next;
+    }
+    *headers = 0;
+    i++;
+    if (o->buf[i] != '\n')
+    {
+        o->error = OHTTP;
+        return 0;
+    }
+    i++;
+
+    if (i > o->size)
+    {
+        o->error = OHTTP;
+        return 0;
+    }
+    else if (i == o->size)
+    {
+        *content_buf = 0;
+        *content_len = 0;
+    }
+    else 
+    {
+        *content_len = o->size - i;
+        *content_buf = (char*) odr_malloc(o, *content_len + 1);
+        memcpy(*content_buf, o->buf + i, *content_len);
+        (*content_buf)[*content_len] = '\0';
+    }
+    return 1;
+}
+
+void z_HTTP_header_add(ODR o, Z_HTTP_Header **hp, const char *n,
+                       const char *v)
+{
+    while (*hp)
+        hp = &(*hp)->next;
+    *hp = (Z_HTTP_Header *) odr_malloc(o, sizeof(**hp));
+    (*hp)->name = odr_strdup(o, n);
+    (*hp)->value = odr_strdup(o, v);
+    (*hp)->next = 0;
+}
+
+const char *z_HTTP_header_lookup(Z_HTTP_Header *hp, const char *n)
+{
+    for (; hp; hp = hp->next)
+        if (!strcmp(hp->name, n))
+            return hp->value;
+    return 0;
+}
+
+
+Z_GDU *z_get_HTTP_Request(ODR o)
+{
+    Z_GDU *p = (Z_GDU *) odr_malloc(o, sizeof(*p));
+    Z_HTTP_Request *hreq;
+
+    p->which = Z_GDU_HTTP_Request;
+    p->u.HTTP_Request = (Z_HTTP_Request *) odr_malloc(o, sizeof(*hreq));
+    hreq = p->u.HTTP_Request;
+    hreq->headers = 0;
+    hreq->content_len = 0;
+    hreq->content_buf = 0;
+    hreq->version = "1.1";
+    hreq->method = "POST";
+    hreq->path = "/";
+    z_HTTP_header_add(o, &hreq->headers, "User-Agent",
+                      "YAZ/" YAZ_VERSION);
+    return p;
+}
+
+Z_GDU *z_get_HTTP_Response(ODR o, int code)
+{
+    Z_GDU *p = (Z_GDU *) odr_malloc(o, sizeof(*p));
+    Z_HTTP_Response *hres;
+
+    p->which = Z_GDU_HTTP_Response;
+    p->u.HTTP_Response = (Z_HTTP_Response *) odr_malloc(o, sizeof(*hres));
+    hres = p->u.HTTP_Response;
+    hres->headers = 0;
+    hres->content_len = 0;
+    hres->content_buf = 0;
+    hres->code = code;
+    hres->version = "1.1";
+    z_HTTP_header_add(o, &hres->headers, "Server",
+                      "YAZ/" YAZ_VERSION);
+    if (code != 200)
+    {
+        hres->content_buf = (char*) odr_malloc(o, 400);
+        sprintf (hres->content_buf, 
+                 "<!DOCTYPE HTML PUBLIC \"-//IETF//DTD HTML 2.0//EN\">\n"
+                 "<HTML>\n"
+                 " <HEAD>\n"
+                 "  <TITLE>YAZ " YAZ_VERSION "</TITLE>\n"
+                 " </HEAD>\n"
+                 " <BODY>\n"
+                 "  <P><A HREF=\"http://www.indexdata.dk/yaz/\">YAZ</A> " 
+                 YAZ_VERSION "</P>\n"
+                 "  <P>Error: %d</P>\n"
+                 "  <P>Description: %.50s</P>\n"
+                 " </BODY>\n"
+                 "</HTML>\n",
+                 code, z_HTTP_errmsg(code));
+        hres->content_len = strlen(hres->content_buf);
+        z_HTTP_header_add(o, &hres->headers, "Content-Type", "text/html");
+    }
+    return p;
+}
+
+const char *z_HTTP_errmsg(int code)
+{
+    if (code == 200)
+        return "OK";
+    else if (code == 400)
+        return "Bad Request";
+    else if (code == 404)
+        return "Not Found";
+    else if (code == 405)
+        return "Method Not Allowed";
+    else if (code == 500)
+        return "Internal Error";
+    else
+        return "Unknown Error";
+}
+
+int z_GDU (ODR o, Z_GDU **p, int opt, const char *name)
+{
+    if (o->direction == ODR_DECODE) {
+        *p = (Z_GDU *) odr_malloc(o, sizeof(**p));
+        if (o->size > 10 && !memcmp(o->buf, "HTTP/", 5))
+        {
+            int i, po;
+            Z_HTTP_Response *hr;
+           (*p)->which = Z_GDU_HTTP_Response;
+
+            hr = (*p)->u.HTTP_Response = (Z_HTTP_Response *)
+                odr_malloc(o, sizeof(*hr));
+            po = i = 5;
+            while (i < o->size-2 && o->buf[i] != ' ' && o->buf[i] != '\r')
+                i++;
+            hr->version = (char *) odr_malloc(o, i - po + 1);
+            if (i - po)
+                memcpy(hr->version, o->buf + po, i - po);
+            hr->version[i-po] = 0;
+            if (o->buf[i] != ' ')
+            {
+                o->error = OHTTP;
+                return 0;
+            }
+            i++;
+            hr->code = 0;
+            while (i < o->size-2 && o->buf[i] >= '0' && o->buf[i] <= '9')
+            {
+                hr->code = hr->code*10 + (o->buf[i] - '0');
+                i++;
+            }
+            while (i < o->size-1 && o->buf[i] != '\r')
+                i++;
+            return decode_headers_content(o, i, &hr->headers,
+                                          &hr->content_buf, &hr->content_len);            
+        }
+        else if (o->size > 5 &&
+            o->buf[0] >= 0x20 && o->buf[0] < 0x7f
+            && o->buf[1] >= 0x20 && o->buf[1] < 0x7f
+            && o->buf[2] >= 0x20 && o->buf[2] < 0x7f
+            && o->buf[3] >= 0x20 && o->buf[3] < 0x7f)
+        {
+            int i, po;
+            Z_HTTP_Request *hr;
+
+           (*p)->which = Z_GDU_HTTP_Request;
+            hr = (*p)->u.HTTP_Request = 
+                (Z_HTTP_Request *) odr_malloc(o, sizeof(*hr));
+
+            /* method .. */
+            for (i = 0; o->buf[i] != ' '; i++)
+                if (i >= o->size-5 || i > 30)
+                {
+                    o->error = OHTTP;
+                    return 0;
+                }
+            hr->method = (char *) odr_malloc(o, i+1);
+            memcpy (hr->method, o->buf, i);
+            hr->method[i] = '\0';
+            /* path */
+            po = i+1;
+            for (i = po; o->buf[i] != ' '; i++)
+                if (i >= o->size-5)
+                {
+                    o->error = OHTTP;
+                    return 0;
+                }
+            hr->path = (char *) odr_malloc(o, i - po + 1);
+            memcpy (hr->path, o->buf+po, i - po);
+            hr->path[i - po] = '\0';
+            /* HTTP version */
+            i++;
+            if (i > o->size-5 || memcmp(o->buf+i, "HTTP/", 5))
+            {
+                o->error = OHTTP;
+                return 0;
+            }
+            i+= 5;
+            po = i;
+            while (o->buf[i] != '\r')
+            {
+                if (i >= o->size-1)
+                {
+                    o->error = OHTTP;
+                    return 0;
+                }
+                i++;
+            }
+            hr->version = (char *) odr_malloc(o, i - po + 1);
+            memcpy(hr->version, o->buf + po, i - po);
+            hr->version[i - po] = '\0';
+            /* headers */
+            return decode_headers_content(o, i, &hr->headers,
+                                          &hr->content_buf, &hr->content_len);
+
+        }
+        else
+        {
+           (*p)->which = Z_GDU_Z3950;
+            return z_APDU(o, &(*p)->u.z3950, opt, 0);
+        }
+    }
+    else /* ENCODE or PRINT */
+    {
+        int top0 = o->top;
+        char sbuf[80];
+        Z_HTTP_Header *h;
+        switch((*p)->which)
+        {
+        case Z_GDU_HTTP_Response:
+            sprintf(sbuf, "HTTP/%s %d %s\r\n", (*p)->u.HTTP_Response->version,
+                    (*p)->u.HTTP_Response->code,
+                    z_HTTP_errmsg((*p)->u.HTTP_Response->code));
+            odr_write(o, (unsigned char *) sbuf, strlen(sbuf));
+            /* apply Content-Length if not already applied */
+            if (!z_HTTP_header_lookup((*p)->u.HTTP_Response->headers,
+                                      "Content-Length"))
+            {
+                char lstr[20];
+                sprintf(lstr, "%d", (*p)->u.HTTP_Response->content_len);
+                z_HTTP_header_add(o,
+                                  &(*p)->u.HTTP_Response->headers,
+                                  "Content-Length", lstr);
+            }
+            for (h = (*p)->u.HTTP_Response->headers; h; h = h->next)
+            {
+                odr_write(o, (unsigned char *) h->name, strlen(h->name));
+                odr_write(o, (unsigned char *) ": ", 2);
+                odr_write(o, (unsigned char *) h->value, strlen(h->value));
+                odr_write(o, (unsigned char *) "\r\n", 2);
+            }
+            odr_write(o, (unsigned char *) "\r\n", 2);
+            if ((*p)->u.HTTP_Response->content_buf)
+                odr_write(o, (unsigned char *) 
+                          (*p)->u.HTTP_Response->content_buf,
+                          (*p)->u.HTTP_Response->content_len);
+            if (o->direction == ODR_PRINT)
+            {
+                fprintf(o->print, "-- HTTP response:\n%.*s\n", o->top - top0,
+                        o->buf + top0);
+                fprintf(o->print, "-- \n");
+            }
+            break;
+        case Z_GDU_HTTP_Request:
+            odr_write(o, (unsigned char *) (*p)->u.HTTP_Request->method,
+                      strlen((*p)->u.HTTP_Request->method));
+            odr_write(o, (unsigned char *) " ", 1);
+            odr_write(o, (unsigned char *) (*p)->u.HTTP_Request->path,
+                      strlen((*p)->u.HTTP_Request->path));
+            odr_write(o, (unsigned char *) " HTTP/", 6);
+            odr_write(o, (unsigned char *) (*p)->u.HTTP_Request->version,
+                      strlen((*p)->u.HTTP_Request->version));
+            odr_write(o, (unsigned char *) "\r\n", 2);
+            if ((*p)->u.HTTP_Request->content_len &&
+                !z_HTTP_header_lookup((*p)->u.HTTP_Request->headers,
+                                      "Content-Length"))
+            {
+                char lstr[20];
+                sprintf(lstr, "%d", (*p)->u.HTTP_Request->content_len);
+                z_HTTP_header_add(o,
+                                  &(*p)->u.HTTP_Request->headers,
+                                  "Content-Length", lstr);
+            }
+            for (h = (*p)->u.HTTP_Request->headers; h; h = h->next)
+            {
+                odr_write(o, (unsigned char *) h->name, strlen(h->name));
+                odr_write(o, (unsigned char *) ": ", 2);
+                odr_write(o, (unsigned char *) h->value, strlen(h->value));
+                odr_write(o, (unsigned char *) "\r\n", 2);
+            }
+            odr_write(o, (unsigned char *) "\r\n", 2);
+            if ((*p)->u.HTTP_Request->content_buf)
+                odr_write(o, (unsigned char *)
+                          (*p)->u.HTTP_Request->content_buf,
+                          (*p)->u.HTTP_Request->content_len);
+            if (o->direction == ODR_PRINT)
+            {
+                fprintf(o->print, "-- HTTP request:\n%.*s\n", o->top, o->buf);
+            }
+            break;
+        case Z_GDU_Z3950:
+            return z_APDU(o, &(*p)->u.z3950, opt, 0);
+        }
+    }
+    return 1;
+}
+
diff --git a/src/zget.c b/src/zget.c
new file mode 100644 (file)
index 0000000..76036fc
--- /dev/null
@@ -0,0 +1,498 @@
+/*
+ * Copyright (c) 1995-2003, Index Data.
+ * See the file LICENSE for details.
+ * Sebastian Hammer, Adam Dickmeiss
+ *
+ * $Id: zget.c,v 1.1 2003-10-27 12:21:36 adam Exp $
+ */
+
+#include <yaz/proto.h>
+
+Z_InitRequest *zget_InitRequest(ODR o)
+{
+    Z_InitRequest *r = (Z_InitRequest *)odr_malloc(o, sizeof(*r));
+
+    r->referenceId = 0;
+    r->options = (Odr_bitmask *)odr_malloc(o, sizeof(*r->options));
+    ODR_MASK_ZERO(r->options);
+    r->protocolVersion = (Odr_bitmask *)
+       odr_malloc(o, sizeof(*r->protocolVersion));
+
+    ODR_MASK_SET(r->options, Z_Options_search);
+    ODR_MASK_SET(r->options, Z_Options_present);
+
+    ODR_MASK_ZERO(r->protocolVersion);
+
+    ODR_MASK_SET(r->protocolVersion, Z_ProtocolVersion_1);
+    ODR_MASK_SET(r->protocolVersion, Z_ProtocolVersion_2);
+
+    r->preferredMessageSize = odr_intdup(o, 30*1024);
+    r->maximumRecordSize = odr_intdup(o, 30*1024);
+    r->idAuthentication = 0;
+    r->implementationId = "81";
+    r->implementationName = "Index Data/YAZ";
+    r->implementationVersion = YAZ_VERSION
+#ifdef YAZ_DATE_STR
+    " (" YAZ_DATE_STR ")"
+#endif
+#ifdef YAZ_OS
+    " " YAZ_OS
+#endif
+       ;
+    r->userInformationField = 0;
+    r->otherInfo = 0;
+    return r;
+}
+
+Z_InitResponse *zget_InitResponse(ODR o)
+{
+    Z_InitResponse *r = (Z_InitResponse *)odr_malloc(o, sizeof(*r));
+
+    r->referenceId = 0;
+    r->options = (Odr_bitmask *)odr_malloc(o, sizeof(*r->options));
+    ODR_MASK_ZERO(r->options);
+    r->protocolVersion = (Odr_bitmask *)odr_malloc(o, sizeof(*r->protocolVersion));
+    ODR_MASK_ZERO(r->protocolVersion);
+    r->preferredMessageSize = odr_intdup(o, 30*1024);
+    r->maximumRecordSize = odr_intdup(o, 30*1024);
+    r->result = odr_intdup(o, 1);
+    r->implementationId = "81";
+    r->implementationName = "Index Data/YAZ";
+    r->implementationVersion = YAZ_VERSION
+#ifdef YAZ_DATE_STR
+    " (" YAZ_DATE_STR ")"
+#endif
+#ifdef YAZ_OS
+    " " YAZ_OS
+#endif
+       ;
+    r->userInformationField = 0;
+    r->otherInfo = 0;
+    return r;
+}
+
+Z_SearchRequest *zget_SearchRequest(ODR o)
+{
+    Z_SearchRequest *r = (Z_SearchRequest *)odr_malloc(o, sizeof(*r));
+
+    r->referenceId = 0;
+    r->smallSetUpperBound = odr_intdup(o, 0);
+    r->largeSetLowerBound = odr_intdup(o, 1);
+    r->mediumSetPresentNumber = odr_intdup(o, 0);
+    r->replaceIndicator = odr_intdup(o, 1);
+    r->resultSetName = "default";
+    r->num_databaseNames = 0;
+    r->databaseNames = 0;
+    r->smallSetElementSetNames = 0;
+    r->mediumSetElementSetNames = 0;
+    r->preferredRecordSyntax = 0;
+    r->query = 0;
+    r->additionalSearchInfo = 0;
+    r->otherInfo = 0;
+    return r;
+}
+
+Z_SearchResponse *zget_SearchResponse(ODR o)
+{
+    Z_SearchResponse *r = (Z_SearchResponse *)odr_malloc(o, sizeof(*r));
+
+    r->referenceId = 0;
+    r->resultCount = odr_intdup(o, 0);
+    r->numberOfRecordsReturned = odr_intdup(o, 0);
+    r->nextResultSetPosition = odr_intdup(o, 0);
+    r->searchStatus = odr_intdup(o, 1);
+    r->resultSetStatus = 0;
+    r->presentStatus = 0;
+    r->records = 0;
+    r->additionalSearchInfo = 0;
+    r->otherInfo = 0;
+    return r;
+}
+
+Z_PresentRequest *zget_PresentRequest(ODR o)
+{
+    Z_PresentRequest *r = (Z_PresentRequest *)odr_malloc(o, sizeof(*r));
+
+    r->referenceId = 0;
+    r->resultSetId = "default";
+    r->resultSetStartPoint = odr_intdup(o, 1);
+    r->numberOfRecordsRequested = odr_intdup(o, 10);
+    r->num_ranges = 0;
+    r->additionalRanges = 0;
+    r->recordComposition = 0;
+    r->preferredRecordSyntax = 0;
+    r->maxSegmentCount = 0;
+    r->maxRecordSize = 0;
+    r->maxSegmentSize = 0;
+    r->otherInfo = 0;
+    return r;
+}
+
+Z_PresentResponse *zget_PresentResponse(ODR o)
+{
+    Z_PresentResponse *r = (Z_PresentResponse *)odr_malloc(o, sizeof(*r));
+
+    r->referenceId = 0;
+    r->numberOfRecordsReturned = odr_intdup(o, 0);
+    r->nextResultSetPosition = odr_intdup(o, 0);
+    r->presentStatus = odr_intdup(o, Z_PresentStatus_success);
+    r->records = 0;
+    r->otherInfo = 0;
+    return r;
+}
+
+Z_DeleteResultSetRequest *zget_DeleteResultSetRequest(ODR o)
+{
+    Z_DeleteResultSetRequest *r = (Z_DeleteResultSetRequest *)
+       odr_malloc(o, sizeof(*r));
+
+    r->referenceId = 0;
+    r->deleteFunction = odr_intdup(o, Z_DeleteRequest_list);
+    r->num_resultSetList = 0;
+    r->resultSetList = 0;
+    r->otherInfo = 0;
+    return r;
+}
+
+Z_DeleteResultSetResponse *zget_DeleteResultSetResponse(ODR o)
+{
+    Z_DeleteResultSetResponse *r = (Z_DeleteResultSetResponse *)
+       odr_malloc(o, sizeof(*r));
+    
+    r->referenceId = 0;
+    r->deleteOperationStatus = odr_intdup(o, Z_DeleteStatus_success);
+    r->deleteListStatuses = 0;
+    r->numberNotDeleted = 0;
+    r->bulkStatuses = 0;
+    r->deleteMessage = 0;
+    r->otherInfo = 0;
+    return r;
+}
+
+Z_ScanRequest *zget_ScanRequest(ODR o)
+{
+    Z_ScanRequest *r = (Z_ScanRequest *)odr_malloc(o, sizeof(*r));
+    
+    r->referenceId = 0;
+    r->num_databaseNames = 0;
+    r->databaseNames = 0;
+    r->attributeSet = 0;
+    r->termListAndStartPoint = 0;
+    r->stepSize = 0;
+    r->numberOfTermsRequested = odr_intdup(o, 20);
+    r->preferredPositionInResponse = 0;
+    r->otherInfo = 0;
+    return r;
+}
+
+Z_ScanResponse *zget_ScanResponse(ODR o)
+{
+    Z_ScanResponse *r = (Z_ScanResponse *)odr_malloc(o, sizeof(*r));
+    
+    r->referenceId = 0;
+    r->stepSize = 0;
+    r->scanStatus = odr_intdup(o, Z_Scan_success);
+    r->numberOfEntriesReturned = odr_intdup(o, 0);
+    r->positionOfTerm =0;
+    r->entries = 0;
+    r->attributeSet = 0;
+    r->otherInfo = 0;
+    return r;
+}
+
+Z_TriggerResourceControlRequest *zget_TriggerResourceControlRequest(ODR o)
+{
+    Z_TriggerResourceControlRequest *r = (Z_TriggerResourceControlRequest *)
+       odr_malloc(o, sizeof(*r));
+    
+    r->referenceId = 0;
+    r->requestedAction = odr_intdup(o, Z_TriggerResourceCtrl_resourceReport);
+    r->prefResourceReportFormat = 0;
+    r->resultSetWanted = 0;
+    r->otherInfo = 0;
+    return r;
+}
+
+Z_ResourceControlRequest *zget_ResourceControlRequest(ODR o)
+{
+    Z_ResourceControlRequest *r = (Z_ResourceControlRequest *)
+       odr_malloc(o, sizeof(*r));
+
+    r->referenceId = 0;
+    r->suspendedFlag = 0;
+    r->resourceReport = 0;
+    r->partialResultsAvailable = 0;
+    r->responseRequired = odr_intdup(o, 0);
+    r->triggeredRequestFlag = 0;
+    r->otherInfo = 0;
+    return r;
+}
+
+Z_ResourceControlResponse *zget_ResourceControlResponse(ODR o)
+{
+    Z_ResourceControlResponse *r = (Z_ResourceControlResponse *)
+       odr_malloc(o, sizeof(*r));
+
+    r->referenceId = 0;
+    r->continueFlag = odr_intdup(o, 1);
+    r->resultSetWanted = 0;
+    r->otherInfo = 0;
+    return r;
+}
+
+Z_AccessControlRequest *zget_AccessControlRequest(ODR o)
+{
+    Z_AccessControlRequest *r = (Z_AccessControlRequest *)
+       odr_malloc(o, sizeof(*r));
+
+    r->referenceId = 0;
+    r->which = Z_AccessRequest_simpleForm;
+    r->u.simpleForm = 0;
+    r->otherInfo = 0;
+    return r;
+}
+
+Z_AccessControlResponse *zget_AccessControlResponse(ODR o)
+{
+    Z_AccessControlResponse *r = (Z_AccessControlResponse *)
+       odr_malloc(o, sizeof(*r));
+
+    r->referenceId = 0;
+    r->which = Z_AccessResponse_simpleForm;
+    r->u.simpleForm = 0;
+    r->diagnostic = 0;
+    r->otherInfo = 0;
+    return r;
+}
+
+Z_Segment *zget_Segment(ODR o)
+{
+    Z_Segment *r = (Z_Segment *)odr_malloc(o, sizeof(*r));
+
+    r->referenceId = 0;
+    r->numberOfRecordsReturned = odr_intdup(o, 0);
+    r->num_segmentRecords = 0;
+    r->segmentRecords = (Z_NamePlusRecord **) odr_nullval();
+    r->otherInfo = 0;
+    return r;
+}
+
+Z_Close *zget_Close(ODR o)
+{
+    Z_Close *r = (Z_Close *)odr_malloc(o, sizeof(*r));
+
+    r->referenceId = 0;
+    r->closeReason = odr_intdup(o, Z_Close_finished);
+    r->diagnosticInformation = 0;
+    r->resourceReportFormat = 0;
+    r->resourceReport = 0;
+    r->otherInfo = 0;
+    return r;
+}
+
+Z_ResourceReportRequest *zget_ResourceReportRequest(ODR o)
+{
+    Z_ResourceReportRequest *r = (Z_ResourceReportRequest *)
+       odr_malloc(o, sizeof(*r));
+
+    r->referenceId = 0;
+    r->opId = 0;
+    r->prefResourceReportFormat = 0;
+    r->otherInfo = 0;
+    return r;
+}
+
+Z_ResourceReportResponse *zget_ResourceReportResponse(ODR o)
+{
+    Z_ResourceReportResponse *r = (Z_ResourceReportResponse *)
+       odr_malloc(o, sizeof(*r));
+
+    r->referenceId = 0;
+    r->resourceReportStatus = odr_intdup(o, Z_ResourceReportStatus_success);
+    r->resourceReport = 0;
+    r->otherInfo = 0;
+    return r;
+}
+
+Z_SortRequest *zget_SortRequest(ODR o)
+{
+    Z_SortRequest *r = (Z_SortRequest *)odr_malloc(o, sizeof(*r));
+
+    r->referenceId = 0;
+    r->inputResultSetNames = 0;
+    r->sortedResultSetName = 0;
+    r->sortSequence = 0;
+    r->otherInfo = 0;
+    return r;
+}
+
+Z_SortResponse *zget_SortResponse(ODR o)
+{
+    Z_SortResponse *r = (Z_SortResponse *)odr_malloc(o, sizeof(*r));
+
+    r->referenceId = 0;
+    r->sortStatus = odr_intdup(o, Z_SortStatus_success);
+    r->resultSetStatus = odr_intdup(o, Z_SortResultSetStatus_empty);
+    r->diagnostics = 0;
+    r->resultCount = 0;
+    r->otherInfo = 0;
+    return r;
+}
+
+Z_ExtendedServicesRequest *zget_ExtendedServicesRequest(ODR o)
+{
+    Z_ExtendedServicesRequest *r = (Z_ExtendedServicesRequest *)
+       odr_malloc(o, sizeof(*r));
+
+    r->referenceId = 0;
+    r->function = odr_intdup(o, Z_ExtendedServicesRequest_create);
+    r->packageType = 0;
+    r->packageName = 0;
+    r->userId = 0;
+    r->retentionTime = 0;
+    r->permissions = 0;
+    r->description = 0;
+    r->taskSpecificParameters = 0;
+    r->waitAction = odr_intdup(o, Z_ExtendedServicesRequest_waitIfPossible);
+    r->elements = 0;
+    r->otherInfo = 0;
+    return r;
+}
+
+Z_ExtendedServicesResponse *zget_ExtendedServicesResponse(ODR o)
+{
+    Z_ExtendedServicesResponse *r = (Z_ExtendedServicesResponse *)
+       odr_malloc(o, sizeof(*r));
+
+    r->referenceId = 0;
+    r->operationStatus = odr_intdup(o, Z_ExtendedServicesResponse_done);
+    r->num_diagnostics = 0;
+    r->diagnostics = 0;
+    r->taskPackage = 0;
+    r->otherInfo = 0;
+    return r;
+}
+
+Z_DuplicateDetectionRequest *zget_DuplicateDetectionRequest(ODR o)
+{
+    Z_DuplicateDetectionRequest *r = (Z_DuplicateDetectionRequest *)
+        odr_malloc(o, sizeof(*r));
+    
+    r->referenceId = 0;
+    r->num_inputResultSetIds = 0;
+    r->inputResultSetIds = 0;
+    r->outputResultSetName = 0;
+    r->applicablePortionOfRecord = 0;
+    r->num_duplicateDetectionCriteria = 0;
+    r->duplicateDetectionCriteria = 0;
+    r->clustering = 0;
+    r->num_retentionCriteria = 0;
+    r->retentionCriteria = 0;
+    r->num_sortCriteria = 0;
+    r->sortCriteria = 0;
+    r->otherInfo = 0;
+    return r;
+}
+
+Z_DuplicateDetectionResponse *zget_DuplicateDetectionResponse(ODR o)
+{
+    Z_DuplicateDetectionResponse *r = (Z_DuplicateDetectionResponse *)
+        odr_malloc(o, sizeof(*r));
+    r->referenceId = 0;
+    r->status = odr_intdup(o, Z_DuplicateDetectionResponse_success);
+    r->resultSetCount = 0;
+    r->num_diagnostics = 0;
+    r->diagnostics = 0;
+    r->otherInfo = 0;
+    return r;
+}
+Z_APDU *zget_APDU(ODR o, int which)
+{
+    Z_APDU *r = (Z_APDU *)odr_malloc(o, sizeof(*r));
+    
+    switch (r->which = which)
+    {
+    case Z_APDU_initRequest:
+        r->u.initRequest = zget_InitRequest(o);
+        break;
+    case Z_APDU_initResponse:
+        r->u.initResponse = zget_InitResponse(o);
+        break;
+    case Z_APDU_searchRequest:
+        r->u.searchRequest = zget_SearchRequest(o);
+        break;
+    case Z_APDU_searchResponse:
+        r->u.searchResponse = zget_SearchResponse(o);
+        break;
+    case Z_APDU_presentRequest:
+        r->u.presentRequest = zget_PresentRequest(o);
+        break;
+    case Z_APDU_presentResponse:
+        r->u.presentResponse = zget_PresentResponse(o);
+        break;
+    case Z_APDU_deleteResultSetRequest:
+        r->u.deleteResultSetRequest = zget_DeleteResultSetRequest(o);
+        break;
+    case Z_APDU_deleteResultSetResponse:
+        r->u.deleteResultSetResponse = zget_DeleteResultSetResponse(o);
+        break;
+    case Z_APDU_scanRequest:
+        r->u.scanRequest = zget_ScanRequest(o);
+        break;
+    case Z_APDU_scanResponse:
+        r->u.scanResponse = zget_ScanResponse(o);
+        break;
+    case Z_APDU_triggerResourceControlRequest:
+        r->u.triggerResourceControlRequest =
+            zget_TriggerResourceControlRequest(o);
+        break;
+    case Z_APDU_resourceControlRequest:
+        r->u.resourceControlRequest = zget_ResourceControlRequest(o);
+        break;
+    case Z_APDU_resourceControlResponse:
+        r->u.resourceControlResponse = zget_ResourceControlResponse(o);
+        break;
+    case Z_APDU_segmentRequest:
+        r->u.segmentRequest = zget_Segment(o);
+        break;
+    case Z_APDU_close:
+        r->u.close = zget_Close(o);
+        break;
+    case Z_APDU_accessControlRequest:
+        r->u.accessControlRequest = zget_AccessControlRequest(o);
+        break;
+    case Z_APDU_accessControlResponse:
+        r->u.accessControlResponse = zget_AccessControlResponse(o);
+        break;
+    case Z_APDU_resourceReportRequest:
+        r->u.resourceReportRequest = zget_ResourceReportRequest(o);
+        break;
+    case Z_APDU_resourceReportResponse:
+        r->u.resourceReportResponse = zget_ResourceReportResponse(o);
+        break;
+    case Z_APDU_sortRequest:
+        r->u.sortRequest = zget_SortRequest(o);
+        break;
+    case Z_APDU_sortResponse:
+        r->u.sortResponse = zget_SortResponse(o);
+        break;
+    case Z_APDU_extendedServicesRequest:
+        r->u.extendedServicesRequest = zget_ExtendedServicesRequest(o);
+        break;
+    case Z_APDU_extendedServicesResponse:
+        r->u.extendedServicesResponse = zget_ExtendedServicesResponse(o);
+       break;
+    case Z_APDU_duplicateDetectionRequest:
+        r->u.duplicateDetectionRequest = zget_DuplicateDetectionRequest(o);
+        break;
+    case Z_APDU_duplicateDetectionResponse:
+        r->u.duplicateDetectionResponse = zget_DuplicateDetectionResponse(o);
+        break;
+    default:
+        fprintf(stderr, "Bad APDU-type to zget_APDU");
+        exit(1);
+    }
+    return r;
+}
diff --git a/src/zoom-c.c b/src/zoom-c.c
new file mode 100644 (file)
index 0000000..da9ca8b
--- /dev/null
@@ -0,0 +1,3224 @@
+/*
+ * Copyright (c) 2000-2003, Index Data
+ * See the file LICENSE for details.
+ *
+ * $Id: zoom-c.c,v 1.1 2003-10-27 12:21:36 adam Exp $
+ *
+ * ZOOM layer for C, connections, result sets, queries.
+ */
+#include <assert.h>
+#include <string.h>
+#include "zoom-p.h"
+
+#include <yaz/yaz-util.h>
+#include <yaz/xmalloc.h>
+#include <yaz/otherinfo.h>
+#include <yaz/log.h>
+#include <yaz/pquery.h>
+#include <yaz/marcdisp.h>
+#include <yaz/diagbib1.h>
+#include <yaz/charneg.h>
+#include <yaz/ill.h>
+#include <yaz/srw.h>
+
+#if HAVE_SYS_POLL_H
+#include <sys/poll.h>
+#endif
+
+typedef enum {
+    zoom_pending,
+    zoom_complete
+} zoom_ret;
+
+static zoom_ret ZOOM_connection_send_init (ZOOM_connection c);
+static zoom_ret do_write_ex (ZOOM_connection c, char *buf_out, int len_out);
+
+static ZOOM_Event ZOOM_Event_create (int kind)
+{
+    ZOOM_Event event = (ZOOM_Event) xmalloc (sizeof(*event));
+    event->kind = kind;
+    event->next = 0;
+    event->prev = 0;
+    return event;
+}
+
+static void ZOOM_Event_destroy (ZOOM_Event event)
+{
+    xfree (event);
+}
+
+static void ZOOM_connection_put_event (ZOOM_connection c, ZOOM_Event event)
+{
+    if (c->m_queue_back)
+    {
+       c->m_queue_back->prev = event;
+       assert (c->m_queue_front);
+    }
+    else
+    {
+       assert (!c->m_queue_front);
+       c->m_queue_front = event;
+    }
+    event->next = c->m_queue_back;
+    event->prev = 0;
+    c->m_queue_back = event;
+}
+
+static ZOOM_Event ZOOM_connection_get_event(ZOOM_connection c)
+{
+    ZOOM_Event event = c->m_queue_front;
+    if (!event)
+    {
+        c->last_event = ZOOM_EVENT_NONE;
+       return 0;
+    }
+    assert (c->m_queue_back);
+    c->m_queue_front = event->prev;
+    if (c->m_queue_front)
+    {
+       assert (c->m_queue_back);
+       c->m_queue_front->next = 0;
+    }
+    else
+       c->m_queue_back = 0;
+    c->last_event = event->kind;
+    return event;
+}
+
+
+static void set_dset_error (ZOOM_connection c, int error,
+                            const char *dset,
+                            const char *addinfo, const char *addinfo2)
+{
+    xfree (c->addinfo);
+    c->addinfo = 0;
+    c->error = error;
+    c->diagset = dset;
+    if (addinfo && addinfo2)
+    {
+        c->addinfo = xmalloc(strlen(addinfo) + strlen(addinfo2) + 2);
+        strcpy(c->addinfo, addinfo);
+        strcat(c->addinfo, addinfo2);
+    }
+    else if (addinfo)
+        c->addinfo = xstrdup(addinfo);
+    if (error)
+        yaz_log(LOG_DEBUG, "Error %s %s:%d %s %s",
+                c->host_port ? c->host_port : "<>", dset, error,
+                addinfo ? addinfo : "",
+                addinfo2 ? addinfo2 : "");
+}
+
+#if HAVE_XML2
+static void set_HTTP_error (ZOOM_connection c, int error,
+                            const char *addinfo, const char *addinfo2)
+{
+    set_dset_error(c, error, "HTTP", addinfo, addinfo2);
+}
+#endif
+
+static void set_ZOOM_error (ZOOM_connection c, int error,
+                           const char *addinfo)
+{
+    set_dset_error(c, error, "ZOOM", addinfo, 0);
+}
+
+static void clear_error (ZOOM_connection c)
+{
+
+    switch (c->error)
+    {
+    case ZOOM_ERROR_CONNECT:
+    case ZOOM_ERROR_MEMORY:
+    case ZOOM_ERROR_DECODE:
+    case ZOOM_ERROR_CONNECTION_LOST:
+    case ZOOM_ERROR_INIT:
+    case ZOOM_ERROR_INTERNAL:
+    case ZOOM_ERROR_UNSUPPORTED_PROTOCOL:
+        break;
+    default:
+        set_ZOOM_error(c, ZOOM_ERROR_NONE, 0);
+    }
+}
+
+ZOOM_task ZOOM_connection_add_task (ZOOM_connection c, int which)
+{
+    ZOOM_task *taskp = &c->tasks;
+    while (*taskp)
+       taskp = &(*taskp)->next;
+    *taskp = (ZOOM_task) xmalloc (sizeof(**taskp));
+    (*taskp)->running = 0;
+    (*taskp)->which = which;
+    (*taskp)->next = 0;
+    clear_error (c);
+    return *taskp;
+}
+
+ZOOM_task ZOOM_connection_insert_task (ZOOM_connection c, int which)
+{
+    ZOOM_task task = (ZOOM_task) xmalloc (sizeof(*task));
+
+    task->next = c->tasks;
+    c->tasks = task;
+
+    task->running = 0;
+    task->which = which;
+    clear_error (c);
+    return task;
+}
+
+void ZOOM_connection_remove_task (ZOOM_connection c)
+{
+    ZOOM_task task = c->tasks;
+
+    if (task)
+    {
+       c->tasks = task->next;
+       switch (task->which)
+       {
+       case ZOOM_TASK_SEARCH:
+
+           ZOOM_resultset_destroy (task->u.search.resultset);
+           break;
+       case ZOOM_TASK_RETRIEVE:
+           ZOOM_resultset_destroy (task->u.retrieve.resultset);
+           break;
+        case ZOOM_TASK_CONNECT:
+            break;
+        case ZOOM_TASK_SCAN:
+            ZOOM_scanset_destroy (task->u.scan.scan);
+            break;
+        case ZOOM_TASK_PACKAGE:
+            ZOOM_package_destroy (task->u.package);
+            break;
+       default:
+           assert (0);
+       }
+       xfree (task);
+    }
+}
+
+static int ZOOM_connection_exec_task (ZOOM_connection c);
+
+void ZOOM_connection_remove_tasks (ZOOM_connection c)
+{
+    while (c->tasks)
+       ZOOM_connection_remove_task(c);
+}
+
+static ZOOM_record record_cache_lookup (ZOOM_resultset r, int pos);
+
+ZOOM_API(ZOOM_connection)
+ZOOM_connection_create (ZOOM_options options)
+{
+    ZOOM_connection c = (ZOOM_connection) xmalloc (sizeof(*c));
+
+    c->proto = PROTO_Z3950;
+    c->cs = 0;
+    c->mask = 0;
+    c->reconnect_ok = 0;
+    c->state = STATE_IDLE;
+    c->addinfo = 0;
+    set_ZOOM_error(c, ZOOM_ERROR_NONE, 0);
+    c->buf_in = 0;
+    c->len_in = 0;
+    c->buf_out = 0;
+    c->len_out = 0;
+    c->resultsets = 0;
+
+    c->options = ZOOM_options_create_with_parent(options);
+
+    c->host_port = 0;
+    c->path = 0;
+    c->proxy = 0;
+    
+    c->charset = c->lang = 0;
+
+    c->cookie_out = 0;
+    c->cookie_in = 0;
+    c->client_IP = 0;
+    c->tasks = 0;
+
+    c->odr_in = odr_createmem (ODR_DECODE);
+    c->odr_out = odr_createmem (ODR_ENCODE);
+
+    c->async = 0;
+    c->support_named_resultsets = 0;
+    c->last_event = ZOOM_EVENT_NONE;
+
+    c->m_queue_front = 0;
+    c->m_queue_back = 0;
+    return c;
+}
+
+/* set database names. Take local databases (if set); otherwise
+   take databases given in ZURL (if set); otherwise use Default */
+static char **set_DatabaseNames (ZOOM_connection con, ZOOM_options options,
+                                 int *num)
+{
+    char **databaseNames;
+    const char *c;
+    int no = 2;
+    const char *cp = ZOOM_options_get (options, "databaseName");
+    
+    if (!cp || !*cp)
+    {
+        if (strncmp (con->host_port, "unix:", 5) == 0)
+           cp = strchr (con->host_port+5, ':');
+       else
+           cp = strchr (con->host_port, '/');
+       if (cp)
+           cp++;
+    }
+    if (cp)
+    {
+       c = cp;
+       while ((c = strchr(c, '+')))
+       {
+           c++;
+           no++;
+       }
+    }
+    else
+       cp = "Default";
+    databaseNames = (char**)
+        odr_malloc (con->odr_out, no * sizeof(*databaseNames));
+    no = 0;
+    while (*cp)
+    {
+       c = strchr (cp, '+');
+       if (!c)
+           c = cp + strlen(cp);
+       else if (c == cp)
+       {
+           cp++;
+           continue;
+       }
+       /* cp ptr to first char of db name, c is char
+          following db name */
+       databaseNames[no] = (char*) odr_malloc (con->odr_out, 1+c-cp);
+       memcpy (databaseNames[no], cp, c-cp);
+       databaseNames[no++][c-cp] = '\0';
+       cp = c;
+       if (*cp)
+           cp++;
+    }
+    databaseNames[no] = NULL;
+    *num = no;
+    return databaseNames;
+}
+
+ZOOM_API(ZOOM_connection)
+ZOOM_connection_new (const char *host, int portnum)
+{
+    ZOOM_connection c = ZOOM_connection_create (0);
+
+    ZOOM_connection_connect (c, host, portnum);
+    return c;
+}
+
+ZOOM_API(void)
+ZOOM_connection_connect(ZOOM_connection c,
+                        const char *host, int portnum)
+{
+    const char *val;
+    ZOOM_task task;
+
+    if (c->cs)
+    {
+        yaz_log (LOG_DEBUG, "reconnect");
+        c->reconnect_ok = 1;
+        return;
+    }
+    yaz_log(LOG_DEBUG, "connect");
+    xfree (c->proxy);
+    val = ZOOM_options_get (c->options, "proxy");
+    if (val && *val)
+       c->proxy = xstrdup (val);
+    else
+       c->proxy = 0;
+
+    xfree (c->charset);
+    val = ZOOM_options_get (c->options, "charset");
+    if (val && *val)
+       c->charset = xstrdup (val);
+    else
+       c->charset = 0;
+
+    xfree (c->lang);
+    val = ZOOM_options_get (c->options, "lang");
+    if (val && *val)
+       c->lang = xstrdup (val);
+    else
+       c->lang = 0;
+
+    xfree (c->host_port);
+    if (portnum)
+    {
+       char hostn[128];
+       sprintf (hostn, "%.80s:%d", host, portnum);
+       c->host_port = xstrdup(hostn);
+    }
+    else
+       c->host_port = xstrdup(host);
+
+    ZOOM_options_set(c->options, "host", c->host_port);
+
+    val = ZOOM_options_get (c->options, "cookie");
+    if (val && *val)
+        c->cookie_out = xstrdup (val);
+
+    val = ZOOM_options_get (c->options, "clientIP");
+    if (val && *val)
+        c->client_IP = xstrdup (val);
+
+    c->async = ZOOM_options_get_bool (c->options, "async", 0);
+    set_ZOOM_error(c, ZOOM_ERROR_NONE, 0);
+
+    task = ZOOM_connection_add_task (c, ZOOM_TASK_CONNECT);
+
+    if (!c->async)
+    {
+       while (ZOOM_event (1, &c))
+           ;
+    }
+}
+
+ZOOM_API(ZOOM_query)
+ZOOM_query_create(void)
+{
+    ZOOM_query s = (ZOOM_query) xmalloc (sizeof(*s));
+
+    s->refcount = 1;
+    s->z_query = 0;
+    s->sort_spec = 0;
+    s->odr = odr_createmem (ODR_ENCODE);
+    s->query_string = 0;
+
+    return s;
+}
+
+ZOOM_API(void)
+ZOOM_query_destroy(ZOOM_query s)
+{
+    if (!s)
+       return;
+
+    (s->refcount)--;
+    yaz_log (LOG_DEBUG, "ZOOM_query_destroy count=%d", s->refcount);
+    if (s->refcount == 0)
+    {
+       odr_destroy (s->odr);
+       xfree (s);
+    }
+}
+
+ZOOM_API(int)
+ZOOM_query_prefix(ZOOM_query s, const char *str)
+{
+    s->query_string = odr_strdup(s->odr, str);
+    s->z_query = (Z_Query *) odr_malloc (s->odr, sizeof(*s->z_query));
+    s->z_query->which = Z_Query_type_1;
+    s->z_query->u.type_1 =  p_query_rpn(s->odr, PROTO_Z3950, str);
+    if (!s->z_query->u.type_1)
+       return -1;
+    return 0;
+}
+
+ZOOM_API(int)
+ZOOM_query_cql(ZOOM_query s, const char *str)
+{
+    Z_External *ext;
+
+    s->query_string = odr_strdup(s->odr, str);
+
+    ext = (Z_External *) odr_malloc(s->odr, sizeof(*ext));
+    ext->direct_reference = odr_getoidbystr(s->odr, "1.2.840.10003.16.2");
+    ext->indirect_reference = 0;
+    ext->descriptor = 0;
+    ext->which = Z_External_CQL;
+    ext->u.cql = s->query_string;
+    
+    s->z_query = (Z_Query *) odr_malloc (s->odr, sizeof(*s->z_query));
+    s->z_query->which = Z_Query_type_104;
+    s->z_query->u.type_104 =  ext;
+
+    return 0;
+}
+
+ZOOM_API(int)
+ZOOM_query_sortby(ZOOM_query s, const char *criteria)
+{
+    s->sort_spec = yaz_sort_spec (s->odr, criteria);
+    if (!s->sort_spec)
+       return -1;
+    return 0;
+}
+
+static zoom_ret do_write(ZOOM_connection c);
+
+ZOOM_API(void)
+ZOOM_connection_destroy(ZOOM_connection c)
+{
+    ZOOM_resultset r;
+    if (!c)
+       return;
+    if (c->cs)
+       cs_close (c->cs);
+    for (r = c->resultsets; r; r = r->next)
+       r->connection = 0;
+
+    xfree (c->buf_in);
+    xfree (c->addinfo);
+    odr_destroy (c->odr_in);
+    odr_destroy (c->odr_out);
+    ZOOM_options_destroy (c->options);
+    ZOOM_connection_remove_tasks (c);
+    xfree (c->host_port);
+    xfree (c->path);
+    xfree (c->proxy);
+    xfree (c->charset);
+    xfree (c->lang);
+    xfree (c->cookie_out);
+    xfree (c->cookie_in);
+    xfree (c->client_IP);
+    xfree (c);
+}
+
+void ZOOM_resultset_addref (ZOOM_resultset r)
+{
+    if (r)
+    {
+       (r->refcount)++;
+        yaz_log (LOG_DEBUG, "ZOOM_resultset_addref r=%p count=%d",
+                 r, r->refcount);
+    }
+}
+ZOOM_resultset ZOOM_resultset_create ()
+{
+    ZOOM_resultset r = (ZOOM_resultset) xmalloc (sizeof(*r));
+
+    yaz_log (LOG_DEBUG, "ZOOM_resultset_create r = %p", r);
+    r->refcount = 1;
+    r->size = 0;
+    r->odr = odr_createmem (ODR_ENCODE);
+    r->start = 0;
+    r->piggyback = 1;
+    r->setname = 0;
+    r->schema = 0;
+    r->count = 0;
+    r->step = 0;
+    r->record_cache = 0;
+    r->r_sort_spec = 0;
+    r->query = 0;
+    r->connection = 0;
+    r->next = 0;
+    return r;
+}
+
+ZOOM_API(ZOOM_resultset)
+ZOOM_connection_search_pqf(ZOOM_connection c, const char *q)
+{
+    ZOOM_resultset r;
+    ZOOM_query s = ZOOM_query_create();
+
+    ZOOM_query_prefix (s, q);
+
+    r = ZOOM_connection_search (c, s);
+    ZOOM_query_destroy (s);
+    return r;
+}
+
+ZOOM_API(ZOOM_resultset)
+ZOOM_connection_search(ZOOM_connection c, ZOOM_query q)
+{
+    ZOOM_resultset r = ZOOM_resultset_create ();
+    ZOOM_task task;
+    const char *cp;
+
+    r->r_sort_spec = q->sort_spec;
+    r->query = q;
+
+    r->options = ZOOM_options_create_with_parent(c->options);
+
+    r->start = ZOOM_options_get_int(r->options, "start", 0);
+    r->count = ZOOM_options_get_int(r->options, "count", 0);
+    r->step = ZOOM_options_get_int(r->options, "step", 0);
+    r->piggyback = ZOOM_options_get_bool (r->options, "piggyback", 1);
+    cp = ZOOM_options_get (r->options, "setname");
+    if (cp)
+        r->setname = xstrdup(cp);
+    cp = ZOOM_options_get (r->options, "schema");
+    if (cp)
+        r->schema = xstrdup(cp);
+    
+    r->connection = c;
+
+    r->next = c->resultsets;
+    c->resultsets = r;
+
+    if (c->host_port && c->proto == PROTO_HTTP)
+    {
+        if (!c->cs)
+        {
+            yaz_log(LOG_DEBUG, "NO COMSTACK");
+            ZOOM_connection_add_task(c, ZOOM_TASK_CONNECT);
+        }
+        else
+        {
+            yaz_log(LOG_DEBUG, "PREPARE FOR RECONNECT");
+            c->reconnect_ok = 1;
+        }
+    }
+
+    task = ZOOM_connection_add_task (c, ZOOM_TASK_SEARCH);
+    task->u.search.resultset = r;
+    ZOOM_resultset_addref (r);  
+
+    (q->refcount)++;
+
+    if (!c->async)
+    {
+       while (ZOOM_event (1, &c))
+           ;
+    }
+    return r;
+}
+
+ZOOM_API(void)
+ZOOM_resultset_destroy(ZOOM_resultset r)
+{
+    if (!r)
+        return;
+    (r->refcount)--;
+    yaz_log (LOG_DEBUG, "ZOOM_resultset_destroy r = %p count=%d",
+             r, r->refcount);
+    if (r->refcount == 0)
+    {
+        ZOOM_record_cache rc;
+
+        for (rc = r->record_cache; rc; rc = rc->next)
+       {
+            if (rc->rec.wrbuf_marc)
+                wrbuf_free (rc->rec.wrbuf_marc, 1);
+            if (rc->rec.wrbuf_iconv)
+                wrbuf_free (rc->rec.wrbuf_iconv, 1);
+            if (rc->rec.wrbuf_opac)
+                wrbuf_free (rc->rec.wrbuf_opac, 1);
+       }
+       if (r->connection)
+       {
+           /* remove ourselves from the resultsets in connection */
+           ZOOM_resultset *rp = &r->connection->resultsets;
+           while (1)
+           {
+               assert (*rp);   /* we must be in this list!! */
+               if (*rp == r)
+               {   /* OK, we're here - take us out of it */
+                   *rp = (*rp)->next;
+                   break;
+               }
+               rp = &(*rp)->next;
+           }
+       }
+       ZOOM_query_destroy (r->query);
+       ZOOM_options_destroy (r->options);
+       odr_destroy (r->odr);
+        xfree (r->setname);
+        xfree (r->schema);
+       xfree (r);
+    }
+}
+
+ZOOM_API(size_t)
+ZOOM_resultset_size (ZOOM_resultset r)
+{
+    return r->size;
+}
+
+static void do_close (ZOOM_connection c)
+{
+    if (c->cs)
+       cs_close(c->cs);
+    c->cs = 0;
+    c->mask = 0;
+    c->state = STATE_IDLE;
+}
+
+static void ZOOM_resultset_retrieve (ZOOM_resultset r,
+                                     int force_sync, int start, int count)
+{
+    ZOOM_task task;
+    ZOOM_connection c;
+    const char *cp;
+
+    if (!r)
+       return;
+    c = r->connection;
+    if (!c)
+       return;
+
+    if (c->host_port && c->proto == PROTO_HTTP)
+    {
+        if (!c->cs)
+        {
+            yaz_log(LOG_DEBUG, "NO COMSTACK");
+            ZOOM_connection_add_task(c, ZOOM_TASK_CONNECT);
+        }
+        else
+        {
+            yaz_log(LOG_DEBUG, "PREPARE FOR RECONNECT");
+            c->reconnect_ok = 1;
+        }
+    }
+    task = ZOOM_connection_add_task (c, ZOOM_TASK_RETRIEVE);
+    task->u.retrieve.resultset = r;
+    task->u.retrieve.start = start;
+    task->u.retrieve.count = count;
+
+    cp = ZOOM_options_get (r->options, "schema");
+    if (cp)
+    {
+        if (!r->schema || strcmp(r->schema, cp))
+        {
+            xfree(r->schema);
+            r->schema = xstrdup(cp);
+        }
+    }
+
+    ZOOM_resultset_addref (r);
+
+    if (!r->connection->async || force_sync)
+       while (r->connection && ZOOM_event (1, &r->connection))
+           ;
+}
+
+ZOOM_API(void)
+ZOOM_resultset_records (ZOOM_resultset r, ZOOM_record *recs,
+                        size_t start, size_t count)
+{
+    int force_present = 0;
+
+    if (!r)
+       return ;
+    if (count && recs)
+        force_present = 1;
+    ZOOM_resultset_retrieve (r, force_present, start, count);
+    if (force_present)
+    {
+        size_t i;
+        for (i = 0; i< count; i++)
+            recs[i] = ZOOM_resultset_record_immediate (r, i+start);
+    }
+}
+
+static zoom_ret do_connect (ZOOM_connection c)
+{
+    void *add;
+    const char *effective_host;
+
+    if (c->proxy)
+       effective_host = c->proxy;
+    else
+       effective_host = c->host_port;
+
+    yaz_log (LOG_DEBUG, "do_connect host=%s", effective_host);
+
+    assert (!c->cs);
+    c->cs = cs_create_host (effective_host, 0, &add);
+
+    if (c->cs && c->cs->protocol == PROTO_HTTP)
+    {
+#if HAVE_XML2
+        const char *path = 0;
+
+        c->proto = PROTO_HTTP;
+        cs_get_host_args(c->host_port, &path);
+        xfree(c->path);
+        c->path = xmalloc(strlen(path)+2);
+        c->path[0] = '/';
+        strcpy (c->path+1, path);
+#else
+        set_ZOOM_error(c, ZOOM_ERROR_UNSUPPORTED_PROTOCOL, "SRW");
+        do_close(c);
+        return zoom_complete;
+#endif
+    }
+    if (c->cs)
+    {
+        int ret = cs_connect (c->cs, add);
+        if (ret == 0)
+        {
+            ZOOM_Event event = ZOOM_Event_create(ZOOM_EVENT_CONNECT);
+            ZOOM_connection_put_event(c, event);
+            if (c->proto == PROTO_Z3950)
+                ZOOM_connection_send_init(c);
+            else
+            {
+                /* no init request for SRW .. */
+                assert (c->tasks->which == ZOOM_TASK_CONNECT);
+                ZOOM_connection_remove_task (c);
+                c->mask = 0;
+                ZOOM_connection_exec_task (c);
+            }
+            c->state = STATE_ESTABLISHED;
+            return zoom_pending;
+        }
+        else if (ret > 0)
+        {
+            c->state = STATE_CONNECTING; 
+            c->mask = ZOOM_SELECT_EXCEPT;
+            if (c->cs->io_pending & CS_WANT_WRITE)
+                c->mask += ZOOM_SELECT_WRITE;
+            if (c->cs->io_pending & CS_WANT_READ)
+                c->mask += ZOOM_SELECT_READ;
+            return zoom_pending;
+        }
+    }
+    c->state = STATE_IDLE;
+    set_ZOOM_error(c, ZOOM_ERROR_CONNECT, effective_host);
+    return zoom_complete;
+}
+
+int z3950_connection_socket(ZOOM_connection c)
+{
+    if (c->cs)
+       return cs_fileno(c->cs);
+    return -1;
+}
+
+int z3950_connection_mask(ZOOM_connection c)
+{
+    if (c->cs)
+       return c->mask;
+    return 0;
+}
+
+static void otherInfo_attach (ZOOM_connection c, Z_APDU *a, ODR out)
+{
+    int i;
+    for (i = 0; i<200; i++)
+    {
+        size_t len;
+       Z_OtherInformation **oi;
+        char buf[80];
+        const char *val;
+        const char *cp;
+        int oidval;
+
+        sprintf (buf, "otherInfo%d", i);
+        val = ZOOM_options_get (c->options, buf);
+        if (!val)
+            break;
+        cp = strchr (val, ':');
+        if (!cp)
+            continue;
+        len = cp - val;
+        if (len >= sizeof(buf))
+            len = sizeof(buf)-1;
+        memcpy (buf, val, len);
+        buf[len] = '\0';
+        oidval = oid_getvalbyname (buf);
+        if (oidval == VAL_NONE)
+            continue;
+        
+       yaz_oi_APDU(a, &oi);
+       yaz_oi_set_string_oidval(oi, out, oidval, 1, cp+1);
+    }
+}
+
+static int encode_APDU(ZOOM_connection c, Z_APDU *a, ODR out)
+{
+    assert (a);
+    if (c->cookie_out)
+    {
+       Z_OtherInformation **oi;
+       yaz_oi_APDU(a, &oi);
+       yaz_oi_set_string_oidval(oi, out, VAL_COOKIE, 1, c->cookie_out);
+    }
+    if (c->client_IP)
+    {
+       Z_OtherInformation **oi;
+       yaz_oi_APDU(a, &oi);
+       yaz_oi_set_string_oidval(oi, out, VAL_CLIENT_IP, 1, c->client_IP);
+    }
+    otherInfo_attach (c, a, out);
+    if (!z_APDU(out, &a, 0, 0))
+    {
+       FILE *outf = fopen("/tmp/apdu.txt", "a");
+       if (a && outf)
+       {
+           ODR odr_pr = odr_createmem(ODR_PRINT);
+           fprintf (outf, "a=%p\n", a);
+           odr_setprint(odr_pr, outf);
+           z_APDU(odr_pr, &a, 0, 0);
+           odr_destroy(odr_pr);
+       }
+        yaz_log (LOG_DEBUG, "encoding failed");
+        set_ZOOM_error(c, ZOOM_ERROR_ENCODE, 0);
+       odr_reset(out);
+       return -1;
+    }
+    
+    return 0;
+}
+
+static zoom_ret send_APDU (ZOOM_connection c, Z_APDU *a)
+{
+    ZOOM_Event event;
+    assert (a);
+    if (encode_APDU(c, a, c->odr_out))
+       return zoom_complete;
+    yaz_log(LOG_DEBUG, "send APDU type=%d", a->which);
+    c->buf_out = odr_getbuf(c->odr_out, &c->len_out, 0);
+    event = ZOOM_Event_create (ZOOM_EVENT_SEND_APDU);
+    ZOOM_connection_put_event (c, event);
+    odr_reset(c->odr_out);
+    return do_write (c);
+}
+
+/* returns 1 if PDU was sent OK (still pending )
+           0 if PDU was not sent OK (nothing to wait for) 
+*/
+
+static zoom_ret ZOOM_connection_send_init (ZOOM_connection c)
+{
+    const char *impname;
+    Z_APDU *apdu = zget_APDU(c->odr_out, Z_APDU_initRequest);
+    Z_InitRequest *ireq = apdu->u.initRequest;
+    Z_IdAuthentication *auth = (Z_IdAuthentication *)
+        odr_malloc(c->odr_out, sizeof(*auth));
+    const char *auth_groupId = ZOOM_options_get (c->options, "group");
+    const char *auth_userId = ZOOM_options_get (c->options, "user");
+    const char *auth_password = ZOOM_options_get (c->options, "pass");
+    
+    ODR_MASK_SET(ireq->options, Z_Options_search);
+    ODR_MASK_SET(ireq->options, Z_Options_present);
+    ODR_MASK_SET(ireq->options, Z_Options_scan);
+    ODR_MASK_SET(ireq->options, Z_Options_sort);
+    ODR_MASK_SET(ireq->options, Z_Options_extendedServices);
+    ODR_MASK_SET(ireq->options, Z_Options_namedResultSets);
+    
+    ODR_MASK_SET(ireq->protocolVersion, Z_ProtocolVersion_1);
+    ODR_MASK_SET(ireq->protocolVersion, Z_ProtocolVersion_2);
+    ODR_MASK_SET(ireq->protocolVersion, Z_ProtocolVersion_3);
+    
+    impname = ZOOM_options_get (c->options, "implementationName");
+    ireq->implementationName =
+       (char *) odr_malloc (c->odr_out, 15 + (impname ? strlen(impname) : 0));
+    strcpy (ireq->implementationName, "");
+    if (impname)
+    {
+       strcat (ireq->implementationName, impname);
+       strcat (ireq->implementationName, "/");
+    }                                         
+    strcat (ireq->implementationName, "ZOOM-C/YAZ");
+    
+    *ireq->maximumRecordSize =
+       ZOOM_options_get_int (c->options, "maximumRecordSize", 1024*1024);
+    *ireq->preferredMessageSize =
+       ZOOM_options_get_int (c->options, "preferredMessageSize", 1024*1024);
+    
+    if (auth_groupId || auth_password)
+    {
+       Z_IdPass *pass = (Z_IdPass *) odr_malloc(c->odr_out, sizeof(*pass));
+       int i = 0;
+       pass->groupId = 0;
+       if (auth_groupId && *auth_groupId)
+       {
+           pass->groupId = (char *)
+                odr_malloc(c->odr_out, strlen(auth_groupId)+1);
+           strcpy(pass->groupId, auth_groupId);
+           i++;
+       }
+       pass->userId = 0;
+       if (auth_userId && *auth_userId)
+       {
+           pass->userId = (char *)
+                odr_malloc(c->odr_out, strlen(auth_userId)+1);
+           strcpy(pass->userId, auth_userId);
+           i++;
+       }
+       pass->password = 0;
+       if (auth_password && *auth_password)
+       {
+           pass->password = (char *)
+                odr_malloc(c->odr_out, strlen(auth_password)+1);
+           strcpy(pass->password, auth_password);
+           i++;
+       }
+       if (i)
+       {
+           auth->which = Z_IdAuthentication_idPass;
+           auth->u.idPass = pass;
+           ireq->idAuthentication = auth;
+       }
+    }
+    else if (auth_userId)
+    {
+       auth->which = Z_IdAuthentication_open;
+       auth->u.open = (char *)
+            odr_malloc(c->odr_out, strlen(auth_userId)+1);
+       strcpy(auth->u.open, auth_userId);
+       ireq->idAuthentication = auth;
+    }
+    if (c->proxy)
+       yaz_oi_set_string_oidval(&ireq->otherInfo, c->odr_out,
+                                VAL_PROXY, 1, c->host_port);
+    if (c->charset||c->lang)
+    {
+       Z_OtherInformation **oi;
+       Z_OtherInformationUnit *oi_unit;
+       
+       yaz_oi_APDU(apdu, &oi);
+       
+       if ((oi_unit = yaz_oi_update(oi, c->odr_out, NULL, 0, 0)))
+       {
+            ODR_MASK_SET(ireq->options, Z_Options_negotiationModel);
+            
+            oi_unit->which = Z_OtherInfo_externallyDefinedInfo;
+            oi_unit->information.externallyDefinedInfo =
+                yaz_set_proposal_charneg
+                (c->odr_out,
+                 (const char **)&c->charset, (c->charset) ? 1:0,
+                 (const char **)&c->lang, (c->lang) ? 1:0, 1);
+       }
+    }
+    assert (apdu);
+    return send_APDU (c, apdu);
+}
+
+#if HAVE_XML2
+static zoom_ret send_srw (ZOOM_connection c, Z_SRW_PDU *sr)
+{
+    char ctype[50];
+    Z_SOAP_Handler h[2] = {
+        {"http://www.loc.gov/zing/srw/v1.0/", 0, (Z_SOAP_fun) yaz_srw_codec},
+        {0, 0, 0}
+    };
+    ODR o = odr_createmem(ODR_ENCODE);
+    int ret;
+    Z_SOAP *p = odr_malloc(o, sizeof(*p));
+    Z_GDU *gdu;
+    ZOOM_Event event;
+
+    gdu = z_get_HTTP_Request(c->odr_out);
+    gdu->u.HTTP_Request->path = c->path;
+
+    if (c->host_port)
+    {
+        const char *cp0 = strstr(c->host_port, "://");
+        const char *cp1 = 0;
+        if (cp0)
+            cp0 = cp0+3;
+        else
+            cp0 = c->host_port;
+
+        cp1 = strchr(cp0, '/');
+        if (!cp1)
+            cp1 = cp0+strlen(cp0);
+
+        if (cp0 && cp1)
+        {
+            char *h = odr_malloc(c->odr_out, cp1 - cp0 + 1);
+            memcpy (h, cp0, cp1 - cp0);
+            h[cp1-cp0] = '\0';
+            z_HTTP_header_add(c->odr_out, &gdu->u.HTTP_Request->headers,
+                              "host", h);
+        }
+    }
+
+    strcpy(ctype, "text/xml");
+    if (c->charset && strlen(c->charset) < 20)
+    {
+        strcat(ctype, "; charset=");
+        strcat(ctype, c->charset);
+    }
+    z_HTTP_header_add(c->odr_out, &gdu->u.HTTP_Request->headers,
+                      "Content-Type", ctype);
+    z_HTTP_header_add(c->odr_out, &gdu->u.HTTP_Request->headers,
+                      "SOAPAction", "\"\"");
+    p->which = Z_SOAP_generic;
+    p->u.generic = odr_malloc(o, sizeof(*p->u.generic));
+    p->u.generic->no = 0;
+    p->u.generic->ns = 0;
+    p->u.generic->p = sr;
+    p->ns = "http://schemas.xmlsoap.org/soap/envelope/";
+
+    ret = z_soap_codec_enc(o, &p,
+                           &gdu->u.HTTP_Request->content_buf,
+                           &gdu->u.HTTP_Request->content_len, h,
+                           c->charset);
+
+    if (!z_GDU(c->odr_out, &gdu, 0, 0))
+        return zoom_complete;
+    c->buf_out = odr_getbuf(c->odr_out, &c->len_out, 0);
+
+    odr_destroy(o);
+
+    event = ZOOM_Event_create (ZOOM_EVENT_SEND_APDU);
+    ZOOM_connection_put_event (c, event);
+    odr_reset(c->odr_out);
+    return do_write (c);
+}
+#endif
+
+#if HAVE_XML2
+static zoom_ret ZOOM_connection_srw_send_search(ZOOM_connection c)
+{
+    int i;
+    ZOOM_resultset resultset = 0;
+    Z_SRW_PDU *sr = 0;
+    const char *recordPacking = 0;
+
+    if (c->error)                  /* don't continue on error */
+       return zoom_complete;
+    assert (c->tasks);
+    if (c->tasks->which == ZOOM_TASK_SEARCH)
+    {
+        resultset = c->tasks->u.search.resultset;
+        resultset->setname = xstrdup ("default");
+        ZOOM_options_set (resultset->options, "setname", resultset->setname);
+    }
+    else if(c->tasks->which == ZOOM_TASK_RETRIEVE)
+    {
+        resultset = c->tasks->u.retrieve.resultset;
+
+        resultset->start = c->tasks->u.retrieve.start;
+        resultset->count = c->tasks->u.retrieve.count;
+        
+        if (resultset->start >= resultset->size)
+            return zoom_complete;
+        if (resultset->start + resultset->count > resultset->size)
+            resultset->count = resultset->size - resultset->start;
+
+        for (i = 0; i<resultset->count; i++)
+        {
+            ZOOM_record rec =
+                record_cache_lookup (resultset, i + resultset->start);
+            if (!rec)
+                break;
+        }
+        if (i == resultset->count)
+            return zoom_complete;
+    }
+    assert(resultset->query);
+        
+    sr = yaz_srw_get(c->odr_out, Z_SRW_searchRetrieve_request);
+
+    if (resultset->query->z_query->which == Z_Query_type_104
+        && resultset->query->z_query->u.type_104->which == Z_External_CQL)
+    {
+
+        sr->u.request->query_type = Z_SRW_query_type_cql;
+        sr->u.request->query.cql =resultset->query->z_query->u.type_104->u.cql;
+    }
+    else if (resultset->query->z_query->which == Z_Query_type_1 &&
+             resultset->query->z_query->u.type_1)
+    {
+        sr->u.request->query_type = Z_SRW_query_type_pqf;
+        sr->u.request->query.pqf = resultset->query->query_string;
+    }
+    else
+    {
+        set_ZOOM_error(c, ZOOM_ERROR_UNSUPPORTED_QUERY, 0);
+        return zoom_complete;
+    }
+    sr->u.request->startRecord = odr_intdup (c->odr_out, resultset->start + 1);
+    sr->u.request->maximumRecords = odr_intdup (
+        c->odr_out, resultset->step>0 ? resultset->step : resultset->count);
+    sr->u.request->recordSchema = resultset->schema;
+
+    recordPacking = ZOOM_resultset_option_get (resultset, "recordPacking");
+
+    if (recordPacking)
+        sr->u.request->recordPacking = odr_strdup(c->odr_out, recordPacking);
+    
+    return send_srw(c, sr);
+}
+#else
+static zoom_ret ZOOM_connection_srw_send_search(ZOOM_connection c)
+{
+    return zoom_complete;
+}
+#endif
+
+static zoom_ret ZOOM_connection_send_search (ZOOM_connection c)
+{
+    ZOOM_resultset r;
+    int lslb, ssub, mspn;
+    const char *syntax;
+    Z_APDU *apdu = zget_APDU(c->odr_out, Z_APDU_searchRequest);
+    Z_SearchRequest *search_req = apdu->u.searchRequest;
+    const char *elementSetName;
+    const char *smallSetElementSetName;
+    const char *mediumSetElementSetName;
+
+    assert (c->tasks);
+    assert (c->tasks->which == ZOOM_TASK_SEARCH);
+
+    r = c->tasks->u.search.resultset;
+
+    elementSetName =
+       ZOOM_options_get (r->options, "elementSetName");
+    smallSetElementSetName  =
+       ZOOM_options_get (r->options, "smallSetElementSetName");
+    mediumSetElementSetName =
+       ZOOM_options_get (r->options, "mediumSetElementSetName");
+
+    if (!smallSetElementSetName)
+       smallSetElementSetName = elementSetName;
+
+    if (!mediumSetElementSetName)
+       mediumSetElementSetName = elementSetName;
+
+    assert (r);
+    assert (r->query);
+
+    /* prepare query for the search request */
+    search_req->query = r->query->z_query;
+
+    search_req->databaseNames =
+       set_DatabaseNames (c, r->options, &search_req->num_databaseNames);
+
+    /* get syntax (no need to provide unless piggyback is in effect) */
+    syntax = ZOOM_options_get (r->options, "preferredRecordSyntax");
+
+    lslb = ZOOM_options_get_int (r->options, "largeSetLowerBound", -1);
+    ssub = ZOOM_options_get_int (r->options, "smallSetUpperBound", -1);
+    mspn = ZOOM_options_get_int (r->options, "mediumSetPresentNumber", -1);
+    if (lslb != -1 && ssub != -1 && mspn != -1)
+    {
+       /* So're a Z39.50 expert? Let's hope you don't do sort */
+       *search_req->largeSetLowerBound = lslb;
+       *search_req->smallSetUpperBound = ssub;
+       *search_req->mediumSetPresentNumber = mspn;
+    }
+    else if (r->start == 0 && r->count > 0
+            && r->piggyback && !r->r_sort_spec && !r->schema)
+    {
+       /* Regular piggyback - do it unless we're going to do sort */
+       *search_req->largeSetLowerBound = 2000000000;
+       *search_req->smallSetUpperBound = 1;
+       *search_req->mediumSetPresentNumber = r->step>0 ? r->step : r->count;
+    }
+    else
+    {
+       /* non-piggyback. Need not provide elementsets or syntaxes .. */
+       smallSetElementSetName = 0;
+       mediumSetElementSetName = 0;
+       syntax = 0;
+    }
+    if (smallSetElementSetName && *smallSetElementSetName)
+    {
+       Z_ElementSetNames *esn = (Z_ElementSetNames *)
+            odr_malloc (c->odr_out, sizeof(*esn));
+       
+       esn->which = Z_ElementSetNames_generic;
+       esn->u.generic = odr_strdup (c->odr_out, smallSetElementSetName);
+       search_req->smallSetElementSetNames = esn;
+    }
+    if (mediumSetElementSetName && *mediumSetElementSetName)
+    {
+       Z_ElementSetNames *esn = (Z_ElementSetNames *)
+            odr_malloc (c->odr_out, sizeof(*esn));
+       
+       esn->which = Z_ElementSetNames_generic;
+       esn->u.generic = odr_strdup (c->odr_out, mediumSetElementSetName);
+       search_req->mediumSetElementSetNames = esn;
+    }
+    if (syntax)
+       search_req->preferredRecordSyntax =
+           yaz_str_to_z3950oid (c->odr_out, CLASS_RECSYN, syntax);
+    
+    if (!r->setname)
+    {
+        if (c->support_named_resultsets)
+        {
+            char setname[14];
+            int ord;
+            /* find the lowest unused ordinal so that we re-use
+               result sets on the server. */
+            for (ord = 1; ; ord++)
+            {
+                ZOOM_resultset rp;
+                sprintf (setname, "%d", ord);
+                for (rp = c->resultsets; rp; rp = rp->next)
+                    if (rp->setname && !strcmp (rp->setname, setname))
+                        break;
+                if (!rp)
+                    break;
+            }
+            r->setname = xstrdup (setname);
+            yaz_log (LOG_DEBUG, "allocating set %s", r->setname);
+        }
+        else
+            r->setname = xstrdup ("default");
+        ZOOM_options_set (r->options, "setname", r->setname);
+    }
+    search_req->resultSetName = odr_strdup(c->odr_out, r->setname);
+    /* send search request */
+    return send_APDU (c, apdu);
+}
+
+static void response_diag (ZOOM_connection c, Z_DiagRec *p)
+{
+    int oclass;
+    Z_DefaultDiagFormat *r;
+    char *addinfo = 0;
+    
+    xfree (c->addinfo);
+    c->addinfo = 0;
+    if (p->which != Z_DiagRec_defaultFormat)
+    {
+        set_ZOOM_error(c, ZOOM_ERROR_DECODE, 0);
+       return;
+    }
+    r = p->u.defaultFormat;
+    switch (r->which)
+    {
+    case Z_DefaultDiagFormat_v2Addinfo:
+       addinfo = r->u.v2Addinfo;
+       break;
+    case Z_DefaultDiagFormat_v3Addinfo:
+       addinfo = r->u.v3Addinfo;
+       break;
+    }
+    set_dset_error(c, *r->condition,
+                   yaz_z3950oid_to_str(r->diagnosticSetId, &oclass),
+                   addinfo, 0);
+}
+
+ZOOM_API(ZOOM_record)
+ZOOM_record_clone (ZOOM_record srec)
+{
+    char *buf;
+    int size;
+    ODR odr_enc;
+    ZOOM_record nrec;
+
+    odr_enc = odr_createmem(ODR_ENCODE);
+    if (!z_NamePlusRecord (odr_enc, &srec->npr, 0, 0))
+       return 0;
+    buf = odr_getbuf (odr_enc, &size, 0);
+    
+    nrec = (ZOOM_record) xmalloc (sizeof(*nrec));
+    nrec->odr = odr_createmem(ODR_DECODE);
+    nrec->wrbuf_marc = 0;
+    nrec->wrbuf_iconv = 0;
+    nrec->wrbuf_opac = 0;
+    odr_setbuf (nrec->odr, buf, size, 0);
+    z_NamePlusRecord (nrec->odr, &nrec->npr, 0, 0);
+    
+    odr_destroy (odr_enc);
+    return nrec;
+}
+
+ZOOM_API(ZOOM_record)
+ZOOM_resultset_record_immediate (ZOOM_resultset s,size_t pos)
+{
+    return record_cache_lookup (s, pos);
+}
+
+ZOOM_API(ZOOM_record)
+ZOOM_resultset_record (ZOOM_resultset r, size_t pos)
+{
+    ZOOM_record rec = ZOOM_resultset_record_immediate(r, pos);
+
+    if (!rec)
+    {
+        ZOOM_resultset_retrieve (r, 1, pos, 1);
+        rec = ZOOM_resultset_record_immediate (r, pos);
+    }
+    return rec;
+}
+
+ZOOM_API(void)
+ZOOM_record_destroy (ZOOM_record rec)
+{
+    if (!rec)
+       return;
+    if (rec->wrbuf_marc)
+       wrbuf_free (rec->wrbuf_marc, 1);
+    if (rec->wrbuf_iconv)
+       wrbuf_free (rec->wrbuf_iconv, 1);
+    if (rec->wrbuf_opac)
+       wrbuf_free (rec->wrbuf_opac, 1);
+    odr_destroy (rec->odr);
+    xfree (rec);
+}
+
+static const char *record_iconv_return(ZOOM_record rec, int *len,
+                                      const char *buf, int sz,
+                                      const char *record_charset)
+{
+    char to[40];
+    char from[40];
+    yaz_iconv_t cd = 0;
+
+    *from = '\0';
+    strcpy(to, "UTF-8");
+    if (record_charset && *record_charset)
+    {
+       /* Use "from,to" or just "from" */
+       const char *cp =strchr(record_charset, ',');
+       int clen = strlen(record_charset);
+       if (cp && cp[1])
+       {
+           strncpy( to, cp+1, sizeof(to)-1);
+           to[sizeof(to)-1] = '\0';
+           clen = cp - record_charset;
+       }
+       if (clen > sizeof(from)-1)
+           clen = sizeof(from)-1;
+       
+       if (clen)
+           strncpy(from, record_charset, clen);
+       from[clen] = '\0';
+    }
+
+    if (*from && *to && (cd = yaz_iconv_open(to, from)))
+    {
+       char outbuf[12];
+       size_t inbytesleft = sz;
+       const char *inp = buf;
+       
+       if (!rec->wrbuf_iconv)
+           rec->wrbuf_iconv = wrbuf_alloc();
+
+       wrbuf_rewind(rec->wrbuf_iconv);
+
+       while (inbytesleft)
+       {
+           size_t outbytesleft = sizeof(outbuf);
+           char *outp = outbuf;
+           size_t r = yaz_iconv (cd, (char**) &inp,
+                                 &inbytesleft, 
+                                 &outp, &outbytesleft);
+           if (r == (size_t) (-1))
+           {
+               int e = yaz_iconv_error(cd);
+               if (e != YAZ_ICONV_E2BIG)
+                   break;
+           }
+           wrbuf_write(rec->wrbuf_iconv, outbuf, outp - outbuf);
+       }
+       wrbuf_puts(rec->wrbuf_iconv, "");
+       buf = wrbuf_buf(rec->wrbuf_iconv);
+       sz = wrbuf_len(rec->wrbuf_iconv);
+       yaz_iconv_close(cd);
+    }
+    if (len)
+       *len = sz;
+    return buf;
+}
+
+ZOOM_API(const char *)
+ZOOM_record_get (ZOOM_record rec, const char *type_spec, int *len)
+{
+    char type[40];
+    char charset[40];
+    const char *cp;
+    int i;
+    Z_NamePlusRecord *npr;
+    
+    if (len)
+       *len = 0; /* default return */
+       
+    if (!rec)
+       return 0;
+    npr = rec->npr;
+    if (!npr)
+       return 0;
+
+    cp = type_spec;
+    for (i = 0; cp[i] && i < sizeof(type)-1; i++)
+    {
+       if (cp[i] == ';' || cp[i] == ' ')
+           break;
+       type[i] = cp[i];
+    }
+    type[i] = '\0';
+    charset[0] = '\0';
+    if (type_spec[i] == ';')
+    {
+       i++;
+       while (type_spec[i] == ' ')
+           i++;
+       if (!strncmp(type_spec+i, "charset=", 8))
+       {
+           cp = type_spec+i+8;
+           for (i = 0; cp[i] && i < sizeof(charset)-1; i++)
+           {
+               if (cp[i] == ';' || cp[i] == ' ')
+                   break;
+               charset[i] = cp[i];
+           }
+           charset[i] = '\0';
+       }
+    }  
+
+    if (!strcmp (type, "database"))
+    {
+       if (len)
+            *len = (npr->databaseName ? strlen(npr->databaseName) : 0);
+       return npr->databaseName;
+    }
+    else if (!strcmp (type, "syntax"))
+    {
+        const char *desc = 0;  
+       if (npr->which == Z_NamePlusRecord_databaseRecord)
+       {
+           Z_External *r = (Z_External *) npr->u.databaseRecord;
+           oident *ent = oid_getentbyoid(r->direct_reference);
+           if (ent)
+               desc = ent->desc;
+       }
+       if (!desc)
+            desc = "none";
+       if (len)
+            *len = strlen(desc);
+       return desc;
+    }
+    else if (!strcmp (type, "render") && 
+             npr->which == Z_NamePlusRecord_databaseRecord)
+    {
+        Z_External *r = (Z_External *) npr->u.databaseRecord;
+        oident *ent = oid_getentbyoid(r->direct_reference);
+
+       /* render bibliographic record .. */
+       if (r->which == Z_External_OPAC)
+       {
+           r = r->u.opac->bibliographicRecord;
+           if (!r)
+               return 0;
+           ent = oid_getentbyoid(r->direct_reference);
+       }
+        if (r->which == Z_External_sutrs)
+           return record_iconv_return(rec, len,
+                                      r->u.sutrs->buf, r->u.sutrs->len,
+                                      charset);
+        else if (r->which == Z_External_octet)
+        {
+            yaz_marc_t mt;
+            switch (ent->value)
+            {
+            case VAL_SOIF:
+            case VAL_HTML:
+            case VAL_SUTRS:
+                break;
+            case VAL_TEXT_XML:
+            case VAL_APPLICATION_XML:
+                break;
+            default:
+                if (!rec->wrbuf_marc)
+                    rec->wrbuf_marc = wrbuf_alloc();
+
+                mt = yaz_marc_create();
+                wrbuf_rewind (rec->wrbuf_marc);
+                if (yaz_marc_decode_wrbuf (
+                        mt, (const char *) r->u.octet_aligned->buf,
+                        r->u.octet_aligned->len,
+                        rec->wrbuf_marc) > 0)
+                {
+                    yaz_marc_destroy(mt);
+                   return record_iconv_return(rec, len,
+                                              wrbuf_buf(rec->wrbuf_marc),
+                                              wrbuf_len(rec->wrbuf_marc),
+                                              charset);
+                }
+                yaz_marc_destroy(mt);
+            }
+           return record_iconv_return(rec, len,
+                                      (const char *) r->u.octet_aligned->buf,
+                                      r->u.octet_aligned->len,
+                                      charset);
+        }
+        else if (r->which == Z_External_grs1)
+        {
+            if (!rec->wrbuf_marc)
+                rec->wrbuf_marc = wrbuf_alloc();
+            wrbuf_rewind (rec->wrbuf_marc);
+            yaz_display_grs1(rec->wrbuf_marc, r->u.grs1, 0);
+           return record_iconv_return(rec, len,
+                                      wrbuf_buf(rec->wrbuf_marc),
+                                      wrbuf_len(rec->wrbuf_marc),
+                                      charset);
+        }
+       return 0;
+    }
+    else if (npr->which == Z_NamePlusRecord_databaseRecord &&
+             (!strcmp (type, "xml") || !strcmp(type, "oai")))
+    {
+        Z_External *r = (Z_External *) npr->u.databaseRecord;
+        oident *ent = oid_getentbyoid(r->direct_reference);
+
+       /* render bibliographic record .. */
+       if (r->which == Z_External_OPAC)
+       {
+           r = r->u.opac->bibliographicRecord;
+           if (!r)
+               return 0;
+           ent = oid_getentbyoid(r->direct_reference);
+       }
+        
+        if (r->which == Z_External_sutrs)
+           return record_iconv_return(rec, len,
+                                      (const char *) r->u.sutrs->buf,
+                                      r->u.sutrs->len,
+                                      charset);
+        else if (r->which == Z_External_octet)
+        {
+            yaz_marc_t mt;
+            int marc_decode_type = YAZ_MARC_MARCXML;
+
+            if (!strcmp(type, "oai"))
+                marc_decode_type = YAZ_MARC_OAIMARC;
+            switch (ent->value)
+            {
+            case VAL_SOIF:
+            case VAL_HTML:
+            case VAL_SUTRS:
+                break;
+            case VAL_TEXT_XML:
+            case VAL_APPLICATION_XML:
+                break;
+            default:
+                if (!rec->wrbuf_marc)
+                    rec->wrbuf_marc = wrbuf_alloc();
+                wrbuf_rewind (rec->wrbuf_marc);
+                mt = yaz_marc_create();
+
+                yaz_marc_xml(mt, YAZ_MARC_MARCXML);
+                if (yaz_marc_decode_wrbuf (
+                        mt, (const char *) r->u.octet_aligned->buf,
+                        r->u.octet_aligned->len,
+                        rec->wrbuf_marc) > 0)
+                {
+                    yaz_marc_destroy(mt);
+                   return record_iconv_return(rec, len,
+                                              wrbuf_buf(rec->wrbuf_marc),
+                                              wrbuf_len(rec->wrbuf_marc),
+                                              charset);
+                }
+                yaz_marc_destroy(mt);
+            }
+           return record_iconv_return(rec, len,
+                                      (const char *) r->u.octet_aligned->buf,
+                                      r->u.octet_aligned->len,
+                                      charset);
+        }
+        else if (r->which == Z_External_grs1)
+        {
+            if (len) *len = 5;
+            return "GRS-1";
+        }
+       return 0;
+    }
+    else if (!strcmp (type, "raw"))
+    {
+       if (npr->which == Z_NamePlusRecord_databaseRecord)
+       {
+           Z_External *r = (Z_External *) npr->u.databaseRecord;
+           
+           if (r->which == Z_External_sutrs)
+           {
+               if (len) *len = r->u.sutrs->len;
+               return (const char *) r->u.sutrs->buf;
+           }
+           else if (r->which == Z_External_octet)
+           {
+               if (len) *len = r->u.octet_aligned->len;
+               return (const char *) r->u.octet_aligned->buf;
+           }
+           else /* grs-1, explain, OPAC, ... */
+           {
+               if (len) *len = -1;
+                return (const char *) npr->u.databaseRecord;
+           }
+       }
+       return 0;
+    }
+    else if (!strcmp (type, "ext"))
+    {
+       if (npr->which == Z_NamePlusRecord_databaseRecord)
+            return (const char *) npr->u.databaseRecord;
+       return 0;
+    }
+    else if (npr->which == Z_NamePlusRecord_databaseRecord &&
+             !strcmp (type, "opac"))
+            
+    {
+       Z_External *r = (Z_External *) npr->u.databaseRecord;
+       if (r->which == Z_External_OPAC)
+       {
+           if (!rec->wrbuf_opac)
+               rec->wrbuf_opac = wrbuf_alloc();
+           wrbuf_rewind (rec->wrbuf_opac);
+           yaz_display_OPAC(rec->wrbuf_opac, r->u.opac, 0);
+           return record_iconv_return(rec, len,
+                                      wrbuf_buf(rec->wrbuf_opac),
+                                      wrbuf_len(rec->wrbuf_opac),
+                                      charset);
+       }
+    }
+    return 0;
+}
+
+static int strcmp_null(const char *v1, const char *v2)
+{
+    if (!v1 && !v2)
+        return 0;
+    if (!v1 || !v2)
+        return -1;
+    return strcmp(v1, v2);
+}
+
+static void record_cache_add (ZOOM_resultset r, Z_NamePlusRecord *npr, 
+                              int pos)
+{
+    ZOOM_record_cache rc;
+    const char *elementSetName =
+        ZOOM_resultset_option_get (r, "elementSetName");
+    const char *syntax = 
+        ZOOM_resultset_option_get (r, "preferredRecordSyntax");
+    
+    ZOOM_Event event = ZOOM_Event_create(ZOOM_EVENT_RECV_RECORD);
+    ZOOM_connection_put_event(r->connection, event);
+
+    for (rc = r->record_cache; rc; rc = rc->next)
+    {
+       if (pos == rc->pos)
+       {
+           if (strcmp_null(r->schema, rc->schema))
+                continue;
+           if (strcmp_null(elementSetName,rc->elementSetName))
+                continue;
+            if (strcmp_null(syntax, rc->syntax))
+                continue;
+            /* not destroying rc->npr (it's handled by nmem )*/
+            rc->rec.npr = npr;
+            /* keeping wrbuf_marc too */
+            return;
+       }
+    }
+    rc = (ZOOM_record_cache) odr_malloc (r->odr, sizeof(*rc));
+    rc->rec.npr = npr; 
+    rc->rec.odr = 0;
+    rc->rec.wrbuf_marc = 0;
+    rc->rec.wrbuf_iconv = 0;
+    rc->rec.wrbuf_opac = 0;
+    if (elementSetName)
+       rc->elementSetName = odr_strdup (r->odr, elementSetName);
+    else
+       rc->elementSetName = 0;
+
+    if (syntax)
+       rc->syntax = odr_strdup (r->odr, syntax);
+    else
+       rc->syntax = 0;
+
+    if (r->schema)
+       rc->schema = odr_strdup (r->odr, r->schema);
+    else
+       rc->schema = 0;
+
+    rc->pos = pos;
+    rc->next = r->record_cache;
+    r->record_cache = rc;
+}
+
+static ZOOM_record record_cache_lookup (ZOOM_resultset r, int pos)
+{
+    ZOOM_record_cache rc;
+    const char *elementSetName =
+        ZOOM_resultset_option_get (r, "elementSetName");
+    const char *syntax = 
+        ZOOM_resultset_option_get (r, "preferredRecordSyntax");
+    
+    for (rc = r->record_cache; rc; rc = rc->next)
+    {
+       if (pos == rc->pos)
+       {
+           if (strcmp_null(r->schema, rc->schema))
+                continue;
+           if (strcmp_null(elementSetName,rc->elementSetName))
+                continue;
+            if (strcmp_null(syntax, rc->syntax))
+                continue;
+            return &rc->rec;
+       }
+    }
+    return 0;
+}
+                                            
+static void handle_records (ZOOM_connection c, Z_Records *sr,
+                           int present_phase)
+{
+    ZOOM_resultset resultset;
+
+    if (!c->tasks)
+       return ;
+    switch (c->tasks->which)
+    {
+    case ZOOM_TASK_SEARCH:
+        resultset = c->tasks->u.search.resultset;
+        break;
+    case ZOOM_TASK_RETRIEVE:
+        resultset = c->tasks->u.retrieve.resultset;        
+       break;
+    default:
+        return;
+    }
+    if (sr && sr->which == Z_Records_NSD)
+    {
+       Z_DiagRec dr, *dr_p = &dr;
+       dr.which = Z_DiagRec_defaultFormat;
+       dr.u.defaultFormat = sr->u.nonSurrogateDiagnostic;
+       
+       response_diag (c, dr_p);
+    }
+    else if (sr && sr->which == Z_Records_multipleNSD)
+    {
+       if (sr->u.multipleNonSurDiagnostics->num_diagRecs >= 1)
+           response_diag(c, sr->u.multipleNonSurDiagnostics->diagRecs[0]);
+       else
+            set_ZOOM_error(c, ZOOM_ERROR_DECODE, 0);
+    }
+    else 
+    {
+       if (resultset->count + resultset->start > resultset->size)
+           resultset->count = resultset->size - resultset->start;
+       if (resultset->count < 0)
+           resultset->count = 0;
+       if (sr && sr->which == Z_Records_DBOSD)
+       {
+           int i;
+           NMEM nmem = odr_extract_mem (c->odr_in);
+           Z_NamePlusRecordList *p =
+               sr->u.databaseOrSurDiagnostics;
+           for (i = 0; i<p->num_records; i++)
+           {
+               record_cache_add (resultset, p->records[i],
+                                  i+ resultset->start);
+           }
+           /* transfer our response to search_nmem .. we need it later */
+           nmem_transfer (resultset->odr->mem, nmem);
+           nmem_destroy (nmem);
+           if (present_phase && p->num_records == 0)
+           {
+               /* present response and we didn't get any records! */
+                set_ZOOM_error(c, ZOOM_ERROR_DECODE, 0);
+           }
+       }
+       else if (present_phase)
+       {
+           /* present response and we didn't get any records! */
+            set_ZOOM_error(c, ZOOM_ERROR_DECODE, 0);
+       }
+    }
+}
+
+static void handle_present_response (ZOOM_connection c, Z_PresentResponse *pr)
+{
+    handle_records (c, pr->records, 1);
+}
+
+static void handle_search_response (ZOOM_connection c, Z_SearchResponse *sr)
+{
+    ZOOM_resultset resultset;
+    ZOOM_Event event;
+    
+    yaz_log (LOG_DEBUG, "got search response");
+    
+    if (!c->tasks || c->tasks->which != ZOOM_TASK_SEARCH)
+       return ;
+    
+    event = ZOOM_Event_create(ZOOM_EVENT_RECV_SEARCH);
+    ZOOM_connection_put_event(c, event);
+
+    resultset = c->tasks->u.search.resultset;
+
+    resultset->size = *sr->resultCount;
+    handle_records (c, sr->records, 0);
+}
+
+static void sort_response (ZOOM_connection c, Z_SortResponse *res)
+{
+    if (res->diagnostics && res->num_diagnostics > 0)
+       response_diag (c, res->diagnostics[0]);
+}
+
+static int scan_response (ZOOM_connection c, Z_ScanResponse *res)
+{
+    NMEM nmem = odr_extract_mem (c->odr_in);
+    ZOOM_scanset scan;
+
+    if (!c->tasks || c->tasks->which != ZOOM_TASK_SCAN)
+        return 0;
+    scan = c->tasks->u.scan.scan;
+
+    if (res->entries && res->entries->nonsurrogateDiagnostics)
+        response_diag(c, res->entries->nonsurrogateDiagnostics[0]);
+    scan->scan_response = res;
+    nmem_transfer (scan->odr->mem, nmem);
+    if (res->stepSize)
+        ZOOM_options_set_int (scan->options, "stepSize", *res->stepSize);
+    if (res->positionOfTerm)
+        ZOOM_options_set_int (scan->options, "position", *res->positionOfTerm);
+    if (res->scanStatus)
+        ZOOM_options_set_int (scan->options, "scanStatus", *res->scanStatus);
+    if (res->numberOfEntriesReturned)
+        ZOOM_options_set_int (scan->options, "number",
+                              *res->numberOfEntriesReturned);
+    nmem_destroy (nmem);
+    return 1;
+}
+
+static zoom_ret send_sort (ZOOM_connection c)
+{
+    ZOOM_resultset  resultset;
+
+    if (!c->tasks || c->tasks->which != ZOOM_TASK_SEARCH)
+       return zoom_complete;
+
+    resultset = c->tasks->u.search.resultset;
+
+    if (c->error)
+    {
+       resultset->r_sort_spec = 0;
+       return zoom_complete;
+    }
+    if (resultset->r_sort_spec)
+    {
+       Z_APDU *apdu = zget_APDU(c->odr_out, Z_APDU_sortRequest);
+       Z_SortRequest *req = apdu->u.sortRequest;
+       
+       req->num_inputResultSetNames = 1;
+       req->inputResultSetNames = (Z_InternationalString **)
+           odr_malloc (c->odr_out, sizeof(*req->inputResultSetNames));
+       req->inputResultSetNames[0] =
+            odr_strdup (c->odr_out, resultset->setname);
+       req->sortedResultSetName = odr_strdup (c->odr_out, resultset->setname);
+       req->sortSequence = resultset->r_sort_spec;
+       resultset->r_sort_spec = 0;
+       return send_APDU (c, apdu);
+    }
+    return zoom_complete;
+}
+
+static zoom_ret send_present (ZOOM_connection c)
+{
+    Z_APDU *apdu = 0;
+    Z_PresentRequest *req = 0;
+    int i = 0;
+    const char *syntax = 0;
+    const char *elementSetName = 0;
+    ZOOM_resultset  resultset;
+
+    if (!c->tasks)
+       return zoom_complete;
+
+    switch (c->tasks->which)
+    {
+    case ZOOM_TASK_SEARCH:
+        resultset = c->tasks->u.search.resultset;
+        break;
+    case ZOOM_TASK_RETRIEVE:
+        resultset = c->tasks->u.retrieve.resultset;
+        resultset->start = c->tasks->u.retrieve.start;
+        resultset->count = c->tasks->u.retrieve.count;
+
+        if (resultset->start >= resultset->size)
+            return zoom_complete;
+        if (resultset->start + resultset->count > resultset->size)
+            resultset->count = resultset->size - resultset->start;
+       break;
+    default:
+        return zoom_complete;
+    }
+
+    syntax = ZOOM_resultset_option_get (resultset, "preferredRecordSyntax");
+    elementSetName = ZOOM_resultset_option_get (resultset, "elementSetName");
+
+    if (c->error)                  /* don't continue on error */
+       return zoom_complete;
+    if (resultset->start < 0)
+       return zoom_complete;
+    for (i = 0; i<resultset->count; i++)
+    {
+       ZOOM_record rec =
+           record_cache_lookup (resultset, i + resultset->start);
+       if (!rec)
+           break;
+    }
+    if (i == resultset->count)
+       return zoom_complete;
+
+    apdu = zget_APDU(c->odr_out, Z_APDU_presentRequest);
+    req = apdu->u.presentRequest;
+
+    resultset->start += i;
+    resultset->count -= i;
+    *req->resultSetStartPoint = resultset->start + 1;
+    *req->numberOfRecordsRequested = resultset->step>0 ?
+        resultset->step : resultset->count;
+    assert (*req->numberOfRecordsRequested > 0);
+
+    if (syntax && *syntax)
+       req->preferredRecordSyntax =
+           yaz_str_to_z3950oid (c->odr_out, CLASS_RECSYN, syntax);
+
+    if (resultset->schema && *resultset->schema)
+    {
+       Z_RecordComposition *compo = (Z_RecordComposition *)
+            odr_malloc (c->odr_out, sizeof(*compo));
+
+        req->recordComposition = compo;
+        compo->which = Z_RecordComp_complex;
+        compo->u.complex = (Z_CompSpec *)
+            odr_malloc(c->odr_out, sizeof(*compo->u.complex));
+        compo->u.complex->selectAlternativeSyntax = (bool_t *) 
+            odr_malloc(c->odr_out, sizeof(bool_t));
+        *compo->u.complex->selectAlternativeSyntax = 0;
+
+        compo->u.complex->generic = (Z_Specification *)
+            odr_malloc(c->odr_out, sizeof(*compo->u.complex->generic));
+
+        compo->u.complex->generic->which = Z_Schema_oid;
+        compo->u.complex->generic->schema.oid = (Odr_oid *)
+            yaz_str_to_z3950oid (c->odr_out, CLASS_SCHEMA, resultset->schema);
+
+        if (!compo->u.complex->generic->schema.oid)
+        {
+            /* OID wasn't a schema! Try record syntax instead. */
+
+            compo->u.complex->generic->schema.oid = (Odr_oid *)
+                yaz_str_to_z3950oid (c->odr_out, CLASS_RECSYN, resultset->schema);
+        }
+        if (elementSetName && *elementSetName)
+        {
+            compo->u.complex->generic->elementSpec = (Z_ElementSpec *)
+                odr_malloc(c->odr_out, sizeof(Z_ElementSpec));
+            compo->u.complex->generic->elementSpec->which =
+                Z_ElementSpec_elementSetName;
+            compo->u.complex->generic->elementSpec->u.elementSetName =
+                odr_strdup (c->odr_out, elementSetName);
+        }
+        else
+            compo->u.complex->generic->elementSpec = 0;
+        compo->u.complex->num_dbSpecific = 0;
+        compo->u.complex->dbSpecific = 0;
+        compo->u.complex->num_recordSyntax = 0;
+        compo->u.complex->recordSyntax = 0;
+    }
+    else if (elementSetName && *elementSetName)
+    {
+       Z_ElementSetNames *esn = (Z_ElementSetNames *)
+            odr_malloc (c->odr_out, sizeof(*esn));
+       Z_RecordComposition *compo = (Z_RecordComposition *)
+            odr_malloc (c->odr_out, sizeof(*compo));
+       
+       esn->which = Z_ElementSetNames_generic;
+       esn->u.generic = odr_strdup (c->odr_out, elementSetName);
+       compo->which = Z_RecordComp_simple;
+       compo->u.simple = esn;
+       req->recordComposition = compo;
+    }
+    req->resultSetId = odr_strdup(c->odr_out, resultset->setname);
+    return send_APDU (c, apdu);
+}
+
+ZOOM_API(ZOOM_scanset)
+ZOOM_connection_scan (ZOOM_connection c, const char *start)
+{
+    ZOOM_scanset scan = (ZOOM_scanset) xmalloc (sizeof(*scan));
+
+    scan->connection = c;
+    scan->odr = odr_createmem (ODR_DECODE);
+    scan->options = ZOOM_options_create_with_parent (c->options);
+    scan->refcount = 1;
+    scan->scan_response = 0;
+
+    if ((scan->termListAndStartPoint =
+         p_query_scan(scan->odr, PROTO_Z3950, &scan->attributeSet,
+                      start)))
+    {
+        ZOOM_task task = ZOOM_connection_add_task (c, ZOOM_TASK_SCAN);
+        task->u.scan.scan = scan;
+        
+        (scan->refcount)++;
+        if (!c->async)
+        {
+            while (ZOOM_event (1, &c))
+                ;
+        }
+    }
+    return scan;
+}
+
+ZOOM_API(void)
+ZOOM_scanset_destroy (ZOOM_scanset scan)
+{
+    if (!scan)
+        return;
+    (scan->refcount)--;
+    if (scan->refcount == 0)
+    {
+        odr_destroy (scan->odr);
+        
+        ZOOM_options_destroy (scan->options);
+        xfree (scan);
+    }
+}
+
+static zoom_ret send_package (ZOOM_connection c)
+{
+    ZOOM_Event event;
+    if (!c->tasks)
+        return zoom_complete;
+    assert (c->tasks->which == ZOOM_TASK_PACKAGE);
+    
+    event = ZOOM_Event_create (ZOOM_EVENT_SEND_APDU);
+    ZOOM_connection_put_event (c, event);
+    
+    return do_write_ex (c, c->tasks->u.package->buf_out,
+                        c->tasks->u.package->len_out);
+}
+
+static zoom_ret send_scan (ZOOM_connection c)
+{
+    ZOOM_scanset scan;
+    Z_APDU *apdu = zget_APDU(c->odr_out, Z_APDU_scanRequest);
+    Z_ScanRequest *req = apdu->u.scanRequest;
+    if (!c->tasks)
+        return zoom_complete;
+    assert (c->tasks->which == ZOOM_TASK_SCAN);
+    scan = c->tasks->u.scan.scan;
+
+    req->termListAndStartPoint = scan->termListAndStartPoint;
+    req->attributeSet = scan->attributeSet;
+
+    *req->numberOfTermsRequested =
+        ZOOM_options_get_int(scan->options, "number", 10);
+
+    req->preferredPositionInResponse =
+        odr_intdup (c->odr_out,
+                    ZOOM_options_get_int(scan->options, "position", 1));
+
+    req->stepSize =
+        odr_intdup (c->odr_out,
+                    ZOOM_options_get_int(scan->options, "stepSize", 0));
+    
+    req->databaseNames = set_DatabaseNames (c, scan->options, 
+                                            &req->num_databaseNames);
+
+    return send_APDU (c, apdu);
+}
+
+ZOOM_API(size_t)
+ZOOM_scanset_size (ZOOM_scanset scan)
+{
+    if (!scan || !scan->scan_response || !scan->scan_response->entries)
+        return 0;
+    return scan->scan_response->entries->num_entries;
+}
+
+ZOOM_API(const char *)
+ZOOM_scanset_term (ZOOM_scanset scan, size_t pos,
+                               int *occ, int *len)
+{
+    const char *term = 0;
+    size_t noent = ZOOM_scanset_size (scan);
+    Z_ScanResponse *res = scan->scan_response;
+    
+    *len = 0;
+    *occ = 0;
+    if (pos >= noent)
+        return 0;
+    if (res->entries->entries[pos]->which == Z_Entry_termInfo)
+    {
+        Z_TermInfo *t = res->entries->entries[pos]->u.termInfo;
+        
+        if (t->term->which == Z_Term_general)
+        {
+            term = (const char *) t->term->u.general->buf;
+            *len = t->term->u.general->len;
+        }
+        *occ = t->globalOccurrences ? *t->globalOccurrences : 0;
+    }
+    return term;
+}
+
+ZOOM_API(const char *)
+ZOOM_scanset_option_get (ZOOM_scanset scan, const char *key)
+{
+    return ZOOM_options_get (scan->options, key);
+}
+
+ZOOM_API(void)
+ZOOM_scanset_option_set (ZOOM_scanset scan, const char *key,
+                              const char *val)
+{
+    ZOOM_options_set (scan->options, key, val);
+}
+
+static Z_APDU *create_es_package (ZOOM_package p, int type)
+{
+    const char *str;
+    Z_APDU *apdu = zget_APDU(p->odr_out, Z_APDU_extendedServicesRequest);
+    Z_ExtendedServicesRequest *req = apdu->u.extendedServicesRequest;
+    
+    *req->function = Z_ExtendedServicesRequest_create;
+    
+    str = ZOOM_options_get(p->options, "package-name");
+    if (str && *str)
+        req->packageName = nmem_strdup (p->odr_out->mem, str);
+    
+    str = ZOOM_options_get(p->options, "user-id");
+    if (str)
+        req->userId = nmem_strdup (p->odr_out->mem, str);
+    
+    req->packageType = yaz_oidval_to_z3950oid(p->odr_out, CLASS_EXTSERV,
+                                              type);
+
+    str = ZOOM_options_get(p->options, "function");
+    if (str)
+    {
+        if (!strcmp (str, "create"))
+            *req->function = 1;
+        if (!strcmp (str, "delete"))
+            *req->function = 2;
+        if (!strcmp (str, "modify"))
+            *req->function = 3;
+    }
+    return apdu;
+}
+
+static const char *ill_array_lookup (void *clientData, const char *idx)
+{
+    ZOOM_package p = (ZOOM_package) clientData;
+    return ZOOM_options_get (p->options, idx+4);
+}
+
+static Z_External *encode_ill_request (ZOOM_package p)
+{
+    ODR out = p->odr_out;
+    ILL_Request *req;
+    Z_External *r = 0;
+    struct ill_get_ctl ctl;
+       
+    ctl.odr = p->odr_out;
+    ctl.clientData = p;
+    ctl.f = ill_array_lookup;
+       
+    req = ill_get_ILLRequest(&ctl, "ill", 0);
+       
+    if (!ill_Request (out, &req, 0, 0))
+    {
+        int ill_request_size;
+        char *ill_request_buf = odr_getbuf (out, &ill_request_size, 0);
+        if (ill_request_buf)
+            odr_setbuf (out, ill_request_buf, ill_request_size, 1);
+        return 0;
+    }
+    else
+    {
+        oident oid;
+        int illRequest_size = 0;
+        char *illRequest_buf = odr_getbuf (out, &illRequest_size, 0);
+               
+        oid.proto = PROTO_GENERAL;
+        oid.oclass = CLASS_GENERAL;
+        oid.value = VAL_ISO_ILL_1;
+               
+        r = (Z_External *) odr_malloc (out, sizeof(*r));
+        r->direct_reference = odr_oiddup(out,oid_getoidbyent(&oid)); 
+        r->indirect_reference = 0;
+        r->descriptor = 0;
+        r->which = Z_External_single;
+               
+        r->u.single_ASN1_type = (Odr_oct *)
+            odr_malloc (out, sizeof(*r->u.single_ASN1_type));
+        r->u.single_ASN1_type->buf = (unsigned char*)
+            odr_malloc (out, illRequest_size);
+        r->u.single_ASN1_type->len = illRequest_size;
+        r->u.single_ASN1_type->size = illRequest_size;
+        memcpy (r->u.single_ASN1_type->buf, illRequest_buf, illRequest_size);
+    }
+    return r;
+}
+
+static Z_ItemOrder *encode_item_order(ZOOM_package p)
+{
+    Z_ItemOrder *req = (Z_ItemOrder *) odr_malloc (p->odr_out, sizeof(*req));
+    const char *str;
+    
+    req->which=Z_IOItemOrder_esRequest;
+    req->u.esRequest = (Z_IORequest *) 
+        odr_malloc(p->odr_out,sizeof(Z_IORequest));
+
+    /* to keep part ... */
+    req->u.esRequest->toKeep = (Z_IOOriginPartToKeep *)
+       odr_malloc(p->odr_out,sizeof(Z_IOOriginPartToKeep));
+    req->u.esRequest->toKeep->supplDescription = 0;
+    req->u.esRequest->toKeep->contact = (Z_IOContact *)
+        odr_malloc (p->odr_out, sizeof(*req->u.esRequest->toKeep->contact));
+       
+    str = ZOOM_options_get(p->options, "contact-name");
+    req->u.esRequest->toKeep->contact->name = str ?
+        nmem_strdup (p->odr_out->mem, str) : 0;
+       
+    str = ZOOM_options_get(p->options, "contact-phone");
+    req->u.esRequest->toKeep->contact->phone = str ?
+        nmem_strdup (p->odr_out->mem, str) : 0;
+       
+    str = ZOOM_options_get(p->options, "contact-email");
+    req->u.esRequest->toKeep->contact->email = str ?
+        nmem_strdup (p->odr_out->mem, str) : 0;
+       
+    req->u.esRequest->toKeep->addlBilling = 0;
+       
+    /* not to keep part ... */
+    req->u.esRequest->notToKeep = (Z_IOOriginPartNotToKeep *)
+        odr_malloc(p->odr_out,sizeof(Z_IOOriginPartNotToKeep));
+       
+    str = ZOOM_options_get(p->options, "itemorder-setname");
+    if (!str)
+        str = "default";
+
+    if (!*str) 
+        req->u.esRequest->notToKeep->resultSetItem = 0;
+    else
+    {
+        req->u.esRequest->notToKeep->resultSetItem = (Z_IOResultSetItem *)
+           odr_malloc(p->odr_out, sizeof(Z_IOResultSetItem));
+
+        req->u.esRequest->notToKeep->resultSetItem->resultSetId =
+           nmem_strdup (p->odr_out->mem, str);
+        req->u.esRequest->notToKeep->resultSetItem->item =
+            (int *) odr_malloc(p->odr_out, sizeof(int));
+       
+        str = ZOOM_options_get(p->options, "itemorder-item");
+        *req->u.esRequest->notToKeep->resultSetItem->item =
+            (str ? atoi(str) : 1);
+    }
+    req->u.esRequest->notToKeep->itemRequest = encode_ill_request(p);
+    
+    return req;
+}
+
+ZOOM_API(void)
+    ZOOM_package_send (ZOOM_package p, const char *type)
+{
+    Z_APDU *apdu = 0;
+    ZOOM_connection c;
+    if (!p)
+        return;
+    c = p->connection;
+    odr_reset (p->odr_out);
+    xfree (p->buf_out);
+    p->buf_out = 0;
+    if (!strcmp(type, "itemorder"))
+    {
+        Z_External *r;
+        apdu = create_es_package (p, VAL_ITEMORDER);
+        if (apdu)
+        {
+            r = (Z_External *) odr_malloc (p->odr_out, sizeof(*r));
+            
+            r->direct_reference =
+                yaz_oidval_to_z3950oid(p->odr_out, CLASS_EXTSERV,
+                                       VAL_ITEMORDER);
+            r->descriptor = 0;
+            r->which = Z_External_itemOrder;
+            r->indirect_reference = 0;
+            r->u.itemOrder = encode_item_order (p);
+
+            apdu->u.extendedServicesRequest->taskSpecificParameters = r;
+        }
+    }
+    if (apdu)
+    {
+        if (encode_APDU(p->connection, apdu, p->odr_out) == 0)
+        {
+            char *buf;
+
+            ZOOM_task task = ZOOM_connection_add_task (c, ZOOM_TASK_PACKAGE);
+            task->u.package = p;
+            buf = odr_getbuf(p->odr_out, &p->len_out, 0);
+            p->buf_out = (char *) xmalloc (p->len_out);
+            memcpy (p->buf_out, buf, p->len_out);
+            
+            (p->refcount)++;
+            if (!c->async)
+            {
+                while (ZOOM_event (1, &c))
+                    ;
+            }
+        }
+    }
+}
+
+ZOOM_API(ZOOM_package)
+    ZOOM_connection_package (ZOOM_connection c, ZOOM_options options)
+{
+    ZOOM_package p = (ZOOM_package) xmalloc (sizeof(*p));
+
+    p->connection = c;
+    p->odr_out = odr_createmem (ODR_ENCODE);
+    p->options = ZOOM_options_create_with_parent2 (options, c->options);
+    p->refcount = 1;
+    p->buf_out = 0;
+    p->len_out = 0;
+    return p;
+}
+
+ZOOM_API(void)
+    ZOOM_package_destroy(ZOOM_package p)
+{
+    if (!p)
+        return;
+    (p->refcount)--;
+    if (p->refcount == 0)
+    {
+        odr_destroy (p->odr_out);
+        xfree (p->buf_out);
+        
+        ZOOM_options_destroy (p->options);
+        xfree (p);
+    }
+}
+
+ZOOM_API(const char *)
+ZOOM_package_option_get (ZOOM_package p, const char *key)
+{
+    return ZOOM_options_get (p->options, key);
+}
+
+
+ZOOM_API(void)
+ZOOM_package_option_set (ZOOM_package p, const char *key,
+                              const char *val)
+{
+    ZOOM_options_set (p->options, key, val);
+}
+
+static int ZOOM_connection_exec_task (ZOOM_connection c)
+{
+    ZOOM_task task = c->tasks;
+    zoom_ret ret = zoom_complete;
+
+    if (!task)
+    {
+        yaz_log (LOG_DEBUG, "ZOOM_connection_exec_task task=<null>");
+       return 0;
+    }
+    yaz_log (LOG_DEBUG, "ZOOM_connection_exec_task type=%d run=%d",
+             task->which, task->running);
+    if (c->error != ZOOM_ERROR_NONE)
+    {
+        yaz_log (LOG_DEBUG, "remove tasks because of error = %d", c->error);
+        ZOOM_connection_remove_tasks (c);
+        return 0;
+    }
+    if (task->running)
+    {
+        yaz_log (LOG_DEBUG, "task already running");
+       return 0;
+    }
+    task->running = 1;
+    ret = zoom_complete;
+    if (c->cs || task->which == ZOOM_TASK_CONNECT)
+    {
+        switch (task->which)
+        {
+        case ZOOM_TASK_SEARCH:
+            if (c->proto == PROTO_HTTP)
+                ret = ZOOM_connection_srw_send_search(c);
+            else
+                ret = ZOOM_connection_send_search(c);
+            break;
+        case ZOOM_TASK_RETRIEVE:
+            if (c->proto == PROTO_HTTP)
+                ret = ZOOM_connection_srw_send_search(c);
+            else
+                ret = send_present (c);
+            break;
+        case ZOOM_TASK_CONNECT:
+            ret = do_connect(c);
+            break;
+        case ZOOM_TASK_SCAN:
+            ret = send_scan(c);
+            break;
+        case ZOOM_TASK_PACKAGE:
+            ret = send_package(c);
+            break;
+        }
+    }
+    else
+    {
+        yaz_log (LOG_DEBUG, "remove tasks because no connection exist");
+        ZOOM_connection_remove_tasks (c);
+    }
+    if (ret == zoom_complete)
+    {
+        yaz_log (LOG_DEBUG, "task removed (complete)");
+        ZOOM_connection_remove_task (c);
+        return 0;
+    }
+    yaz_log (LOG_DEBUG, "task pending");
+    return 1;
+}
+
+static zoom_ret send_sort_present (ZOOM_connection c)
+{
+    zoom_ret r = send_sort (c);
+    if (r == zoom_complete)
+       r = send_present (c);
+    return r;
+}
+
+static int es_response (ZOOM_connection c,
+                        Z_ExtendedServicesResponse *res)
+{
+    if (!c->tasks || c->tasks->which != ZOOM_TASK_PACKAGE)
+        return 0;
+    if (res->diagnostics && res->num_diagnostics > 0)
+        response_diag(c, res->diagnostics[0]);
+    if (res->taskPackage &&
+        res->taskPackage->which == Z_External_extendedService)
+    {
+        Z_TaskPackage *taskPackage = res->taskPackage->u.extendedService;
+        Odr_oct *id = taskPackage->targetReference;
+        
+        if (id)
+            ZOOM_options_setl (c->tasks->u.package->options,
+                               "targetReference", (char*) id->buf, id->len);
+    }
+    return 1;
+}
+
+
+static void handle_apdu (ZOOM_connection c, Z_APDU *apdu)
+{
+    Z_InitResponse *initrs;
+    
+    c->mask = 0;
+    yaz_log (LOG_DEBUG, "recv APDU type=%d", apdu->which);
+    switch(apdu->which)
+    {
+    case Z_APDU_initResponse:
+       initrs = apdu->u.initResponse;
+        ZOOM_connection_option_set(c, "targetImplementationId",
+                                   initrs->implementationId ?
+                                   initrs->implementationId : "");
+        ZOOM_connection_option_set(c, "targetImplementationName",
+                                   initrs->implementationName ?
+                                   initrs->implementationName : "");
+        ZOOM_connection_option_set(c, "targetImplementationVersion",
+                                   initrs->implementationVersion ?
+                                   initrs->implementationVersion : "");
+       if (!*initrs->result)
+       {
+            set_ZOOM_error(c, ZOOM_ERROR_INIT, 0);
+       }
+       else
+       {
+           char *cookie =
+               yaz_oi_get_string_oidval (&apdu->u.initResponse->otherInfo,
+                                         VAL_COOKIE, 1, 0);
+           xfree (c->cookie_in);
+           c->cookie_in = 0;
+           if (cookie)
+               c->cookie_in = xstrdup(cookie);
+            if (ODR_MASK_GET(initrs->options, Z_Options_namedResultSets) &&
+                ODR_MASK_GET(initrs->protocolVersion, Z_ProtocolVersion_3))
+                c->support_named_resultsets = 1;
+            if (c->tasks)
+            {
+                assert (c->tasks->which == ZOOM_TASK_CONNECT);
+                ZOOM_connection_remove_task (c);
+            }
+           ZOOM_connection_exec_task (c);
+       }
+       if (ODR_MASK_GET(initrs->options, Z_Options_negotiationModel))
+       {
+            NMEM tmpmem = nmem_create();
+            Z_CharSetandLanguageNegotiation *p =
+                yaz_get_charneg_record(initrs->otherInfo);
+            
+            if (p)
+            {
+                char *charset=NULL, *lang=NULL;
+                int sel;
+                
+                yaz_get_response_charneg(tmpmem, p, &charset, &lang, &sel);
+                yaz_log(LOG_DEBUG, "Target accepted: charset %s, "
+                        "language %s, select %d",
+                        charset ? charset : "none", lang ? lang : "none", sel);
+                if (charset)
+                    ZOOM_connection_option_set (c, "negotiation-charset",
+                                                charset);
+                if (lang)
+                    ZOOM_connection_option_set (c, "negotiation-lang",
+                                                lang);
+                nmem_destroy(tmpmem);
+            }
+       }       
+       break;
+    case Z_APDU_searchResponse:
+       handle_search_response (c, apdu->u.searchResponse);
+       if (send_sort_present (c) == zoom_complete)
+           ZOOM_connection_remove_task (c);
+       break;
+    case Z_APDU_presentResponse:
+       handle_present_response (c, apdu->u.presentResponse);
+       if (send_present (c) == zoom_complete)
+           ZOOM_connection_remove_task (c);
+       break;
+    case Z_APDU_sortResponse:
+       sort_response (c, apdu->u.sortResponse);
+       if (send_present (c) == zoom_complete)
+           ZOOM_connection_remove_task (c);
+        break;
+    case Z_APDU_scanResponse:
+        scan_response (c, apdu->u.scanResponse);
+        ZOOM_connection_remove_task (c);
+        break;
+    case Z_APDU_extendedServicesResponse:
+        es_response (c, apdu->u.extendedServicesResponse);
+        ZOOM_connection_remove_task (c);
+        break;
+    case Z_APDU_close:
+        if (c->reconnect_ok)
+        {
+            do_close(c);
+            c->tasks->running = 0;
+            ZOOM_connection_insert_task (c, ZOOM_TASK_CONNECT);
+        }
+        else
+        {
+            set_ZOOM_error(c, ZOOM_ERROR_CONNECTION_LOST, 0);
+            do_close(c);
+        }
+        break;
+    default:
+        set_ZOOM_error(c, ZOOM_ERROR_DECODE, 0);
+        do_close(c);
+    }
+}
+
+#if HAVE_XML2
+static void handle_srw_response(ZOOM_connection c,
+                                Z_SRW_searchRetrieveResponse *res)
+{
+    ZOOM_resultset resultset = 0;
+    int i;
+    NMEM nmem;
+    ZOOM_Event event;
+
+    if (!c->tasks)
+        return;
+
+    if (c->tasks->which == ZOOM_TASK_SEARCH)
+        resultset = c->tasks->u.search.resultset;
+    else if (c->tasks->which == ZOOM_TASK_RETRIEVE)
+        resultset = c->tasks->u.retrieve.resultset;
+    else
+       return ;
+
+    event = ZOOM_Event_create(ZOOM_EVENT_RECV_SEARCH);
+    ZOOM_connection_put_event(c, event);
+
+    resultset->size = 0;
+
+    yaz_log(LOG_DEBUG, "got SRW response OK");
+    
+    if (res->numberOfRecords)
+        resultset->size = *res->numberOfRecords;
+
+    for (i = 0; i<res->num_records; i++)
+    {
+        int pos;
+
+        Z_NamePlusRecord *npr = (Z_NamePlusRecord *)
+            odr_malloc(c->odr_in, sizeof(Z_NamePlusRecord));
+
+        if (res->records[i].recordPosition && 
+            *res->records[i].recordPosition > 0)
+            pos = *res->records[i].recordPosition - 1;
+        else
+            pos = resultset->start + i;
+        
+        npr->databaseName = 0;
+        npr->which = Z_NamePlusRecord_databaseRecord;
+        npr->u.databaseRecord = (Z_External *)
+            odr_malloc(c->odr_in, sizeof(Z_External));
+        npr->u.databaseRecord->descriptor = 0;
+        npr->u.databaseRecord->direct_reference =
+            yaz_oidval_to_z3950oid(c->odr_in, CLASS_RECSYN, VAL_TEXT_XML);
+        npr->u.databaseRecord->which = Z_External_octet;
+        npr->u.databaseRecord->u.octet_aligned = (Odr_oct *)
+            odr_malloc(c->odr_in, sizeof(Odr_oct));
+        npr->u.databaseRecord->u.octet_aligned->buf = 
+            res->records[i].recordData_buf;
+        npr->u.databaseRecord->u.octet_aligned->len = 
+            npr->u.databaseRecord->u.octet_aligned->size = 
+            res->records[i].recordData_len;
+        record_cache_add (resultset, npr, pos);
+    }
+    if (res->num_diagnostics > 0)
+    {
+        set_dset_error(c, *res->diagnostics[0].code, "SRW",
+                       res->diagnostics[0].details, 0);
+    }
+    nmem = odr_extract_mem(c->odr_in);
+    nmem_transfer(resultset->odr->mem, nmem);
+    nmem_destroy(nmem);
+}
+#endif
+
+#if HAVE_XML2
+static void handle_http(ZOOM_connection c, Z_HTTP_Response *hres)
+{
+    int ret = -1;
+    const char *content_type = z_HTTP_header_lookup(hres->headers,
+                                                    "Content-Type");
+    const char *connection_head = z_HTTP_header_lookup(hres->headers,
+                                                       "Connection");
+    c->mask = 0;
+    yaz_log (LOG_DEBUG, "handle_http");
+
+    if (content_type && !yaz_strcmp_del("text/xml", content_type, "; "))
+    {
+        Z_SOAP *soap_package = 0;
+        ODR o = odr_createmem(ODR_DECODE);
+        Z_SOAP_Handler soap_handlers[2] = {
+            {"http://www.loc.gov/zing/srw/v1.0/", 0,
+             (Z_SOAP_fun) yaz_srw_codec},
+            {0, 0, 0}
+        };
+        ret = z_soap_codec(o, &soap_package,
+                           &hres->content_buf, &hres->content_len,
+                           soap_handlers);
+        if (!ret && soap_package->which == Z_SOAP_generic &&
+            soap_package->u.generic->no == 0)
+        {
+            Z_SRW_PDU *sr = soap_package->u.generic->p;
+            if (sr->which == Z_SRW_searchRetrieve_response)
+                handle_srw_response(c, sr->u.response);
+            else
+                ret = -1;
+        }
+        else if (!ret && (soap_package->which == Z_SOAP_fault
+                          || soap_package->which == Z_SOAP_error))
+        {
+            set_HTTP_error(c, hres->code,
+                           soap_package->u.fault->fault_code,
+                           soap_package->u.fault->fault_string);
+        }
+        else
+            ret = -1;
+        odr_destroy(o);
+    }
+    if (ret)
+    {
+        if (hres->code != 200)
+            set_HTTP_error(c, hres->code, 0, 0);
+        else
+            set_ZOOM_error(c, ZOOM_ERROR_DECODE, 0);
+        do_close (c);
+    }
+    ZOOM_connection_remove_task(c);
+    if (!strcmp(hres->version, "1.0"))
+    {
+        /* HTTP 1.0: only if Keep-Alive we stay alive.. */
+        if (!connection_head || strcmp(connection_head, "Keep-Alive"))
+            do_close(c);
+    }
+    else 
+    {
+        /* HTTP 1.1: only if no close we stay alive .. */
+        if (connection_head && !strcmp(connection_head, "close"))
+            do_close(c);
+    }
+}
+#endif
+
+static int do_read (ZOOM_connection c)
+{
+    int r, more;
+    ZOOM_Event event;
+    
+    event = ZOOM_Event_create (ZOOM_EVENT_RECV_DATA);
+    ZOOM_connection_put_event (c, event);
+    
+
+    r = cs_get (c->cs, &c->buf_in, &c->len_in);
+    more = cs_more(c->cs);
+    yaz_log (LOG_DEBUG, "do_read len=%d more=%d", r, more);
+    if (r == 1)
+       return 0;
+    if (r <= 0)
+    {
+        if (c->reconnect_ok)
+        {
+            do_close (c);
+            c->reconnect_ok = 0;
+            yaz_log (LOG_DEBUG, "reconnect read");
+            c->tasks->running = 0;
+            ZOOM_connection_insert_task (c, ZOOM_TASK_CONNECT);
+        }
+        else
+        {
+            set_ZOOM_error(c, ZOOM_ERROR_CONNECTION_LOST, 0);
+            do_close (c);
+        }
+    }
+    else
+    {
+        Z_GDU *gdu;
+        ZOOM_Event event;
+
+       odr_reset (c->odr_in);
+       odr_setbuf (c->odr_in, c->buf_in, r, 0);
+        event = ZOOM_Event_create (ZOOM_EVENT_RECV_APDU);
+        ZOOM_connection_put_event (c, event);
+
+       if (!z_GDU (c->odr_in, &gdu, 0, 0))
+       {
+            set_ZOOM_error(c, ZOOM_ERROR_DECODE, 0);
+           do_close (c);
+       }
+       else if (gdu->which == Z_GDU_Z3950)
+           handle_apdu (c, gdu->u.z3950);
+        else if (gdu->which == Z_GDU_HTTP_Response)
+        {
+#if HAVE_XML2
+            handle_http (c, gdu->u.HTTP_Response);
+#else
+            set_ZOOM_error(c, ZOOM_ERROR_DECODE, 0);
+           do_close (c);
+#endif
+        }
+        c->reconnect_ok = 0;
+    }
+    return 1;
+}
+
+static zoom_ret do_write_ex (ZOOM_connection c, char *buf_out, int len_out)
+{
+    int r;
+    ZOOM_Event event;
+    
+    event = ZOOM_Event_create(ZOOM_EVENT_SEND_DATA);
+    ZOOM_connection_put_event (c, event);
+
+    yaz_log (LOG_DEBUG, "do_write_ex len=%d", len_out);
+    if ((r=cs_put (c->cs, buf_out, len_out)) < 0)
+    {
+        if (c->reconnect_ok)
+        {
+            do_close (c);
+            c->reconnect_ok = 0;
+            yaz_log (LOG_DEBUG, "reconnect write");
+            c->tasks->running = 0;
+            ZOOM_connection_insert_task (c, ZOOM_TASK_CONNECT);
+            return zoom_pending;
+        }
+       if (c->state == STATE_CONNECTING)
+           set_ZOOM_error(c, ZOOM_ERROR_CONNECT, 0);
+       else
+            set_ZOOM_error(c, ZOOM_ERROR_CONNECTION_LOST, 0);
+       do_close (c);
+       return zoom_complete;
+    }
+    else if (r == 1)
+    {    
+        c->mask = ZOOM_SELECT_EXCEPT;
+        if (c->cs->io_pending & CS_WANT_WRITE)
+            c->mask += ZOOM_SELECT_WRITE;
+        if (c->cs->io_pending & CS_WANT_READ)
+            c->mask += ZOOM_SELECT_READ;
+        yaz_log (LOG_DEBUG, "do_write_ex 1 mask=%d", c->mask);
+    }
+    else
+    {
+        c->mask = ZOOM_SELECT_READ|ZOOM_SELECT_EXCEPT;
+        yaz_log (LOG_DEBUG, "do_write_ex 2 mask=%d", c->mask);
+    }
+    return zoom_pending;
+}
+
+static zoom_ret do_write(ZOOM_connection c)
+{
+    return do_write_ex (c, c->buf_out, c->len_out);
+}
+
+
+ZOOM_API(const char *)
+ZOOM_connection_option_get (ZOOM_connection c, const char *key)
+{
+    return ZOOM_options_get (c->options, key);
+}
+
+ZOOM_API(void)
+ZOOM_connection_option_set (ZOOM_connection c, const char *key,
+                                  const char *val)
+{
+    ZOOM_options_set (c->options, key, val);
+}
+
+ZOOM_API(const char *)
+ZOOM_resultset_option_get (ZOOM_resultset r, const char *key)
+{
+    return ZOOM_options_get (r->options, key);
+}
+
+ZOOM_API(void)
+ZOOM_resultset_option_set (ZOOM_resultset r, const char *key,
+                                  const char *val)
+{
+    ZOOM_options_set (r->options, key, val);
+}
+
+
+ZOOM_API(int)
+ZOOM_connection_errcode (ZOOM_connection c)
+{
+    return ZOOM_connection_error (c, 0, 0);
+}
+
+ZOOM_API(const char *)
+ZOOM_connection_errmsg (ZOOM_connection c)
+{
+    const char *msg;
+    ZOOM_connection_error (c, &msg, 0);
+    return msg;
+}
+
+ZOOM_API(const char *)
+ZOOM_connection_addinfo (ZOOM_connection c)
+{
+    const char *addinfo;
+    ZOOM_connection_error (c, 0, &addinfo);
+    return addinfo;
+}
+
+ZOOM_API(const char *)
+ZOOM_diag_str (int error)
+{
+    switch (error)
+    {
+    case ZOOM_ERROR_NONE:
+       return "No error";
+    case ZOOM_ERROR_CONNECT:
+       return "Connect failed";
+    case ZOOM_ERROR_MEMORY:
+       return "Out of memory";
+    case ZOOM_ERROR_ENCODE:
+       return "Encoding failed";
+    case ZOOM_ERROR_DECODE:
+       return "Decoding failed";
+    case ZOOM_ERROR_CONNECTION_LOST:
+       return "Connection lost";
+    case ZOOM_ERROR_INIT:
+       return "Init rejected";
+    case ZOOM_ERROR_INTERNAL:
+       return "Internal failure";
+    case ZOOM_ERROR_TIMEOUT:
+       return "Timeout";
+    case ZOOM_ERROR_UNSUPPORTED_PROTOCOL:
+       return "Unsupported protocol";
+    case ZOOM_ERROR_UNSUPPORTED_QUERY:
+       return "Unsupported query type";
+    default:
+       return diagbib1_str (error);
+    }
+}
+
+ZOOM_API(int)
+ZOOM_connection_error_x (ZOOM_connection c, const char **cp,
+                         const char **addinfo, const char **diagset)
+{
+    int error = c->error;
+    if (cp)
+    {
+        if (!c->diagset || !strcmp(c->diagset, "ZOOM"))
+            *cp = ZOOM_diag_str(error);
+        else if (!strcmp(c->diagset, "HTTP"))
+            *cp = z_HTTP_errmsg(c->error);
+        else if (!strcmp(c->diagset, "Bib-1"))
+            *cp = ZOOM_diag_str(error);
+        else if (!strcmp(c->diagset, "SRW"))
+            *cp = yaz_diag_srw_str(c->error);
+        else
+            *cp = "Unknown error and diagnostic set";
+    }
+    if (addinfo)
+        *addinfo = c->addinfo ? c->addinfo : "";
+    if (diagset)
+        *diagset = c->diagset ? c->diagset : "";
+    return c->error;
+}
+
+ZOOM_API(int)
+ZOOM_connection_error (ZOOM_connection c, const char **cp,
+                       const char **addinfo)
+{
+    return ZOOM_connection_error_x(c, cp, addinfo, 0);
+}
+
+static int ZOOM_connection_do_io(ZOOM_connection c, int mask)
+{
+    ZOOM_Event event = 0;
+    int r = cs_look(c->cs);
+    yaz_log (LOG_DEBUG, "ZOOM_connection_do_io c=%p mask=%d cs_look=%d",
+            c, mask, r);
+    
+    if (r == CS_NONE)
+    {
+        event = ZOOM_Event_create (ZOOM_EVENT_CONNECT);
+       set_ZOOM_error(c, ZOOM_ERROR_CONNECT, 0);
+       do_close (c);
+        ZOOM_connection_put_event (c, event);
+    }
+    else if (r == CS_CONNECT)
+    {
+        int ret;
+        event = ZOOM_Event_create (ZOOM_EVENT_CONNECT);
+
+        ret = cs_rcvconnect (c->cs);
+        yaz_log (LOG_DEBUG, "cs_rcvconnect returned %d", ret);
+        if (ret == 1)
+        {
+            c->mask = ZOOM_SELECT_EXCEPT;
+            if (c->cs->io_pending & CS_WANT_WRITE)
+                c->mask += ZOOM_SELECT_WRITE;
+            if (c->cs->io_pending & CS_WANT_READ)
+                c->mask += ZOOM_SELECT_READ;
+            ZOOM_connection_put_event (c, event);
+        }
+        else if (ret == 0)
+        {
+            ZOOM_connection_put_event (c, event);
+            if (c->proto == PROTO_Z3950)
+                ZOOM_connection_send_init(c);
+            else
+            {
+                /* no init request for SRW .. */
+                assert (c->tasks->which == ZOOM_TASK_CONNECT);
+                ZOOM_connection_remove_task (c);
+                c->mask = 0;
+                ZOOM_connection_exec_task (c);
+            }
+            c->state = STATE_ESTABLISHED;
+        }
+        else
+        {
+            set_ZOOM_error(c, ZOOM_ERROR_CONNECT, 0);
+            do_close (c);
+            ZOOM_connection_put_event (c, event);
+        }
+    }
+    else
+    {
+        if (mask & ZOOM_SELECT_READ)
+            do_read (c);
+        if (c->cs && (mask & ZOOM_SELECT_WRITE))
+            do_write (c);
+    }
+    return 1;
+}
+
+ZOOM_API(int)
+ZOOM_connection_last_event(ZOOM_connection cs)
+{
+    if (!cs)
+        return ZOOM_EVENT_NONE;
+    return cs->last_event;
+}
+
+ZOOM_API(int)
+ZOOM_event (int no, ZOOM_connection *cs)
+{
+    int timeout = 5000;
+#if HAVE_SYS_POLL_H
+    struct pollfd pollfds[1024];
+    ZOOM_connection poll_cs[1024];
+#else
+    struct timeval tv;
+    fd_set input, output, except;
+#endif
+    int i, r, nfds;
+    int max_fd = 0;
+
+    for (i = 0; i<no; i++)
+    {
+       ZOOM_connection c = cs[i];
+        ZOOM_Event event;
+       if (c && (event = ZOOM_connection_get_event(c)))
+        {
+            ZOOM_Event_destroy (event);
+           return i+1;
+        }
+    }
+    for (i = 0; i<no; i++)
+    {
+        ZOOM_connection c = cs[i];
+        ZOOM_Event event;
+        if (c && ZOOM_connection_exec_task (c))
+        {
+            if ((event = ZOOM_connection_get_event(c)))
+            {
+                ZOOM_Event_destroy (event);
+                return i+1;
+            }
+        }
+    }
+#if HAVE_SYS_POLL_H
+
+#else
+    FD_ZERO (&input);
+    FD_ZERO (&output);
+    FD_ZERO (&except);
+#endif
+    nfds = 0;
+    for (i = 0; i<no; i++)
+    {
+       ZOOM_connection c = cs[i];
+       int fd, mask;
+        int this_timeout;
+       
+       if (!c)
+           continue;
+       fd = z3950_connection_socket(c);
+       mask = z3950_connection_mask(c);
+
+       if (fd == -1)
+           continue;
+       if (max_fd < fd)
+           max_fd = fd;
+
+        this_timeout = ZOOM_options_get_int (c->options, "timeout", -1);
+        if (this_timeout != -1 && this_timeout < timeout)
+            timeout = this_timeout;
+#if HAVE_SYS_POLL_H
+        if (mask)
+        {
+            short poll_events = 0;
+
+            if (mask & ZOOM_SELECT_READ)
+                poll_events += POLLIN;
+            if (mask & ZOOM_SELECT_WRITE)
+                poll_events += POLLOUT;
+            if (mask & ZOOM_SELECT_EXCEPT)
+                poll_events += POLLERR;
+            pollfds[nfds].fd = fd;
+            pollfds[nfds].events = poll_events;
+            pollfds[nfds].revents = 0;
+            poll_cs[nfds] = c;
+            nfds++;
+        }
+#else
+       if (mask & ZOOM_SELECT_READ)
+       {
+           FD_SET (fd, &input);
+           nfds++;
+       }
+       if (mask & ZOOM_SELECT_WRITE)
+       {
+           FD_SET (fd, &output);
+           nfds++;
+       }
+       if (mask & ZOOM_SELECT_EXCEPT)
+       {
+           FD_SET (fd, &except);
+           nfds++;
+       }
+#endif
+    }
+    if (timeout >= 5000)
+        timeout = 30;
+
+    if (!nfds)
+        return 0;
+
+#if HAVE_SYS_POLL_H
+    r = poll (pollfds, nfds, timeout * 1000);
+    for (i = 0; i<nfds; i++)
+    {
+        ZOOM_connection c = poll_cs[i];
+        if (r && c->mask)
+        {
+            int mask = 0;
+            if (pollfds[i].revents & POLLIN)
+                mask += ZOOM_SELECT_READ;
+            if (pollfds[i].revents & POLLOUT)
+                mask += ZOOM_SELECT_WRITE;
+            if (pollfds[i].revents & POLLERR)
+                mask += ZOOM_SELECT_EXCEPT;
+            if (mask)
+                ZOOM_connection_do_io(c, mask);
+        }
+        else if (r == 0 && c->mask)
+        {
+            ZOOM_Event event = ZOOM_Event_create(ZOOM_EVENT_TIMEOUT);
+           /* timeout and this connection was waiting */
+           set_ZOOM_error(c, ZOOM_ERROR_TIMEOUT, 0);
+            do_close (c);
+            ZOOM_connection_put_event(c, event);
+        }
+    }
+#else
+    tv.tv_sec = timeout;
+    tv.tv_usec = 0;
+    yaz_log (LOG_DEBUG, "select start");
+    r = select (max_fd+1, &input, &output, &except, &tv);
+    yaz_log (LOG_DEBUG, "select stop, returned r=%d", r);
+    for (i = 0; i<no; i++)
+    {
+       ZOOM_connection c = cs[i];
+       int fd, mask;
+
+       if (!c)
+           continue;
+       fd = z3950_connection_socket(c);
+       mask = 0;
+       if (r && c->mask)
+       {
+           /* no timeout and real socket */
+           if (FD_ISSET(fd, &input))
+               mask += ZOOM_SELECT_READ;
+           if (FD_ISSET(fd, &output))
+               mask += ZOOM_SELECT_WRITE;
+           if (FD_ISSET(fd, &except))
+               mask += ZOOM_SELECT_EXCEPT;
+           if (mask)
+               ZOOM_connection_do_io(c, mask);
+       }
+       if (r == 0 && c->mask)
+       {
+            ZOOM_Event event = ZOOM_Event_create(ZOOM_EVENT_TIMEOUT);
+           /* timeout and this connection was waiting */
+           set_ZOOM_error(c, ZOOM_ERROR_TIMEOUT, 0);
+            do_close (c);
+            yaz_log (LOG_DEBUG, "timeout");
+            ZOOM_connection_put_event(c, event);
+       }
+    }
+#endif
+    for (i = 0; i<no; i++)
+    {
+       ZOOM_connection c = cs[i];
+        ZOOM_Event event;
+       if (c && (event = ZOOM_connection_get_event(c)))
+        {
+            ZOOM_Event_destroy (event);
+           return i+1;
+        }
+    }
+    return 0;
+}
diff --git a/src/zoom-opt.c b/src/zoom-opt.c
new file mode 100644 (file)
index 0000000..1f2dd45
--- /dev/null
@@ -0,0 +1,183 @@
+/*
+ * $Id: zoom-opt.c,v 1.1 2003-10-27 12:21:36 adam Exp $
+ *
+ * ZOOM layer for C, options handling
+ */
+#include <assert.h>
+#include "zoom-p.h"
+
+#include <yaz/xmalloc.h>
+
+ZOOM_API(ZOOM_options)
+ZOOM_options_create_with_parent (ZOOM_options parent)
+{
+    return ZOOM_options_create_with_parent2(parent, 0);
+}
+
+ZOOM_API(ZOOM_options)
+ZOOM_options_create (void)
+{
+    return ZOOM_options_create_with_parent (0);
+}
+
+
+ZOOM_API(ZOOM_options)
+ZOOM_options_create_with_parent2 (ZOOM_options parent1, ZOOM_options parent2)
+{
+    ZOOM_options opt = (ZOOM_options) xmalloc (sizeof(*opt));
+
+    opt->refcount = 1;
+    opt->callback_func = 0;
+    opt->callback_handle = 0;
+    opt->entries = 0;
+    opt->parent1= parent1;
+    if (parent1)
+       (parent1->refcount)++;
+    opt->parent2= parent2;
+    if (parent2)
+       (parent2->refcount)++;
+    return opt;
+}
+
+
+void ZOOM_options_addref (ZOOM_options opt)
+{
+    (opt->refcount)++;
+}
+
+ZOOM_API(ZOOM_options_callback)
+ZOOM_options_set_callback (
+    ZOOM_options opt,
+    ZOOM_options_callback callback_func,
+    void *callback_handle)
+{
+    ZOOM_options_callback callback_old;
+
+    assert (opt);
+    callback_old = opt->callback_func;
+    opt->callback_func = callback_func;
+    opt->callback_handle = callback_handle;
+    return callback_old;
+}
+
+ZOOM_API(void)
+ZOOM_options_destroy (ZOOM_options opt)
+{
+    if (!opt)
+       return;
+    (opt->refcount)--;
+    if (opt->refcount == 0)
+    {
+       struct ZOOM_options_entry *e;
+       
+       ZOOM_options_destroy (opt->parent1);
+       ZOOM_options_destroy (opt->parent2);
+       e = opt->entries;
+       while (e)
+       {
+           struct ZOOM_options_entry *e0 = e;
+           xfree (e->name);
+           xfree (e->value);
+           e = e->next;
+           xfree (e0);
+       }
+       xfree (opt);
+    }
+}
+
+ZOOM_API(void)
+ZOOM_options_setl (ZOOM_options opt, const char *name, const char *value,
+                   int len)
+{
+    struct ZOOM_options_entry **e;
+
+    e = &opt->entries;
+    while (*e)
+    {
+       if (!strcmp((*e)->name, name))
+       {
+           xfree ((*e)->value);
+            (*e)->value = 0;
+            if (value)
+            {
+                (*e)->value = (char *) xmalloc (len+1);
+                memcpy ((*e)->value, value, len);
+                (*e)->value[len] = '\0';
+            }
+           return;
+       }
+       e = &(*e)->next;
+    }
+    *e = (struct ZOOM_options_entry *) xmalloc (sizeof(**e));
+    (*e)->name = xstrdup (name);
+    (*e)->value = 0;
+    if (value)
+    {
+        (*e)->value = (char *) xmalloc (len+1);
+        memcpy ((*e)->value, value, len);
+        (*e)->value[len] = '\0';
+    }
+    (*e)->next = 0;
+}
+
+ZOOM_API(void)
+ZOOM_options_set (ZOOM_options opt, const char *name, const char *value)
+{
+    ZOOM_options_setl (opt, name, value, value ? strlen(value): 0);
+}
+
+ZOOM_API(const char *)
+ZOOM_options_get (ZOOM_options opt, const char *name)
+{
+    const char *v = 0;
+    if (!opt)
+       return 0;
+    if (opt->callback_func)
+       v = (*opt->callback_func)(opt->callback_handle, name);
+    if (!v)
+    {
+       struct ZOOM_options_entry *e;
+       for (e = opt->entries; e; e = e->next)
+           if (!strcmp(e->name, name))
+           {
+               v = e->value;
+               break;
+           }
+    }
+    if (!v)
+       v = ZOOM_options_get(opt->parent1, name);
+    if (!v)
+       v = ZOOM_options_get(opt->parent2, name);
+    return v;
+}
+
+ZOOM_API(int)
+ZOOM_options_get_bool (ZOOM_options opt, const char *name, int defa)
+{
+    const char *v = ZOOM_options_get (opt, name);
+
+    if (!v)
+       return defa;
+    if (!strcmp (v, "1") || !strcmp(v, "T"))
+       return 1;
+    return 0;
+}
+
+ZOOM_API(int)
+ZOOM_options_get_int (ZOOM_options opt, const char *name, int defa)
+{
+    const char *v = ZOOM_options_get (opt, name);
+
+    if (!v || !*v)
+       return defa;
+    return atoi(v);
+}
+
+ZOOM_API(void)
+ZOOM_options_set_int(ZOOM_options opt, const char *name, int value)
+{
+    char s[40];
+
+    sprintf (s, "%d", value);
+    ZOOM_options_set (opt, name, s);
+}
diff --git a/src/zoom-p.h b/src/zoom-p.h
new file mode 100644 (file)
index 0000000..b9d8223
--- /dev/null
@@ -0,0 +1,168 @@
+/*
+ * Private C header for ZOOM C.
+ * $Id: zoom-p.h,v 1.1 2003-10-27 12:21:36 adam Exp $
+ */
+
+#if HAVE_XSLT
+#include <yaz/srw.h>
+#endif
+
+#include <yaz/proto.h>
+#include <yaz/comstack.h>
+#include <yaz/wrbuf.h>
+#include <yaz/zoom.h>
+#include <yaz/sortspec.h>
+typedef struct ZOOM_Event_p *ZOOM_Event;
+
+struct ZOOM_query_p {
+    Z_Query *z_query;
+    Z_SortKeySpecList *sort_spec;
+    int refcount;
+    ODR odr;
+    char *query_string;
+};
+
+#define STATE_IDLE 0
+#define STATE_CONNECTING 1
+#define STATE_ESTABLISHED 2
+
+#define ZOOM_SELECT_READ 1
+#define ZOOM_SELECT_WRITE 2
+#define ZOOM_SELECT_EXCEPT 4
+
+struct ZOOM_connection_p {
+    enum oid_proto proto;
+    COMSTACK cs;
+    char *host_port;
+    char *path;
+    int error;
+    char *addinfo;
+    const char *diagset;
+    int state;
+    int mask;
+    int reconnect_ok;
+    ODR odr_in;
+    ODR odr_out;
+    char *buf_in;
+    int len_in;
+    char *buf_out;
+    int len_out;
+    char *proxy;
+    char *charset;
+    char *lang;
+    char *cookie_out;
+    char *cookie_in;
+    char *client_IP;
+    int async;
+    int support_named_resultsets;
+    int last_event;
+    ZOOM_task tasks;
+    ZOOM_options options;
+    ZOOM_resultset resultsets;
+    ZOOM_Event m_queue_front;
+    ZOOM_Event m_queue_back;
+};
+
+struct ZOOM_options_entry {
+    char *name;
+    char *value;
+    struct ZOOM_options_entry *next;
+};
+
+struct ZOOM_options_p {
+    int refcount;
+    void *callback_handle;
+    ZOOM_options_callback callback_func;
+    struct ZOOM_options_entry *entries;
+    ZOOM_options parent1;
+    ZOOM_options parent2;
+};
+
+typedef struct ZOOM_record_cache_p *ZOOM_record_cache;
+
+struct ZOOM_resultset_p {
+    Z_SortKeySpecList *r_sort_spec;
+    ZOOM_query query;
+    int refcount;
+    int size;
+    int start;
+    int count;
+    int step;
+    int piggyback;
+    char *setname;
+    char *schema;
+    ODR odr;
+    ZOOM_record_cache record_cache;
+    ZOOM_options options;
+    ZOOM_connection connection;
+    ZOOM_resultset next;
+};
+
+struct ZOOM_record_p {
+    ODR odr;
+    WRBUF wrbuf_marc;
+    WRBUF wrbuf_iconv;
+    WRBUF wrbuf_opac;
+    Z_NamePlusRecord *npr;
+};
+
+struct ZOOM_record_cache_p {
+    struct ZOOM_record_p rec;
+    char *elementSetName;
+    char *syntax;
+    char *schema;
+    int pos;
+    ZOOM_record_cache next;
+};
+
+struct ZOOM_scanset_p {
+    int refcount;
+    ODR odr;
+    ZOOM_options options;
+    ZOOM_connection connection;
+    Z_AttributesPlusTerm *termListAndStartPoint;
+    Z_AttributeSetId *attributeSet;
+    Z_ScanResponse *scan_response;
+};
+
+struct ZOOM_package_p {
+    int refcount;
+    ODR odr_out;
+    ZOOM_options options;
+    ZOOM_connection connection;
+    char *buf_out;
+    int len_out;
+};
+
+struct ZOOM_task_p {
+    int running;
+    int which;
+    union {
+#define ZOOM_TASK_SEARCH 1
+        struct {
+            ZOOM_resultset resultset;
+        } search;
+#define ZOOM_TASK_RETRIEVE 2
+        struct {
+            int start;
+            ZOOM_resultset resultset;
+            int count;
+        } retrieve;
+#define ZOOM_TASK_CONNECT 3
+#define ZOOM_TASK_SCAN 4
+        struct {
+            ZOOM_scanset scan;
+        } scan;
+#define ZOOM_TASK_PACKAGE 5
+        ZOOM_package package;
+    } u;
+    ZOOM_task next;
+};
+
+struct ZOOM_Event_p {
+    int kind;
+    ZOOM_Event next;
+    ZOOM_Event prev;
+};
+
+void ZOOM_options_addref (ZOOM_options opt);
diff --git a/srw/.cvsignore b/srw/.cvsignore
deleted file mode 100644 (file)
index 9db4dc3..0000000
+++ /dev/null
@@ -1,7 +0,0 @@
-.deps
-.libs
-Makefile
-Makefile.in
-srw_*
-*.lo
-*.la
diff --git a/srwapps/.cvsignore b/srwapps/.cvsignore
deleted file mode 100644 (file)
index da7b481..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-.deps
-.libs
-Makefile
-Makefile.in
-*.lo
diff --git a/tab/.cvsignore b/tab/.cvsignore
deleted file mode 100644 (file)
index 282522d..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-Makefile
-Makefile.in
diff --git a/test/Makefile.am b/test/Makefile.am
new file mode 100644 (file)
index 0000000..02f7e07
--- /dev/null
@@ -0,0 +1,38 @@
+## Copyright (C) 1994-2003, Index Data
+## All rights reserved.
+## $Id: Makefile.am,v 1.1 2003-10-27 12:21:38 adam Exp $
+
+check_PROGRAMS = tsticonv tstnmem tstmatchstr tstwrbuf tstodr tstccl
+
+TESTS = $(check_PROGRAMS)
+
+EXTRA_DIST = tstodr.asn tstodrcodec.c tstodrcodec.h
+
+YAZCOMP = $(top_srcdir)/util/yaz-asncomp
+YAZCOMPLINE = $(YAZCOMP) -d z.tcl -i yaz -I../include $(YCFLAGS)
+
+AM_CPPFLAGS=-I$(top_srcdir)/include $(XML2_CFLAGS)
+
+# Rule for generating codecs for our small ASN.1 spec
+tstodrcodec.c tstodrcodec.h: tstodr.asn $(YAZCOMP)
+       cd $(srcdir); $(YAZCOMP) tstodr.asn
+
+# Tests..
+tsticonv_LDADD = ../src/libyaz.la
+tsticonv_SOURCES = tsticonv.c
+
+tstnmem_LDADD = ../src/libyaz.la
+tstnmem_SOURCES = tstnmem.c
+
+tstmatchstr_LDADD = ../src/libyaz.la
+tstmatchstr_SOURCES = tstmatchstr.c
+
+tstwrbuf_LDADD = ../src/libyaz.la
+tstwrbuf_SOURCES = tstwrbuf.c
+
+tstodr_LDADD = ../src/libyaz.la
+tstodr_SOURCES = tstodrcodec.c tstodrcodec.h tstodr.c
+
+tstccl_LDADD = ../src/libyaz.la
+tstccl_SOURCES = tstccl.c
+
diff --git a/test/tstccl.c b/test/tstccl.c
new file mode 100644 (file)
index 0000000..2f1f897
--- /dev/null
@@ -0,0 +1,84 @@
+/*
+ * Copyright (c) 2002-2003, Index Data
+ * See the file LICENSE for details.
+ *
+ * $Id: tstccl.c,v 1.1 2003-10-27 12:21:38 adam Exp $
+ */
+
+/* CCL test */
+
+#include <yaz/ccl.h>
+
+struct ccl_tst {
+    char *query;
+    char *result;
+};
+
+static struct ccl_tst query_str[] = {
+    { "x1", "@attr 4=2 @attr 1=1016 x1 "},
+    { "(((((x1)))))", "@attr 4=2 @attr 1=1016 x1 "},
+    {"x1 and x2", "@and @attr 4=2 @attr 1=1016 x1 @attr 4=2 @attr 1=1016 x2 "},
+    { "ti=x3", "@attr 4=2 @attr 1=4 x3 "},
+    { "dc.title=x4", "@attr 1=/my/title x4 "},
+    { "x1 and", 0},
+    { "tix=x5", 0},
+    {0, 0}
+};
+
+void tst1(void)
+{
+    CCL_parser parser = ccl_parser_create ();
+    CCL_bibset bibset = ccl_qual_mk();
+    int i;
+
+    ccl_qual_fitem(bibset, "u=4    s=pw t=l,r", "ti");
+    ccl_qual_fitem(bibset, "1=1016 s=al,pw",    "term");
+    ccl_qual_fitem(bibset, "1=/my/title",         "dc.title");
+
+    parser->bibset = bibset;
+
+    for (i = 0; query_str[i].query; i++)
+    {
+       struct ccl_token *token_list =
+           ccl_parser_tokenize(parser, query_str[i].query);
+       struct ccl_rpn_node *rpn = ccl_parser_find(parser, token_list);
+       ccl_token_del (token_list);
+       if (rpn)
+       {
+           WRBUF wrbuf = wrbuf_alloc();
+           ccl_pquery(wrbuf, rpn);
+
+           if (!query_str[i].result)
+           {
+               printf ("Failed %s\n", query_str[i].query);
+               printf (" got:%s:\n", wrbuf_buf(wrbuf));
+               printf (" expected failure\n");
+               exit(3);
+           }
+           else if (strcmp(wrbuf_buf(wrbuf), query_str[i].result))
+           {
+               printf ("Failed %s\n", query_str[i].query);
+               printf (" got:%s:\n", wrbuf_buf(wrbuf));
+               printf (" expected:%s:\n", query_str[i].result);
+               exit(2);
+           }
+           ccl_rpn_delete(rpn);
+           wrbuf_free(wrbuf, 1);
+       }
+       else if (query_str[i].result)
+       {
+           printf ("Failed %s\n", query_str[i].query);
+           printf (" got failure\n");
+           printf (" expected:%s:\n", query_str[i].result);
+           exit(4);
+       }
+    }  
+    ccl_parser_destroy (parser);
+    ccl_qual_rm(&bibset);
+}
+
+int main(int argc, char **argv)
+{
+    tst1();
+    exit(0);
+}
diff --git a/test/tsticonv.c b/test/tsticonv.c
new file mode 100644 (file)
index 0000000..6410e57
--- /dev/null
@@ -0,0 +1,143 @@
+/*
+ * Copyright (c) 2002-2003, Index Data
+ * See the file LICENSE for details.
+ *
+ * $Id: tsticonv.c,v 1.1 2003-10-27 12:21:38 adam Exp $
+ */
+
+#if HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include <errno.h>
+#include <string.h>
+#include <ctype.h>
+
+#include <yaz/yaz-util.h>
+
+/* some test strings in ISO-8859-1 format */
+const char *buf[] = {
+    "ax" ,
+    "\330",
+    "eneb\346r",
+    "\xfc",
+    "\xfb",
+    "\xfbr",
+    0 };
+
+/* some test strings in MARC-8 format */
+const char *marc8_strings[] = {
+    "ax",   
+    "\xa2",          /* latin capital letter o with stroke */
+    "eneb\xb5r",     /* latin small letter ae */
+    "\xe8\x75",      /* latin small letter u with umlaut */
+    "\xe3\x75",      /* latin small letter u with circumflex */
+    "\xe3\x75r",     /* latin small letter u with circumflex */
+    0
+};
+
+static void marc8_tst()
+{
+    int i;
+    yaz_iconv_t cd;
+
+    cd = yaz_iconv_open("ISO-8859-1", "MARC8");
+    for (i = 0; buf[i]; i++)
+    {
+        size_t r;
+        char *inbuf= (char*) marc8_strings[i];
+        size_t inbytesleft = strlen(inbuf);
+        char outbuf0[24];
+        char *outbuf = outbuf0;
+        size_t outbytesleft = sizeof(outbuf0);
+
+        r = yaz_iconv(cd, &inbuf, &inbytesleft, &outbuf, &outbytesleft);
+        if (r == (size_t) (-1))
+        {
+            int e = yaz_iconv_error(cd);
+
+            printf ("tsticonv 6 i=%d e=%d\n", i, e);
+           exit(6);
+        }
+        if ((outbuf - outbuf0) != strlen(buf[i]) 
+            || memcmp(outbuf0, buf[i], strlen(buf[i])))
+        {
+            printf ("tsticonv 7 i=%d\n", i);
+            printf ("buf=%s   out=%s\n", buf[i], outbuf0);
+           exit(7);
+        }
+    }
+    yaz_iconv_close(cd);
+}
+
+static void dconvert(int mandatory, const char *tmpcode)
+{
+    int i;
+    yaz_iconv_t cd;
+    for (i = 0; buf[i]; i++)
+    {
+        size_t r;
+       char *inbuf = (char*) buf[i];
+       size_t inbytesleft = strlen(inbuf);
+       char outbuf0[24];
+       char outbuf1[10];
+       char *outbuf = outbuf0;
+       size_t outbytesleft = sizeof(outbuf0);
+
+        cd = yaz_iconv_open(tmpcode, "ISO-8859-1");
+       if (!cd)
+        {
+            if (!mandatory)
+                return;
+            printf ("tsticonv 1\n");
+           exit(1);
+        }
+       r = yaz_iconv(cd, &inbuf, &inbytesleft, &outbuf, &outbytesleft);
+       if (r == (size_t)(-1))
+        {
+            int e = yaz_iconv_error(cd);
+
+            printf ("tsticonv 2 e=%d\n", e);
+           exit(2);
+        }
+       yaz_iconv_close(cd);
+        
+       cd = yaz_iconv_open("ISO-8859-1", tmpcode);
+       if (!cd)
+        {
+            if (!mandatory)
+                return;
+            printf ("tsticonv 3\n");
+           exit(3);
+        }
+       inbuf = outbuf0;
+       inbytesleft = sizeof(outbuf0) - outbytesleft;
+
+       outbuf = outbuf1;
+       outbytesleft = sizeof(outbuf1);
+       r = yaz_iconv(cd, &inbuf, &inbytesleft, &outbuf, &outbytesleft);
+       if (r == (size_t)(-1)) {
+            int e = yaz_iconv_error(cd);
+
+            printf ("tsticonv 4 e=%d\n", e);
+           exit(4);
+       }
+       if (strlen(buf[i]) == (sizeof(outbuf1) - outbytesleft) &&
+            memcmp(outbuf1, buf[i], strlen(buf[i])))
+        {
+            printf ("tsticonv 5\n");
+            exit(5);
+       }
+       yaz_iconv_close(cd);
+    }
+}
+       
+int main (int argc, char **argv)
+{
+    dconvert(1, "UTF-8");
+    dconvert(1, "ISO-8859-1");
+    dconvert(1, "UCS4");
+    dconvert(0, "CP865");
+    marc8_tst();
+    exit (0);
+}
diff --git a/test/tstmatchstr.c b/test/tstmatchstr.c
new file mode 100644 (file)
index 0000000..6f5c14c
--- /dev/null
@@ -0,0 +1,53 @@
+/*
+ * Copyright (c) 2002-2003, Index Data
+ * See the file LICENSE for details.
+ *
+ * $Id: tstmatchstr.c,v 1.1 2003-10-27 12:21:38 adam Exp $
+ */
+
+#include <stdio.h>
+
+#include <yaz/yaz-iconv.h>
+
+struct {
+    char *s1;
+    char *s2;
+    int res;
+} comp_strings[] = {
+    { "x", "x", 0 },
+    { "x", "X", 0 },
+    { "a", "b", 1 },
+    { "b", "a", 1 },
+    { "aa","a", 1 },
+    { "a-", "a", 1 },
+    { "A-b", "ab", 0},
+    { "A--b", "ab", 1},
+    { "A--b", "a-b", 1},
+    { "A--b", "a--b", 0},
+    { "a123",  "a?", 0},
+    {"a123",   "a1.3", 0},
+    {"a123",   "..?", 0},
+    {"a123",   "a1.", 1},
+    {"a123",   "a...", 0},
+    {0,  0, 0} };
+
+int main (int argc, char **argv)
+{
+    int i;
+    for (i = 0; comp_strings[i].s1; i++)
+    {
+        int got = yaz_matchstr(comp_strings[i].s1,comp_strings[i].s2);
+        if (got > 0)
+            got = 1;
+        else if (got < 0)
+            got = -1;
+        if (got != comp_strings[i].res)
+        {
+            printf ("tststr %d got=%d res=%d\n", i,
+                    got, comp_strings[i].res);
+            exit(1);
+        }
+    }
+    exit(0);
+}
+
diff --git a/test/tstnmem.c b/test/tstnmem.c
new file mode 100644 (file)
index 0000000..284e0a8
--- /dev/null
@@ -0,0 +1,44 @@
+/*
+ * Copyright (c) 2002-2003, Index Data
+ * See the file LICENSE for details.
+ *
+ * $Id: tstnmem.c,v 1.1 2003-10-27 12:21:38 adam Exp $
+ */
+
+#if HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include <errno.h>
+#include <string.h>
+#include <ctype.h>
+
+#include <yaz/nmem.h>
+
+int main (int argc, char **argv)
+{
+    void *cp;
+    NMEM n;
+    int j;
+
+    nmem_init();
+    n = nmem_create();
+    if (!n)
+        exit (1);
+    for (j = 1; j<500; j++)
+    {
+        cp = nmem_malloc(n, j);
+        if (!cp)
+            exit(2);
+    }
+    
+    for (j = 2000; j<20000; j+= 2000)
+    {
+        cp = nmem_malloc(n, j);
+        if (!cp)
+            exit(3);
+    }
+    nmem_destroy(n);
+    nmem_exit();
+    exit(0);
+}
diff --git a/test/tstodr.asn b/test/tstodr.asn
new file mode 100644 (file)
index 0000000..e61dd73
--- /dev/null
@@ -0,0 +1,16 @@
+-- Small ASN.1 spec for tstodr test
+-- $Id: tstodr.asn,v 1.1 2003-10-27 12:21:38 adam Exp $
+tstodrcodec
+{tstodrcodec} DEFINITIONS ::=
+BEGIN
+MySequence ::= SEQUENCE {
+       first [1] IMPLICIT INTEGER,
+       second [2] IMPLICIT OCTET STRING,
+        third [3] IMPLICIT BOOLEAN,
+        fourth [4] IMPLICIT NULL,
+        fifth [5] IMPLICIT INTEGER {
+                enum1(0),
+                enum2(1)
+        }
+}
+END                              
diff --git a/test/tstodr.c b/test/tstodr.c
new file mode 100644 (file)
index 0000000..9561e11
--- /dev/null
@@ -0,0 +1,115 @@
+/*
+ * Copyright (c) 1995-2003, Index Data
+ * See the file LICENSE for details.
+ *
+ * $Id: tstodr.c,v 1.1 2003-10-27 12:21:38 adam Exp $
+ *
+ */
+#include <stdio.h>
+#include <yaz/odr.h>
+#include "tstodrcodec.h"
+
+void tst_MySequence1(ODR encode, ODR decode)
+{
+    char *ber_buf;
+    int ber_len;
+    Yc_MySequence *s = odr_malloc(encode, sizeof(*s));
+    Yc_MySequence *t;
+
+    s->first = odr_intdup(encode, 12345);
+    s->second = odr_malloc(encode, sizeof(*s->second));
+    s->second->buf = "hello";
+    s->second->len = 5;
+    s->second->size = 0;
+    s->third = odr_intdup(encode, 1);
+    s->fourth = odr_nullval();
+    s->fifth = odr_intdup(encode, YC_MySequence_enum1);
+
+    if (!yc_MySequence(encode, &s, 0, 0))
+        exit(1);
+    
+    ber_buf = odr_getbuf(encode, &ber_len, 0);
+
+    odr_setbuf(decode, ber_buf, ber_len, 0);
+
+    if (!yc_MySequence(decode, &t, 0, 0))
+        exit(2);
+    if (!t->first || *t->first != 12345)
+        exit(3);
+    if (!t->second || !t->second->buf || t->second->len != 5)
+        exit(4);
+    if (memcmp(t->second->buf, "hello", t->second->len))
+        exit(5);
+    if (!t->third || *t->third != 1)
+        exit(6);
+    if (!t->fourth)
+        exit(7);
+    if (!t->fifth || *t->fifth != YC_MySequence_enum1)
+        exit(8);
+}
+
+void tst_MySequence2(ODR encode, ODR decode)
+{
+    char *ber_buf;
+    int ber_len;
+    Yc_MySequence *s = odr_malloc(encode, sizeof(*s));
+    Yc_MySequence *t;
+
+    s->first = 0;  /* deliberately miss this .. */
+    s->second = odr_malloc(encode, sizeof(*s->second));
+    s->second->buf = "hello";
+    s->second->len = 5;
+    s->second->size = 0;
+    s->third = odr_intdup(encode, 1);
+    s->fourth = odr_nullval();
+    s->fifth = odr_intdup(encode, YC_MySequence_enum1);
+
+    if (yc_MySequence(encode, &s, 0, 0)) /* should fail */
+        exit(9);
+    if (odr_geterror(encode) != OREQUIRED)
+        exit(10);
+    if (strcmp(odr_getelement(encode), "first"))
+        exit(11);
+    odr_reset(encode);
+
+    if (odr_geterror(encode) != ONONE)
+        exit(12);
+    if (strcmp(odr_getelement(encode), ""))
+        exit(13);
+}
+
+void tst_MySequence3(ODR encode, ODR decode)
+{
+    char buf[40];
+    int i;
+    Yc_MySequence *t;
+
+    srand(123);
+    for (i = 0; i<1000; i++)
+    {
+        int j;
+        for (j = 0; j<sizeof(buf); j++)
+            buf[j] = rand();
+
+        for (j = 1; j<sizeof(buf); j++)
+        {
+            odr_setbuf(decode, buf, j, 0);
+            yc_MySequence(decode, &t, 0, 0);
+            odr_reset(decode);
+        }
+    }
+}
+
+int main(int argc, char **argv)
+{
+    ODR odr_encode = odr_createmem(ODR_ENCODE);
+    ODR odr_decode = odr_createmem(ODR_DECODE);
+
+    tst_MySequence1(odr_encode, odr_decode);
+    tst_MySequence2(odr_encode, odr_decode);
+    tst_MySequence3(odr_encode, odr_decode);
+
+    odr_destroy(odr_encode);
+    odr_destroy(odr_decode);
+    exit(0);
+}
diff --git a/test/tstwrbuf.c b/test/tstwrbuf.c
new file mode 100644 (file)
index 0000000..8ac3d0b
--- /dev/null
@@ -0,0 +1,58 @@
+/*
+ * Copyright (c) 2002-2003, Index Data
+ * See the file LICENSE for details.
+ *
+ * $Id: tstwrbuf.c,v 1.1 2003-10-27 12:21:38 adam Exp $
+ */
+
+#include <stdio.h>
+
+#include <yaz/wrbuf.h>
+
+int main (int argc, char **argv)
+{
+    int step;
+    WRBUF wr = wrbuf_alloc();
+
+    wrbuf_free(wr, 1);
+
+    wr = wrbuf_alloc();
+
+    for (step = 1; step < 65; step++)
+    {
+        int i, j, k;
+        int len;
+        char buf[64];
+        char *cp;
+        for (j = 1; j<step; j++)
+        {
+            for (i = 0; i<j; i++)
+                buf[i] = i+1;
+            buf[i] = '\0';
+            wrbuf_puts(wr, buf);
+        }
+        
+        cp = wrbuf_buf(wr);
+        len = wrbuf_len(wr);
+        if (len != step * (step-1) / 2)
+        {
+            printf ("tstwrbuf 1 %d len=%d\n", step, len);
+            exit(1);
+        }
+        k = 0;
+        for (j = 1; j<step; j++)
+            for (i = 0; i<j; i++)
+            {
+                if (cp[k] != i+1)
+                {
+                    printf ("tstwrbuf 2 %d k=%d\n", step, k);
+                    exit(1);
+                }
+                k++;
+            }
+        wrbuf_rewind(wr);
+    }
+    wrbuf_free(wr, 1);
+    exit(0);
+}
+
index 953a563..62796a0 100644 (file)
@@ -1,48 +1,36 @@
 ## Copyright (C) 1994-2003, Index Data
 ## All rights reserved.
 ## Copyright (C) 1994-2003, Index Data
 ## All rights reserved.
-## $Id: Makefile.am,v 1.22 2003-06-11 11:09:22 adam Exp $
-
-noinst_LTLIBRARIES = libutil.la
-
-check_PROGRAMS = tsticonv tstnmem tstmatchstr tstwrbuf
+## $Id: Makefile.am,v 1.23 2003-10-27 12:21:38 adam Exp $
 
 TESTS = $(check_PROGRAMS)
 
 
 TESTS = $(check_PROGRAMS)
 
-bin_SCRIPTS = yaz-asncomp
+bin_SCRIPTS = yaz-asncomp yaz-config
 
 
-EXTRA_DIST = yaz-asncomp cvs-date.tcl \
- charconv.tcl charconv.sgm charconv_cjk.xml
+EXTRA_DIST = yaz-asncomp 
 
 AM_CPPFLAGS=-I$(top_srcdir)/include
 
 
 AM_CPPFLAGS=-I$(top_srcdir)/include
 
-noinst_PROGRAMS = marcdump yaziconv
+bin_PROGRAMS = yaz-marcdump yaz-iconv
+noinst_PROGRAMS = cclsh cql2pqf cql2xcql srwtst
 
 # MARC dumper utility
 
 # MARC dumper utility
-marcdump_LDADD = libutil.la 
-marcdump_SOURCES = marcdump.c
+yaz_marcdump_LDADD = ../src/libyaz.la 
+yaz_marcdump_SOURCES = marcdump.c
 
 # YAZ Iconv utility
 
 # YAZ Iconv utility
-yaziconv_LDADD = libutil.la 
-yaziconv_SOURCES = yaziconv.c
-
-# Tests..
-tsticonv_LDADD = libutil.la
-tsticonv_SOURCES = tsticonv.c
+yaz_iconv_LDADD = ../src/libyaz.la 
+yaz_iconv_SOURCES = yaziconv.c
 
 
-tstnmem_LDADD = libutil.la
-tstnmem_SOURCES = tstnmem.c
+srwtst_SOURCES=srwtst.c
+srwtst_LDADD = ../src/libyaz.la
 
 
-tstmatchstr_LDADD = libutil.la
-tstmatchstr_SOURCES = tstmatchstr.c
+cclsh_SOURCES=cclsh.c
+cclsh_LDADD = ../src/libyaz.la $(READLINE_LIBS)
 
 
-tstwrbuf_LDADD = libutil.la
-tstwrbuf_SOURCES = tstwrbuf.c
+cql2pqf_SOURCES = cql2pqf.c
+cql2pqf_LDADD = ../src/libyaz.la
 
 
-# MARC8 conversion is generated from charconv.sgm
-marc8.c: charconv.sgm charconv.tcl
-       cd $(srcdir); ./charconv.tcl -p marc8 -s 50 charconv.sgm -o marc8.c
+cql2xcql_SOURCES = cql2xcql.c
+cql2xcql_LDADD = ../src/libyaz.la
 
 
-libutil_la_SOURCES=version.c options.c log.c marcdisp.c oid.c wrbuf.c \
-   nmemsdup.c xmalloc.c readconf.c tpath.c nmem.c matchstr.c atoin.c \
-   siconv.c marc8.c
 
 
diff --git a/util/atoin.c b/util/atoin.c
deleted file mode 100644 (file)
index 57f9561..0000000
+++ /dev/null
@@ -1,28 +0,0 @@
-/*
- * Copyright (c) 1997-2003, Index Data
- * See the file LICENSE for details.
- *
- * $Id: atoin.c,v 1.6 2003-01-06 08:20:28 adam Exp $
- */
-
-#if HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#include <string.h>
-#include <ctype.h>
-#include <yaz/yaz-util.h>
-
-int atoi_n (const char *buf, int len)
-{
-    int val = 0;
-
-    while (--len >= 0)
-    {
-        if (isdigit (*buf))
-            val = val*10 + (*buf - '0');
-       buf++;
-    }
-    return val;
-}
-
diff --git a/util/cclsh.c b/util/cclsh.c
new file mode 100644 (file)
index 0000000..25d7649
--- /dev/null
@@ -0,0 +1,228 @@
+/*
+ * Copyright (c) 1995, the EUROPAGATE consortium (see below).
+ *
+ * The EUROPAGATE consortium members are:
+ *
+ *    University College Dublin
+ *    Danmarks Teknologiske Videnscenter
+ *    An Chomhairle Leabharlanna
+ *    Consejo Superior de Investigaciones Cientificas
+ *
+ * Permission to use, copy, modify, distribute, and sell this software and
+ * its documentation, in whole or in part, for any purpose, is hereby granted,
+ * provided that:
+ *
+ * 1. This copyright and permission notice appear in all copies of the
+ * software and its documentation. Notices of copyright or attribution
+ * which appear at the beginning of any file must remain unchanged.
+ *
+ * 2. The names of EUROPAGATE or the project partners may not be used to
+ * endorse or promote products derived from this software without specific
+ * prior written permission.
+ *
+ * 3. Users of this software (implementors and gateway operators) agree to
+ * inform the EUROPAGATE consortium of their use of the software. This
+ * information will be used to evaluate the EUROPAGATE project and the
+ * software, and to plan further developments. The consortium may use
+ * the information in later publications.
+ * 
+ * 4. Users of this software agree to make their best efforts, when
+ * documenting their use of the software, to acknowledge the EUROPAGATE
+ * consortium, and the role played by the software in their work.
+ *
+ * THIS SOFTWARE IS PROVIDED "AS IS" AND WITHOUT WARRANTY OF ANY KIND,
+ * EXPRESS, IMPLIED, OR OTHERWISE, INCLUDING WITHOUT LIMITATION, ANY
+ * WARRANTY OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.
+ * IN NO EVENT SHALL THE EUROPAGATE CONSORTIUM OR ITS MEMBERS BE LIABLE
+ * FOR ANY SPECIAL, INCIDENTAL, INDIRECT OR CONSEQUENTIAL DAMAGES OF
+ * ANY KIND, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA
+ * OR PROFITS, WHETHER OR NOT ADVISED OF THE POSSIBILITY OF DAMAGE, AND
+ * ON ANY THEORY OF LIABILITY, ARISING OUT OF OR IN CONNECTION WITH THE
+ * USE OR PERFORMANCE OF THIS SOFTWARE.
+ *
+ */
+/* CCL shell.
+ * Europagate 1995
+ *
+ * $Id: cclsh.c,v 1.1 2003-10-27 12:21:38 adam Exp $
+ *
+ * Old Europagate Log:
+ *
+ * Revision 1.11  1995/05/16  09:39:27  adam
+ * LICENSE.
+ *
+ * Revision 1.10  1995/05/11  14:03:57  adam
+ * Changes in the reading of qualifier(s). New function: ccl_qual_fitem.
+ * New variable ccl_case_sensitive, which controls whether reserved
+ * words and field names are case sensitive or not.
+ *
+ * Revision 1.9  1995/02/23  08:32:00  adam
+ * Changed header.
+ *
+ * Revision 1.7  1995/02/15  17:42:16  adam
+ * Minor changes of the api of this module. FILE* argument added
+ * to ccl_pr_tree.
+ *
+ * Revision 1.6  1995/02/14  19:55:13  adam
+ * Header files ccl.h/cclp.h are gone! They have been merged an
+ * moved to ../include/ccl.h.
+ * Node kind(s) in ccl_rpn_node have changed names.
+ *
+ * Revision 1.5  1995/02/14  16:20:57  adam
+ * Qualifiers are read from a file now.
+ *
+ * Revision 1.4  1995/02/14  14:12:42  adam
+ * Ranges for ordered qualfiers implemented (e.g. pd=1980-1990).
+ *
+ * Revision 1.3  1995/02/14  10:25:57  adam
+ * The constructions 'qualifier rel term ...' implemented.
+ *
+ * Revision 1.2  1995/02/13  15:15:07  adam
+ * Added handling of qualifiers. Not finished yet.
+ *
+ * Revision 1.1  1995/02/13  12:35:21  adam
+ * First version of CCL. Qualifiers aren't handled yet.
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+
+#include <yaz/ccl.h>
+
+
+#if HAVE_READLINE_READLINE_H
+#include <readline/readline.h> 
+#endif
+#if HAVE_READLINE_HISTORY_H
+#include <readline/history.h>
+#endif
+
+
+static int debug = 0;
+static char *prog;
+
+void usage(const char *prog)
+{
+    fprintf (stderr, "%s: [-d] [-b configfile]\n", prog);
+    exit (1);
+}
+
+int main (int argc, char **argv)
+{
+    CCL_bibset bibset;
+    FILE *bib_inf;
+    char *bib_fname;
+
+    prog = *argv;
+    bibset = ccl_qual_mk ();    
+    while (--argc > 0)
+    {
+        if (**++argv == '-')
+        {
+            switch (argv[0][1])
+            {
+            case 'd':
+                debug = 1;
+                break;
+            case 'b':
+                if (argv[0][2])
+                    bib_fname = argv[0]+2;
+                else if (argc > 0)
+                {
+                    --argc;
+                    bib_fname = *++argv;
+                }
+                else
+                {
+                    fprintf (stderr, "%s: missing bib filename\n", prog);
+                    exit (1);
+                }
+                bib_inf = fopen (bib_fname, "r");
+                if (!bib_inf)
+                {
+                    fprintf (stderr, "%s: cannot open %s\n", prog,
+                             bib_fname);
+                    exit (1);
+                }
+                ccl_qual_file (bibset, bib_inf);
+                fclose (bib_inf);
+                break;
+            default:
+               usage(prog);
+            }
+        }
+        else
+        {
+            fprintf (stderr, "%s: no filenames, please\n", prog);
+            exit (1);
+        }
+    }
+    while (1)
+    {
+        char buf[1000];
+        int i, error, pos;
+        struct ccl_rpn_node *rpn;
+
+#if HAVE_READLINE_READLINE_H
+            char* line_in;
+            line_in=readline("CCLSH>");
+            if (!line_in)
+                break;
+#if HAVE_READLINE_HISTORY_H
+            if (*line_in)
+                add_history(line_in);
+#endif
+           if (strlen(line_in) > 999) {
+                fprintf(stderr,"Input line to long\n");
+                break;
+           }
+            strcpy(buf,line_in);
+            free (line_in);
+#else    
+       printf ("CCLSH>"); fflush (stdout);
+       if (!fgets (buf, 999, stdin))
+           break;
+#endif 
+
+        for (i = 0; i<1; i++)
+        {
+           CCL_parser cclp = ccl_parser_create ();
+           struct ccl_token *list;
+           
+           cclp->bibset = bibset;
+           
+           list = ccl_parser_tokenize (cclp, buf);
+           rpn = ccl_parser_find (cclp, list);
+           
+           error = cclp->error_code;
+           if (error)
+               pos = cclp->error_pos - buf;
+
+            if (error)
+            {
+                printf ("%*s^ - ", 6+pos, " ");
+                printf ("%s\n", ccl_err_msg (error));
+            }
+            else
+            {
+               if (rpn && i == 0)
+               {
+                   ccl_pr_tree (rpn, stdout);
+                   printf ("\n");
+               }
+            }
+           if (debug)
+           {
+               struct ccl_token *lp;
+               for (lp = list; lp; lp = lp->next)
+                   printf ("%d %.*s\n", lp->kind, (int) (lp->len), lp->name);
+           }
+           ccl_token_del (list);
+           ccl_parser_destroy (cclp);
+            if (rpn)
+                ccl_rpn_delete(rpn);
+        }
+    }
+    printf ("\n");
+    return 0;
+}
diff --git a/util/charconv.sgm b/util/charconv.sgm
deleted file mode 100644 (file)
index e7a6759..0000000
+++ /dev/null
@@ -1,586 +0,0 @@
-<!-- ============================================================= -->
-<!-- MODULE:    Character to Entity Specification                  -->
-<!-- VERSION:   3.0 (Morgan Cundiff and Randll Barry)                                   -->
-<!-- DATE:      June 18, 2001                                  -->
-<!--                                                               -->
-<!-- MULBERRY INTERNAL VERSION CONTROL:                            -->
-<!-- $Id: charconv.sgm,v 1.1 2002-12-16 13:26:06 adam Exp $         -->
-<!-- ============================================================= -->
-
-<!-- ============================================================= -->
-<!-- SYSTEM:    MARC <-> SGML <-> XML Conversion                           -->
-<!--                                                               -->
-<!-- PURPOSE:   Define relationships between MARC Extended Latin   -->
-<!--            character set, character numbers, SGML entities    -->
-<!--            and XML entities.                                  -->
-<!--                                                               -->
-<!-- CONTAINS:  SGML Document conforming to the Character-Entity   -->
-<!--            Map File DTD                                       -->
-<!--                                                               -->
-<!-- MODULES REQUIRED:                                             -->
-<!--            None                                               -->
-<!--                                                               -->
-<!-- CREATED FOR:                                                  -->
-<!--            MARC Standards Office                              -->
-<!--                                                               -->
-<!-- ORIGINAL CREATION DATE:                                       -->
-<!--            October 1997                                       -->
-<!--                                                               -->
-<!-- CREATED BY:                                                   -->
-<!--            Mulberry Technologies, Inc. (TKG)                  -->
-<!--            17 West Jefferson Street, Suite 207                -->
-<!--            Rockville, MD  20850  USA                          -->
-<!--            Phone:  +1 301/315-9631                            -->
-<!--            Fax:    +1 301/315-8285                            -->
-<!--            e-mail: info@mulberrytech.com                      -->
-<!--            WWW:    http://www.mulberrytech.com                -->
-<!-- ============================================================= -->
-<entitymap>
-<character hex="E2 41" dec="226 065"><isoentity>Aacute</isoentity><desc>latin capital letter a with acute</desc><unientity>00C1</unientity></character>
-<character hex="E2 61" dec="226 097"><isoentity>aacute</isoentity><desc>latin small letter a with acute</desc><unientity>00E1</unientity></character>
-<character hex="E2 E6 41" dec="226 230 065"><isoentity>Abreveac</isoentity><desc>latin capital letter a with breve and acute</desc><unientity>1EAE</unientity></character>
-<character hex="E2 E6 61" dec="226 230 096"><isoentity>abreveac</isoentity><desc>latin small letter a with breve and acute</desc><unientity>1EAF</unientity></character>
-<character hex="E6 F2 41" dec="230 242 065"><isoentity>Abrevedb</isoentity><desc>latin capital letter a with breve and dot below</desc><unientity>1EB6</unientity></character>
-<character hex="E6 F2 61" dec="230 242 097"><isoentity>abrevedb</isoentity><desc>latin small letter a with breve and dot below</desc><unientity>1EB7</unientity></character>
-<character hex="E1 E6 41" dec="225 230 065"><isoentity>Abrevegr</isoentity><desc>latin capital letter a with breve and grave</desc><unientity>1EB0</unientity></character>
-<character hex="E1 E6 61" dec="225 230 097"><isoentity>abrevegr</isoentity><desc>latin small letter a with breve and grave</desc><unientity>1EB1</unientity></character>
-<character hex="E0 E6 41" dec="224 230 065"><isoentity>Abreveha</isoentity><desc>latin capital letter a with breve and hook above</desc><unientity>1EB2</unientity></character>
-<character hex="E0 E6 61" dec="224 230 097"><isoentity>abreveha</isoentity><desc>latin small letter a with breve and hook above</desc><unientity>1EB3</unientity></character>
-<character hex="E4 E6 41" dec="228 230 065"><isoentity>Abreveti</isoentity><desc>latin capital letter a with breve and tilde</desc><unientity>1EB4</unientity></character>
-<character hex="E4 E6 61" dec="228 230 097"><isoentity>abreveti</isoentity><desc>latin small letter a with breve and tilde</desc><unientity>1EB5</unientity></character>
-<character hex="E6 41" dec="230 065"><isoentity>Abreve</isoentity><desc>latin capital letter a with breve</desc><unientity>0102</unientity></character>
-<character hex="E6 61" dec="230 097"><isoentity>abreve</isoentity><desc>latin small letter a with breve</desc><unientity>0103</unientity></character>
-<character hex="E9 41" dec="233 065"><isoentity>Acaron</isoentity><desc>latin capital letter a with caron</desc><unientity>01CD</unientity></character>
-<character hex="E9 61" dec="233 097"><isoentity>acaron</isoentity><desc>latin small letter a with caron</desc><unientity>01CE</unientity></character>
-<character hex="E3 E2 41" dec="227 226 065"><isoentity>Acircac</isoentity><desc>latin capital letter a with circumflex and acute</desc><unientity>1EA4</unientity></character>
-<character hex="E3 E2 61" dec="227 226 097"><isoentity>acircac</isoentity><desc>latin small letter a with circumflex and acute</desc><unientity>1EA5</unientity></character>
-<character hex="E3 F2 41" dec="227 242 065"><isoentity>Acircdb</isoentity><desc>latin capital letter a with circumflex and dot below</desc><unientity>1EAC</unientity></character>
-<character hex="E3 F2 61" dec="227 242 097"><isoentity>acircdb</isoentity><desc>latin small letter a with circumflex and dot below</desc><unientity>1EAD</unientity></character>
-<character hex="E3 E1 41" dec="227 225 065"><isoentity>acircgr</isoentity><desc>latin capital letter a with circumflex and grave</desc><unientity>1EA6</unientity></character>
-<character hex="E3 E1 61" dec="227 225 097"><isoentity>acircgr</isoentity><desc>latin small letter a with circumflex and grave</desc><unientity>1EA7</unientity></character>
-<character hex="E3 E0 41" dec="227 224 064"><isoentity>Acircha</isoentity><desc>latin capital letter a with circumflex and hook above</desc><unientity>1EA8</unientity></character>
-<character hex="E3 E0 61" dec="227 224 097"><isoentity>acircha</isoentity><desc>latin small letter a with circumflex and hook above</desc><unientity>1EA9</unientity></character>
-<character hex="E4 E3 41" dec="228 227 065"><isoentity>Acircti</isoentity><desc>latin capital letter a with circumflex and tilde</desc><unientity>1EAA</unientity></character>
-<character hex="E4 E3 61" dec="228 227 097"><isoentity>acircti</isoentity><desc>latin small letter a with circumflex and tilde</desc><unientity>1EAB</unientity></character>
-<character hex="E3 41" dec="227 065"><isoentity>Acirc</isoentity><desc>latin capital letter a with circumflex</desc><unientity>00C2</unientity></character>
-<character hex="E3 61" dec="227 097"><isoentity>acirc</isoentity><desc>latin small letter a with circumflex</desc><unientity>00E2</unientity></character>
-<character hex="E2" dec="226"><isoentity>acute</isoentity><desc>combining acute accent</desc><unientity>0301</unientity></character>
-<character hex="E5 E7 41" dec="229 231 065"><isoentity>Adotama</isoentity><desc>latin capital letter a with dot above and macron</desc><unientity>01E0</unientity></character>
-<character hex="E5 E7 61" dec="229 231 097"><isoentity>adotama</isoentity><desc>latin small letter a with dot above and macron</desc><unientity>01E1</unientity></character>
-<character hex="F2 41" dec="242 065"><isoentity>Adotb</isoentity><desc>latin capital letter a with dot below</desc><unientity>1EA0</unientity></character>
-<character hex="F2 61" dec="242 097"><isoentity>adotb</isoentity><desc>latin small letter a with dot below</desc><unientity>1EA1</unientity></character>
-<character hex="E7 41" dec="231 065"><isoentity>Adot</isoentity><desc>latin capital letter a with dot above</desc><unientity>0226</unientity></character>
-<character hex="E7 61" dec="231 097"><isoentity>adot</isoentity><desc>latin small letter a with dot above</desc><unientity>0227</unientity></character>
-<character hex="E2 A5" dec="226 165"><isoentity>Aeacute</isoentity><desc>latin capital letter ae with acute</desc><unientity>01FC</unientity></character>
-<character hex="E2 B5" dec="226 181"><isoentity>aeacute</isoentity><desc>latin small letter ae with acute</desc><unientity>01FD</unientity></character>
-<character hex="A5" dec="165"><isoentity>AElig</isoentity><desc>latin capital letter ae</desc><unientity>00C6</unientity></character>
-<character hex="B5" dec="181"><isoentity>aelig</isoentity><desc>latin small letter ae</desc><unientity>00E6</unientity></character>
-<character hex="E5 A5" dec="229 065"><isoentity>Aemacr</isoentity><desc>latin capital letter ae with macron</desc><unientity>01E2</unientity></character>
-<character hex="E5 B5" dec="229 097"><isoentity>aemacr</isoentity><desc>latin small letter ae with macron</desc><unientity>01E3</unientity></character>
-<character hex="E1 41" dec="225 065"><isoentity>Agrave</isoentity><desc>latin capital letter a with grave</desc><unientity>00C0</unientity></character>
-<character hex="E1 61" dec="225 097"><isoentity>agrave</isoentity><desc>latin small letter a with grave</desc><unientity>00E0</unientity></character>
-<character hex="E0 41" dec="224 065"><isoentity>Ahooka</isoentity><desc>latin capital letter a with hook above</desc><unientity>1EA2</unientity></character>
-<character hex="E0 61" dec="224 097"><isoentity>ahooka</isoentity><desc>latin small letter a with hook above</desc><unientity>1EA3</unientity></character>
-<character hex="1B 67 61 1B 73" dec="027 103 097 027 115"><isoentity>alpha</isoentity><desc>greek small letter alpha</desc><unientity>03B1</unientity></character>
-<character hex="E5 41" dec="229 065"><isoentity>Amacr</isoentity><desc>latin capital letter a with macron</desc><unientity>0100</unientity></character>
-<character hex="E5 61" dec="229 097"><isoentity>amacr</isoentity><desc>latin small letter a with macron</desc><unientity>0101</unientity></character>
-<character hex="F1 41" dec="241 065"><isoentity>Aogon</isoentity><desc>latin capital letter a with ogonek</desc><unientity>0104</unientity></character>
-<character hex="F1 61" dec="241 097"><isoentity>aogon</isoentity><desc>latin small letter a with ogonek</desc><unientity>0105</unientity></character>
-<character hex="E2 EA 41" dec="226 234 065"><isoentity>Aringac</isoentity><desc>latin capital letter a with ring above and acute</desc><unientity>01FA</unientity></character>
-<character hex="E2 EA 61" dec="226 234 096"><isoentity>aringac</isoentity><desc>latin small letter a with ring above and acute</desc><unientity>01FB</unientity></character>
-<character hex="EA 41" dec="234 065"><isoentity>Aring</isoentity><desc>latin capital letter a with ring</desc><unientity>00C5</unientity></character>
-<character hex="EA 61" dec="234 097"><isoentity>aring</isoentity><desc>latin small letter a with ring</desc><unientity>00E5</unientity></character>
-<character hex="E4 41" dec="228 065"><isoentity>Atilde</isoentity><desc>latin capital letter a with tilde</desc><unientity>00C3</unientity></character>
-<character hex="E4 61" dec="228 097"><isoentity>atilde</isoentity><desc>latin small letter a with tilde</desc><unientity>00E3</unientity></character>
-<character hex="E5 E8 41" dec="229 232 065"><isoentity>Aumlma</isoentity><desc>latin capital letter a with diaeresis and macron</desc><unientity>01DE</unientity></character>
-<character hex="E5 E8 61" dec="229 232 097"><isoentity>aumlma</isoentity><desc>latin small letter a with diaeresis and macron</desc><unientity>01DF</unientity></character>
-<character hex="E8 41" dec="232 065"><isoentity>Auml</isoentity><desc>latin capital letter a with umlaut</desc><unientity>00C4</unientity></character>
-<character hex="E8 61" dec="232 097"><isoentity>auml</isoentity><desc>latin small letter a with umlaut</desc><unientity>00E4</unientity></character>
-<character hex="E7 42" dec="231 066"><isoentity>Bdota</isoentity><desc>latin capital letter b with dot above</desc><unientity>1E02</unientity></character>
-<character hex="E7 62" dec="231 098"><isoentity>bdota</isoentity><desc>latin small letter b with dot above</desc><unientity>1E03</unientity></character>
-<character hex="F2 42" dec="242 066"><isoentity>Bdotb</isoentity><desc>latin capital letter b with dot below</desc><unientity>1E04</unientity></character>
-<character hex="F2 62" dec="242 098"><isoentity>bdotb</isoentity><desc>latin small letter b with dot below</desc><unientity>1E05</unientity></character>
-<character hex="1B 67 62 1B 73" dec="027 103 098 027 115"><isoentity>beta</isoentity><desc>greek small letter beta</desc><unientity>03B2</unientity></character>
-<character hex="F6 42" dec="246 066"><isoentity>Bmacrb</isoentity><desc>latin capital letter b with line below</desc><unientity>1E06</unientity></character>
-<character hex="F6 62" dec="246 098"><isoentity>bmacrb</isoentity><desc>latin small letter b with line below</desc><unientity>1E07</unientity></character>
-<character hex="F9" dec="249"><isoentity>breveb</isoentity><desc>combining breve below</desc><unientity>032E</unientity></character>
-<character hex="E6" dec="230"><isoentity>breve</isoentity><desc>combining breve</desc><unientity>0306</unientity></character>
-<character hex="E2 43" dec="226 067"><isoentity>Cacute</isoentity><desc>latin capital letter c with acute</desc><unientity>0106</unientity></character>
-<character hex="E2 63" dec="226 099"><isoentity>cacute</isoentity><desc>latin small letter c with acute</desc><unientity>0107</unientity></character>
-<character hex="EF" dec="239"><isoentity>candra</isoentity><desc>combining candrabindu</desc><unientity>0310</unientity></character>
-<character hex="E9" dec="233"><isoentity>caron</isoentity><desc>combining caron</desc><unientity>030C</unientity></character>
-<character hex="E9 43" dec="233 067"><isoentity>Ccaron</isoentity><desc>latin capital letter c with caron</desc><unientity>010C</unientity></character>
-<character hex="E9 63" dec="233 099"><isoentity>ccaron</isoentity><desc>latin small letter c with caron</desc><unientity>010D</unientity></character>
-<character hex="E2 F0 43" dec="226 240 067"><isoentity>Ccedilac</isoentity><desc>latin capital letter c with cedilla and acute</desc><unientity>1E08</unientity></character>
-<character hex="E2 F0 63" dec="226 240 099"><isoentity>ccedilac</isoentity><desc>latin small letter c with cedilla and acute</desc><unientity>1E09</unientity></character>
-<character hex="F0 43" dec="240 067"><isoentity>Ccedil</isoentity><desc>latin capital letter c with cedilla</desc><unientity>00C7</unientity></character>
-<character hex="F0 63" dec="240 099"><isoentity>ccedil</isoentity><desc>latin small letter c with cedilla</desc><unientity>00E7</unientity></character>
-<character hex="E3 43" dec="227 067"><isoentity>Ccirc</isoentity><desc>latin capital letter c with circumflex</desc><unientity>0108</unientity></character>
-<character hex="E3 63" dec="227 099"><isoentity>ccirc</isoentity><desc>latin small letter c with circumflex</desc><unientity>0109</unientity></character>
-<character hex="E7 43" dec="231 067"><isoentity>Cdot</isoentity><desc>latin capital letter c with dot above</desc><unientity>010A</unientity></character>
-<character hex="E7 63" dec="231 099"><isoentity>cdot</isoentity><desc>latin small letter c with dot above</desc><unientity>010B</unientity></character>
-<character hex="F0" dec="240"><isoentity>cedil</isoentity><desc>combining cedilla</desc><unientity>0327</unientity></character>
-<character hex="E3" dec="227"><isoentity>circ</isoentity><desc>combining circumflex</desc><unientity>0302</unientity></character>
-<character hex="FE" dec="254"><isoentity>commaa</isoentity><desc>combining comma above</desc><unientity>0313</unientity></character>
-<character hex="F7" dec="247"><isoentity>commab</isoentity><desc>combining comma below</desc><unientity>0326</unientity></character>
-<character hex="C2" dec="194"><isoentity>copysr</isoentity><desc>sound recording copyright</desc><unientity>2117</unientity></character>
-<character hex="C3" dec="195"><isoentity>copy</isoentity><desc>copyright sign</desc><unientity>00A9</unientity></character>
-<character hex="EE" dec="238"><isoentity>dblac</isoentity><desc>combining double acute accent</desc><unientity>030B</unientity></character>
-<character hex="F3" dec="243"><isoentity>dbldotb</isoentity><desc>combining double dot below</desc><unientity>0324</unientity></character>
-<character hex="F5" dec="245"><isoentity>dblunder</isoentity><desc>combining double low line</desc><unientity>0333</unientity></character>
-<character hex="E9 44" dec="233 068"><isoentity>Dcaron</isoentity><desc>latin capital letter d with caron</desc><unientity>010E</unientity></character>
-<character hex="E9 64" dec="233 100"><isoentity>dcaron</isoentity><desc>latin small letter d with caron</desc><unientity>010F</unientity></character>
-<character hex="F7 44" dec="247 068"><isoentity>Dcommab</isoentity><desc>latin capital letter d with comma below</desc><unientity>1E10</unientity></character>
-<character hex="F7 64" dec="247 100"><isoentity>dcommab</isoentity><desc>latin small letter d with comma below</desc><unientity>1E11</unientity></character>
-<character hex="E7 44" dec="231 068"><isoentity>Ddota</isoentity><desc>latin capital letter d with dot above</desc><unientity>1E0A</unientity></character>
-<character hex="E7 64" dec="231 100"><isoentity>ddota</isoentity><desc>latin small letter d with dot above</desc><unientity>1E0B</unientity></character>
-<character hex="F2 44" dec="242 068"><isoentity>Ddotb</isoentity><desc>latin capital letter d with dot below</desc><unientity>1E0C</unientity></character>
-<character hex="F2 64" dec="242 100"><isoentity>ddotb</isoentity><desc>latin small letter d with dot below</desc><unientity>1E0D</unientity></character>
-<character hex="C0" dec="192"><isoentity>deg</isoentity><desc>degree sign</desc><unientity>00B0</unientity></character>
-<character hex="F6 44" dec="246 068"><isoentity>Dmacrb</isoentity><desc>latin capital letter d with line below</desc><unientity>1E0E</unientity></character>
-<character hex="F6 64" dec="246 100"><isoentity>dmacrb</isoentity><desc>latin small letter d with line below</desc><unientity>1E0F</unientity></character>
-<character hex="F2" dec="242"><isoentity>dotb</isoentity><desc>combining dot below</desc><unientity>0323</unientity></character>
-<character hex="E7" dec="231"><isoentity>dot</isoentity><desc>combining dot above</desc><unientity>0307</unientity></character>
-<character hex="A3" dec="163"><isoentity>Dstrok</isoentity><desc>latin capital letter d with stroke</desc><unientity>0110</unientity></character>
-<character hex="B3" dec="179"><isoentity>dstrok</isoentity><desc>latin small letter d with stroke</desc><unientity>0111</unientity></character>
-<character hex="E2 45" dec="226 069"><isoentity>Eacute</isoentity><desc>latin capital letter e with acute</desc><unientity>00C9</unientity></character>
-<character hex="E2 65" dec="226 101"><isoentity>eacute</isoentity><desc>latin small letter e with acute</desc><unientity>00E9</unientity></character>
-<character hex="E6 45" dec="230 069"><isoentity>Ebreve</isoentity><desc>latin capital letter e with breve</desc><unientity>0114</unientity></character>
-<character hex="E6 65" dec="230 101"><isoentity>ebreve</isoentity><desc>latin small letter e with breve</desc><unientity>0115</unientity></character>
-<character hex="E9 45" dec="233 069"><isoentity>Ecaron</isoentity><desc>latin capital letter e with caron</desc><unientity>011A</unientity></character>
-<character hex="E9 65" dec="233 101"><isoentity>ecaron</isoentity><desc>latin small letter e with caron</desc><unientity>011B</unientity></character>
-<character hex="E6 F0 45" dec="230 240 069"><isoentity>Ecedilbr</isoentity><desc>latin capital letter e with cedilla and breve</desc><unientity>1E1C</unientity></character>
-<character hex="E6 F0 65" dec="230 240 101"><isoentity>ecedilbr</isoentity><desc>latin small letter e with cedilla and breve</desc><unientity>1E1D</unientity></character>
-<character hex="F0 45" dec="240 069"><isoentity>Ecedil</isoentity><desc>latin capital letter e with cedilla</desc><unientity>0228</unientity></character>
-<character hex="F0 65" dec="240 101"><isoentity>ecedil</isoentity><desc>latin small letter e with cedilla</desc><unientity>0229</unientity></character>
-<character hex="E3 E2 45" dec="227 226 069"><isoentity>Ecircac</isoentity><desc>latin capital letter e with circumflex and acute</desc><unientity>1EBE</unientity></character>
-<character hex="E3 E2 65" dec="227 226 101"><isoentity>ecircac</isoentity><desc>latin small letter e with circumflex and acute</desc><unientity>1EBF</unientity></character>
-<character hex="E3 F2 45" dec="227 242 069"><isoentity>Ecircdb</isoentity><desc>latin capital letter e with circumflex and dot below</desc><unientity>1EC6</unientity></character>
-<character hex="E3 F2 65" dec="227 242 101"><isoentity>ecircdb</isoentity><desc>latin small letter e with circumflex and dot below</desc><unientity>1EC7</unientity></character>
-<character hex="E1 E3 45" dec="225 227 069"><isoentity>Ecircgr</isoentity><desc>latin capital letter e with circumflex and grave</desc><unientity>1EC0</unientity></character>
-<character hex="E1 E3 65" dec="225 227 101"><isoentity>ecircgr</isoentity><desc>latin small letter e with circumflex and grave</desc><unientity>1EC1</unientity></character>
-<character hex="E3 E0 45" dec="227 224 069"><isoentity>Ecircha</isoentity><desc>latin capital letter e with circumflex and hook above</desc><unientity>1EC2</unientity></character>
-<character hex="E3 E0 65" dec="227 224 101"><isoentity>ecircha</isoentity><desc>latin small letter e with circumflex and hook above</desc><unientity>1EC3</unientity></character>
-<character hex="E4 E3 45" dec="228 227 069"><isoentity>Ecircti</isoentity><desc>latin capital letter e with circumflex and tilde</desc><unientity>1EC4</unientity></character>
-<character hex="E3 45" dec="227 069"><isoentity>Ecirc</isoentity><desc>latin capital letter e with circumflex</desc><unientity>00CA</unientity></character>
-<character hex="E3 65" dec="227 101"><isoentity>ecirc</isoentity><desc>latin small letter e with circumflex</desc><unientity>00EA</unientity></character>
-<character hex="F2 45" dec="242 069"><isoentity>Edotb</isoentity><desc>latin capital letter e with dot below</desc><unientity>1EB8</unientity></character>
-<character hex="F2 65" dec="242 101"><isoentity>edotb</isoentity><desc>latin small letter e with dot below</desc><unientity>1EB9</unientity></character>
-<character hex="E7 45" dec="231 069"><isoentity>Edot</isoentity><desc>latin capital letter e with dot above</desc><unientity>0116</unientity></character>
-<character hex="E7 65" dec="231 101"><isoentity>edot</isoentity><desc>latin small letter e with dot above</desc><unientity>0117</unientity></character>
-<character hex="E1 45" dec="225 069"><isoentity>Egrave</isoentity><desc>latin capital letter e with grave</desc><unientity>00C8</unientity></character>
-<character hex="E1 65" dec="225 101"><isoentity>egrave</isoentity><desc>latin small letter e with grave</desc><unientity>00E8</unientity></character>
-<character hex="E0 45" dec="224 069"><isoentity>Ehooka</isoentity><desc>latin capital letter e with hook above</desc><unientity>1EBA</unientity></character>
-<character hex="E0 65" dec="224 101"><isoentity>ehooka</isoentity><desc>latin small letter e with hook above</desc><unientity>1EBB</unientity></character>
-<character hex="E2 E5 45" dec="226 229 069"><isoentity>Emacrac</isoentity><desc>latin capital letter e with macron and acute</desc><unientity>1E16</unientity></character>
-<character hex="E2 E5 65" dec="226 229 101"><isoentity>emacrac</isoentity><desc>latin small letter e with macron and acute</desc><unientity>1E17</unientity></character>
-<character hex="E1 E5 45" dec="225 229 069"><isoentity>Emacrgr</isoentity><desc>latin capital letter e with macron and grave</desc><unientity>1E14</unientity></character>
-<character hex="E1 E5 65" dec="225 229 101"><isoentity>emacrgr</isoentity><desc>latin small letter e with macron and grave</desc><unientity>1E15</unientity></character>
-<character hex="E5 45" dec="229 069"><isoentity>Emacr</isoentity><desc>latin capital letter e with macron</desc><unientity>0112</unientity></character>
-<character hex="E5 65" dec="229 101"><isoentity>emacr</isoentity><desc>latin small letter e with macron</desc><unientity>0113</unientity></character>
-<character hex="F1 45" dec="241 069"><isoentity>Eogon</isoentity><desc>latin capital letter e with ogon</desc><unientity>0118</unientity></character>
-<character hex="F1 65" dec="241 101"><isoentity>eogon</isoentity><desc>latin small letter e with ogon</desc><unientity>0119</unientity></character>
-<character hex="BA" dec="186"><isoentity>eth</isoentity><desc>latin small letter eth</desc><unientity>00F0</unientity></character>
-<character hex="E4 45" dec="228 069"><isoentity>Etilde</isoentity><desc>latin capital letter e with tilde</desc><unientity>1EBC</unientity></character>
-<character hex="E4 65" dec="228 101"><isoentity>etilde</isoentity><desc>latin small letter e with tilde</desc><unientity>1EBD</unientity></character>
-<character hex="E8 45" dec="232 069"><isoentity>Euml</isoentity><desc>latin capital letter e with umlaut</desc><unientity>00CB</unientity></character>
-<character hex="E8 65" dec="232 101"><isoentity>euml</isoentity><desc>latin small letter e with umlaut</desc><unientity>00EB</unientity></character>
-<character hex="E7 46" dec="231 070"><isoentity>Fdot</isoentity><desc>latin capital letter f with dot above</desc><unientity>1E1E</unientity></character>
-<character hex="E7 66" dec="231 102"><isoentity>fdot</isoentity><desc>latin small letter f with dot above</desc><unientity>1E1F</unientity></character>
-<character hex="A9" dec="169"><isoentity>flat</isoentity><desc>musical flat sign</desc><unientity>266D</unientity></character>
-<character hex="E2 47" dec="226 071"><isoentity>Gacute</isoentity><desc>latin capital letter g with acute</desc><unientity>01F4</unientity></character>
-<character hex="E2 67" dec="226 103"><isoentity>gacute</isoentity><desc>latin small letter g with acute</desc><unientity>01F5</unientity></character>
-<character hex="1B 67 63 1B 73" dec="027 103 099 027 115"><isoentity>gamma</isoentity><desc>greek small letter gamma</desc><unientity>03B3</unientity></character>
-<character hex="E6 47" dec="230 071"><isoentity>Gbreve</isoentity><desc>latin capital letter g with breve</desc><unientity>011E</unientity></character>
-<character hex="E6 67" dec="230 103"><isoentity>gbreve</isoentity><desc>latin small letter g with breve</desc><unientity>011F</unientity></character>
-<character hex="E9 47" dec="233 071"><isoentity>Gcaron</isoentity><desc>latin capital letter g with caron</desc><unientity>01E6</unientity></character>
-<character hex="E9 67" dec="233 103"><isoentity>gcaron</isoentity><desc>latin small letter g with caron</desc><unientity>01E7</unientity></character>
-<character hex="F0 47" dec="240 071"><isoentity>Gcedil</isoentity><desc>latin capital letter g with cedilla</desc><unientity>0122</unientity></character>
-<character hex="F0 67" dec="240 103"><isoentity>gcedil</isoentity><desc>latin small letter g with cedilla</desc><unientity>0123</unientity></character>
-<character hex="E3 47" dec="227 071"><isoentity>Gcirc</isoentity><desc>latin capital letter g with circumflex</desc><unientity>011C</unientity></character>
-<character hex="E3 67" dec="227 103"><isoentity>gcirc</isoentity><desc>latin small letter g with circumflex</desc><unientity>011D</unientity></character>
-<character hex="E7 47" dec="231 071"><isoentity>Gdot</isoentity><desc>latin capital letter g with dot above</desc><unientity>0120</unientity></character>
-<character hex="E7 67" dec="231 103"><isoentity>gdot</isoentity><desc>latin small letter g with dot above</desc><unientity>0121</unientity></character>
-<character hex="E5 47" dec="229 071"><isoentity>Gmacr</isoentity><desc>latin capital letter g with macron</desc><unientity>1E20</unientity></character>
-<character hex="E5 67" dec="229 103"><isoentity>gmacr</isoentity><desc>latin small letter g with macron</desc><unientity>1E21</unientity></character>
-<character hex="E1" dec="225"><isoentity>grave</isoentity><desc>combining grave accent</desc><unientity>0300</unientity></character>
-<character hex="F5 47" dec="245 071"><isoentity>Gstrok</isoentity><desc>latin capital letter g with stroke</desc><unientity>01E4</unientity></character>
-<character hex="F5 67" dec="245 103"><isoentity>gstrok</isoentity><desc>latin small letter g with stroke</desc><unientity>01E5</unientity></character>
-<character hex="B7" dec="183"><isoentity>hardsign</isoentity><desc>modifier letter double prime</desc><unientity>02BA</unientity></character>
-<character hex="F9 48" dec="249 072"><isoentity>Hbreveb</isoentity><desc>latin capital letter h with breve below</desc><unientity>1E2A</unientity></character>
-<character hex="F9 68" dec="249 104"><isoentity>hbreveb</isoentity><desc>latin small letter h with breve below</desc><unientity>1E2B</unientity></character>
-<character hex="E9 48" dec="233 072"><isoentity>Hcaron</isoentity><desc>latin capital letter h with caron</desc><unientity>021E</unientity></character>
-<character hex="E9 68" dec="233 104"><isoentity>hcaron</isoentity><desc>latin small letter h with caron</desc><unientity>021F</unientity></character>
-<character hex="F0 48" dec="240 072"><isoentity>Hcedil</isoentity><desc>latin capital letter h with cedilla</desc><unientity>1E28</unientity></character>
-<character hex="F0 68" dec="240 104"><isoentity>hcedil</isoentity><desc>latin small letter h with cedilla</desc><unientity>1E29</unientity></character>
-<character hex="E3 48" dec="227 072"><isoentity>Hcirc</isoentity><desc>latin capital letter h with circumflex</desc><unientity>0124</unientity></character>
-<character hex="E3 68" dec="227 104"><isoentity>hcirc</isoentity><desc>latin small letter h with circumflex</desc><unientity>0125</unientity></character>
-<character hex="F2 48" dec="242 072"><isoentity>Hdotb</isoentity><desc>latin capital letter h with dot below</desc><unientity>1E24</unientity></character>
-<character hex="F2 68" dec="242 104"><isoentity>hdotb</isoentity><desc>latin small letter h with dot below</desc><unientity>1E25</unientity></character>
-<character hex="E7 48" dec="231 072"><isoentity>Hdot</isoentity><desc>latin capital letter h with dot above</desc><unientity>1E22</unientity></character>
-<character hex="E7 68" dec="231 104"><isoentity>hdot</isoentity><desc>latin small letter h with dot above</desc><unientity>1E23</unientity></character>
-<character hex="F6 68" dec="246 104"><isoentity>hlowline</isoentity><desc>latin small letter h with low line</desc><unientity>1E96</unientity></character>
-<character hex="E0" dec="224"><isoentity>hooka</isoentity><desc>combining hook above</desc><unientity>0309</unientity></character>
-<character hex="F5 48" dec="245 072"><isoentity>Hstroke</isoentity><desc>latin capital letter h with stroke</desc><unientity>0126</unientity></character>
-<character hex="F5 68" dec="245 104"><isoentity>hstroke</isoentity><desc>latin small letter h with stroke</desc><unientity>0127</unientity></character>
-<character hex="E8 48" dec="232 072"><isoentity>Huml</isoentity><desc>latin capital letter h with diaeresis</desc><unientity>1E26</unientity></character>
-<character hex="E8 68" dec="232 104"><isoentity>huml</isoentity><desc>latin small letter h with diaeresis</desc><unientity>1E27</unientity></character>
-<character hex="E2 49" dec="226 073"><isoentity>Iacute</isoentity><desc>latin capital letter i with acute</desc><unientity>00CD</unientity></character>
-<character hex="E2 69" dec="226 105"><isoentity>iacute</isoentity><desc>latin small letter i with acute</desc><unientity>00ED</unientity></character>
-<character hex="E6 49" dec="230 073"><isoentity>Ibreve</isoentity><desc>latin capital letter i with breve</desc><unientity>012C</unientity></character>
-<character hex="E6 69" dec="230 105"><isoentity>ibreve</isoentity><desc>latin small letter i with breve</desc><unientity>012D</unientity></character>
-<character hex="E9 49" dec="233 073"><isoentity>Icaron</isoentity><desc>latin capital letter i with caron</desc><unientity>01CF</unientity></character>
-<character hex="E9 69" dec="233 105"><isoentity>icaron</isoentity><desc>latin small letter i with caron</desc><unientity>01D0</unientity></character>
-<character hex="E3 49" dec="227 073"><isoentity>Icirc</isoentity><desc>latin capital letter i with circumflex</desc><unientity>00CE</unientity></character>
-<character hex="E3 69" dec="227 105"><isoentity>icirc</isoentity><desc>latin small letter i with circumflex</desc><unientity>00EE</unientity></character>
-<character hex="F2 49" dec="242 073"><isoentity>Idotb</isoentity><desc>latin capital letter i with dot below</desc><unientity>1ECA</unientity></character>
-<character hex="F2 69" dec="242 105"><isoentity>idotb</isoentity><desc>latin small letter i with dot below</desc><unientity>1ECB</unientity></character>
-<character hex="E7 49" dec="231 073"><isoentity>Idot</isoentity><desc>latin capital letter i with dot above</desc><unientity>0130</unientity></character>
-<character hex="C6" dec="198"><isoentity>iexcl</isoentity><desc>inverted exclamation mark</desc><unientity>00A1</unientity></character>
-<character hex="E1 49" dec="225 073"><isoentity>Igrave</isoentity><desc>latin capital letter i with grave</desc><unientity>00CC</unientity></character>
-<character hex="E1 69" dec="225 105"><isoentity>igrave</isoentity><desc>latin small letter i with grave</desc><unientity>00EC</unientity></character>
-<character hex="E0 49" dec="224 073"><isoentity>Ihooka</isoentity><desc>latin capital letter i with hook above</desc><unientity>1EC8</unientity></character>
-<character hex="E0 69" dec="224 105"><isoentity>ihooka</isoentity><desc>latin small letter i with hook above</desc><unientity>1EC9</unientity></character>
-<character hex="E5 49" dec="229 073"><isoentity>Imacr</isoentity><desc>latin capital letter i with macron</desc><unientity>012A</unientity></character>
-<character hex="E5 69" dec="229 105"><isoentity>imacr</isoentity><desc>latin small letter i with macron</desc><unientity>012B</unientity></character>
-<character hex="B8" dec="184"><isoentity>inodot</isoentity><desc>latin small letter dotless i</desc><unientity>0131</unientity></character>
-<character hex="F1 49" dec="241 073"><isoentity>Iogon</isoentity><desc>latin capital letter i with ogon</desc><unientity>012E</unientity></character>
-<character hex="F1 69" dec="241 105"><isoentity>iogon</isoentity><desc>latin small letter i with ogon</desc><unientity>012F</unientity></character>
-<character hex="C5" dec="197"><isoentity>iquest</isoentity><desc>inverted question mark</desc><unientity>00BF</unientity></character>
-<character hex="E4 49" dec="228 073"><isoentity>Itilde</isoentity><desc>latin capital letter i with tilde</desc><unientity>0128</unientity></character>
-<character hex="E4 69" dec="228 105"><isoentity>itilde</isoentity><desc>latin small letter i with tilde</desc><unientity>0129</unientity></character>
-<character hex="E2 E8 49" dec="226 232 073"><isoentity>Iumlac</isoentity><desc>latin capital letter i with diaeresis and acute</desc><unientity>1E2E</unientity></character>
-<character hex="E2 E8 69" dec="226 232 105"><isoentity>iumlac</isoentity><desc>latin small letter i with diaeresis and acute</desc><unientity>1E2F</unientity></character>
-<character hex="E8 49" dec="232 073"><isoentity>Iuml</isoentity><desc>latin capital letter i with umlaut</desc><unientity>00CF</unientity></character>
-<character hex="E8 69" dec="232 105"><isoentity>iuml</isoentity><desc>latin small letter i with umlaut</desc><unientity>00EF</unientity></character>
-<character hex="E9 6A" dec="233 106"><isoentity>jcaron</isoentity><desc>latin small letter j with caron</desc><unientity>01F0</unientity></character>
-<character hex="E3 4A" dec="227 074"><isoentity>Jcirc</isoentity><desc>latin capital letter j with circumflex</desc><unientity>0134</unientity></character>
-<character hex="E3 6A" dec="227 106"><isoentity>jcirc</isoentity><desc>latin small letter j with circumflex</desc><unientity>0135</unientity></character>
-<character hex="E2 4B" dec="226 075"><isoentity>Kacute</isoentity><desc>latin capital letter k with acute</desc><unientity>1E30</unientity></character>
-<character hex="E2 6B" dec="226 107"><isoentity>kacute</isoentity><desc>latin small letter k with acute</desc><unientity>1E31</unientity></character>
-<character hex="F0 4B" dec="240 075"><isoentity>Kcedil</isoentity><desc>latin capital letter k with cedilla</desc><unientity>0136</unientity></character>
-<character hex="F0 6B" dec="240 107"><isoentity>kcedil</isoentity><desc>latin small letter k with cedilla</desc><unientity>0137</unientity></character>
-<character hex="E3 4B" dec="227 075"><isoentity>Kcirc</isoentity><desc>latin capital letter k with circumflex</desc><unientity>01E8</unientity></character>
-<character hex="E3 6B" dec="227 107"><isoentity>kcirc</isoentity><desc>latin small letter k with circumflex</desc><unientity>01E9</unientity></character>
-<character hex="F2 4B" dec="242 075"><isoentity>Kdotb</isoentity><desc>latin capital letter k with dot below</desc><unientity>1E32</unientity></character>
-<character hex="F2 6B" dec="242 107"><isoentity>kdotb</isoentity><desc>latin small letter k with dot below</desc><unientity>1E33</unientity></character>
-<character hex="F6 4B" dec="246 075"><isoentity>Kmacrb</isoentity><desc>latin capital letter k with line below</desc><unientity>1E34</unientity></character>
-<character hex="F6 6B" dec="246 107"><isoentity>kmacrb</isoentity><desc>latin small letter k with line below</desc><unientity>1E35</unientity></character>
-<character hex="E2 4C" dec="226 076"><isoentity>Lacute</isoentity><desc>latin capital letter l with acute</desc><unientity>0139</unientity></character>
-<character hex="E2 6C" dec="226 108"><isoentity>lacute</isoentity><desc>latin small letter l with acute</desc><unientity>013A</unientity></character>
-<character hex="E9 4C" dec="233 076"><isoentity>Lcaron</isoentity><desc>latin capital letter l with caron</desc><unientity>013D</unientity></character>
-<character hex="E9 6C" dec="233 108"><isoentity>lcaron</isoentity><desc>latin small letter l with caron</desc><unientity>013E</unientity></character>
-<character hex="F0 4C" dec="240 076"><isoentity>Lcedil</isoentity><desc>latin capital letter l with cedilla</desc><unientity>013B</unientity></character>
-<character hex="F0 6C" dec="240 108"><isoentity>lcedil</isoentity><desc>latin small letter l with cedilla</desc><unientity>013C</unientity></character>
-<character hex="E3 4C" dec="227 076"><isoentity>Lcirc</isoentity><desc>latin capital letter l with circumflex</desc><unientity>1E3C</unientity></character>
-<character hex="E3 6C" dec="227 108"><isoentity>lcirc</isoentity><desc>latin small letter l with circumflex</desc><unientity>1E3D</unientity></character>
-<character hex="FA" dec="250"><isoentity>ldbltil</isoentity><desc>combining double tilde left half</desc><unientity>FE22</unientity></character>
-<character hex="E5 F2 4C" dec="229 242 079"><isoentity>Ldotbma</isoentity><desc>latin capital letter l with dot below and macron</desc><unientity>1E38</unientity></character>
-<character hex="E5 F2 6C" dec="229 242 111"><isoentity>ldotbma</isoentity><desc>latin small letter l with dot below and macron</desc><unientity>1E39</unientity></character>
-<character hex="F2 4C" dec="242 076"><isoentity>Ldotb</isoentity><desc>latin capital letter l with dot below</desc><unientity>1E36</unientity></character>
-<character hex="F2 6C" dec="242 108"><isoentity>ldotb</isoentity><desc>latin small letter l with dot below</desc><unientity>1E37</unientity></character>
-<character hex="EB" dec="235"><isoentity>llig</isoentity><desc>combining ligature left half</desc><unientity>FE20</unientity></character>
-<character hex="F6 4C" dec="246 076"><isoentity>Lmacrb</isoentity><desc>latin capital letter l with line below</desc><unientity>1E3A</unientity></character>
-<character hex="F6 6C" dec="246 108"><isoentity>lmacrb</isoentity><desc>latin small letter l with line below</desc><unientity>1E3B</unientity></character>
-<character hex="4C A8" dec="076 168"><isoentity>Lmidot</isoentity><desc>latin capital letter l with middle dot</desc><unientity>013F</unientity></character>
-<character hex="6C A8" dec="108 168"><isoentity>lmidot</isoentity><desc>latin small letter l with middle dot</desc><unientity>0140</unientity></character>
-<character hex="A1" dec="161"><isoentity>Lstrok</isoentity><desc>latin capital letter l with stroke</desc><unientity>0141</unientity></character>
-<character hex="B1" dec="177"><isoentity>lstrok</isoentity><desc>latin small letter l with stroke</desc><unientity>0142</unientity></character>
-<character hex="E5" dec="229"><isoentity>macr</isoentity><desc>combining macron</desc><unientity>0304</unientity></character>
-<character hex="E2 4D" dec="226 077"><isoentity>Macute</isoentity><desc>latin capital letter m with acute</desc><unientity>1E3E</unientity></character>
-<character hex="E2 6D" dec="226 109"><isoentity>macute</isoentity><desc>latin small letter m with acute</desc><unientity>1E3F</unientity></character>
-<character hex="F2 4D" dec="242 077"><isoentity>Mdotb</isoentity><desc>latin capital letter m with dot below</desc><unientity>1E42</unientity></character>
-<character hex="F2 6D" dec="242 109"><isoentity>mdotb</isoentity><desc>latin small letter m with dot below</desc><unientity>1E43</unientity></character>
-<character hex="E7 4D" dec="231 077"><isoentity>Mdot</isoentity><desc>latin capital letter m with dot above</desc><unientity>1E40</unientity></character>
-<character hex="E7 6D" dec="231 109"><isoentity>mdot</isoentity><desc>latin small letter m with dot above</desc><unientity>1E41</unientity></character>
-<character hex="A8" dec="168"><isoentity>middot</isoentity><desc>middle dot</desc><unientity>00B7</unientity></character>
-<character hex="B0" dec="176"><isoentity>mllhring</isoentity><desc>modifier letter left half ring</desc><unientity>02BF</unientity></character>
-<character hex="AE" dec="174"><isoentity>mlrhring</isoentity><desc>modifier letter right half ring</desc><unientity>02BE</unientity></character>
-<character hex="E2 4E" dec="226 078"><isoentity>Nacute</isoentity><desc>latin capital letter n with acute</desc><unientity>0143</unientity></character>
-<character hex="E2 6E" dec="226 110"><isoentity>nacute</isoentity><desc>latin small letter n with acute</desc><unientity>0144</unientity></character>
-<character hex="ED 6E" dec="237 110"><isoentity>napos</isoentity><desc>latin small letter n with apostrophe</desc><unientity>0149</unientity></character>
-<character hex="E9 4E" dec="233 078"><isoentity>Ncaron</isoentity><desc>latin capital letter n with caron</desc><unientity>0147</unientity></character>
-<character hex="E9 6E" dec="233 110"><isoentity>ncaron</isoentity><desc>latin small letter n with caron</desc><unientity>0148</unientity></character>
-<character hex="F0 4E" dec="240 078"><isoentity>Ncedil</isoentity><desc>latin capital letter n with cedilla</desc><unientity>0145</unientity></character>
-<character hex="F0 6E" dec="240 110"><isoentity>ncedil</isoentity><desc>latin small letter n with cedilla</desc><unientity>0146</unientity></character>
-<character hex="F2 4E" dec="242 078"><isoentity>Ndotb</isoentity><desc>latin capital letter n with dot below</desc><unientity>1E46</unientity></character>
-<character hex="F2 6E" dec="242 110"><isoentity>ndotb</isoentity><desc>latin small letter n with dot below</desc><unientity>1E47</unientity></character>
-<character hex="E7 4E" dec="231 078"><isoentity>Ndot</isoentity><desc>latin capital letter n with dot above</desc><unientity>1E44</unientity></character>
-<character hex="E7 6E" dec="231 110"><isoentity>ndot</isoentity><desc>latin small letter n with dot above</desc><unientity>1E45</unientity></character>
-<character hex="E1 4E" dec="225 078"><isoentity>Ngrave</isoentity><desc>latin capital letter n with grave</desc><unientity>01F8</unientity></character>
-<character hex="E1 6E" dec="225 110"><isoentity>ngrave</isoentity><desc>latin small letter n with grave</desc><unientity>01F9</unientity></character>
-<character hex="F6 4E" dec="246 078"><isoentity>Nmacrb</isoentity><desc>latin capital letter n with line below</desc><unientity>1E48</unientity></character>
-<character hex="F6 6E" dec="246 110"><isoentity>nmacrb</isoentity><desc>latin small letter n with line below</desc><unientity>1E49</unientity></character>
-<character hex="E4 4E" dec="228 078"><isoentity>Ntilde</isoentity><desc>latin capital letter n with tilde</desc><unientity>00D1</unientity></character>
-<character hex="E4 6E" dec="228 110"><isoentity>ntilde</isoentity><desc>latin small letter n with tilde</desc><unientity>00F1</unientity></character>
-<character hex="E2 4F" dec="226 079"><isoentity>Oacute</isoentity><desc>latin capital letter o with acute</desc><unientity>00D3</unientity></character>
-<character hex="E2 6F" dec="226 111"><isoentity>oacute</isoentity><desc>latin small letter o with acute</desc><unientity>00F3</unientity></character>
-<character hex="E6 4F" dec="230 079"><isoentity>Obreve</isoentity><desc>latin capital letter o with breve</desc><unientity>014E</unientity></character>
-<character hex="E6 6F" dec="230 111"><isoentity>obreve</isoentity><desc>latin small letter o with breve</desc><unientity>014F</unientity></character>
-<character hex="E9 4F" dec="233 079"><isoentity>Ocaron</isoentity><desc>latin capital letter o with caron</desc><unientity>01D1</unientity></character>
-<character hex="E9 6F" dec="233 111"><isoentity>ocaron</isoentity><desc>latin small letter o with caron</desc><unientity>01D2</unientity></character>
-<character hex="E3 E2 4F" dec="227 226 079"><isoentity>Ocircac</isoentity><desc>latin capital letter o with circumflex and acute</desc><unientity>1ED0</unientity></character>
-<character hex="E3 E2 6F" dec="227 226 111"><isoentity>ocircac</isoentity><desc>latin small letter o with circumflex and acute</desc><unientity>1ED1</unientity></character>
-<character hex="E3 F2 4F" dec="227 242 079"><isoentity>Ocircdb</isoentity><desc>latin capital letter o with circumflex and dot below</desc><unientity>1ED8</unientity></character>
-<character hex="E3 F2 6F" dec="227 242 111"><isoentity>ocircdb</isoentity><desc>latin small letter o with circumflex and dot below</desc><unientity>1ED9</unientity></character>
-<character hex="E1 E3 4F" dec="225 227 079"><isoentity>Ocircgr</isoentity><desc>latin capital letter o with circumflex and grave</desc><unientity>1ED2</unientity></character>
-<character hex="E1 E3 6F" dec="225 227 111"><isoentity>ocircgr</isoentity><desc>latin small letter o with circumflex and grave</desc><unientity>1ED3</unientity></character>
-<character hex="E3 E0 4F" dec="227 224 079"><isoentity>Ocircha</isoentity><desc>latin capital letter o with circumflex and hook above</desc><unientity>1ED4</unientity></character>
-<character hex="E3 E0 6F" dec="227 224 111"><isoentity>ocircha</isoentity><desc>latin small letter o with circumflex and hook above</desc><unientity>1ED5</unientity></character>
-<character hex="E4 E3 4F" dec="228 227 079"><isoentity>Ocircti</isoentity><desc>latin capital letter o with circumflex and tilde</desc><unientity>1ED6</unientity></character>
-<character hex="E4 E3 6F" dec="228 227 111"><isoentity>ocircti</isoentity><desc>latin small letter o with circumflex and tilde</desc><unientity>1ED7</unientity></character>
-<character hex="E3 4F" dec="227 079"><isoentity>Ocirc</isoentity><desc>latin capital letter o with circumflex</desc><unientity>00D4</unientity></character>
-<character hex="E3 6F" dec="227 111"><isoentity>ocirc</isoentity><desc>latin small letter o with circumflex</desc><unientity>00F4</unientity></character>
-<character hex="EE 4F" dec="238 079"><isoentity>Odblac</isoentity><desc>latin capital letter o with double acute</desc><unientity>0150</unientity></character>
-<character hex="EE 6F" dec="238 111"><isoentity>odblac</isoentity><desc>latin small letter o with double acute</desc><unientity>0151</unientity></character>
-<character hex="E5 E7 4F" dec="229 231 079"><isoentity>Odotama</isoentity><desc>latin capital letter o with dot above and macron</desc><unientity>0230</unientity></character>
-<character hex="E5 E7 6F" dec="229 231 111"><isoentity>odotama</isoentity><desc>latin small letter o with dot above and macron</desc><unientity>0231</unientity></character>
-<character hex="E7 4F" dec="231 079"><isoentity>Odota</isoentity><desc>latin capital letter o with dot above</desc><unientity>022E</unientity></character>
-<character hex="E7 6F" dec="231 111"><isoentity>odota</isoentity><desc>latin small letter o with dot above</desc><unientity>022F</unientity></character>
-<character hex="F2 4F" dec="242 079"><isoentity>Odotb</isoentity><desc>latin capital letter o with dot below</desc><unientity>1ECC</unientity></character>
-<character hex="F2 6F" dec="242 111"><isoentity>odotb</isoentity><desc>latin small letter o with dot below</desc><unientity>1ECD</unientity></character>
-<character hex="A6" dec="166"><isoentity>OElig</isoentity><desc>latin capital letter oe</desc><unientity>0152</unientity></character>
-<character hex="B6" dec="182"><isoentity>oelig</isoentity><desc>latin small letter oe</desc><unientity>0153</unientity></character>
-<character hex="F1" dec="241"><isoentity>ogon</isoentity><desc>combining ogonek</desc><unientity>0328</unientity></character>
-<character hex="E1 4F" dec="225 079"><isoentity>Ograve</isoentity><desc>latin capital letter o with grave</desc><unientity>00D2</unientity></character>
-<character hex="E1 6F" dec="225 111"><isoentity>ograve</isoentity><desc>latin small letter o with grave</desc><unientity>00F2</unientity></character>
-<character hex="E0 4F" dec="224 079"><isoentity>Ohooka</isoentity><desc>latin capital letter o with hook above</desc><unientity>1ECE</unientity></character>
-<character hex="E0 6F" dec="224 111"><isoentity>ohooka</isoentity><desc>latin small letter o with hook above</desc><unientity>1ECF</unientity></character>
-<character hex="E2 AC" dec="226 172"><isoentity>Ohornac</isoentity><desc>latin capital letter o with horn and acute</desc><unientity>1EDA</unientity></character>
-<character hex="E2 AD" dec="226 173"><isoentity>Ohornac</isoentity><desc>latin capital letter u with horn and acute</desc><unientity>1EE8</unientity></character>
-<character hex="E2 BC" dec="226 188"><isoentity>ohornac</isoentity><desc>latin small letter o with horn and acute</desc><unientity>1EDB</unientity></character>
-<character hex="F2 AC" dec="242 172"><isoentity>Ohorndb</isoentity><desc>latin capital letter o with horn and dot below</desc><unientity>1EE2</unientity></character>
-<character hex="F2 BC" dec="242 188"><isoentity>ohorndb</isoentity><desc>latin small letter o with horn and dot below</desc><unientity>1EE3</unientity></character>
-<character hex="E1 AC" dec="225 172"><isoentity>Ohorngr</isoentity><desc>latin capital letter o with horn and grave</desc><unientity>1EDC</unientity></character>
-<character hex="E1 BC" dec="225 188"><isoentity>ohorngr</isoentity><desc>latin small letter o with horn and grave</desc><unientity>1EDD</unientity></character>
-<character hex="E0 AC" dec="224 172"><isoentity>Ohornha</isoentity><desc>latin capital letter o with horn and hook above</desc><unientity>1EDE</unientity></character>
-<character hex="E0 BC" dec="224 188"><isoentity>ohornha</isoentity><desc>latin small letter o with horn and hook above</desc><unientity>1EDF</unientity></character>
-<character hex="E4 AC" dec="228 172"><isoentity>Ohornti</isoentity><desc>latin capital letter o with horn and tilde</desc><unientity>1EE0</unientity></character>
-<character hex="E4 BC" dec="228 188"><isoentity>ohornti</isoentity><desc>latin small letter o with horn and tilde</desc><unientity>1EE1</unientity></character>
-<character hex="AC" dec="172"><isoentity>Ohorn</isoentity><desc>latin capital letter o with horn</desc><unientity>01A0</unientity></character>
-<character hex="BC" dec="188"><isoentity>ohorn</isoentity><desc>latin small letter o with horn</desc><unientity>01A1</unientity></character>
-<character hex="E2 E5 4F" dec="226 229 079"><isoentity>Omacrac</isoentity><desc>latin capital letter o with macron and acute</desc><unientity>1E52</unientity></character>
-<character hex="E2 E5 6F" dec="226 229 111"><isoentity>omacrac</isoentity><desc>latin small letter o with macron and acute</desc><unientity>1E53</unientity></character>
-<character hex="E1 E5 4F" dec="225 229 079"><isoentity>Omacrgr</isoentity><desc>latin capital letter o with macron and grave</desc><unientity>1E50</unientity></character>
-<character hex="E1 E5 6F" dec="225 229 111"><isoentity>omacrgr</isoentity><desc>latin small letter o with macron and grave</desc><unientity>1E51</unientity></character>
-<character hex="E5 4F" dec="229 079"><isoentity>Omacr</isoentity><desc>latin capital letter o with macron</desc><unientity>014C</unientity></character>
-<character hex="E5 6F" dec="229 111"><isoentity>omacr</isoentity><desc>latin small letter o with macron</desc><unientity>014D</unientity></character>
-<character hex="E5 F1 4F" dec="229 241 079"><isoentity>Oogonma</isoentity><desc>latin capital letter o with ogonek and macron</desc><unientity>01EC</unientity></character>
-<character hex="E5 F1 6F" dec="229 241 111"><isoentity>oogonma</isoentity><desc>latin small letter o with ogonek and macron</desc><unientity>01ED</unientity></character>
-<character hex="F1 4F" dec="241 111"><isoentity>Oogon</isoentity><desc>latin capital letter o with ogonek</desc><unientity>01EA</unientity></character>
-<character hex="F1 6F" dec="241 111"><isoentity>oogon</isoentity><desc>latin small letter o with ogonek</desc><unientity>01EB</unientity></character>
-<character hex="E2 A2" dec="226 162"><isoentity>Oslasha</isoentity><desc>latin capital letter o with stroke and acute</desc><unientity>01FE</unientity></character>
-<character hex="E2 B2" dec="226 178"><isoentity>oslasha</isoentity><desc>latin small letter o with stroke and acute</desc><unientity>01FF</unientity></character>
-<character hex="A2" dec="162"><isoentity>Oslash</isoentity><desc>latin capital letter o with stroke</desc><unientity>00D8</unientity></character>
-<character hex="B2" dec="178"><isoentity>oslash</isoentity><desc>latin small letter o with stroke</desc><unientity>00F8</unientity></character>
-<character hex="E2 E4 4F" dec="226 228 079"><isoentity>Otildeac</isoentity><desc>latin capital letter o with tilde and acute</desc><unientity>1E4C</unientity></character>
-<character hex="E2 E4 6F" dec="226 228 111"><isoentity>otildeac</isoentity><desc>latin small letter o with tilde and acute</desc><unientity>1E4D</unientity></character>
-<character hex="E5 E4 4F" dec="229 228 079"><isoentity>Otildema</isoentity><desc>latin capital letter o with tilde and macron</desc><unientity>022C</unientity></character>
-<character hex="E5 E4 6F" dec="229 228 111"><isoentity>otildema</isoentity><desc>latin small letter o with tilde and macron</desc><unientity>022D</unientity></character>
-<character hex="E8 E4 4F" dec="232 228 079"><isoentity>Otildeum</isoentity><desc>latin capital letter o with tilde and diaeresis</desc><unientity>1E4E</unientity></character>
-<character hex="E8 E4 6F" dec="232 228 111"><isoentity>otildeum</isoentity><desc>latin small letter o with tilde and diaeresis</desc><unientity>1E4F</unientity></character>
-<character hex="E4 4F" dec="228 079"><isoentity>Otilde</isoentity><desc>latin capital letter o with tilde</desc><unientity>00D5</unientity></character>
-<character hex="E4 6F" dec="228 111"><isoentity>otilde</isoentity><desc>latin small letter o with tilde</desc><unientity>00F5</unientity></character>
-<character hex="E5 E8 4F" dec="229 232 079"><isoentity>Oumlma</isoentity><desc>latin capital letter o with diaeresis and macron</desc><unientity>022A</unientity></character>
-<character hex="E5 E8 6F" dec="229 232 111"><isoentity>oumlma</isoentity><desc>latin small letter o with diaeresis and macron</desc><unientity>022B</unientity></character>
-<character hex="E8 4F" dec="232 079"><isoentity>Ouml</isoentity><desc>latin capital letter o with umlaut</desc><unientity>00D6</unientity></character>
-<character hex="E8 6F" dec="232 111"><isoentity>ouml</isoentity><desc>latin small letter o with umlaut</desc><unientity>00F6</unientity></character>
-<character hex="E2 50" dec="226 080"><isoentity>Pacute</isoentity><desc>latin capital letter p with acute</desc><unientity>1E54</unientity></character>
-<character hex="E2 70" dec="226 112"><isoentity>pacute</isoentity><desc>latin small letter p with acute</desc><unientity>1E55</unientity></character>
-<character hex="E7 50" dec="231 080"><isoentity>Pdota</isoentity><desc>latin capital letter p with dot above</desc><unientity>1E56</unientity></character>
-<character hex="E7 70" dec="231 112"><isoentity>pdota</isoentity><desc>latin small letter p with dot above</desc><unientity>1E57</unientity></character>
-<character hex="AB" dec="171"><isoentity>plusmn</isoentity><desc>plus-minus sign</desc><unientity>00B1</unientity></character>
-<character hex="B9" dec="185"><isoentity>pound</isoentity><desc>pound sign</desc><unientity>00A3</unientity></character>
-<character hex="E2 52" dec="226 082"><isoentity>Racute</isoentity><desc>latin capital letter r with acute</desc><unientity>0154</unientity></character>
-<character hex="E2 72" dec="226 114"><isoentity>racute</isoentity><desc>latin small letter r with acute</desc><unientity>0155</unientity></character>
-<character hex="E9 52" dec="233 082"><isoentity>Rcaron</isoentity><desc>latin capital letter r with caron</desc><unientity>0158</unientity></character>
-<character hex="E9 72" dec="233 114"><isoentity>rcaron</isoentity><desc>latin small letter r with caron</desc><unientity>0159</unientity></character>
-<character hex="F8" dec="248"><isoentity>rcedil</isoentity><desc>combining left half ring below</desc><unientity>031C</unientity></character>
-<character hex="F8 52" dec="240 082"><isoentity>Rcedil</isoentity><desc>latin capital letter r with cedilla</desc><unientity>0156</unientity></character>
-<character hex="F0 72" dec="240 114"><isoentity>rcedil</isoentity><desc>latin small letter r with cedilla</desc><unientity>0157</unientity></character>
-<character hex="ED" dec="237"><isoentity>rcommaa</isoentity><desc>combining comma above right</desc><unientity>0315</unientity></character>
-<character hex="FB" dec="251"><isoentity>rdbltil</isoentity><desc>combining double tilde right half</desc><unientity>FE23</unientity></character>
-<character hex="E7 52" dec="231 082"><isoentity>Rdota</isoentity><desc>latin capital letter r with dot above</desc><unientity>1E58</unientity></character>
-<character hex="E7 72" dec="231 114"><isoentity>rdota</isoentity><desc>latin small letter r with dot above</desc><unientity>1E59</unientity></character>
-<character hex="F2 52" dec="242 082"><isoentity>Rdotb</isoentity><desc>latin capital letter r with dot below</desc><unientity>1E5A</unientity></character>
-<character hex="F2 72" dec="242 114"><isoentity>rdotb</isoentity><desc>latin small letter r with dot below</desc><unientity>1E5B</unientity></character>
-<character hex="AA" dec="170"><isoentity>reg</isoentity><desc>registered sign</desc><unientity>00AE</unientity></character>
-<character hex="F4" dec="244"><isoentity>ringb</isoentity><desc>combining ring below</desc><unientity>0325</unientity></character>
-<character hex="EA" dec="234"><isoentity>ring</isoentity><desc>combining ring above</desc><unientity>030A</unientity></character>
-<character hex="EC" dec="236"><isoentity>rlig</isoentity><desc>combining ligature right half</desc><unientity>FE21</unientity></character>
-<character hex="F6 52" dec="246 082"><isoentity>Rmacrb</isoentity><desc>latin capital letter r with line below</desc><unientity>1E5E</unientity></character>
-<character hex="F6 72" dec="246 114"><isoentity>rmacrb</isoentity><desc>latin small letter r with line below</desc><unientity>1E5F</unientity></character>
-<character hex="E7 E2 53" dec="231 226 083"><isoentity>Sacuteda</isoentity><desc>latin capital letter s with acute and dot above</desc><unientity>1E64</unientity></character>
-<character hex="E7 E2 73" dec="231 226 115"><isoentity>sacuteda</isoentity><desc>latin small letter s with acute and dot above</desc><unientity>1E65</unientity></character>
-<character hex="E2 53" dec="226 083"><isoentity>Sacute</isoentity><desc>latin capital letter s with acute</desc><unientity>015A</unientity></character>
-<character hex="E2 73" dec="226 115"><isoentity>sacute</isoentity><desc>latin small letter s with acute</desc><unientity>015B</unientity></character>
-<character hex="E7 E9 53" dec="231 233 083"><isoentity>Scaronda</isoentity><desc>latin capital letter s with caron and dot above</desc><unientity>1E66</unientity></character>
-<character hex="E7 E9 73" dec="231 233 115"><isoentity>scaronda</isoentity><desc>latin small letter s with caron and dot above</desc><unientity>1E67</unientity></character>
-<character hex="E9 53" dec="233 083"><isoentity>Scaron</isoentity><desc>latin capital letter s with caron</desc><unientity>0160</unientity></character>
-<character hex="E9 73" dec="233 115"><isoentity>scaron</isoentity><desc>latin small letter s with caron</desc><unientity>0161</unientity></character>
-<character hex="F0 53" dec="240 083"><isoentity>Scedil</isoentity><desc>latin capital letter s with cedil</desc><unientity>015E</unientity></character>
-<character hex="F0 73" dec="240 115"><isoentity>scedil</isoentity><desc>latin small letter s with cedil</desc><unientity>015F</unientity></character>
-<character hex="E3 53" dec="227 083"><isoentity>Scirc</isoentity><desc>latin capital letter s with circumflex</desc><unientity>015C</unientity></character>
-<character hex="E3 73" dec="227 115"><isoentity>scirc</isoentity><desc>latin small letter s with circumflex</desc><unientity>015D</unientity></character>
-<character hex="F7 53" dec="247 083"><isoentity>scommab</isoentity><desc>latin capital letter s with comma below</desc><unientity>0218</unientity></character>
-<character hex="F7 73" dec="247 115"><isoentity>scommab</isoentity><desc>latin small letter s with comma below</desc><unientity>0219</unientity></character>
-<character hex="C1" dec="193"><isoentity>scriptl</isoentity><desc>script small l</desc><unientity>2113</unientity></character>
-<character hex="E7 53" dec="231 083"><isoentity>Sdota</isoentity><desc>latin capital letter s with dot above</desc><unientity>1E60</unientity></character>
-<character hex="E7 73" dec="231 115"><isoentity>sdota</isoentity><desc>latin small letter s with dot above</desc><unientity>1E61</unientity></character>
-<character hex="E7 F2 53" dec="231 242 083"><isoentity>Sdotbda</isoentity><desc>latin capital letter s with dot below and dot above</desc><unientity>1E68</unientity></character>
-<character hex="E7 F2 73" dec="231 242 115"><isoentity>sdotbda</isoentity><desc>latin small letter s with dot below and dot above</desc><unientity>1E69</unientity></character>
-<character hex="F2 53" dec="242 083"><isoentity>Sdotb</isoentity><desc>latin capital letter s with dot below</desc><unientity>1E62</unientity></character>
-<character hex="F2 73" dec="242 115"><isoentity>sdotb</isoentity><desc>latin small letter s with dot below</desc><unientity>1E63</unientity></character>
-<character hex="C4" dec="196"><isoentity>sharp</isoentity><desc>sharp</desc><unientity>266F</unientity></character>
-<character hex="A7" dec="167"><isoentity>softsign</isoentity><desc>modifier letter prime</desc><unientity>02B9</unientity></character>
-<character hex="1B 62 30 1B 73" dec="027 098 048 027 115"><isoentity>sub0</isoentity><desc>subscript zero</desc><unientity>2080</unientity></character>
-<character hex="1B 62 31 1B 73" dec="027 098 049 027 115"><isoentity>sub1</isoentity><desc>subscript one</desc><unientity>2081</unientity></character>
-<character hex="1B 62 32 1B 73" dec="027 098 050 027 115"><isoentity>sub2</isoentity><desc>subscript two</desc><unientity>2082</unientity></character>
-<character hex="1B 62 33 1B 73" dec="027 098 051 027 115"><isoentity>sub3</isoentity><desc>subscript three</desc><unientity>2083</unientity></character>
-<character hex="1B 62 34 1B 73" dec="027 098 052 027 115"><isoentity>sub4</isoentity><desc>subscript four</desc><unientity>2084</unientity></character>
-<character hex="1B 62 35 1B 73" dec="027 098 053 027 115"><isoentity>sub5</isoentity><desc>subscript five</desc><unientity>2085</unientity></character>
-<character hex="1B 62 36 1B 73" dec="027 098 054 027 115"><isoentity>sub6</isoentity><desc>subscript six</desc><unientity>2086</unientity></character>
-<character hex="1B 62 37 1B 73" dec="027 098 055 027 115"><isoentity>sub7</isoentity><desc>subscript seven</desc><unientity>2087</unientity></character>
-<character hex="1B 62 38 1B 73" dec="027 098 056 027 115"><isoentity>sub8</isoentity><desc>subscript eight</desc><unientity>2088</unientity></character>
-<character hex="1B 62 39 1B 73" dec="027 098 057 027 115"><isoentity>sub9</isoentity><desc>subscript nine</desc><unientity>2089</unientity></character>
-<character hex="1B 62 28 1B 73" dec="027 098 040 027 115"><isoentity>sublpar</isoentity><desc>subscript left parenthesis</desc><unientity>208D</unientity></character>
-<character hex="1B 62 2D 1B 73" dec="027 098 045 027 115"><isoentity>subminus</isoentity><desc>subscript minus</desc><unientity>208B</unientity></character>
-<character hex="1B 62 2B 1B 73" dec="027 098 043 027 115"><isoentity>subplus</isoentity><desc>subscript plus sign</desc><unientity>208A</unientity></character>
-<character hex="1B 62 29 1B 73" dec="027 098 041 027 115"><isoentity>subrpar</isoentity><desc>subscript right parenthesis</desc><unientity>208E</unientity></character>
-<character hex="1B 70 30 1B 73" dec="027 112 048 027 115"><isoentity>sup0</isoentity><desc>superscript zero</desc><unientity>2070</unientity></character>
-<character hex="1B 70 31 1B 73" dec="027 112 049 027 115"><isoentity>sup1</isoentity><desc>superscript one</desc><unientity>00B9</unientity></character>
-<character hex="1B 70 32 1B 73" dec="027 112 050 027 115"><isoentity>sup2</isoentity><desc>superscript two</desc><unientity>00B2</unientity></character>
-<character hex="1B 70 33 1B 73" dec="027 112 051 027 115"><isoentity>sup3</isoentity><desc>superscript three</desc><unientity>00B3</unientity></character>
-<character hex="1B 70 34 1B 73" dec="027 112 052 027 115"><isoentity>sup4</isoentity><desc>superscript four</desc><unientity>2074</unientity></character>
-<character hex="1B 70 35 1B 73" dec="027 112 053 027 115"><isoentity>sup5</isoentity><desc>superscript five</desc><unientity>2075</unientity></character>
-<character hex="1B 70 36 1B 73" dec="027 112 054 027 115"><isoentity>sup6</isoentity><desc>superscript six</desc><unientity>2076</unientity></character>
-<character hex="1B 70 37 1B 73" dec="027 112 055 027 115"><isoentity>sup7</isoentity><desc>superscript seven</desc><unientity>2077</unientity></character>
-<character hex="1B 70 38 1B 73" dec="027 112 056 027 115"><isoentity>sup8</isoentity><desc>superscript eight</desc><unientity>2078</unientity></character>
-<character hex="1B 70 39 1B 73" dec="027 112 056 027 115"><isoentity>sup9</isoentity><desc>superscript nine</desc><unientity>2079</unientity></character>
-<character hex="1B 70 28 1B 73" dec="027 112 040 027 115"><isoentity>suplpar</isoentity><desc>superscript left parenthesis</desc><unientity>207D</unientity></character>
-<character hex="1B 70 2D 1B 73" dec="027 112 045 027 115"><isoentity>supminus</isoentity><desc>superscript minus</desc><unientity>207B</unientity></character>
-<character hex="1B 70 2B 1B 73" dec="027 112 043 027 115"><isoentity>supplus</isoentity><desc>superscript plus sign</desc><unientity>207A</unientity></character>
-<character hex="1B 70 29 1B 73" dec="027 112 041 027 115"><isoentity>suprpar</isoentity><desc>superscript right parenthesis</desc><unientity>207E</unientity></character>
-<character hex="E9 54" dec="233 084"><isoentity>Tcaron</isoentity><desc>latin capital letter t with caron</desc><unientity>0164</unientity></character>
-<character hex="E9 74" dec="233 116"><isoentity>tcaron</isoentity><desc>latin small letter t with caron</desc><unientity>0165</unientity></character>
-<character hex="F0 54" dec="240 084"><isoentity>Tcedil</isoentity><desc>latin capital letter t with cedilla</desc><unientity>0162</unientity></character>
-<character hex="F0 74" dec="240 116"><isoentity>tcedil</isoentity><desc>latin small letter t with cedilla</desc><unientity>0163</unientity></character>
-<character hex="E4 E3 65" dec="228 227 101"><isoentity>tcircti</isoentity><desc>latin small letter e with circumflex and tilde</desc><unientity>1EC5</unientity></character>
-<character hex="F7 54" dec="247 084"><isoentity>Tcommab</isoentity><desc>latin capital letter t with comma below</desc><unientity>021A</unientity></character>
-<character hex="F7 74" dec="247 116"><isoentity>tcommab</isoentity><desc>latin small letter t with comma below</desc><unientity>021B</unientity></character>
-<character hex="F2 54" dec="242 084"><isoentity>Tdotb</isoentity><desc>latin capital letter t with dot below</desc><unientity>1E6C</unientity></character>
-<character hex="F2 74" dec="242 116"><isoentity>tdotb</isoentity><desc>latin small letter t with dot below</desc><unientity>1E6D</unientity></character>
-<character hex="E7 54" dec="231 084"><isoentity>Tdot</isoentity><desc>latin capital letter t with dot above</desc><unientity>1E6A</unientity></character>
-<character hex="E7 74" dec="231 116"><isoentity>tdot</isoentity><desc>latin small letter t with dot above</desc><unientity>1E6B</unientity></character>
-<character hex="A4" dec="164"><isoentity>THORN</isoentity><desc>latin capital letter thorn</desc><unientity>00DE</unientity></character>
-<character hex="B4" dec="180"><isoentity>thorn</isoentity><desc>latin small letter thorn</desc><unientity>00FE</unientity></character>
-<character hex="E4" dec="228"><isoentity>tilde</isoentity><desc>combining tilde</desc><unientity>0303</unientity></character>
-<character hex="F6 54" dec="246 084"><isoentity>Tmacrb</isoentity><desc>latin capital letter t with line below</desc><unientity>1E6E</unientity></character>
-<character hex="F6 74" dec="246 116"><isoentity>tmacrb</isoentity><desc>latin small letter t with line below</desc><unientity>1E6F</unientity></character>
-<character hex="E8 74" dec="232 116"><isoentity>tuml</isoentity><desc>latin small letter t with diaeresis</desc><unientity>1E97</unientity></character>
-<character hex="E2 55" dec="226 085"><isoentity>Uacute</isoentity><desc>latin capital letter u with acute</desc><unientity>00DA</unientity></character>
-<character hex="E2 75" dec="226 117"><isoentity>uacute</isoentity><desc>latin small letter u with acute</desc><unientity>00FA</unientity></character>
-<character hex="E6 55" dec="230 085"><isoentity>Ubreve</isoentity><desc>latin capital letter u with breve</desc><unientity>016C</unientity></character>
-<character hex="E6 75" dec="230 117"><isoentity>ubreve</isoentity><desc>latin small letter u with breve</desc><unientity>016D</unientity></character>
-<character hex="E9 55" dec="233 085"><isoentity>ucaron</isoentity><desc>latin capital letter u with caron</desc><unientity>01D3</unientity></character>
-<character hex="E9 75" dec="233 117"><isoentity>ucaron</isoentity><desc>latin small letter u with caron</desc><unientity>01D4</unientity></character>
-<character hex="E3 55" dec="227 085"><isoentity>Ucirc</isoentity><desc>latin capital letter u with circumflex</desc><unientity>00DB</unientity></character>
-<character hex="E3 75" dec="227 117"><isoentity>ucirc</isoentity><desc>latin small letter u with circumflex</desc><unientity>00FB</unientity></character>
-<character hex="EE 55" dec="238 085"><isoentity>Udblac</isoentity><desc>latin capital letter u with double acute</desc><unientity>0170</unientity></character>
-<character hex="EE 75" dec="238 117"><isoentity>udblac</isoentity><desc>latin small letter u with double acute</desc><unientity>0171</unientity></character>
-<character hex="F3 75" dec="243 117"><isoentity>udbldb</isoentity><desc>latin small letter u with double dot below</desc><unientity>1E73</unientity></character>
-<character hex="F3 55" dec="243 084"><isoentity>Udlbdb</isoentity><desc>latin capital letter u with double dot below</desc><unientity>1E72</unientity></character>
-<character hex="F2 55" dec="242 085"><isoentity>Udotb</isoentity><desc>latin capital letter u with dot below</desc><unientity>1EE4</unientity></character>
-<character hex="F2 75" dec="242 117"><isoentity>udotb</isoentity><desc>latin small letter u with dot below</desc><unientity>1EE5</unientity></character>
-<character hex="E1 55" dec="225 085"><isoentity>Ugrave</isoentity><desc>latin capital letter u with grave</desc><unientity>00D9</unientity></character>
-<character hex="E1 75" dec="225 117"><isoentity>ugrave</isoentity><desc>latin small letter u with grave</desc><unientity>00F9</unientity></character>
-<character hex="E0 55" dec="224 085"><isoentity>uhooka</isoentity><desc>latin capital letter u with hook above</desc><unientity>1EE6</unientity></character>
-<character hex="E0 75" dec="224 117"><isoentity>uhooka</isoentity><desc>latin small letter u with hook above</desc><unientity>1EE7</unientity></character>
-<character hex="E2 BD" dec="226 189"><isoentity>uhornac</isoentity><desc>latin small letter u with horn and acute</desc><unientity>1EE9</unientity></character>
-<character hex="F2 AD" dec="242 173"><isoentity>Uhorndb</isoentity><desc>latin capital letter u with horn and dot below</desc><unientity>1EF0</unientity></character>
-<character hex="F2 BD" dec="242 189"><isoentity>uhorndb</isoentity><desc>latin small letter u with horn and dot below</desc><unientity>1EF1</unientity></character>
-<character hex="E1 AD" dec="225 173"><isoentity>Uhorngr</isoentity><desc>latin capital letter u with horn and grave</desc><unientity>1EEA</unientity></character>
-<character hex="E1 BD" dec="225 189"><isoentity>uhorngr</isoentity><desc>latin small letter u with horn and grave</desc><unientity>1EEB</unientity></character>
-<character hex="E0 AD" dec="224 173"><isoentity>Uhornha</isoentity><desc>latin capital letter u with horn and hook above</desc><unientity>1EEC</unientity></character>
-<character hex="E0 BD" dec="224 189"><isoentity>uhornha</isoentity><desc>latin small letter u with horn and hook above</desc><unientity>1EED</unientity></character>
-<character hex="E4 AD" dec="228 173"><isoentity>Uhornti</isoentity><desc>latin capital letter u with horn and tilde</desc><unientity>1EEE</unientity></character>
-<character hex="E4 BD" dec="228 189"><isoentity>uhornti</isoentity><desc>latin small letter u with horn and tilde</desc><unientity>1EEF</unientity></character>
-<character hex="AD" dec="173"><isoentity>Uhorn</isoentity><desc>latin capital letter u with horn</desc><unientity>01AF</unientity></character>
-<character hex="BD" dec="189"><isoentity>uhorn</isoentity><desc>latin small letter u with horn</desc><unientity>01B0</unientity></character>
-<character hex="E8 E5 55" dec="232 229 085"><isoentity>Umacrum</isoentity><desc>latin capital letter u with macron and diaeresis</desc><unientity>1E7A</unientity></character>
-<character hex="E8 E5 75" dec="232 229 117"><isoentity>umacrum</isoentity><desc>latin small letter u with macron and diaeresis</desc><unientity>1E7B</unientity></character>
-<character hex="E5 55" dec="229 085"><isoentity>Umacr</isoentity><desc>latin capital letter u with macron</desc><unientity>016A</unientity></character>
-<character hex="E5 75" dec="229 117"><isoentity>umacr</isoentity><desc>latin small letter u with macron</desc><unientity>016B</unientity></character>
-<character hex="E8" dec="232"><isoentity>uml</isoentity><desc>combining diaeresis</desc><unientity>0308</unientity></character>
-<character hex="F6" dec="246"><isoentity>under</isoentity><desc>combining low line</desc><unientity>0332</unientity></character>
-<character hex="F1 55" dec="241 085"><isoentity>Uogon</isoentity><desc>latin capital letter u with ogon</desc><unientity>0172</unientity></character>
-<character hex="F1 75" dec="241 117"><isoentity>uogon</isoentity><desc>latin small letter u with ogon</desc><unientity>0173</unientity></character>
-<character hex="EA 55" dec="234 085"><isoentity>Uring</isoentity><desc>latin capital letter u with ring</desc><unientity>016E</unientity></character>
-<character hex="EA 75" dec="234 117"><isoentity>uring</isoentity><desc>latin small letter u with ring</desc><unientity>016F</unientity></character>
-<character hex="E2 E4 55" dec="226 228 085"><isoentity>utildeac</isoentity><desc>latin capital letter u with tilde and acute</desc><unientity>1E78</unientity></character>
-<character hex="E2 E4 75" dec="226 228 117"><isoentity>utildeac</isoentity><desc>latin small letter u with tilde and acute</desc><unientity>1E79</unientity></character>
-<character hex="E4 55" dec="228 085"><isoentity>Utilde</isoentity><desc>latin capital letter u with tilde</desc><unientity>0168</unientity></character>
-<character hex="E4 75" dec="228 117"><isoentity>utilde</isoentity><desc>latin small letter u with tilde</desc><unientity>0169</unientity></character>
-<character hex="E2 E8 55" dec="226 232 085"><isoentity>Uumlac</isoentity><desc>latin capital letter u with diaeresis and acute</desc><unientity>01D7</unientity></character>
-<character hex="E2 E8 75" dec="226 232 117"><isoentity>uumlac</isoentity><desc>latin small letter u with diaeresis and acute</desc><unientity>01D8</unientity></character>
-<character hex="E9 E8 55" dec="233 232 085"><isoentity>Uumlca</isoentity><desc>latin capital letter u with diaeresis and caron</desc><unientity>01D9</unientity></character>
-<character hex="E9 E8 75" dec="233 232 117"><isoentity>uumlca</isoentity><desc>latin small letter u with diaresis and caron</desc><unientity>01DA</unientity></character>
-<character hex="E1 E8 55" dec="225 230 085"><isoentity>Uumlgr</isoentity><desc>latin capital letter u with diaeresis and grave</desc><unientity>01DB</unientity></character>
-<character hex="E1 E8 75" dec="225 230 117"><isoentity>uumlgr</isoentity><desc>latin small letter u with diaeresis and grave</desc><unientity>01DC</unientity></character>
-<character hex="E5 E8 55" dec="229 232 085"><isoentity>Uumlma</isoentity><desc>latin capital letter u with diaeresis and macron</desc><unientity>01D5</unientity></character>
-<character hex="E5 E8 75" dec="229 232 117"><isoentity>uumlma</isoentity><desc>latin small letter u with diaeresis and macron</desc><unientity>01D6</unientity></character>
-<character hex="E8 55" dec="232 085"><isoentity>Uuml</isoentity><desc>latin capital letter u with umlaut</desc><unientity>00DC</unientity></character>
-<character hex="E8 75" dec="232 117"><isoentity>uuml</isoentity><desc>latin small letter u with umlaut</desc><unientity>00FC</unientity></character>
-<character hex="F2 56" dec="242 086"><isoentity>Vdotb</isoentity><desc>latin capital letter v with dot below</desc><unientity>1E7E</unientity></character>
-<character hex="F2 76" dec="242 118"><isoentity>vdotb</isoentity><desc>latin small letter v with dot below</desc><unientity>1E7F</unientity></character>
-<character hex="E4 56" dec="228 086"><isoentity>Vtilde</isoentity><desc>latin capital letter v with tilde</desc><unientity>1E7C</unientity></character>
-<character hex="E4 76" dec="228 118"><isoentity>vtilde</isoentity><desc>latin small letter v with tilde</desc><unientity>1E7D</unientity></character>
-<character hex="E2 57" dec="226 087"><isoentity>Wacute</isoentity><desc>latin capital letter w with acute</desc><unientity>1E82</unientity></character>
-<character hex="E2 77" dec="226 119"><isoentity>wacute</isoentity><desc>latin small letter w with acute</desc><unientity>1E83</unientity></character>
-<character hex="E3 57" dec="227 087"><isoentity>Wcirc</isoentity><desc>latin capital letter w with circumflex</desc><unientity>0174</unientity></character>
-<character hex="E3 77" dec="227 119"><isoentity>wcirc</isoentity><desc>latin small letter w with circumflex</desc><unientity>0175</unientity></character>
-<character hex="F2 57" dec="242 087"><isoentity>wdotb</isoentity><desc>latin capital letter w with dot below</desc><unientity>1E88</unientity></character>
-<character hex="F2 77" dec="242 119"><isoentity>wdotb</isoentity><desc>latin small letter w with dot below</desc><unientity>1E89</unientity></character>
-<character hex="E7 57" dec="231 087"><isoentity>Wdot</isoentity><desc>latin capital letter w with dot above</desc><unientity>1E86</unientity></character>
-<character hex="E7 77" dec="231 119"><isoentity>wdot</isoentity><desc>latin small letter w with dot above</desc><unientity>1E87</unientity></character>
-<character hex="E1 57" dec="225 087"><isoentity>Wgrave</isoentity><desc>latin capital letter w with grave</desc><unientity>1E80</unientity></character>
-<character hex="E1 77" dec="225 119"><isoentity>wgrave</isoentity><desc>latin small letter w with grave</desc><unientity>1E81</unientity></character>
-<character hex="EA 77" dec="234 119"><isoentity>wring</isoentity><desc>latin small letter w with ring</desc><unientity>1E98</unientity></character>
-<character hex="E8 57" dec="232 087"><isoentity>Wuml</isoentity><desc>latin capital letter w with diaeresis</desc><unientity>1E84</unientity></character>
-<character hex="E8 77" dec="232 119"><isoentity>wuml</isoentity><desc>latin small letter w with diaeresis</desc><unientity>1E85</unientity></character>
-<character hex="E7 58" dec="231 088"><isoentity>Xdot</isoentity><desc>latin capital letter x with dot</desc><unientity>1E8A</unientity></character>
-<character hex="E7 78" dec="231 120"><isoentity>xdot</isoentity><desc>latin small letter x with dot</desc><unientity>1E8B</unientity></character>
-<character hex="E8 58" dec="232 088"><isoentity>Xuml</isoentity><desc>latin capital letter x with diaeresis</desc><unientity>1E8C</unientity></character>
-<character hex="E8 78" dec="232 120"><isoentity>xuml</isoentity><desc>latin small letter x with diaeresis</desc><unientity>1E8D</unientity></character>
-<character hex="E2 59" dec="226 089"><isoentity>Yacute</isoentity><desc>latin capital letter y with acute</desc><unientity>00DD</unientity></character>
-<character hex="E2 79" dec="226 121"><isoentity>yacute</isoentity><desc>latin small letter y with acute</desc><unientity>00FD</unientity></character>
-<character hex="E3 59" dec="227 089"><isoentity>Ycirc</isoentity><desc>latin capital letter y with circumflex</desc><unientity>0176</unientity></character>
-<character hex="E3 79" dec="227 121"><isoentity>ycirc</isoentity><desc>latin small letter y with circumflex</desc><unientity>0177</unientity></character>
-<character hex="F2 59" dec="242 089"><isoentity>Ydotb</isoentity><desc>latin capital letter y with dot below</desc><unientity>1EF4</unientity></character>
-<character hex="F2 79" dec="242 121"><isoentity>ydotb</isoentity><desc>latin small letter y with dot below</desc><unientity>1EF5</unientity></character>
-<character hex="E7 59" dec="231 089"><isoentity>Ydot</isoentity><desc>latin capital letter y with dot</desc><unientity>1E8E</unientity></character>
-<character hex="E7 79" dec="231 121"><isoentity>ydot</isoentity><desc>latin small letter y with dot</desc><unientity>1E8F</unientity></character>
-<character hex="E1 59" dec="225 089"><isoentity>Ygrave</isoentity><desc>latin capital letter y with grave</desc><unientity>1EF2</unientity></character>
-<character hex="E1 79" dec="225 121"><isoentity>ygrave</isoentity><desc>latin small letter y with grave</desc><unientity>1EF3</unientity></character>
-<character hex="E0 59" dec="224 089"><isoentity>Yhooka</isoentity><desc>latin capital letter y with hook above</desc><unientity>1EF6</unientity></character>
-<character hex="E0 79" dec="224 121"><isoentity>yhooka</isoentity><desc>latin small letter y with hook above</desc><unientity>1EF7</unientity></character>
-<character hex="E5 59" dec="229 089"><isoentity>Ymacr</isoentity><desc>latin capital letter y with macron</desc><unientity>0232</unientity></character>
-<character hex="E5 79" dec="229 121"><isoentity>ymacr</isoentity><desc>latin small letter y with macron</desc><unientity>0233</unientity></character>
-<character hex="EA 79" dec="234 121"><isoentity>yring</isoentity><desc>latin small letter y with ring</desc><unientity>1E99</unientity></character>
-<character hex="E4 59" dec="228 089"><isoentity>Ytilde</isoentity><desc>latin capital letter y with tilde</desc><unientity>1EF8</unientity></character>
-<character hex="E4 79" dec="228 121"><isoentity>ytilde</isoentity><desc>latin small letter y with tilde</desc><unientity>1EF9</unientity></character>
-<character hex="E8 59" dec="232 089"><isoentity>Yuml</isoentity><desc>latin capital letter y with umlaut</desc><unientity>0178</unientity></character>
-<character hex="E8 79" dec="232 121"><isoentity>yuml</isoentity><desc>latin small letter y with umlaut</desc><unientity>00FF</unientity></character>
-<character hex="E2 5A" dec="226 090"><isoentity>Zacute</isoentity><desc>latin capital letter z with acute</desc><unientity>0179</unientity></character>
-<character hex="E2 7A" dec="226 122"><isoentity>zacute</isoentity><desc>latin small letter z with acute</desc><unientity>017A</unientity></character>
-<character hex="E9 5A" dec="233 090"><isoentity>Zcaron</isoentity><desc>latin capital letter z with caron</desc><unientity>017D</unientity></character>
-<character hex="E9 7A" dec="233 122"><isoentity>zcaron</isoentity><desc>latin small letter z with caron</desc><unientity>017E</unientity></character>
-<character hex="E3 5A" dec="227 090"><isoentity>Zcirc</isoentity><desc>latin capital letter z with circumflex</desc><unientity>1E90</unientity></character>
-<character hex="E3 7A" dec="227 122"><isoentity>zcirc</isoentity><desc>latin small letter z with circumflex</desc><unientity>1E91</unientity></character>
-<character hex="F2 5A" dec="242 090"><isoentity>Zdotb</isoentity><desc>latin capital letter z with dot below</desc><unientity>1E92</unientity></character>
-<character hex="F2 7A" dec="242 122"><isoentity>zdotb</isoentity><desc>latin small letter z with dot below</desc><unientity>1E93</unientity></character>
-<character hex="E7 5A" dec="231 090"><isoentity>Zdot</isoentity><desc>latin capital letter z with dot above</desc><unientity>017B</unientity></character>
-<character hex="E7 7A" dec="231 122"><isoentity>zdot</isoentity><desc>latin small letter z with dot above</desc><unientity>017C</unientity></character>
-<character hex="F6 5A" dec="246 090"><isoentity>Zlowline</isoentity><desc>latin capital letter z with low line</desc><unientity>1E94</unientity></character>
-<character hex="F6 7A" dec="246 122"><isoentity>zlowline</isoentity><desc>latin small letter z with low line</desc><unientity>1E95</unientity></character>
-  </entitymap>
diff --git a/util/charconv.tcl b/util/charconv.tcl
deleted file mode 100755 (executable)
index e57ac3c..0000000
+++ /dev/null
@@ -1,275 +0,0 @@
-#!/bin/sh
-# the next line restats using tclsh \
-exec tclsh "$0" "$@"
-#
-# $Id: charconv.tcl,v 1.3 2003-06-02 22:17:20 adam Exp $
-
-proc usage {} {
-    puts {charconv.tcl: [-p prefix] [-s split] [-o ofile] file ... }
-    exit 1
-}
-
-proc ins_trie {from to} {
-    global trie
-    if {![info exists trie(no)]} {
-        set trie(no) 1
-        set trie(size) 0
-    }
-    incr trie(size)
-    ins_trie_r [split $from] $to 0
-}
-
-proc split_trie {this} {
-    global trie
-    set trie($this,type) d
-    foreach e $trie($this,content) {
-        set from [lindex $e 0]
-        set to [lindex $e 1]
-        
-        set ch [lindex $from 0]
-        set rest [lrange $from 1 end]
-        
-        if {[llength $rest]} {
-            if {![info exist trie($this,ptr,$ch)]} {
-                set trie($this,ptr,$ch) $trie(no)
-                incr trie(no)
-            }
-            ins_trie_r $rest $to $trie($this,ptr,$ch)
-        } else {
-            set trie($this,to,$ch) $to
-        }
-    }
-    set trie($this,content) missing
-}
-
-proc ins_trie_r {from to this} {
-    global trie
-
-    if {![info exist trie($this,type)]} {
-        set trie($this,type) f
-    }
-    if {$trie($this,type) == "f"} {
-        lappend trie($this,content) [list $from $to]
-        
-        # split ?
-        if {[llength $trie($this,content)] > $trie(split)} {
-            split_trie $this
-            return [ins_trie_r $from $to $this]
-        }
-    } else {
-        set ch [lindex $from 0]
-        set rest [lrange $from 1 end]
-
-        if {[llength $rest]} {
-            if {![info exist trie($this,ptr,$ch)]} {
-                set trie($this,ptr,$ch) $trie(no)
-                incr trie(no)
-            }
-            ins_trie_r $rest $to $trie($this,ptr,$ch)
-        } else {
-            set trie($this,to,$ch) $to
-        }
-    }
-}
-
-proc dump_trie {ofile} {
-    global trie
-
-    set f [open $ofile w]
-
-    puts $f "/* TRIE: size $trie(size) */"
-    puts $f "\#include <string.h>"
-    puts $f {
-        struct yaz_iconv_trie_flat {
-            char *from;
-            int to;
-        };
-        struct yaz_iconv_trie_dir {
-            struct yaz_iconv_trie *ptr;
-            int to;
-        };
-        
-        struct yaz_iconv_trie {
-            struct yaz_iconv_trie_flat *flat;
-            struct yaz_iconv_trie_dir *dir;
-        };
-    }
-
-    set this $trie(no)
-    while { [incr this -1] >= 0 } {
-        puts $f "/* PAGE $this */"
-        if {$trie($this,type) == "f"} {
-            puts $f "struct yaz_iconv_trie_flat $trie(prefix)page${this}_flat\[\] = \{"
-            foreach m $trie($this,content) {
-                puts -nonewline $f "  \{\""
-                foreach d [lindex $m 0] {
-                    puts -nonewline $f "\\x$d"
-                }
-                puts -nonewline $f "\", 0x[lindex $m 1]"
-                puts $f "\},"
-            }
-            puts $f "  \{0, 0\}"
-            puts $f "\};"
-            puts $f "struct yaz_iconv_trie $trie(prefix)page${this} = \{"
-            puts $f "  $trie(prefix)page${this}_flat, 0"
-            puts $f "\};"
-        } else {
-            puts $f "struct yaz_iconv_trie_dir $trie(prefix)page${this}_dir\[256\] = \{"
-            for {set i 0} {$i < 256} {incr i} {
-                puts -nonewline $f "  \{"
-                set ch [format %02X $i]
-                set null 1
-                if {[info exist trie($this,ptr,$ch)]} {
-                    puts -nonewline $f "&$trie(prefix)page$trie($this,ptr,$ch), "
-                    set null 0
-                } else {
-                    puts -nonewline $f "0, "
-                }
-                if {[info exist trie($this,to,$ch)]} {
-                    puts -nonewline $f "0x$trie($this,to,$ch)\}"
-                    set null 0
-                } else {
-                    puts -nonewline $f "0\}"
-                }
-                if {!$null} {
-                    puts -nonewline $f " /* $ch */"
-                }
-                if {$i < 255} {
-                    puts $f ","
-                } else {
-                    puts $f ""
-                }
-            }
-            puts $f "\};"
-            puts $f "struct yaz_iconv_trie $trie(prefix)page${this} = \{"
-            puts $f "  0, $trie(prefix)page${this}_dir"
-            puts $f "\};"
-        }
-    }
-    puts $f {
-        static unsigned long lookup(struct yaz_iconv_trie *t, unsigned char *inp,
-                                    size_t inbytesleft, size_t *no_read)
-        {
-            if (!t || inbytesleft < 1)
-            return 0;
-            if (t->dir)
-            {
-                size_t ch = inp[0] & 0xff;
-                unsigned long code =
-                lookup(t->dir[ch].ptr, inp+1, inbytesleft-1, no_read);
-                if (code)
-                {
-                    (*no_read)++;
-                    return code;
-                }
-                if (t->dir[ch].to)
-                {
-                    code = t->dir[ch].to;
-                    *no_read = 1;
-                    return code;
-                }
-            }
-            else
-            {
-                struct yaz_iconv_trie_flat *flat = t->flat;
-                while (flat->from)
-                {
-                    size_t len = strlen(flat->from);
-                    if (len <= inbytesleft)
-                    {
-                        if (memcmp(flat->from, inp, len) == 0)
-                        {
-                            *no_read = len;
-                            return flat->to;
-                        }
-                    }
-                    flat++;
-                }
-            }
-            return 0;
-        }
-        
-    }
-    puts $f "unsigned long yaz_$trie(prefix)_conv
-            (unsigned char *inp, size_t inbytesleft, size_t *no_read)
-        {
-            unsigned long code;
-            
-            code = lookup(&$trie(prefix)page0, inp, inbytesleft, no_read);
-            if (!code)
-            {
-                *no_read = 1;
-                code = *inp;
-            }
-            return code;
-        }
-    "
-    close $f
-}
-
-proc readfile {fname} {
-    set lineno 0
-    set f [open $fname r]
-    while {1} {
-        incr lineno
-        set cnt [gets $f line]
-        if {$cnt < 0} {
-            break
-        }
-        set hex {}
-        set uni {}
-        regexp {<character hex="([^\"]*)".*<unientity>([0-9A-Z]*)</unientity>} $line s hex uni
-        # puts "$lineno hex=$hex uni=$uni $line"
-        if {[string length $uni]} {
-            ins_trie $hex $uni
-        }
-    }
-    close $f
-}
-
-set verbose 0
-set ifile {}
-set ofile out.c
-set trie(split) 40
-set trie(prefix) {}
-# Parse command line
-set l [llength $argv]
-set i 0
-while {$i < $l} {
-    set arg [lindex $argv $i]
-    switch -glob -- $arg {
-        -v {
-            incr verbose
-        }
-        -s {
-            if {[string length $arg]} {
-                set arg [lindex $argv [incr i]]
-            }
-            set trie(split) $arg
-        }
-        -p {
-            if {[string length $arg]} {
-                set arg [lindex $argv [incr i]]
-            }
-            set trie(prefix) $arg
-        }
-       -o {
-            if {[string length $arg]} {
-                set arg [lindex $argv [incr i]]
-            }
-            set ofile $arg
-       }       
-        default {
-           lappend ifiles $arg
-        }
-    }
-    incr i
-}
-if {![info exists ifiles]} {
-    puts "charconv.tcl: missing input file(s)"
-    usage
-}
-foreach ifile $ifiles {
-    readfile $ifile
-}
-dump_trie $ofile
diff --git a/util/charconv_cjk.xml b/util/charconv_cjk.xml
deleted file mode 100644 (file)
index 494e523..0000000
+++ /dev/null
@@ -1,15730 +0,0 @@
-<entitymap>
-<character hex="21 23 20"><unientity>3000</unientity><desc>CJK space in some implementations</desc></character>
-<character hex="21 23 21"><unientity>3000</unientity><desc>CJK space per ANSI Z39.64</desc></character>
-<character hex="21 23 28"><unientity>FF08</unientity><desc>Ideographic left parenthesis</desc></character>
-<character hex="21 23 29"><unientity>FF09</unientity><desc>Ideographic right parenthesis</desc></character>
-<character hex="21 23 2D"><unientity>FF0D</unientity><desc>Ideographic hyphen minus</desc></character>
-<character hex="21 2A 21"><unientity>E8D0</unientity><desc>EACC component character</desc></character>
-<character hex="21 2A 22"><unientity>E8D1</unientity><desc>EACC component character</desc></character>
-<character hex="21 2A 23"><unientity>E8D2</unientity><desc>EACC component character</desc></character>
-<character hex="21 2A 24"><unientity>E8D3</unientity><desc>EACC component character</desc></character>
-<character hex="21 2A 25"><unientity>E8D4</unientity><desc>EACC component character</desc></character>
-<character hex="21 2A 26"><unientity>E8D5</unientity><desc>EACC component character</desc></character>
-<character hex="21 2A 28"><unientity>E8D6</unientity><desc>EACC component character</desc></character>
-<character hex="21 2A 29"><unientity>E8D7</unientity><desc>EACC component character</desc></character>
-<character hex="21 2A 2A"><unientity>E8D8</unientity><desc>EACC component character</desc></character>
-<character hex="21 2A 2B"><unientity>E8D9</unientity><desc>EACC component character</desc></character>
-<character hex="21 2A 2C"><unientity>E8DA</unientity><desc>EACC component character</desc></character>
-<character hex="21 2A 2D"><unientity>E8DB</unientity><desc>EACC component character</desc></character>
-<character hex="21 2A 2E"><unientity>E8DC</unientity><desc>EACC component character</desc></character>
-<character hex="21 2A 2F"><unientity>E8DD</unientity><desc>EACC component character</desc></character>
-<character hex="21 2A 30"><unientity>E8DE</unientity><desc>EACC component character</desc></character>
-<character hex="21 2A 32"><unientity>E8DF</unientity><desc>EACC component character</desc></character>
-<character hex="21 2A 33"><unientity>E8E0</unientity><desc>EACC component character</desc></character>
-<character hex="21 2A 34"><unientity>E8E1</unientity><desc>EACC component character</desc></character>
-<character hex="21 2A 35"><unientity>E8E2</unientity><desc>EACC component character</desc></character>
-<character hex="21 2A 36"><unientity>E8E3</unientity><desc>EACC component character</desc></character>
-<character hex="21 2A 37"><unientity>E8E4</unientity><desc>EACC component character</desc></character>
-<character hex="21 2A 38"><unientity>E8E5</unientity><desc>EACC component character</desc></character>
-<character hex="21 2A 39"><unientity>E8E6</unientity><desc>EACC component character</desc></character>
-<character hex="21 2A 3A"><unientity>E8E7</unientity><desc>EACC component character</desc></character>
-<character hex="21 2A 3B"><unientity>E8E8</unientity><desc>EACC component character</desc></character>
-<character hex="21 2A 3C"><unientity>E8E9</unientity><desc>EACC component character</desc></character>
-<character hex="21 2A 3D"><unientity>E8EA</unientity><desc>EACC component character</desc></character>
-<character hex="21 2A 3E"><unientity>E8EB</unientity><desc>EACC component character</desc></character>
-<character hex="21 2A 3F"><unientity>E8EC</unientity><desc>EACC component character</desc></character>
-<character hex="21 2A 40"><unientity>E8ED</unientity><desc>EACC component character</desc></character>
-<character hex="21 2A 41"><unientity>E8EE</unientity><desc>EACC component character</desc></character>
-<character hex="21 2A 42"><unientity>E8EF</unientity><desc>EACC component character</desc></character>
-<character hex="21 2A 43"><unientity>E8F0</unientity><desc>EACC component character</desc></character>
-<character hex="21 2A 44"><unientity>E8F1</unientity><desc>EACC component character</desc></character>
-<character hex="21 2A 45"><unientity>E8F2</unientity><desc>EACC component character</desc></character>
-<character hex="21 2A 46"><unientity>3013</unientity><desc>Ideographic geta symbol</desc></character>
-<character hex="21 2B 25"><unientity>300C</unientity><desc>Ideographic left corner bracket</desc></character>
-<character hex="21 2B 26"><unientity>300D</unientity><desc>Ideographic right corner bracket</desc></character>
-<character hex="21 2B 31"><unientity>FF3B</unientity><desc>Ideographic left square bracket</desc></character>
-<character hex="21 2B 32"><unientity>FF3D</unientity><desc>Ideographic right square bracket</desc></character>
-<character hex="21 2B 33"><unientity>3002</unientity><desc>Ideographic full stop</desc></character>
-<character hex="21 2B 34"><unientity>FF0E</unientity><desc>Ideographic variant full stop</desc></character>
-<character hex="21 2B 35"><unientity>3001</unientity><desc>Ideographic comma</desc></character>
-<character hex="21 2B 38"><unientity>FF0C</unientity><desc>Ideographic variant comma</desc></character>
-<character hex="21 2B 39"><unientity>FF1B</unientity><desc>Ideographic semicolon</desc></character>
-<character hex="21 2B 3A"><unientity>FF1A</unientity><desc>Ideographic colon</desc></character>
-<character hex="21 2B 3B"><unientity>FF1F</unientity><desc>Ideographic question mark</desc></character>
-<character hex="21 2B 3D"><unientity>FF01</unientity><desc>Ideographic exclamation point</desc></character>
-<character hex="21 2B 59"><unientity>FF0F</unientity><desc>Ideographic solidus</desc></character>
-<character hex="21 2F 30"><unientity>3007</unientity><desc>Ideographic number zero</desc></character>
-<character hex="21 30 21"><unientity>4E00</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 30 22"><unientity>4E01</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 30 23"><unientity>4E03</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 30 24"><unientity>4E09</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 30 25"><unientity>4E0B</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 30 26"><unientity>4E0A</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 30 27"><unientity>4E08</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 30 29"><unientity>4E10</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 30 2A"><unientity>4E0D</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 30 2B"><unientity>4E14</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 30 2C"><unientity>4E19</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 30 2D"><unientity>4E16</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 30 2E"><unientity>4E15</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 30 2F"><unientity>4E18</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 30 30"><unientity>4E22</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 30 31"><unientity>4E1E</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 30 32"><unientity>4E26</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 30 34"><unientity>4E2D</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 30 35"><unientity>4E32</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 30 36"><unientity>51E1</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 30 37"><unientity>4E38</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 30 38"><unientity>4E39</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 30 39"><unientity>4E3B</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 30 3A"><unientity>4E43</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 30 3B"><unientity>4E45</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 30 3D"><unientity>4E4B</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 30 3E"><unientity>5C39</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 30 3F"><unientity>4E4F</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 30 40"><unientity>4E4E</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 30 41"><unientity>4E4D</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 30 42"><unientity>4E52</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 30 43"><unientity>4E53</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 30 44"><unientity>4E56</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 30 45"><unientity>4E58</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 30 46"><unientity>4E59</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 30 47"><unientity>4E5D</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 30 48"><unientity>4E5F</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 30 49"><unientity>4E5E</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 30 4B"><unientity>4E73</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 30 4C"><unientity>4E7E</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 30 4D"><unientity>4E82</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 30 50"><unientity>4E8B</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 30 51"><unientity>4E8C</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 30 52"><unientity>4E8E</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 30 53"><unientity>4E95</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 30 54"><unientity>4E94</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 30 55"><unientity>4E92</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 30 57"><unientity>E930</unientity><unientityalt>4E99</unientityalt><desc>Variant of 4B3057 which maps to 4E99</desc></character>
-<character hex="21 30 58"><unientity>4E9E</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 30 59"><unientity>4E9B</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 30 5A"><unientity>4E9F</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 30 5B"><unientity>4EA1</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 30 5C"><unientity>4EA6</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 30 5D"><unientity>4EA5</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 30 5E"><unientity>4EA4</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 30 5F"><unientity>4EA8</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 30 60"><unientity>4EAB</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 30 61"><unientity>4EAC</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 30 62"><unientity>4EAD</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 30 63"><unientity>4EAE</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 30 64"><unientity>4EBA</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 30 65"><unientity>4ECA</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 30 66"><unientity>4EC1</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 30 68"><unientity>4EC3</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 30 69"><unientity>4EC4</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 30 6B"><unientity>4ECD</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 30 6C"><unientity>4EC7</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 30 6D"><unientity>4ECB</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 30 6E"><unientity>4EE4</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 30 6F"><unientity>4ED8</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 30 70"><unientity>4ED5</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 30 71"><unientity>4ED6</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 30 72"><unientity>4EDE</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 30 73"><unientity>4EE3</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 30 74"><unientity>4ED4</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 30 75"><unientity>4ED7</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 30 76"><unientity>4ED9</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 30 77"><unientity>4EE5</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 30 78"><unientity>4EFF</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 30 79"><unientity>4F09</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 30 7C"><unientity>4EFB</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 30 7D"><unientity>4F0A</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 30 7E"><unientity>4F15</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 31 21"><unientity>4F11</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 31 22"><unientity>4F10</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 31 23"><unientity>4F0F</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 31 24"><unientity>4EF2</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 31 25"><unientity>4F01</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 31 26"><unientity>4EF3</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 31 27"><unientity>4EF6</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 31 28"><unientity>4EF0</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 31 2A"><unientity>4F4F</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 31 2B"><unientity>4F4D</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 31 2C"><unientity>4F34</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 31 2D"><unientity>4F47</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 31 2E"><unientity>4F57</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 31 2F"><unientity>4F3A</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 31 30"><unientity>4F5E</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 31 32"><unientity>4F5B</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 31 33"><unientity>4F55</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 31 34"><unientity>4F30</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 31 35"><unientity>4F50</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 31 36"><unientity>4F51</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 31 37"><unientity>4F3D</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 31 38"><unientity>4F48</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 31 39"><unientity>4F46</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 31 3A"><unientity>4F38</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 31 3B"><unientity>4F43</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 31 3C"><unientity>4F54</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 31 3D"><unientity>4F3C</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 31 3E"><unientity>4F63</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 31 3F"><unientity>4F5C</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 31 40"><unientity>4F60</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 31 41"><unientity>4F2F</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 31 42"><unientity>4F4E</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 31 43"><unientity>4F5D</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 31 44"><unientity>4F36</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 31 45"><unientity>4F9D</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 31 46"><unientity>4F6F</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 31 47"><unientity>4F75</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 31 48"><unientity>4F8D</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 31 49"><unientity>4F73</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 31 4A"><unientity>4F7F</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 31 4B"><unientity>4F9B</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 31 4C"><unientity>4F86</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 31 4D"><unientity>4F6C</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 31 4E"><unientity>4F8B</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 31 4F"><unientity>4F96</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 31 51"><unientity>4F83</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 31 52"><unientity>4F7B</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 31 53"><unientity>4F88</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 31 54"><unientity>4F69</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 31 55"><unientity>4F8F</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 31 56"><unientity>4F7E</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 31 57"><unientity>4FE1</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 31 58"><unientity>4FD1</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 31 59"><unientity>4FB5</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 31 5A"><unientity>4FAF</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 31 5B"><unientity>4FBF</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 31 5C"><unientity>4FDE</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 31 5D"><unientity>4FE0</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 31 5E"><unientity>4FCF</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 31 5F"><unientity>4FB6</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 31 60"><unientity>4FDA</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 31 61"><unientity>4FDD</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 31 62"><unientity>4FC3</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 31 63"><unientity>4FD8</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 31 64"><unientity>4FDF</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 31 65"><unientity>4FCA</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 31 66"><unientity>4FAE</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 31 67"><unientity>4FD0</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 31 68"><unientity>4FC4</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 31 69"><unientity>4FC2</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 31 6A"><unientity>4FCE</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 31 6B"><unientity>4FD7</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 31 6C"><unientity>5009</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 31 6E"><unientity>500D</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 31 6F"><unientity>4FEF</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 31 70"><unientity>5026</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 31 71"><unientity>500C</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 31 72"><unientity>5025</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 31 73"><unientity>5011</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 31 74"><unientity>4FF8</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 31 75"><unientity>5028</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 31 76"><unientity>5014</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 31 77"><unientity>5016</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 31 78"><unientity>5029</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 31 79"><unientity>5006</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 31 7B"><unientity>5012</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 31 7C"><unientity>503C</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 31 7D"><unientity>501A</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 31 7E"><unientity>4FFA</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 32 21"><unientity>5018</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 32 22"><unientity>4FF1</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 32 23"><unientity>5021</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 32 24"><unientity>500B</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 32 25"><unientity>5019</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 32 26"><unientity>5000</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 32 27"><unientity>4FEE</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 32 28"><unientity>4FF3</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 32 29"><unientity>502D</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 32 2A"><unientity>5003</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 32 2B"><unientity>4FFE</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 32 2C"><unientity>502A</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 32 2D"><unientity>502B</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 32 2E"><unientity>505C</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 32 2F"><unientity>504F</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 32 30"><unientity>5065</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 32 31"><unientity>5047</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 32 32"><unientity>505A</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 32 33"><unientity>5049</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 32 34"><unientity>5043</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 32 35"><unientity>5074</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 32 36"><unientity>5076</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 32 37"><unientity>504E</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 32 38"><unientity>5075</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 32 39"><unientity>504C</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 32 3A"><unientity>5055</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 32 3B"><unientity>500F</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 32 3C"><unientity>5077</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 32 3D"><unientity>508D</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 32 3E"><unientity>50A2</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 32 3F"><unientity>5085</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 32 40"><unientity>5099</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 32 41"><unientity>5091</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 32 42"><unientity>5080</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 32 43"><unientity>5096</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 32 44"><unientity>5098</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 32 45"><unientity>50AD</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 32 46"><unientity>50B3</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 32 47"><unientity>50B5</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 32 48"><unientity>50B2</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 32 49"><unientity>50C5</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 32 4A"><unientity>50BE</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 32 4B"><unientity>50AC</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 32 4C"><unientity>50B7</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 32 4D"><unientity>50AF</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 32 4E"><unientity>50E7</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 32 4F"><unientity>50EE</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 32 50"><unientity>50F1</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 32 51"><unientity>50E5</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 32 52"><unientity>50D6</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 32 53"><unientity>50ED</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 32 54"><unientity>50DA</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 32 55"><unientity>50D5</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 32 56"><unientity>507D</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 32 57"><unientity>50CF</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 32 58"><unientity>50D1</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 32 59"><unientity>5100</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 32 5A"><unientity>5104</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 32 5B"><unientity>50FB</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 32 5C"><unientity>50F5</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 32 5D"><unientity>50F9</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 32 5E"><unientity>5102</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 32 5F"><unientity>510D</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 32 60"><unientity>5108</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 32 61"><unientity>5109</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 32 62"><unientity>5110</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 32 63"><unientity>5118</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 32 64"><unientity>5112</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 32 65"><unientity>5114</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 32 66"><unientity>512A</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 32 67"><unientity>511F</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 32 68"><unientity>5121</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 32 69"><unientity>5132</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 32 6A"><unientity>5137</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 32 6B"><unientity>513C</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 32 6C"><unientity>5140</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 32 6D"><unientity>5143</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 32 6E"><unientity>5141</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 32 6F"><unientity>5145</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 32 70"><unientity>5144</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 32 71"><unientity>5146</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 32 72"><unientity>5149</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 32 73"><unientity>5147</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 32 74"><unientity>5148</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 32 75"><unientity>514C</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 32 77"><unientity>514D</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 32 78"><unientity>5155</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 32 79"><unientity>5154</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 32 7A"><unientity>5152</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 32 7B"><unientity>5157</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 32 7C"><unientity>515C</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 32 7D"><unientity>5162</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 32 7E"><unientity>5165</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 33 21"><unientity>5167</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 33 22"><unientity>5168</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 33 23"><unientity>5169</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 33 24"><unientity>516B</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 33 25"><unientity>516D</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 33 26"><unientity>516E</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 33 27"><unientity>516C</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 33 28"><unientity>5171</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 33 29"><unientity>5175</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 33 2A"><unientity>5176</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 33 2B"><unientity>5177</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 33 2C"><unientity>5178</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 33 2D"><unientity>517C</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 33 2E"><unientity>5180</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 33 2F"><unientity>5189</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 33 30"><unientity>518C</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 33 31"><unientity>518D</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 33 32"><unientity>5192</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 33 33"><unientity>5191</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 33 34"><unientity>5195</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 33 35"><unientity>6700</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 33 36"><unientity>5197</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 33 37"><unientity>51A0</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 33 39"><unientity>51A5</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 33 3C"><unientity>51B0</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 33 3D"><unientity>51B6</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 33 3E"><unientity>51B7</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 33 40"><unientity>51CD</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 33 41"><unientity>51CC</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 33 44"><unientity>51DC</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 33 45"><unientity>51DD</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 33 47"><unientity>51F0</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 33 48"><unientity>51F1</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 33 49"><unientity>51F3</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 33 4B"><unientity>51FA</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 33 4C"><unientity>51F9</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 33 4D"><unientity>51F8</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 33 4E"><unientity>51FD</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 33 4F"><unientity>5200</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 33 50"><unientity>5201</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 33 51"><unientity>5203</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 33 52"><unientity>5207</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 33 53"><unientity>5206</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 33 54"><unientity>5208</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 33 55"><unientity>520A</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 33 56"><unientity>5211</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 33 57"><unientity>5217</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 33 59"><unientity>520E</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 33 5A"><unientity>5224</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 33 5B"><unientity>5225</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 33 5C"><unientity>5220</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 33 5D"><unientity>5228</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 33 5E"><unientity>5229</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 33 5F"><unientity>5238</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 33 60"><unientity>523B</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 33 61"><unientity>5237</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 33 62"><unientity>5230</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 33 63"><unientity>523A</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 33 66"><unientity>5241</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 33 67"><unientity>5239</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 33 68"><unientity>5243</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 33 69"><unientity>524D</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 33 6A"><unientity>524C</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 33 6B"><unientity>524B</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 33 6C"><unientity>524A</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 33 6D"><unientity>5247</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 33 6E"><unientity>525C</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 33 6F"><unientity>5256</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 33 70"><unientity>525B</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 33 71"><unientity>5254</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 33 72"><unientity>525D</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 33 73"><unientity>526A</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 33 74"><unientity>526F</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 33 75"><unientity>5272</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 33 76"><unientity>5274</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 33 77"><unientity>5269</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 33 78"><unientity>5275</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 33 7A"><unientity>527D</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 33 7B"><unientity>527F</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 33 7C"><unientity>5283</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 33 7D"><unientity>5288</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 33 7E"><unientity>5287</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 34 21"><unientity>528D</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 34 22"><unientity>5289</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 34 23"><unientity>5291</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 34 24"><unientity>529B</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 34 25"><unientity>529F</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 34 26"><unientity>52A0</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 34 27"><unientity>52A3</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 34 28"><unientity>52AB</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 34 29"><unientity>52A9</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 34 2A"><unientity>52AC</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 34 2B"><unientity>52AA</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 34 2C"><unientity>52BE</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 34 2D"><unientity>52C7</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 34 2E"><unientity>52C3</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 34 2F"><unientity>52C1</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 34 30"><unientity>52C9</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 34 31"><unientity>52D8</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 34 32"><unientity>52D2</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 34 33"><unientity>52D9</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 34 34"><unientity>52D5</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 34 35"><unientity>52DE</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 34 36"><unientity>52DB</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 34 37"><unientity>52DD</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 34 38"><unientity>52E2</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 34 39"><unientity>52E4</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 34 3A"><unientity>52DF</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 34 3C"><unientity>52F5</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 34 3D"><unientity>52F8</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 34 3E"><unientity>52FB</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 34 40"><unientity>52FF</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 34 41"><unientity>5305</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 34 42"><unientity>5306</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 34 43"><unientity>5308</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 34 44"><unientity>530D</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 34 45"><unientity>5310</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 34 46"><unientity>530F</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 34 47"><unientity>5315</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 34 48"><unientity>5316</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 34 49"><unientity>5317</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 34 4A"><unientity>5319</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 34 4B"><unientity>53F5</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 34 4C"><unientity>531D</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 34 4D"><unientity>5321</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 34 4E"><unientity>5320</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 34 4F"><unientity>5323</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 34 50"><unientity>532A</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 34 51"><unientity>532F</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 34 52"><unientity>5331</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 34 53"><unientity>5339</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 34 54"><unientity>533E</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 34 55"><unientity>5340</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 34 56"><unientity>533F</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 34 57"><unientity>5341</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 34 58"><unientity>5343</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 34 59"><unientity>5345</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 34 5A"><unientity>5348</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 34 5B"><unientity>5347</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 34 5C"><unientity>534A</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 34 5D"><unientity>E931</unientity><unientityalt>5349</unientityalt><desc>Variant of 2D345D which maps to 5349</desc></character>
-<character hex="21 34 5F"><unientity>5352</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 34 60"><unientity>5354</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 34 61"><unientity>5353</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 34 62"><unientity>5351</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 34 63"><unientity>5357</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 34 64"><unientity>535A</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 34 66"><unientity>535E</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 34 67"><unientity>5361</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 34 69"><unientity>5366</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 34 6A"><unientity>536F</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 34 6B"><unientity>536E</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 34 6C"><unientity>5370</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 34 6D"><unientity>5371</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 34 6E"><unientity>537D</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 34 6F"><unientity>5375</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 34 71"><unientity>5378</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 34 73"><unientity>537B</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 34 74"><unientity>537F</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 34 75"><unientity>5384</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 34 76"><unientity>539A</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 34 77"><unientity>539D</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 34 78"><unientity>539F</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 34 79"><unientity>53A5</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 34 7A"><unientity>53AD</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 34 7B"><unientity>53B2</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 34 7C"><unientity>53BB</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 34 7D"><unientity>53C3</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 34 7E"><unientity>53C8</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 35 21"><unientity>53C9</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 35 22"><unientity>53CB</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 35 23"><unientity>53CA</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 35 24"><unientity>53CD</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 35 25"><unientity>53D6</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 35 26"><unientity>53D4</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 35 27"><unientity>53D7</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 35 28"><unientity>53DB</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 35 29"><unientity>53DF</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 35 2A"><unientity>66FC</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 35 2B"><unientity>53E2</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 35 2C"><unientity>53E3</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 35 2D"><unientity>53F8</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 35 2E"><unientity>53E4</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 35 2F"><unientity>53EE</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 35 30"><unientity>53EF</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 35 31"><unientity>53E9</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 35 32"><unientity>53F3</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 35 33"><unientity>53FC</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 35 34"><unientity>53E8</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 35 35"><unientity>53E6</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 35 36"><unientity>53EC</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 35 37"><unientity>53EB</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 35 38"><unientity>E900</unientity><desc>Duplicate simplified ideograph</desc></character>
-<character hex="21 35 39"><unientity>53E5</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 35 3A"><unientity>53F1</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 35 3B"><unientity>53ED</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 35 3C"><unientity>53EA</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 35 3D"><unientity>53F2</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 35 3F"><unientity>540B</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 35 40"><unientity>5409</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 35 41"><unientity>5410</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 35 42"><unientity>540F</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 35 43"><unientity>540C</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 35 44"><unientity>540A</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 35 45"><unientity>540D</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 35 46"><unientity>5404</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 35 47"><unientity>5403</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 35 48"><unientity>5412</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 35 4A"><unientity>E9E0</unientity><desc>East Asian ideograph not in Unicode</desc></character>
-<character hex="21 35 4D"><unientity>542D</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 35 4E"><unientity>541D</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 35 4F"><unientity>541E</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 35 50"><unientity>541B</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 35 51"><unientity>544E</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 35 52"><unientity>543E</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 35 53"><unientity>5427</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 35 54"><unientity>5440</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 35 55"><unientity>5431</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 35 56"><unientity>5446</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 35 57"><unientity>543C</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 35 58"><unientity>5443</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 35 59"><unientity>5426</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 35 5A"><unientity>5420</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 35 5B"><unientity>5436</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 35 5C"><unientity>5433</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 35 5D"><unientity>5435</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 35 5E"><unientity>542E</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 35 5F"><unientity>544A</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 35 60"><unientity>5448</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 35 61"><unientity>543B</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 35 62"><unientity>5438</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 35 63"><unientity>5439</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 35 64"><unientity>5442</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 35 65"><unientity>542B</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 35 66"><unientity>541F</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 35 67"><unientity>5429</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 35 68"><unientity>5473</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 35 69"><unientity>5462</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 35 6A"><unientity>5475</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 35 6B"><unientity>5495</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 35 6C"><unientity>5478</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 35 6D"><unientity>5496</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 35 6E"><unientity>5477</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 35 6F"><unientity>547B</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 35 71"><unientity>5492</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 35 72"><unientity>5484</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 35 73"><unientity>547C</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 35 74"><unientity>5468</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 35 75"><unientity>5486</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 35 76"><unientity>548B</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 35 77"><unientity>548C</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 35 78"><unientity>5490</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 35 79"><unientity>547D</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 35 7A"><unientity>5476</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 35 7B"><unientity>5471</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 35 7C"><unientity>549A</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 35 7D"><unientity>548E</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 35 7E"><unientity>54A9</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 36 21"><unientity>54AA</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 36 22"><unientity>54A8</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 36 23"><unientity>54AC</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 36 24"><unientity>54C0</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 36 25"><unientity>54B3</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 36 26"><unientity>54A6</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 36 27"><unientity>54AB</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 36 28"><unientity>54C7</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 36 29"><unientity>54C9</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 36 2A"><unientity>54C4</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 36 2B"><unientity>54C2</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 36 2D"><unientity>54C1</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 36 2F"><unientity>54CE</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 36 30"><unientity>54B1</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 36 31"><unientity>54BB</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 36 32"><unientity>54AF</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 36 33"><unientity>54C8</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 36 34"><unientity>5501</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 36 35"><unientity>54FC</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 36 36"><unientity>5510</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 36 37"><unientity>54EA</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 36 38"><unientity>5514</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 36 39"><unientity>54FA</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 36 3A"><unientity>54E5</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 36 3B"><unientity>54EE</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 36 3C"><unientity>54F2</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 36 3D"><unientity>54E8</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 36 3E"><unientity>54E1</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 36 3F"><unientity>54E9</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 36 40"><unientity>54ED</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 36 41"><unientity>5506</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 36 42"><unientity>5509</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 36 43"><unientity>54E6</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 36 44"><unientity>5556</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 36 45"><unientity>5533</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 36 46"><unientity>5546</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 36 48"><unientity>554F</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 36 49"><unientity>555E</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 36 4A"><unientity>5566</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 36 4B"><unientity>556A</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 36 4C"><unientity>554A</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 36 4D"><unientity>5544</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 36 4E"><unientity>555C</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 36 4F"><unientity>5531</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 36 50"><unientity>5543</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 36 51"><unientity>552C</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 36 52"><unientity>5561</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 36 53"><unientity>553E</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 36 54"><unientity>5563</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 36 55"><unientity>5555</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 36 56"><unientity>552F</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 36 57"><unientity>552E</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 36 58"><unientity>5564</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 36 59"><unientity>5538</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 36 5A"><unientity>55A7</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 36 5B"><unientity>5580</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 36 5C"><unientity>557B</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 36 5D"><unientity>557C</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 36 5E"><unientity>5527</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 36 5F"><unientity>5594</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 36 60"><unientity>5587</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 36 61"><unientity>559C</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 36 62"><unientity>558B</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 36 63"><unientity>55AA</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 36 64"><unientity>55B3</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 36 65"><unientity>558A</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 36 66"><unientity>5583</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 36 67"><unientity>55B1</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 36 68"><unientity>55AE</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 36 69"><unientity>5582</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 36 6A"><unientity>559F</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 36 6B"><unientity>559D</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 36 6C"><unientity>5598</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 36 6D"><unientity>559A</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 36 6E"><unientity>557E</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 36 6F"><unientity>55AC</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 36 70"><unientity>5589</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 36 71"><unientity>55B2</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 36 72"><unientity>55BB</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 36 73"><unientity>55E8</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 36 74"><unientity>55DF</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 36 75"><unientity>55D1</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 36 76"><unientity>55DC</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 36 77"><unientity>55E6</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 36 78"><unientity>55C7</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 36 79"><unientity>55D3</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 36 7A"><unientity>55CE</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 36 7B"><unientity>55E3</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 36 7C"><unientity>55EF</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 36 7D"><unientity>55E4</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 36 7E"><unientity>55C5</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 37 21"><unientity>55DA</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 37 22"><unientity>55C6</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 37 23"><unientity>55E1</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 37 24"><unientity>5600</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 37 25"><unientity>561B</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 37 26"><unientity>55FE</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 37 27"><unientity>5616</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 37 28"><unientity>55F7</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 37 29"><unientity>5608</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 37 2A"><unientity>561F</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 37 2B"><unientity>55FD</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 37 2C"><unientity>E932</unientity><unientityalt>5606</unientityalt><desc>Variant of 4B372C which maps to 5606</desc></character>
-<character hex="21 37 2D"><unientity>5609</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 37 2E"><unientity>5614</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 37 2F"><unientity>560E</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 37 30"><unientity>5617</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 37 31"><unientity>560D</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 37 32"><unientity>562E</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 37 33"><unientity>562F</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 37 34"><unientity>564E</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 37 35"><unientity>5636</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 37 36"><unientity>5632</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 37 37"><unientity>563B</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 37 38"><unientity>5639</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 37 39"><unientity>5657</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 37 3B"><unientity>5653</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 37 3C"><unientity>563F</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 37 3D"><unientity>5634</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 37 3E"><unientity>5637</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 37 3F"><unientity>5659</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 37 40"><unientity>5630</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 37 41"><unientity>566B</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 37 42"><unientity>5664</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 37 43"><unientity>5669</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 37 44"><unientity>5678</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 37 45"><unientity>5674</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 37 46"><unientity>5679</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 37 47"><unientity>5665</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 37 48"><unientity>566A</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 37 49"><unientity>5668</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 37 4A"><unientity>5671</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 37 4B"><unientity>566F</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 37 4C"><unientity>E933</unientity><unientityalt>5662</unientityalt><desc>Variant of 4B374C which maps to 5662</desc></character>
-<character hex="21 37 4D"><unientity>566C</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 37 4E"><unientity>5680</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 37 4F"><unientity>568E</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 37 50"><unientity>5685</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 37 51"><unientity>5687</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 37 52"><unientity>5690</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 37 53"><unientity>568F</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 37 54"><unientity>5695</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 37 55"><unientity>E934</unientity><unientityalt>56AE</unientityalt><desc>Variant of 453755 which maps to 56AE</desc></character>
-<character hex="21 37 56"><unientity>56A8</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 37 57"><unientity>56B0</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 37 58"><unientity>56A5</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 37 59"><unientity>56B7</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 37 5A"><unientity>56B4</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 37 5B"><unientity>56B6</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 37 5C"><unientity>56C0</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 37 5D"><unientity>56C1</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 37 5E"><unientity>56C2</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 37 5F"><unientity>56BC</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 37 60"><unientity>56CA</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 37 61"><unientity>56C9</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 37 62"><unientity>56C8</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 37 64"><unientity>56D1</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 37 65"><unientity>56DB</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 37 66"><unientity>56DA</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 37 67"><unientity>56E0</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 37 68"><unientity>56DE</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 37 69"><unientity>56E4</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 37 6B"><unientity>56F1</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 37 6C"><unientity>56FA</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 37 6D"><unientity>5703</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 37 6E"><unientity>5708</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 37 6F"><unientity>570B</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 37 70"><unientity>570D</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 37 71"><unientity>5712</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 37 72"><unientity>5713</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 37 73"><unientity>5718</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 37 74"><unientity>5716</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 37 75"><unientity>571F</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 37 77"><unientity>572D</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 37 78"><unientity>572F</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 37 79"><unientity>5730</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 37 7A"><unientity>5728</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 37 7B"><unientity>5733</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 37 7C"><unientity>5751</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 37 7D"><unientity>574A</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 38 21"><unientity>5740</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 38 22"><unientity>5747</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 38 23"><unientity>574D</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 38 24"><unientity>573E</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 38 25"><unientity>574E</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 38 27"><unientity>5783</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 38 28"><unientity>576A</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 38 29"><unientity>5769</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 38 2A"><unientity>5777</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 38 2B"><unientity>5761</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 38 2C"><unientity>5764</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 38 2D"><unientity>5766</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 38 2E"><unientity>5782</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 38 2F"><unientity>577C</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 38 30"><unientity>57A0</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 38 31"><unientity>578B</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 38 32"><unientity>57A3</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 38 33"><unientity>57AE</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 38 34"><unientity>57A2</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 38 35"><unientity>57D4</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 38 36"><unientity>57C2</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 38 37"><unientity>57CE</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 38 38"><unientity>57CB</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 38 39"><unientity>57C3</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 38 3A"><unientity>57F9</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 38 3B"><unientity>57F7</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 38 3C"><unientity>57FA</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 38 3D"><unientity>57DF</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 38 3E"><unientity>580A</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 38 3F"><unientity>5805</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 38 40"><unientity>5802</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 38 41"><unientity>5806</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 38 42"><unientity>57E4</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 38 43"><unientity>57E0</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 38 44"><unientity>5831</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 38 45"><unientity>582F</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 38 46"><unientity>5835</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 38 47"><unientity>582A</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 38 48"><unientity>5830</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 38 49"><unientity>5824</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 38 4A"><unientity>5834</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 38 4B"><unientity>5821</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 38 4C"><unientity>585E</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 38 4D"><unientity>5857</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 38 4E"><unientity>5858</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 38 4F"><unientity>5851</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 38 50"><unientity>586B</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 38 51"><unientity>584C</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 38 52"><unientity>585A</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 38 53"><unientity>586D</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 38 54"><unientity>5854</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 38 55"><unientity>5862</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 38 56"><unientity>584A</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 38 57"><unientity>5883</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 38 58"><unientity>587E</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 38 59"><unientity>5875</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 38 5A"><unientity>588A</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 38 5B"><unientity>5879</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 38 5C"><unientity>5885</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 38 5D"><unientity>5893</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 38 5E"><unientity>589E</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 38 5F"><unientity>5880</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 38 60"><unientity>58B3</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 38 61"><unientity>589C</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 38 62"><unientity>58AE</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 38 63"><unientity>589F</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 38 64"><unientity>E935</unientity><unientityalt>58C7</unientityalt><desc>Variant of 4B3864 which maps to 58C7</desc></character>
-<character hex="21 38 65"><unientity>58C5</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 38 66"><unientity>58C1</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 38 67"><unientity>58BE</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 38 68"><unientity>58D5</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 38 69"><unientity>58D3</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 38 6A"><unientity>58D1</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 38 6B"><unientity>58D9</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 38 6C"><unientity>58D8</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 38 6D"><unientity>58DF</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 38 6E"><unientity>58DE</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 38 6F"><unientity>58E2</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 38 70"><unientity>58E4</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 38 71"><unientity>58E9</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 38 72"><unientity>58EB</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 38 73"><unientity>58EC</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 38 74"><unientity>58EF</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 38 76"><unientity>58FA</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 38 77"><unientity>58FD</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 38 78"><unientity>590F</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 38 79"><unientity>5914</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 38 7A"><unientity>5915</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 38 7B"><unientity>5916</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 38 7C"><unientity>5919</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 38 7D"><unientity>591A</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 38 7E"><unientity>591C</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 39 21"><unientity>5920</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 39 22"><unientity>5924</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 39 23"><unientity>5925</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 39 24"><unientity>5922</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 39 25"><unientity>5927</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 39 26"><unientity>592A</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 39 27"><unientity>592B</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 39 28"><unientity>5929</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 39 29"><unientity>592D</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 39 2A"><unientity>592E</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 39 2B"><unientity>5931</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 39 2C"><unientity>5937</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 39 2E"><unientity>593E</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 39 2F"><unientity>5954</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 39 30"><unientity>5949</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 39 31"><unientity>5948</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 39 32"><unientity>5947</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 39 33"><unientity>5944</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 39 34"><unientity>5955</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 39 35"><unientity>5951</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 39 36"><unientity>594E</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 39 37"><unientity>594F</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 39 38"><unientity>5950</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 39 39"><unientity>5957</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 39 3A"><unientity>5958</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 39 3B"><unientity>595A</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 39 3C"><unientity>5960</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 39 3D"><unientity>5962</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 39 3E"><unientity>5967</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 39 3F"><unientity>5969</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 39 40"><unientity>596A</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 39 41"><unientity>596E</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 39 42"><unientity>5973</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 39 43"><unientity>5974</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 39 44"><unientity>5976</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 39 45"><unientity>5984</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 39 46"><unientity>5983</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 39 47"><unientity>5978</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 39 48"><unientity>597D</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 39 49"><unientity>5979</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 39 4A"><unientity>5982</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 39 4B"><unientity>5981</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 39 4C"><unientity>59A8</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 39 4D"><unientity>5992</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 39 4F"><unientity>59A4</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 39 50"><unientity>59A3</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 39 51"><unientity>5993</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 39 52"><unientity>599E</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 39 53"><unientity>599D</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 39 54"><unientity>5999</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 39 55"><unientity>59A5</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 39 56"><unientity>598A</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 39 57"><unientity>5996</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 39 58"><unientity>59BE</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 39 59"><unientity>59BB</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 39 5A"><unientity>59AE</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 39 5B"><unientity>59D1</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 39 5C"><unientity>59B9</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 39 5D"><unientity>59C6</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 39 5E"><unientity>59D0</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 39 5F"><unientity>59D7</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 39 60"><unientity>59AF</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 39 61"><unientity>59D2</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 39 62"><unientity>59D3</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 39 63"><unientity>59CA</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 39 65"><unientity>59CB</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 39 66"><unientity>59D4</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 39 67"><unientity>59E3</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 39 69"><unientity>59FF</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 39 6A"><unientity>59D8</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 39 6B"><unientity>5A03</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 39 6C"><unientity>59E8</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 39 6D"><unientity>59E5</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 39 6E"><unientity>59EA</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 39 6F"><unientity>5A01</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 39 70"><unientity>59FB</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 39 71"><unientity>59E6</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 39 72"><unientity>59DA</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 39 73"><unientity>5A11</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 39 74"><unientity>5A18</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 39 75"><unientity>5A23</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 39 76"><unientity>5A1C</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 39 77"><unientity>5A13</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 39 78"><unientity>59EC</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 39 79"><unientity>5A20</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 39 7A"><unientity>5A1F</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 39 7B"><unientity>5A1B</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 39 7C"><unientity>5A0C</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 39 7D"><unientity>5A29</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 39 7E"><unientity>5A25</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 3A 21"><unientity>5A46</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 3A 22"><unientity>5A49</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 3A 23"><unientity>5A6A</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 3A 24"><unientity>5A36</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 3A 25"><unientity>5A4A</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 3A 26"><unientity>5A40</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 3A 27"><unientity>5A66</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 3A 28"><unientity>5A41</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 3A 29"><unientity>5A3C</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 3A 2A"><unientity>5A62</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 3A 2B"><unientity>5A5A</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 3A 2C"><unientity>5A77</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 3A 2D"><unientity>5A9A</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 3A 2E"><unientity>5A92</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 3A 2F"><unientity>5A7F</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 3A 30"><unientity>5ABC</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 3A 31"><unientity>5A9B</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 3A 32"><unientity>5ACC</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 3A 33"><unientity>5AC1</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 3A 34"><unientity>5AC9</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 3A 35"><unientity>5ABE</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 3A 36"><unientity>5ABD</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 3A 37"><unientity>5AB2</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 3A 38"><unientity>5AC2</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 3A 39"><unientity>5AB3</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 3A 3A"><unientity>5AE1</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 3A 3B"><unientity>5AD7</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 3A 3C"><unientity>5AD6</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 3A 3D"><unientity>5AE3</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 3A 3E"><unientity>5AE9</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 3A 3F"><unientity>5AD8</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 3A 40"><unientity>5AE6</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 3A 41"><unientity>5AFB</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 3A 42"><unientity>5B09</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 3A 43"><unientity>5B0B</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 3A 44"><unientity>5B0C</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 3A 45"><unientity>5AF5</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 3A 46"><unientity>5B34</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 3A 47"><unientity>5B1D</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 3A 48"><unientity>5B2A</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 3A 49"><unientity>5B24</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 3A 4A"><unientity>5B30</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 3A 4B"><unientity>5B38</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 3A 4C"><unientity>5B40</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 3A 4D"><unientity>5B50</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 3A 4E"><unientity>5B51</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 3A 4F"><unientity>5B53</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 3A 50"><unientity>5B54</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 3A 51"><unientity>5B55</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 3A 52"><unientity>5B57</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 3A 53"><unientity>5B58</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 3A 54"><unientity>5B5D</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 3A 55"><unientity>5B5C</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 3A 57"><unientity>5B5F</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 3A 58"><unientity>5B63</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 3A 59"><unientity>5B64</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 3A 5A"><unientity>5B69</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 3A 5B"><unientity>5B6B</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 3A 5C"><unientity>5B70</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 3A 5D"><unientity>5B73</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 3A 5E"><unientity>5B71</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 3A 5F"><unientity>5B75</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 3A 60"><unientity>5B78</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 3A 61"><unientity>5B7A</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 3A 62"><unientity>5B7D</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 3A 63"><unientity>5B7F</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 3A 65"><unientity>5B87</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 3A 66"><unientity>5B88</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 3A 67"><unientity>5B89</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 3A 68"><unientity>5B85</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 3A 69"><unientity>5B8C</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 3A 6A"><unientity>5B8B</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 3A 6B"><unientity>5B8F</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 3A 6C"><unientity>5B97</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 3A 6D"><unientity>5B9A</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 3A 6E"><unientity>5B9C</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 3A 6F"><unientity>5B98</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 3A 70"><unientity>5B99</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 3A 71"><unientity>5B9B</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 3A 72"><unientity>5BA5</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 3A 73"><unientity>5BA3</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 3A 74"><unientity>5BA6</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 3A 75"><unientity>5BA4</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 3A 76"><unientity>5BA2</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 3A 77"><unientity>5BB0</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 3A 78"><unientity>5BB8</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 3A 7A"><unientity>5BB5</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 3A 7B"><unientity>5BB4</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 3A 7C"><unientity>5BAE</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 3A 7D"><unientity>5BB9</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 3A 7E"><unientity>5BB3</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 3B 21"><unientity>5BC6</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 3B 22"><unientity>5BC7</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 3B 23"><unientity>5BC5</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 3B 24"><unientity>5BC4</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 3B 25"><unientity>5BC2</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 3B 26"><unientity>5BBF</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 3B 27"><unientity>5BCC</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 3B 28"><unientity>5BD2</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 3B 29"><unientity>5BD0</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 3B 2A"><unientity>5BD3</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 3B 2B"><unientity>5BE1</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 3B 2C"><unientity>5BE5</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 3B 2D"><unientity>5BE8</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 3B 2E"><unientity>5BE2</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 3B 2F"><unientity>5BE4</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 3B 30"><unientity>5BDE</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 3B 31"><unientity>5BE6</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 3B 32"><unientity>5BE7</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 3B 33"><unientity>5BDF</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 3B 34"><unientity>5BEE</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 3B 35"><unientity>5BEC</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 3B 36"><unientity>5BE9</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 3B 37"><unientity>5BEB</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 3B 38"><unientity>5BF5</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 3B 39"><unientity>5BF6</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 3B 3A"><unientity>5BF8</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 3B 3B"><unientity>5BFA</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 3B 3C"><unientity>5C01</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 3B 3D"><unientity>5C04</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 3B 3E"><unientity>5C09</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 3B 3F"><unientity>5C08</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 3B 40"><unientity>5C07</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 3B 41"><unientity>5C0A</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 3B 42"><unientity>5C0B</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 3B 43"><unientity>5C0D</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 3B 44"><unientity>5C0E</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 3B 45"><unientity>5C0F</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 3B 46"><unientity>5C11</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 3B 47"><unientity>5C16</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 3B 48"><unientity>5C1A</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 3B 49"><unientity>5C24</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 3B 4A"><unientity>5C2C</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 3B 4B"><unientity>5C31</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 3B 4C"><unientity>5C37</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 3B 4D"><unientity>5C38</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 3B 4E"><unientity>5C3A</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 3B 4F"><unientity>5C3C</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 3B 50"><unientity>5C40</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 3B 51"><unientity>5C41</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 3B 52"><unientity>5C3F</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 3B 53"><unientity>5C3E</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 3B 54"><unientity>5C46</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 3B 55"><unientity>5C45</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 3B 56"><unientity>5C48</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 3B 57"><unientity>5C4E</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 3B 58"><unientity>5C4B</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 3B 59"><unientity>5C4D</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 3B 5A"><unientity>5C55</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 3B 5B"><unientity>5C51</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 3B 5C"><unientity>5C50</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 3B 5D"><unientity>E9E1</unientity><desc>East Asian ideograph not in Unicode</desc></character>
-<character hex="21 3B 5E"><unientity>5C60</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 3B 5F"><unientity>5C5C</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 3B 60"><unientity>5C62</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 3B 61"><unientity>E936</unientity><unientityalt>5C64</unientityalt><desc>Variant of 4B3B61 which maps to 5C64</desc></character>
-<character hex="21 3B 62"><unientity>5C65</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 3B 63"><unientity>5C6C</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 3B 64"><unientity>5C6F</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 3B 65"><unientity>5C71</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 3B 66"><unientity>5C79</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 3B 67"><unientity>5C90</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 3B 68"><unientity>5C8C</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 3B 69"><unientity>5C91</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 3B 6A"><unientity>5C94</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 3B 6B"><unientity>5CB7</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 3B 6C"><unientity>5CB8</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 3B 6E"><unientity>5CA1</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 3B 6F"><unientity>5CAB</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 3B 71"><unientity>5CB1</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 3B 72"><unientity>5CD9</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 3B 73"><unientity>5D01</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 3B 74"><unientity>5CFD</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 3B 75"><unientity>5CED</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 3B 76"><unientity>5CFB</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 3B 77"><unientity>5CE8</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 3B 78"><unientity>5CF0</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 3B 79"><unientity>5CF6</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 3B 7A"><unientity>5CEA</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 3B 7B"><unientity>5D07</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 3B 7C"><unientity>5D06</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 3B 7D"><unientity>5D1B</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 3B 7E"><unientity>5D16</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 3C 21"><unientity>5D0E</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 3C 22"><unientity>5D11</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 3C 23"><unientity>5D22</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 3C 24"><unientity>5D29</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 3C 25"><unientity>5D14</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 3C 26"><unientity>5D19</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 3C 27"><unientity>5D4C</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 3C 28"><unientity>5D50</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 3C 29"><unientity>5D69</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 3C 2A"><unientity>5D84</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 3C 2B"><unientity>5D87</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 3C 2C"><unientity>5D9D</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 3C 2D"><unientity>5DBC</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 3C 2E"><unientity>5DBD</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 3C 2F"><unientity>E937</unientity><unientityalt>5DBA</unientityalt><desc>Variant of 4B3C2F which maps to 5DBA</desc></character>
-<character hex="21 3C 30"><unientity>5DCD</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 3C 31"><unientity>5DD2</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 3C 32"><unientity>5DD4</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 3C 33"><unientity>5DD6</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 3C 34"><unientity>5DDD</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 3C 35"><unientity>5DDE</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 3C 36"><unientity>5DE2</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 3C 37"><unientity>5DE5</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 3C 38"><unientity>5DE8</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 3C 39"><unientity>5DE7</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 3C 3A"><unientity>5DE6</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 3C 3B"><unientity>5DEB</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 3C 3C"><unientity>5DEE</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 3C 3D"><unientity>5DF1</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 3C 3E"><unientity>5DF2</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 3C 3F"><unientity>5DF3</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 3C 40"><unientity>5DF4</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 3C 41"><unientity>5DF7</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 3C 42"><unientity>5DFD</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 3C 43"><unientity>5DFE</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 3C 44"><unientity>5E02</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 3C 46"><unientity>5E06</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 3C 49"><unientity>5E1A</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 3C 4A"><unientity>5E16</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 3C 4B"><unientity>5E15</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 3C 4C"><unientity>5E1B</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 3C 4D"><unientity>5E11</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 3C 4E"><unientity>5E1D</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 3C 4F"><unientity>5E25</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 3C 51"><unientity>5E2B</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 3C 52"><unientity>5E33</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 3C 53"><unientity>5E36</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 3C 54"><unientity>5E38</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 3C 55"><unientity>5E37</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 3C 56"><unientity>5E45</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 3C 57"><unientity>5E3D</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 3C 58"><unientity>5E40</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 3C 59"><unientity>5E4C</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 3C 5A"><unientity>5E5B</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 3C 5B"><unientity>5E54</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 3C 5C"><unientity>5E57</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 3C 5D"><unientity>5E55</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 3C 5E"><unientity>5E63</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 3C 5F"><unientity>5E62</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 3C 60"><unientity>5E5F</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 3C 61"><unientity>5E6B</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 3C 63"><unientity>5E73</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 3C 65"><unientity>5E74</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 3C 68"><unientity>5E7B</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 3C 69"><unientity>5E7C</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 3C 6A"><unientity>5E7D</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 3C 6B"><unientity>5E7E</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 3C 6C"><unientity>5E8F</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 3C 6D"><unientity>5E87</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 3C 6E"><unientity>5E8A</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 3C 6F"><unientity>5E9A</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 3C 70"><unientity>5E97</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 3C 71"><unientity>5E96</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 3C 72"><unientity>5E9C</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 3C 73"><unientity>5E95</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 3C 74"><unientity>5EA0</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 3C 75"><unientity>5EA6</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 3C 76"><unientity>5EAB</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 3C 77"><unientity>5EA7</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 3C 78"><unientity>5EAD</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 3C 79"><unientity>5EB7</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 3C 7A"><unientity>5EB8</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 3C 7B"><unientity>5EB6</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 3C 7C"><unientity>5EB5</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 3C 7D"><unientity>5EC2</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 3C 7E"><unientity>5EC1</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 3D 21"><unientity>5EBE</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 3D 22"><unientity>5ECA</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 3D 23"><unientity>5EC9</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 3D 24"><unientity>5EC8</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 3D 25"><unientity>5ED3</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 3D 26"><unientity>5ED6</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 3D 27"><unientity>5EE2</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 3D 28"><unientity>5EDA</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 3D 29"><unientity>5EDD</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 3D 2A"><unientity>E938</unientity><unientityalt>5EE3</unientityalt><desc>Variant of 4B3D2A which maps to 5EE3</desc></character>
-<character hex="21 3D 2B"><unientity>5EDF</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 3D 2C"><unientity>5EE0</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 3D 2D"><unientity>9F90</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 3D 2E"><unientity>5EEC</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 3D 2F"><unientity>5EF3</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 3D 30"><unientity>5EF7</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 3D 32"><unientity>5EF6</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 3D 33"><unientity>5EFA</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 3D 34"><unientity>5EFF</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 3D 36"><unientity>5F04</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 3D 37"><unientity>5F08</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 3D 38"><unientity>5F0A</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 3D 39"><unientity>5F0F</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 3D 3A"><unientity>5F12</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 3D 3B"><unientity>5F13</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 3D 3C"><unientity>5F15</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 3D 3D"><unientity>5F14</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 3D 3E"><unientity>5F18</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 3D 3F"><unientity>5F17</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 3D 40"><unientity>5F1B</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 3D 41"><unientity>5F1F</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 3D 42"><unientity>5F26</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 3D 43"><unientity>5F27</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 3D 44"><unientity>5F29</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 3D 45"><unientity>5F2D</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 3D 46"><unientity>5F31</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 3D 47"><unientity>5F35</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 3D 48"><unientity>5F37</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 3D 49"><unientity>5F3C</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 3D 4A"><unientity>5F46</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 3D 4B"><unientity>5F48</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 3D 4C"><unientity>5F4C</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 3D 4D"><unientity>5F4E</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 3D 4E"><unientity>5F57</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 3D 4F"><unientity>5F59</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 3D 50"><unientity>5F5D</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 3D 51"><unientity>5F62</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 3D 52"><unientity>5F64</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 3D 53"><unientity>5F65</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 3D 54"><unientity>5F6C</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 3D 55"><unientity>5F69</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 3D 57"><unientity>5F6D</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 3D 58"><unientity>5F70</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 3D 59"><unientity>5F71</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 3D 5B"><unientity>5F79</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 3D 5C"><unientity>5F80</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 3D 5E"><unientity>5F7F</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 3D 5F"><unientity>5F7C</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 3D 60"><unientity>5F85</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 3D 61"><unientity>5F88</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 3D 62"><unientity>5F8B</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 3D 63"><unientity>5F8A</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 3D 64"><unientity>5F87</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 3D 65"><unientity>5F8C</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 3D 66"><unientity>5F92</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 3D 67"><unientity>5F91</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 3D 68"><unientity>5F90</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 3D 69"><unientity>5F98</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 3D 6A"><unientity>5F97</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 3D 6B"><unientity>5F99</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 3D 6C"><unientity>5F9E</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 3D 6F"><unientity>5FA9</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 3D 71"><unientity>5FAA</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 3D 72"><unientity>5FAC</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 3D 73"><unientity>5FAE</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 3D 74"><unientity>5FB9</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 3D 75"><unientity>5FB7</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 3D 76"><unientity>5FB5</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 3D 77"><unientity>5FBD</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 3D 78"><unientity>5FC3</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 3D 79"><unientity>5FC5</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 3D 7A"><unientity>5FD9</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 3D 7B"><unientity>5FD8</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 3D 7C"><unientity>5FCC</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 3D 7D"><unientity>5FD6</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 3E 21"><unientity>5FCD</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 3E 22"><unientity>5FEB</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 3E 23"><unientity>5FE0</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 3E 24"><unientity>5FF1</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 3E 25"><unientity>5FFD</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 3E 26"><unientity>5FDD</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 3E 27"><unientity>5FF5</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 3E 28"><unientity>5FFF</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 3E 29"><unientity>6014</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 3E 2A"><unientity>E939</unientity><unientityalt>6035</unientityalt><desc>Variant of 4B3E2A which maps to 6035</desc></character>
-<character hex="21 3E 2B"><unientity>602A</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 3E 2C"><unientity>602F</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 3E 2D"><unientity>6016</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 3E 2E"><unientity>601D</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 3E 2F"><unientity>600F</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 3E 30"><unientity>6021</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 3E 31"><unientity>6020</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 3E 32"><unientity>6028</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 3E 33"><unientity>6025</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 3E 34"><unientity>6027</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 3E 35"><unientity>600E</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 3E 36"><unientity>6015</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 3E 37"><unientity>6012</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 3E 38"><unientity>6059</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 3E 39"><unientity>6063</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 3E 3A"><unientity>6068</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 3E 3B"><unientity>6043</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 3E 3C"><unientity>6065</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 3E 3D"><unientity>6050</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 3E 3E"><unientity>606D</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 3E 3F"><unientity>6062</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 3E 40"><unientity>E93A</unientity><unientityalt>6046</unientityalt><desc>Variant of 4B3E40 which maps to 6046</desc></character>
-<character hex="21 3E 41"><unientity>604D</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 3E 42"><unientity>606B</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 3E 43"><unientity>6069</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 3E 44"><unientity>606C</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 3E 45"><unientity>606F</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 3E 46"><unientity>606A</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 3E 47"><unientity>6064</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 3E 48"><unientity>6070</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 3E 49"><unientity>6055</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 3E 4A"><unientity>608C</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 3E 4B"><unientity>60A6</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 3E 4C"><unientity>607F</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 3E 4D"><unientity>609F</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 3E 4E"><unientity>609A</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 3E 4F"><unientity>6096</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 3E 50"><unientity>6084</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 3E 51"><unientity>608D</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 3E 52"><unientity>60A3</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 3E 53"><unientity>6089</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 3E 54"><unientity>6094</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 3E 55"><unientity>60A0</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 3E 56"><unientity>60A8</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 3E 57"><unientity>60B4</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 3E 58"><unientity>60E6</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 3E 59"><unientity>60CB</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 3E 5B"><unientity>E93B</unientity><unientityalt>60C5</unientityalt><desc>Variant of 4B3E5B which maps to 60C5</desc></character>
-<character hex="21 3E 5C"><unientity>60B6</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 3E 5D"><unientity>60D1</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 3E 5E"><unientity>60B5</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 3E 5F"><unientity>60BB</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 3E 60"><unientity>60E0</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 3E 61"><unientity>60E1</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 3E 62"><unientity>60DC</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 3E 63"><unientity>60D8</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 3E 64"><unientity>60D5</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 3E 65"><unientity>60BC</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 3E 66"><unientity>60B2</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 3E 67"><unientity>60C6</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 3E 68"><unientity>60B8</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 3E 69"><unientity>60DA</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 3E 6A"><unientity>60DF</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 3E 6B"><unientity>610F</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 3E 6C"><unientity>611C</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 3E 6D"><unientity>60F3</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 3E 6E"><unientity>611F</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 3E 6F"><unientity>60F0</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 3E 70"><unientity>60FB</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 3E 71"><unientity>60FA</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 3E 72"><unientity>611A</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 3E 73"><unientity>6115</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 3E 74"><unientity>60F9</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 3E 75"><unientity>6123</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 3E 76"><unientity>60F4</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 3E 77"><unientity>611B</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 3E 78"><unientity>610E</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 3E 79"><unientity>6100</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 3E 7A"><unientity>6101</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 3E 7B"><unientity>60F6</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 3E 7C"><unientity>6109</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 3E 7D"><unientity>6108</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 3E 7E"><unientity>60F1</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 3F 21"><unientity>6148</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 3F 22"><unientity>6168</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 3F 24"><unientity>613C</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 3F 26"><unientity>614C</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 3F 27"><unientity>614D</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 3F 28"><unientity>614B</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 3F 29"><unientity>613E</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 3F 2A"><unientity>6127</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 3F 2B"><unientity>6134</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 3F 2C"><unientity>6147</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 3F 2D"><unientity>6177</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 3F 2E"><unientity>6176</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 3F 2F"><unientity>6167</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 3F 30"><unientity>6170</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 3F 31"><unientity>615A</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 3F 32"><unientity>615D</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 3F 33"><unientity>6182</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 3F 34"><unientity>617C</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 3F 35"><unientity>6162</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 3F 36"><unientity>616E</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 3F 37"><unientity>6155</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 3F 38"><unientity>6158</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 3F 39"><unientity>6163</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 3F 3A"><unientity>615F</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 3F 3B"><unientity>616B</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 3F 3C"><unientity>617E</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 3F 3D"><unientity>61A7</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 3F 3E"><unientity>61B2</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 3F 3F"><unientity>6191</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 3F 40"><unientity>618E</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 3F 41"><unientity>61AB</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 3F 42"><unientity>61A4</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 3F 43"><unientity>61AC</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 3F 44"><unientity>619A</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 3F 45"><unientity>61A9</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 3F 46"><unientity>6194</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 3F 47"><unientity>618A</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 3F 48"><unientity>61B6</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 3F 49"><unientity>61CD</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 3F 4A"><unientity>61C9</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 3F 4B"><unientity>6190</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 3F 4C"><unientity>61BE</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 3F 4D"><unientity>61C2</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 3F 4E"><unientity>61C7</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 3F 4F"><unientity>61C8</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 3F 50"><unientity>61CA</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 3F 51"><unientity>61E3</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 3F 52"><unientity>61E6</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 3F 53"><unientity>E93C</unientity><unientityalt>61F2</unientityalt><desc>Variant of 4B3F53 which maps to 61F2</desc></character>
-<character hex="21 3F 54"><unientity>61F7</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 3F 55"><unientity>61F6</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 3F 56"><unientity>61F8</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 3F 57"><unientity>61F5</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 3F 58"><unientity>61FA</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 3F 59"><unientity>61FE</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 3F 5A"><unientity>61FF</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 3F 5B"><unientity>61FC</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 3F 5C"><unientity>6200</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 3F 5D"><unientity>6208</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 3F 5E"><unientity>620A</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 3F 5F"><unientity>620E</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 3F 60"><unientity>620D</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 3F 61"><unientity>620C</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 3F 62"><unientity>6210</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 3F 63"><unientity>6212</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 3F 64"><unientity>6211</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 3F 65"><unientity>6216</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 3F 66"><unientity>6215</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 3F 67"><unientity>621B</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 3F 68"><unientity>621A</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 3F 69"><unientity>621F</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 3F 6A"><unientity>6221</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 3F 6B"><unientity>6222</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 3F 6C"><unientity>622A</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 3F 6D"><unientity>622E</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 3F 6E"><unientity>6230</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 3F 6F"><unientity>6232</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 3F 70"><unientity>6234</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 3F 71"><unientity>6233</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 3F 72"><unientity>6236</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 3F 73"><unientity>623F</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 3F 74"><unientity>623E</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 3F 75"><unientity>6240</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 3F 76"><unientity>6241</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 3F 78"><unientity>6248</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 3F 79"><unientity>6249</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 3F 7A"><unientity>624B</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 3F 7D"><unientity>6253</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 3F 7E"><unientity>6254</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 40 21"><unientity>6252</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 40 22"><unientity>625B</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 40 23"><unientity>6263</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 40 24"><unientity>6258</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 40 25"><unientity>6296</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 40 26"><unientity>6297</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 40 27"><unientity>6292</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 40 28"><unientity>6276</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 40 29"><unientity>6289</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 40 2A"><unientity>627F</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 40 2B"><unientity>6279</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 40 2C"><unientity>6280</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 40 2D"><unientity>628A</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 40 2E"><unientity>626D</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 40 2F"><unientity>627C</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 40 30"><unientity>627E</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 40 31"><unientity>626F</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 40 32"><unientity>6284</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 40 33"><unientity>6295</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 40 34"><unientity>6291</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 40 35"><unientity>6298</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 40 36"><unientity>626E</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 40 37"><unientity>6273</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 40 38"><unientity>6293</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 40 39"><unientity>62C9</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 40 3A"><unientity>62C4</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 40 3B"><unientity>62CC</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 40 3C"><unientity>62A8</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 40 3D"><unientity>62DC</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 40 3E"><unientity>62BF</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 40 3F"><unientity>62C2</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 40 40"><unientity>62B9</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 40 41"><unientity>62D2</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 40 42"><unientity>62D3</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 40 43"><unientity>62DB</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 40 44"><unientity>62AB</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 40 45"><unientity>62CB</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 40 46"><unientity>62D4</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 40 47"><unientity>62BD</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 40 48"><unientity>62BC</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 40 49"><unientity>E93D</unientity><unientityalt>62D0</unientityalt><desc>Variant of 4B4049 which maps to 62D0</desc></character>
-<character hex="21 40 4A"><unientity>62C8</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 40 4B"><unientity>62D9</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 40 4C"><unientity>62DA</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 40 4D"><unientity>62AC</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 40 4E"><unientity>62C7</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 40 4F"><unientity>62B1</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 40 50"><unientity>62D6</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 40 51"><unientity>62D8</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 40 52"><unientity>62CD</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 40 53"><unientity>62B5</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 40 54"><unientity>62CE</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 40 55"><unientity>62D7</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 40 56"><unientity>62C6</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 40 57"><unientity>6309</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 40 58"><unientity>6316</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 40 59"><unientity>62FC</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 40 5A"><unientity>62F3</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 40 5B"><unientity>6308</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 40 5C"><unientity>62ED</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 40 5D"><unientity>6301</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 40 5E"><unientity>62EE</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 40 5F"><unientity>62EF</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 40 60"><unientity>62F7</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 40 61"><unientity>6307</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 40 62"><unientity>62F1</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 40 63"><unientity>62FD</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 40 64"><unientity>6311</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 40 65"><unientity>62EC</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 40 66"><unientity>E93E</unientity><unientityalt>62F4</unientityalt><desc>Variant of 4B4066 which maps to 62F4</desc></character>
-<character hex="21 40 67"><unientity>62FF</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 40 69"><unientity>6342</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 40 6A"><unientity>632A</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 40 6B"><unientity>6355</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 40 6C"><unientity>633E</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 40 6D"><unientity>632F</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 40 6E"><unientity>634E</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 40 6F"><unientity>634F</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 40 70"><unientity>6350</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 40 71"><unientity>6349</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 40 73"><unientity>632B</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 40 74"><unientity>6328</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 40 75"><unientity>633A</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 40 76"><unientity>63A5</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 40 77"><unientity>6369</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 40 78"><unientity>63A0</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 40 79"><unientity>6396</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 40 7A"><unientity>63A7</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 40 7B"><unientity>6372</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 40 7C"><unientity>6377</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 40 7D"><unientity>6383</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 40 7E"><unientity>636B</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 41 21"><unientity>6367</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 41 22"><unientity>6398</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 41 23"><unientity>639B</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 41 24"><unientity>63AA</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 41 25"><unientity>6371</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 41 26"><unientity>63A9</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 41 27"><unientity>638C</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 41 28"><unientity>6389</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 41 29"><unientity>63A2</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 41 2A"><unientity>6399</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 41 2B"><unientity>63A1</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 41 2C"><unientity>6388</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 41 2D"><unientity>63AC</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 41 2E"><unientity>633D</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 41 2F"><unientity>6392</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 41 30"><unientity>63A3</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 41 31"><unientity>6376</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 41 32"><unientity>638F</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 41 33"><unientity>63A8</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 41 34"><unientity>637B</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 41 35"><unientity>E93F</unientity><unientityalt>6368</unientityalt><desc>Variant of 4B4135 which maps to 6368</desc></character>
-<character hex="21 41 36"><unientity>6384</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 41 37"><unientity>6380</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 41 38"><unientity>63C6</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 41 39"><unientity>63C9</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 41 3A"><unientity>63CD</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 41 3B"><unientity>63E1</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 41 3C"><unientity>63C0</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 41 3D"><unientity>63E9</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 41 3E"><unientity>63D0</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 41 3F"><unientity>63DA</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 41 40"><unientity>63D6</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 41 41"><unientity>63ED</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 41 42"><unientity>63EE</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 41 43"><unientity>63CF</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 41 44"><unientity>63E3</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 41 45"><unientity>63F4</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 41 46"><unientity>E940</unientity><unientityalt>63DB</unientityalt><desc>Variant of 454146 which maps to 63DB</desc></character>
-<character hex="21 41 47"><unientity>63D2</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 41 48"><unientity>63EA</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 41 49"><unientity>641E</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 41 4A"><unientity>642A</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 41 4B"><unientity>643E</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 41 4C"><unientity>6413</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 41 4D"><unientity>640F</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 41 4E"><unientity>6414</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 41 4F"><unientity>640D</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 41 50"><unientity>642D</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 41 51"><unientity>643D</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 41 52"><unientity>6416</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 41 53"><unientity>6417</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 41 54"><unientity>641C</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 41 55"><unientity>6436</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 41 56"><unientity>642C</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 41 57"><unientity>6458</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 41 58"><unientity>6469</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 41 59"><unientity>6454</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 41 5A"><unientity>6452</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 41 5B"><unientity>646F</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 41 5C"><unientity>6478</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 41 5D"><unientity>6479</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 41 5E"><unientity>647A</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 41 5F"><unientity>645F</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 41 60"><unientity>6451</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 41 61"><unientity>6467</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 41 62"><unientity>649E</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 41 63"><unientity>64A4</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 41 64"><unientity>6487</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 41 65"><unientity>6488</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 41 66"><unientity>64A5</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 41 67"><unientity>64B0</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 41 68"><unientity>6493</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 41 69"><unientity>6495</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 41 6A"><unientity>6492</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 41 6B"><unientity>64A9</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 41 6C"><unientity>6491</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 41 6D"><unientity>64AE</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 41 6E"><unientity>64B2</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 41 6F"><unientity>64AD</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 41 70"><unientity>649A</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 41 71"><unientity>64AB</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 41 72"><unientity>64AC</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 41 73"><unientity>64C5</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 41 74"><unientity>64C1</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 41 75"><unientity>64D8</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 41 76"><unientity>64CA</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 41 77"><unientity>64BB</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 41 78"><unientity>64C2</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 41 79"><unientity>64BC</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 41 7A"><unientity>64CB</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 41 7B"><unientity>64CD</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 41 7C"><unientity>64DA</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 41 7D"><unientity>64C4</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 41 7E"><unientity>64C7</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 42 21"><unientity>64CE</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 42 22"><unientity>64D4</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 42 23"><unientity>64D2</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 42 24"><unientity>64BF</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 42 25"><unientity>64E0</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 42 26"><unientity>64F0</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 42 27"><unientity>64E6</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 42 28"><unientity>64EC</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 42 29"><unientity>64F1</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 42 2A"><unientity>64F4</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 42 2B"><unientity>64F2</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 42 2C"><unientity>6506</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 42 2D"><unientity>6500</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 42 2E"><unientity>64FE</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 42 2F"><unientity>64FB</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 42 30"><unientity>64FA</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 42 31"><unientity>650F</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 42 32"><unientity>6518</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 42 33"><unientity>6514</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 42 34"><unientity>6519</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 42 35"><unientity>651D</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 42 36"><unientity>651C</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 42 37"><unientity>6523</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 42 38"><unientity>6524</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 42 39"><unientity>652B</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 42 3A"><unientity>652A</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 42 3B"><unientity>652C</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 42 3C"><unientity>652F</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 42 3D"><unientity>6536</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 42 3E"><unientity>6539</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 42 3F"><unientity>653B</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 42 40"><unientity>653E</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 42 41"><unientity>653F</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 42 42"><unientity>6545</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 42 43"><unientity>6548</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 42 44"><unientity>654E</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 42 45"><unientity>6556</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 42 46"><unientity>6551</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 42 47"><unientity>6557</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 42 48"><unientity>655D</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 42 49"><unientity>6558</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 42 4A"><unientity>654F</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 42 4B"><unientity>6566</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 42 4C"><unientity>6562</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 42 4D"><unientity>6563</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 42 4E"><unientity>655E</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 42 4F"><unientity>5553</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 42 50"><unientity>656C</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 42 51"><unientity>6572</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 42 52"><unientity>6575</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 42 53"><unientity>6577</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 42 54"><unientity>6578</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 42 55"><unientity>6574</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 42 56"><unientity>6582</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 42 57"><unientity>6583</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 42 58"><unientity>6587</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 42 59"><unientity>6591</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 42 5A"><unientity>6590</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 42 5C"><unientity>6599</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 42 5D"><unientity>659C</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 42 5E"><unientity>659F</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 42 5F"><unientity>65A1</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 42 60"><unientity>65A4</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 42 61"><unientity>65A5</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 42 62"><unientity>65A7</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 42 63"><unientity>65AC</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 42 64"><unientity>65AF</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 42 65"><unientity>65B0</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 42 66"><unientity>65B7</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 42 67"><unientity>65B9</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 42 69"><unientity>65BD</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 42 6A"><unientity>65C1</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 42 6B"><unientity>65C5</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 42 6C"><unientity>65CE</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 42 6D"><unientity>65CB</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 42 6E"><unientity>65CC</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 42 6F"><unientity>65CF</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 42 70"><unientity>65D7</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 42 71"><unientity>65D6</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 42 72"><unientity>65E2</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 42 73"><unientity>65E5</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 42 75"><unientity>65E9</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 42 76"><unientity>65EC</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 42 77"><unientity>65ED</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 42 78"><unientity>65E8</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 42 79"><unientity>65F1</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 42 7A"><unientity>65FA</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 42 7B"><unientity>6606</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 42 7C"><unientity>6614</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 42 7D"><unientity>660C</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 42 7E"><unientity>6600</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 43 21"><unientity>660E</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 43 22"><unientity>6613</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 43 23"><unientity>6602</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 43 24"><unientity>660F</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 43 25"><unientity>6625</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 43 26"><unientity>6627</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 43 27"><unientity>662F</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 43 28"><unientity>662D</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 43 29"><unientity>6620</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 43 2A"><unientity>661F</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 43 2B"><unientity>6628</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 43 2C"><unientity>664F</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 43 2D"><unientity>6642</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 43 2E"><unientity>6652</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 43 2F"><unientity>6649</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 43 30"><unientity>6643</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 43 31"><unientity>664C</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 43 32"><unientity>665D</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 43 33"><unientity>6664</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 43 34"><unientity>6668</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 43 35"><unientity>6666</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 43 36"><unientity>665A</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 43 37"><unientity>666F</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 43 38"><unientity>666E</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 43 39"><unientity>FA12</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 43 3A"><unientity>6691</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 43 3B"><unientity>6670</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 43 3C"><unientity>6676</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 43 3D"><unientity>667A</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 43 3E"><unientity>6697</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 43 3F"><unientity>6687</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 43 40"><unientity>6689</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 43 41"><unientity>6688</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 43 42"><unientity>6696</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 43 43"><unientity>66A2</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 43 44"><unientity>66AB</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 43 45"><unientity>66B4</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 43 46"><unientity>66AE</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 43 47"><unientity>66C1</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 43 48"><unientity>66C9</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 43 49"><unientity>66C6</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 43 4A"><unientity>66B9</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 43 4B"><unientity>66D6</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 43 4C"><unientity>66D9</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 43 4D"><unientity>66E0</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 43 4E"><unientity>66DD</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 43 4F"><unientity>66E6</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 43 50"><unientity>66F0</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 43 51"><unientity>66F2</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 43 52"><unientity>66F3</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 43 53"><unientity>66F4</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 43 54"><unientity>66F7</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 43 55"><unientity>66F8</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 43 56"><unientity>66F9</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 43 57"><unientity>52D7</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 43 58"><unientity>66FE</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 43 59"><unientity>66FF</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 43 5A"><unientity>6703</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 43 5B"><unientity>6708</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 43 5C"><unientity>6709</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 43 5D"><unientity>670D</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 43 5E"><unientity>670B</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 43 5F"><unientity>6717</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 43 60"><unientity>6715</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 43 61"><unientity>6714</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 43 62"><unientity>671B</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 43 63"><unientity>671D</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 43 64"><unientity>671F</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 43 66"><unientity>6727</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 43 67"><unientity>6728</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 43 69"><unientity>672C</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 43 6A"><unientity>672B</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 43 6B"><unientity>672A</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 43 6D"><unientity>673D</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 43 6F"><unientity>6731</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 43 70"><unientity>6735</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 43 71"><unientity>675E</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 43 72"><unientity>6751</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 43 73"><unientity>674E</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 43 74"><unientity>675C</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 43 75"><unientity>6750</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 43 76"><unientity>6756</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 43 77"><unientity>675F</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 43 78"><unientity>674F</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 43 79"><unientity>6749</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 43 7B"><unientity>676D</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 43 7C"><unientity>678B</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 43 7D"><unientity>6795</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 43 7E"><unientity>6789</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 44 21"><unientity>6787</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 44 22"><unientity>6777</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 44 23"><unientity>679D</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 44 24"><unientity>6797</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 44 25"><unientity>676F</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 44 26"><unientity>6771</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 44 27"><unientity>6773</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 44 28"><unientity>679C</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 44 29"><unientity>6775</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 44 2A"><unientity>679A</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 44 2B"><unientity>6790</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 44 2D"><unientity>677E</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 44 2E"><unientity>67D3</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 44 2F"><unientity>67F1</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 44 30"><unientity>67FF</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 44 31"><unientity>67D4</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 44 32"><unientity>67C4</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 44 33"><unientity>67AF</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 44 34"><unientity>67D0</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 44 35"><unientity>67D1</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 44 36"><unientity>67EF</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 44 37"><unientity>67E9</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 44 38"><unientity>67B6</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 44 39"><unientity>67EC</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 44 3A"><unientity>67E5</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 44 3B"><unientity>67FA</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 44 3C"><unientity>67DA</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 44 3D"><unientity>6805</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 44 3E"><unientity>67DE</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 44 3F"><unientity>67B8</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 44 40"><unientity>67CF</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 44 41"><unientity>67F3</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 44 42"><unientity>6848</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 44 43"><unientity>6821</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 44 44"><unientity>6838</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 44 45"><unientity>6853</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 44 46"><unientity>6846</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 44 47"><unientity>6842</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 44 48"><unientity>6854</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 44 49"><unientity>6817</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 44 4A"><unientity>683D</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 44 4B"><unientity>6851</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 44 4C"><unientity>6829</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 44 4D"><unientity>6850</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 44 4E"><unientity>6839</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 44 50"><unientity>67F4</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 44 51"><unientity>6843</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 44 52"><unientity>6840</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 44 53"><unientity>682A</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 44 54"><unientity>6845</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 44 55"><unientity>683C</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 44 56"><unientity>E941</unientity><unientityalt>6813</unientityalt><desc>Variant of 4B4456 which maps to 6813</desc></character>
-<character hex="21 44 57"><unientity>6881</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 44 58"><unientity>6893</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 44 59"><unientity>68AF</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 44 5A"><unientity>6876</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 44 5B"><unientity>68B0</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 44 5C"><unientity>68A7</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 44 5D"><unientity>6897</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 44 5E"><unientity>68B5</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 44 5F"><unientity>68B3</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 44 60"><unientity>68A2</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 44 61"><unientity>687F</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 44 62"><unientity>68B1</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 44 63"><unientity>689D</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 44 64"><unientity>68AD</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 44 65"><unientity>6886</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 44 66"><unientity>6885</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 44 67"><unientity>68A8</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 44 68"><unientity>689F</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 44 69"><unientity>6894</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 44 6A"><unientity>6883</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 44 6B"><unientity>68D5</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 44 6C"><unientity>68FA</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 44 6D"><unientity>68C4</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 44 6E"><unientity>68F2</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 44 6F"><unientity>68D2</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 44 70"><unientity>68E3</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 44 71"><unientity>68DF</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 44 72"><unientity>68CB</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 44 73"><unientity>68EE</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 44 74"><unientity>690D</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 44 75"><unientity>6905</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 44 76"><unientity>68E7</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 44 77"><unientity>68E0</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 44 78"><unientity>68F5</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 44 79"><unientity>68CD</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 44 7A"><unientity>68D7</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 44 7B"><unientity>68D8</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 44 7C"><unientity>6912</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 44 7D"><unientity>68F9</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 44 7E"><unientity>68DA</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 45 21"><unientity>690E</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 45 22"><unientity>68C9</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 45 23"><unientity>6954</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 45 24"><unientity>6930</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 45 25"><unientity>6977</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 45 26"><unientity>6975</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 45 27"><unientity>695A</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 45 28"><unientity>6960</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 45 29"><unientity>696B</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 45 2A"><unientity>694A</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 45 2B"><unientity>6968</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 45 2C"><unientity>695E</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 45 2D"><unientity>696D</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 45 2E"><unientity>6979</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 45 2F"><unientity>6953</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 45 30"><unientity>6986</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 45 31"><unientity>69A8</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 45 32"><unientity>6995</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 45 33"><unientity>699C</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 45 34"><unientity>6994</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 45 35"><unientity>69C1</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 45 36"><unientity>69B7</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 45 37"><unientity>69AE</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 45 38"><unientity>699B</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 45 39"><unientity>69CB</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 45 3A"><unientity>69D3</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 45 3B"><unientity>69BB</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 45 3C"><unientity>69AB</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 45 3D"><unientity>69CC</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 45 3E"><unientity>69AD</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 45 3F"><unientity>69D0</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 45 40"><unientity>69CD</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 45 41"><unientity>69B4</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 45 42"><unientity>6A1F</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 45 43"><unientity>69E8</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 45 44"><unientity>6A23</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 45 45"><unientity>69EA</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 45 46"><unientity>6A01</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 45 47"><unientity>6A19</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 45 48"><unientity>69FD</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 45 49"><unientity>6A1E</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 45 4A"><unientity>6A13</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 45 4B"><unientity>6A21</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 45 4C"><unientity>69F3</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 45 4D"><unientity>6A0A</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 45 4E"><unientity>6A02</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 45 4F"><unientity>6A05</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 45 50"><unientity>6A3D</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 45 51"><unientity>6A58</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 45 52"><unientity>6A59</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 45 53"><unientity>6A62</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 45 54"><unientity>6A44</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 45 55"><unientity>6A39</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 45 56"><unientity>6A6B</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 45 57"><unientity>6A3A</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 45 58"><unientity>6A38</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 45 59"><unientity>6A47</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 45 5A"><unientity>6A61</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 45 5B"><unientity>6A4B</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 45 5C"><unientity>6A35</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 45 5D"><unientity>6A5F</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 45 5E"><unientity>6A80</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 45 5F"><unientity>6A94</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 45 60"><unientity>6A84</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 45 61"><unientity>6AA2</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 45 62"><unientity>6A9C</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 45 63"><unientity>6AB8</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 45 64"><unientity>6AB3</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 45 65"><unientity>6AC3</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 45 66"><unientity>6ABB</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 45 68"><unientity>6AAC</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 45 69"><unientity>6AE5</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 45 6A"><unientity>6ADA</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 45 6B"><unientity>6ADD</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 45 6C"><unientity>6ADB</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 45 6D"><unientity>6AD3</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 45 6E"><unientity>6B04</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 45 6F"><unientity>6AFB</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 45 70"><unientity>6B0A</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 45 71"><unientity>6B16</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 45 73"><unientity>6B21</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 45 74"><unientity>6B23</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 45 76"><unientity>6B3E</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 45 77"><unientity>6B3A</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 45 78"><unientity>6B3D</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 45 79"><unientity>6B47</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 45 7A"><unientity>6B49</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 45 7B"><unientity>6B4C</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 45 7C"><unientity>6B50</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 45 7D"><unientity>6B59</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 45 7E"><unientity>6B5F</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 46 21"><unientity>6B61</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 46 23"><unientity>6B63</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 46 24"><unientity>6B64</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 46 25"><unientity>6B65</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 46 27"><unientity>6B66</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 46 28"><unientity>6B6A</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 46 29"><unientity>6B72</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 46 2A"><unientity>6B77</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 46 2B"><unientity>6B78</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 46 2C"><unientity>6B79</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 46 2D"><unientity>6B7B</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 46 2E"><unientity>6B7F</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 46 2F"><unientity>6B83</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 46 30"><unientity>6B86</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 46 31"><unientity>6B8A</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 46 32"><unientity>6B89</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 46 33"><unientity>6B98</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 46 34"><unientity>6B96</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 46 35"><unientity>6BA4</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 46 36"><unientity>6BAE</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 46 37"><unientity>6BAF</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 46 38"><unientity>6BB2</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 46 39"><unientity>6BB5</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 46 3A"><unientity>6BB7</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 46 3B"><unientity>6BBA</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 46 3C"><unientity>6BBC</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 46 3D"><unientity>6BC0</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 46 3E"><unientity>6BBF</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 46 3F"><unientity>6BC5</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 46 40"><unientity>6BC6</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 46 41"><unientity>6BCB</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 46 42"><unientity>6BCD</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 46 43"><unientity>6BCF</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 46 44"><unientity>6BD2</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 46 46"><unientity>6BD4</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 46 47"><unientity>6BD7</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 46 48"><unientity>6BDB</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 46 49"><unientity>6BEB</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 46 4A"><unientity>6BEF</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 46 4B"><unientity>6BFD</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 46 4C"><unientity>6C0F</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 46 4D"><unientity>6C11</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 46 4E"><unientity>6C10</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 46 4F"><unientity>6C13</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 46 50"><unientity>6C16</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 46 51"><unientity>6C1B</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 46 52"><unientity>6C1F</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 46 53"><unientity>6C27</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 46 54"><unientity>6C26</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 46 55"><unientity>6C23</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 46 56"><unientity>6C28</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 46 57"><unientity>6C24</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 46 58"><unientity>6C2B</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 46 59"><unientity>6C2E</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 46 5A"><unientity>6C33</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 46 5B"><unientity>E942</unientity><unientityalt>6C2F</unientityalt><desc>Variant of 45465B which maps to 6C2F</desc></character>
-<character hex="21 46 5C"><unientity>6C34</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 46 5D"><unientity>6C38</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 46 5E"><unientity>6C41</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 46 60"><unientity>6C40</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 46 61"><unientity>6C42</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 46 62"><unientity>6C5E</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 46 63"><unientity>6C57</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 46 64"><unientity>6C5F</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 46 65"><unientity>6C59</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 46 66"><unientity>6C60</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 46 67"><unientity>6C55</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 46 68"><unientity>6C50</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 46 69"><unientity>6C5D</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 46 6A"><unientity>6C9B</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 46 6B"><unientity>6C81</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 46 6D"><unientity>6C7A</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 46 6E"><unientity>6C6A</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 46 6F"><unientity>6C8C</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 46 70"><unientity>6C90</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 46 71"><unientity>6C72</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 46 72"><unientity>6C70</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 46 73"><unientity>6C68</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 46 74"><unientity>6C96</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 46 76"><unientity>E943</unientity><unientityalt>6C89</unientityalt><desc>Variant of 4B4676 which maps to 6C89</desc></character>
-<character hex="21 46 77"><unientity>6C99</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 46 78"><unientity>6C7E</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 46 79"><unientity>6C7D</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 46 7A"><unientity>6C92</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 46 7B"><unientity>6C83</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 46 7C"><unientity>6CB1</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 46 7E"><unientity>6CF3</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 47 21"><unientity>6CE3</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 47 22"><unientity>6CF0</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 47 23"><unientity>6CB8</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 47 24"><unientity>6CD3</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 47 25"><unientity>6CAB</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 47 26"><unientity>6CE5</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 47 27"><unientity>6CBD</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 47 28"><unientity>6CB3</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 47 29"><unientity>6CC4</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 47 2A"><unientity>6CD5</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 47 2B"><unientity>6CE2</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 47 2C"><unientity>6CBC</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 47 2D"><unientity>6CAE</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 47 2E"><unientity>6CB9</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 47 2F"><unientity>6CF1</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 47 30"><unientity>6CC1</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 47 31"><unientity>6CBE</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 47 32"><unientity>6CC5</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 47 33"><unientity>6CD7</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 47 34"><unientity>6CBB</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 47 35"><unientity>6CDB</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 47 36"><unientity>6CE1</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 47 37"><unientity>6CBF</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 47 38"><unientity>6CCA</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 47 39"><unientity>6CCC</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 47 3A"><unientity>6CC9</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 47 3B"><unientity>6D41</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 47 3C"><unientity>6D0B</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 47 3D"><unientity>6D32</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 47 3E"><unientity>6D25</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 47 3F"><unientity>6D31</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 47 40"><unientity>6D2A</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 47 41"><unientity>6D0C</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 47 42"><unientity>6D1E</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 47 43"><unientity>6D17</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 47 44"><unientity>6D3B</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 47 45"><unientity>6D1B</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 47 46"><unientity>6D36</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 47 47"><unientity>6D3D</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 47 48"><unientity>6D3E</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 47 49"><unientity>6D6A</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 47 4A"><unientity>6D95</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 47 4B"><unientity>6D78</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 47 4C"><unientity>6D66</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 47 4D"><unientity>6D59</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 47 4E"><unientity>6D87</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 47 4F"><unientity>6D88</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 47 50"><unientity>6D6C</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 47 51"><unientity>6D93</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 47 52"><unientity>6D89</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 47 53"><unientity>6D6E</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 47 54"><unientity>6D74</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 47 55"><unientity>6D5A</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 47 56"><unientity>6D69</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 47 57"><unientity>6D77</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 47 58"><unientity>6DD9</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 47 59"><unientity>6DDA</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 47 5A"><unientity>6DF3</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 47 5B"><unientity>6DBC</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 47 5C"><unientity>6DE4</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 47 5D"><unientity>6DB2</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 47 5E"><unientity>6DE1</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 47 5F"><unientity>6DD2</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 47 60"><unientity>6DAE</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 47 61"><unientity>6DF8</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 47 62"><unientity>6DC7</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 47 63"><unientity>6DCB</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 47 64"><unientity>6DC5</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 47 65"><unientity>6DDE</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 47 66"><unientity>6DAF</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 47 67"><unientity>6DB5</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 47 68"><unientity>6DFA</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 47 69"><unientity>6DF9</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 47 6A"><unientity>6DCC</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 47 6B"><unientity>6DF7</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 47 6C"><unientity>6DB8</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 47 6D"><unientity>6DD1</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 47 6E"><unientity>6DF1</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 47 6F"><unientity>6DE8</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 47 70"><unientity>6DEB</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 47 71"><unientity>6DD8</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 47 72"><unientity>6DFB</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 47 73"><unientity>6DEE</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 47 74"><unientity>6DF5</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 47 75"><unientity>6D8E</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 47 76"><unientity>6DC6</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 47 77"><unientity>6DEA</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 47 78"><unientity>6DC4</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 47 79"><unientity>6E54</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 47 7A"><unientity>6E21</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 47 7B"><unientity>6E38</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 47 7C"><unientity>6E32</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 47 7D"><unientity>6E67</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 47 7E"><unientity>6E20</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 48 21"><unientity>6E5B</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 48 22"><unientity>6E1A</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 48 23"><unientity>6E56</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 48 24"><unientity>6E2F</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 48 25"><unientity>6E6E</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 48 26"><unientity>6E58</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 48 27"><unientity>6E23</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 48 28"><unientity>6E24</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 48 29"><unientity>6E1B</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 48 2A"><unientity>6E25</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 48 2B"><unientity>6E4A</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 48 2C"><unientity>6E3A</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 48 2D"><unientity>6E6F</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 48 2E"><unientity>6E2D</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 48 2F"><unientity>6E34</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 48 30"><unientity>6E2C</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 48 31"><unientity>6E26</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 48 32"><unientity>6E4D</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 48 33"><unientity>6E3E</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 48 34"><unientity>6E43</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 48 35"><unientity>6E19</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 48 36"><unientity>6E1D</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 48 37"><unientity>6ED3</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 48 38"><unientity>6EB6</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 48 39"><unientity>6EC2</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 48 3B"><unientity>6EAF</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 48 3C"><unientity>6EA2</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 48 3D"><unientity>6E9D</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 48 3F"><unientity>6EA5</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 48 40"><unientity>6E98</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 48 41"><unientity>6E90</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 48 42"><unientity>6EC5</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 48 43"><unientity>6EC7</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 48 44"><unientity>6EBC</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 48 45"><unientity>6EAB</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 48 46"><unientity>6ED1</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 48 47"><unientity>6ECB</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 48 48"><unientity>6EC4</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 48 49"><unientity>6ED4</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 48 4A"><unientity>6EAA</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 48 4B"><unientity>6E96</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 48 4C"><unientity>6E9C</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 48 4D"><unientity>6F33</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 48 4E"><unientity>6EF4</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 48 4F"><unientity>6EEC</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 48 50"><unientity>6EFE</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 48 51"><unientity>6F29</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 48 52"><unientity>6F14</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 48 53"><unientity>6F3E</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 48 54"><unientity>6F2C</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 48 55"><unientity>6F32</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 48 56"><unientity>6F0F</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 48 57"><unientity>E944</unientity><unientityalt>6F22</unientityalt><desc>Variant of 4B4857 which maps to 6F22</desc></character>
-<character hex="21 48 58"><unientity>6EFF</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 48 59"><unientity>6F23</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 48 5A"><unientity>6F38</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 48 5B"><unientity>6F15</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 48 5C"><unientity>6F31</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 48 5D"><unientity>6F02</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 48 5E"><unientity>6F06</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 48 5F"><unientity>6EEF</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 48 60"><unientity>6F2B</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 48 61"><unientity>6F2F</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 48 62"><unientity>6F20</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 48 63"><unientity>6F3F</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 48 64"><unientity>6EF2</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 48 65"><unientity>6F01</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 48 66"><unientity>6F11</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 48 67"><unientity>6ECC</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 48 68"><unientity>6F2A</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 48 69"><unientity>6F7C</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 48 6A"><unientity>6F88</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 48 6B"><unientity>6F84</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 48 6C"><unientity>6F51</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 48 6D"><unientity>6F64</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 48 6E"><unientity>6F97</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 48 6F"><unientity>6F54</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 48 70"><unientity>6F7A</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 48 71"><unientity>6F86</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 48 72"><unientity>6F8E</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 48 73"><unientity>6F6D</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 48 74"><unientity>6F5B</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 48 75"><unientity>6F6E</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 48 76"><unientity>6F78</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 48 77"><unientity>6F66</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 48 78"><unientity>6F70</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 48 79"><unientity>6F58</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 48 7A"><unientity>6FC2</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 48 7B"><unientity>6FB1</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 48 7C"><unientity>6FC3</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 48 7D"><unientity>6FA7</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 48 7E"><unientity>6FA1</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 49 21"><unientity>6FA4</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 49 22"><unientity>6FC1</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 49 24"><unientity>6FC0</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 49 25"><unientity>6FB3</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 49 26"><unientity>6FDF</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 49 27"><unientity>6FD8</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 49 28"><unientity>6FF1</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 49 29"><unientity>6FE0</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 49 2A"><unientity>6FEF</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 49 2B"><unientity>E945</unientity><unientityalt>6FEB</unientityalt><desc>Variant of 4B492B which maps to 6FEB</desc></character>
-<character hex="21 49 2C"><unientity>6FE1</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 49 2D"><unientity>6FE4</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 49 2E"><unientity>6F80</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 49 31"><unientity>700B</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 49 32"><unientity>7009</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 49 33"><unientity>7006</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 49 34"><unientity>6FFA</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 49 35"><unientity>7011</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 49 36"><unientity>6FFE</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 49 37"><unientity>700F</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 49 38"><unientity>701B</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 49 39"><unientity>701A</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 49 3A"><unientity>7028</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 49 3B"><unientity>701D</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 49 3C"><unientity>7015</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 49 3D"><unientity>701F</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 49 3F"><unientity>703E</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 49 40"><unientity>704C</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 49 41"><unientity>7051</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 49 42"><unientity>7058</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 49 43"><unientity>7063</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 49 44"><unientity>7064</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 49 45"><unientity>706B</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 49 46"><unientity>7070</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 49 47"><unientity>7076</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 49 48"><unientity>707C</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 49 49"><unientity>7078</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 49 4A"><unientity>707D</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 49 4B"><unientity>7095</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 49 4C"><unientity>708E</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 49 4D"><unientity>7092</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 49 4E"><unientity>7099</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 49 4F"><unientity>708A</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 49 50"><unientity>70AB</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 49 51"><unientity>70BA</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 49 52"><unientity>70AC</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 49 53"><unientity>70B3</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 49 54"><unientity>70AF</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 49 55"><unientity>70AD</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 49 56"><unientity>70AE</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 49 57"><unientity>70B8</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 49 58"><unientity>70CA</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 49 59"><unientity>70E4</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 49 5A"><unientity>70D8</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 49 5B"><unientity>70C8</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 49 5C"><unientity>70D9</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 49 5D"><unientity>70CF</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 49 5E"><unientity>70F9</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 49 5F"><unientity>7109</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 49 60"><unientity>710A</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 49 61"><unientity>70FD</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 49 62"><unientity>7119</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 49 63"><unientity>716E</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 49 64"><unientity>711A</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 49 65"><unientity>7136</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 49 66"><unientity>7121</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 49 67"><unientity>7130</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 49 68"><unientity>7126</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 49 69"><unientity>714E</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 49 6A"><unientity>7149</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 49 6B"><unientity>7159</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 49 6C"><unientity>7164</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 49 6D"><unientity>7169</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 49 6E"><unientity>715C</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 49 6F"><unientity>716C</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 49 70"><unientity>7166</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 49 71"><unientity>7167</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 49 72"><unientity>715E</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 49 73"><unientity>7165</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 49 74"><unientity>714C</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 49 75"><unientity>717D</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 49 77"><unientity>7199</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 49 78"><unientity>718A</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 49 79"><unientity>7184</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 49 7A"><unientity>719F</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 49 7B"><unientity>71A8</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 49 7C"><unientity>71AC</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 49 7D"><unientity>71B1</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 49 7E"><unientity>71D9</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 4A 21"><unientity>71BE</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 4A 22"><unientity>71C9</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 4A 23"><unientity>71D0</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 4A 24"><unientity>71C8</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 4A 25"><unientity>71DC</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 4A 26"><unientity>71D2</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 4A 27"><unientity>71B9</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 4A 28"><unientity>71D5</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 4A 29"><unientity>71CE</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 4A 2A"><unientity>71C3</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 4A 2B"><unientity>71C4</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 4A 2C"><unientity>71EE</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 4A 2D"><unientity>71E7</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 4A 2E"><unientity>71DF</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 4A 2F"><unientity>71E5</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 4A 30"><unientity>71ED</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 4A 31"><unientity>71E6</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 4A 32"><unientity>71EC</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 4A 33"><unientity>71F4</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 4A 34"><unientity>71FB</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 4A 35"><unientity>7206</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 4A 36"><unientity>720D</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 4A 37"><unientity>7210</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 4A 38"><unientity>721B</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 4A 39"><unientity>7228</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 4A 3A"><unientity>722A</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 4A 3B"><unientity>722D</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 4A 3C"><unientity>722C</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 4A 3D"><unientity>7230</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 4A 3E"><unientity>E946</unientity><unientityalt>7235</unientityalt><desc>Variant of 4B4A3E which maps to 7235</desc></character>
-<character hex="21 4A 3F"><unientity>7236</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 4A 40"><unientity>7238</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 4A 41"><unientity>7239</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 4A 42"><unientity>723A</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 4A 43"><unientity>723B</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 4A 44"><unientity>723D</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 4A 45"><unientity>723E</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 4A 46"><unientity>7246</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 4A 47"><unientity>7247</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 4A 48"><unientity>7248</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 4A 49"><unientity>724C</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 4A 4A"><unientity>7252</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 4A 4B"><unientity>7256</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 4A 4C"><unientity>7258</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 4A 4D"><unientity>7259</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 4A 4E"><unientity>725B</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 4A 4F"><unientity>725F</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 4A 50"><unientity>725D</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 4A 51"><unientity>7262</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 4A 52"><unientity>7261</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 4A 53"><unientity>7260</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 4A 54"><unientity>7267</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 4A 55"><unientity>7269</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 4A 56"><unientity>726F</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 4A 57"><unientity>7272</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 4A 58"><unientity>7274</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 4A 59"><unientity>7279</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 4A 5A"><unientity>727D</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 4A 5B"><unientity>7281</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 4A 5C"><unientity>7280</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 4A 5D"><unientity>7284</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 4A 5E"><unientity>7296</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 4A 5F"><unientity>7292</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 4A 60"><unientity>729B</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 4A 61"><unientity>72A2</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 4A 62"><unientity>72A7</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 4A 63"><unientity>72AC</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 4A 64"><unientity>72AF</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 4A 65"><unientity>72C4</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 4A 66"><unientity>72C2</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 4A 67"><unientity>72D9</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 4A 68"><unientity>72C0</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 4A 69"><unientity>72CE</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 4A 6A"><unientity>72D7</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 4A 6B"><unientity>72D0</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 4A 6C"><unientity>72E1</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 4A 6D"><unientity>72E9</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 4A 6E"><unientity>72E0</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 4A 6F"><unientity>72FC</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 4A 70"><unientity>72F9</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 4A 72"><unientity>72FD</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 4A 73"><unientity>72F7</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 4A 74"><unientity>731C</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 4A 75"><unientity>731B</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 4A 76"><unientity>7313</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 4A 77"><unientity>7316</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 4A 78"><unientity>7319</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 4A 79"><unientity>7336</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 4A 7A"><unientity>7337</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 4A 7B"><unientity>7329</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 4A 7C"><unientity>7325</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 4A 7D"><unientity>7334</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 4A 7E"><unientity>7344</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 4B 21"><unientity>733F</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 4B 22"><unientity>733E</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 4B 23"><unientity>7345</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 4B 24"><unientity>7350</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 4B 26"><unientity>7357</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 4B 27"><unientity>7368</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 4B 28"><unientity>7370</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 4B 29"><unientity>7372</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 4B 2A"><unientity>7377</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 4B 2B"><unientity>7378</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 4B 2C"><unientity>7375</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 4B 2D"><unientity>737A</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 4B 2E"><unientity>737B</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 4B 2F"><unientity>7380</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 4B 30"><unientity>7384</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 4B 31"><unientity>7387</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 4B 32"><unientity>7389</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 4B 33"><unientity>738B</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 4B 34"><unientity>7396</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 4B 35"><unientity>739F</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 4B 36"><unientity>73A8</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 4B 37"><unientity>73A9</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 4B 38"><unientity>73AB</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 4B 39"><unientity>73BB</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 4B 3A"><unientity>73CA</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 4B 3B"><unientity>73B7</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 4B 3C"><unientity>73C0</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 4B 3E"><unientity>73B2</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 4B 3F"><unientity>73CD</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 4B 40"><unientity>73ED</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 4B 41"><unientity>73EE</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 4B 42"><unientity>73E0</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 4B 43"><unientity>7405</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 4B 44"><unientity>7409</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 4B 45"><unientity>7403</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 4B 46"><unientity>740A</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 4B 47"><unientity>73FE</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 4B 48"><unientity>7406</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 4B 49"><unientity>740D</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 4B 4A"><unientity>743A</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 4B 4B"><unientity>7435</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 4B 4C"><unientity>7436</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 4B 4D"><unientity>7434</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 4B 4E"><unientity>742A</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 4B 4F"><unientity>7433</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 4B 50"><unientity>7422</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 4B 51"><unientity>7425</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 4B 53"><unientity>7455</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 4B 54"><unientity>745F</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 4B 55"><unientity>745A</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 4B 56"><unientity>7441</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 4B 57"><unientity>743F</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 4B 58"><unientity>745B</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 4B 59"><unientity>745E</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 4B 5A"><unientity>745C</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 4B 5B"><unientity>7459</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 4B 5C"><unientity>7483</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 4B 5D"><unientity>7469</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 4B 5E"><unientity>746A</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 4B 5F"><unientity>7463</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 4B 60"><unientity>7464</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 4B 61"><unientity>7470</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 4B 62"><unientity>748B</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 4B 63"><unientity>E947</unientity><unientityalt>749C</unientityalt><desc>Variant of 4B4B63 which maps to 749C</desc></character>
-<character hex="21 4B 64"><unientity>74A3</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 4B 65"><unientity>74A7</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 4B 66"><unientity>74A9</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 4B 67"><unientity>74B0</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 4B 68"><unientity>74A6</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 4B 69"><unientity>74BD</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 4B 6A"><unientity>74CA</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 4B 6B"><unientity>74CF</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 4B 6C"><unientity>74DC</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 4B 6D"><unientity>74E0</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 4B 6E"><unientity>74E2</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 4B 6F"><unientity>74E3</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 4B 70"><unientity>74E6</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 4B 71"><unientity>74F6</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 4B 72"><unientity>74F7</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 4B 73"><unientity>7504</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 4B 74"><unientity>750C</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 4B 75"><unientity>7515</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 4B 76"><unientity>7518</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 4B 77"><unientity>751A</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 4B 78"><unientity>751C</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 4B 79"><unientity>751F</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 4B 7A"><unientity>7522</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 4B 7B"><unientity>7526</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 4B 7C"><unientity>7525</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 4B 7D"><unientity>7528</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 4B 7E"><unientity>7529</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 4C 21"><unientity>752C</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 4C 22"><unientity>752B</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 4C 23"><unientity>752D</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 4C 24"><unientity>7530</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 4C 25"><unientity>7532</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 4C 26"><unientity>7531</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 4C 27"><unientity>7533</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 4C 28"><unientity>7537</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 4C 29"><unientity>7538</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 4C 2A"><unientity>753D</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 4C 2B"><unientity>754F</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 4C 2C"><unientity>754C</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 4C 2D"><unientity>755D</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 4C 2E"><unientity>755C</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 4C 2F"><unientity>7554</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 4C 30"><unientity>755A</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 4C 31"><unientity>7559</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 4C 32"><unientity>7566</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 4C 33"><unientity>7562</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 4C 34"><unientity>7570</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 4C 35"><unientity>7565</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 4C 36"><unientity>756B</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 4C 37"><unientity>756A</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 4C 38"><unientity>7578</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 4C 39"><unientity>7576</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 4C 3A"><unientity>7586</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 4C 3B"><unientity>7587</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 4C 3C"><unientity>758A</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 4C 3E"><unientity>758F</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 4C 3F"><unientity>7591</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 4C 40"><unientity>759D</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 4C 41"><unientity>7599</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 4C 42"><unientity>759A</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 4C 43"><unientity>75A4</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 4C 44"><unientity>75AB</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 4C 45"><unientity>75A5</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 4C 46"><unientity>75C7</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 4C 47"><unientity>75C5</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 4C 48"><unientity>75B3</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 4C 49"><unientity>75B2</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 4C 4A"><unientity>75BD</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 4C 4B"><unientity>75BE</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 4C 4C"><unientity>75BC</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 4C 4D"><unientity>75B9</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 4C 4E"><unientity>75D5</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 4C 4F"><unientity>75D4</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 4C 50"><unientity>75B5</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 4C 51"><unientity>E948</unientity><unientityalt>75CA</unientityalt><desc>Variant of 4B4C51 which maps to 75CA</desc></character>
-<character hex="21 4C 52"><unientity>75DB</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 4C 53"><unientity>75E3</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 4C 54"><unientity>75D8</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 4C 55"><unientity>75DE</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 4C 56"><unientity>75D9</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 4C 57"><unientity>75E2</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 4C 58"><unientity>7601</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 4C 59"><unientity>7600</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 4C 5A"><unientity>75F0</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 4C 5B"><unientity>75F2</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 4C 5C"><unientity>75F1</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 4C 5D"><unientity>75F4</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 4C 5E"><unientity>75FF</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 4C 5F"><unientity>75FA</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 4C 60"><unientity>760D</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 4C 61"><unientity>7627</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 4C 62"><unientity>7613</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 4C 63"><unientity>760B</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 4C 65"><unientity>7620</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 4C 66"><unientity>7629</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 4C 67"><unientity>761F</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 4C 68"><unientity>7624</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 4C 69"><unientity>7626</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 4C 6A"><unientity>7621</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 4C 6B"><unientity>7634</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 4C 6C"><unientity>7638</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 4C 6D"><unientity>7646</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 4C 6E"><unientity>7642</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 4C 6F"><unientity>764C</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 4C 70"><unientity>7656</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 4C 71"><unientity>7658</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 4C 73"><unientity>7662</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 4C 74"><unientity>7665</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 4C 75"><unientity>7669</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 4C 76"><unientity>766E</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 4C 77"><unientity>766C</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 4C 78"><unientity>7671</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 4C 79"><unientity>E949</unientity><unientityalt>7672</unientityalt><desc>Variant of 4B4C79 which maps to 7672</desc></character>
-<character hex="21 4C 7A"><unientity>7678</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 4C 7B"><unientity>767C</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 4C 7C"><unientity>767B</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 4C 7D"><unientity>767D</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 4C 7E"><unientity>767E</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 4D 21"><unientity>7682</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 4D 22"><unientity>7684</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 4D 23"><unientity>7687</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 4D 24"><unientity>7686</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 4D 26"><unientity>768E</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 4D 27"><unientity>7696</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 4D 28"><unientity>7693</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 4D 29"><unientity>769A</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 4D 2A"><unientity>76AE</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 4D 2B"><unientity>76B0</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 4D 2C"><unientity>76B4</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 4D 2D"><unientity>76BA</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 4D 2E"><unientity>76BF</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 4D 2F"><unientity>76C2</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 4D 31"><unientity>76C8</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 4D 32"><unientity>76C6</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 4D 33"><unientity>76CA</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 4D 34"><unientity>76CD</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 4D 35"><unientity>76CE</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 4D 36"><unientity>76D4</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 4D 37"><unientity>76D2</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 4D 38"><unientity>76DC</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 4D 39"><unientity>76DB</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 4D 3A"><unientity>76DE</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 4D 3B"><unientity>76DF</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 4D 3C"><unientity>76E1</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 4D 3D"><unientity>76E3</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 4D 3E"><unientity>76E4</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 4D 3F"><unientity>76E7</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 4D 40"><unientity>76E5</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 4D 41"><unientity>76EA</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 4D 42"><unientity>76EE</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 4D 43"><unientity>76EF</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 4D 44"><unientity>76F2</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 4D 45"><unientity>76F4</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 4D 46"><unientity>7709</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 4D 47"><unientity>76F9</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 4D 48"><unientity>76F8</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 4D 49"><unientity>7701</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 4D 4A"><unientity>770B</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 4D 4B"><unientity>76FC</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 4D 4C"><unientity>76FE</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 4D 4D"><unientity>7729</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 4D 4E"><unientity>7720</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 4D 4F"><unientity>771E</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 4D 50"><unientity>7728</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 4D 51"><unientity>7737</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 4D 52"><unientity>773C</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 4D 53"><unientity>7736</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 4D 54"><unientity>7738</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 4D 55"><unientity>773A</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 4D 56"><unientity>773E</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 4D 57"><unientity>774F</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 4D 58"><unientity>776B</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 4D 59"><unientity>775B</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 4D 5A"><unientity>776A</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 4D 5B"><unientity>7766</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 4D 5C"><unientity>7779</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 4D 5D"><unientity>775E</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 4D 5E"><unientity>7763</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 4D 5F"><unientity>775C</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 4D 60"><unientity>776C</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 4D 61"><unientity>7768</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 4D 62"><unientity>7765</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 4D 63"><unientity>777D</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 4D 64"><unientity>7771</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 4D 65"><unientity>777F</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 4D 66"><unientity>7784</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 4D 67"><unientity>7761</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 4D 68"><unientity>7787</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 4D 69"><unientity>778E</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 4D 6A"><unientity>778C</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 4D 6B"><unientity>7791</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 4D 6C"><unientity>779F</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 4D 6D"><unientity>779E</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 4D 6E"><unientity>77A0</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 4D 6F"><unientity>77A5</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 4D 70"><unientity>77B3</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 4D 71"><unientity>77AA</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 4D 72"><unientity>77B0</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 4D 73"><unientity>77AD</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 4D 74"><unientity>77AC</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 4D 75"><unientity>77A7</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 4D 76"><unientity>77BD</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 4D 77"><unientity>77BF</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 4D 78"><unientity>77BB</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 4D 7A"><unientity>77D3</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 4D 7B"><unientity>77D7</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 4D 7C"><unientity>77DA</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 4D 7D"><unientity>77DB</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 4D 7E"><unientity>77DC</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 4E 21"><unientity>77E2</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 4E 22"><unientity>77E3</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 4E 23"><unientity>77E5</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 4E 24"><unientity>77E9</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 4E 25"><unientity>77ED</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 4E 26"><unientity>77EE</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 4E 27"><unientity>77EF</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 4E 28"><unientity>77F3</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 4E 29"><unientity>77FD</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 4E 2A"><unientity>7802</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 4E 2B"><unientity>780D</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 4E 2C"><unientity>780C</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 4E 2D"><unientity>65AB</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 4E 2E"><unientity>7830</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 4E 2F"><unientity>781D</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 4E 30"><unientity>7834</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 4E 31"><unientity>7838</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 4E 32"><unientity>7837</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 4E 33"><unientity>7827</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 4E 34"><unientity>782D</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 4E 35"><unientity>7825</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 4E 36"><unientity>786B</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 4E 37"><unientity>784F</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 4E 38"><unientity>7843</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 4E 39"><unientity>786C</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 4E 3A"><unientity>785D</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 4E 3B"><unientity>786F</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 4E 3C"><unientity>78B0</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 4E 3D"><unientity>7897</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 4E 3E"><unientity>788E</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 4E 3F"><unientity>7898</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 4E 40"><unientity>7889</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 4E 41"><unientity>7891</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 4E 42"><unientity>787C</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 4E 43"><unientity>788C</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 4E 44"><unientity>78A7</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 4E 45"><unientity>78A9</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 4E 46"><unientity>789F</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 4E 47"><unientity>78B3</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 4E 48"><unientity>78CB</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 4E 49"><unientity>78BA</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 4E 4A"><unientity>78C1</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 4E 4B"><unientity>78C5</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 4E 4C"><unientity>78BC</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 4E 4D"><unientity>78D5</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 4E 4E"><unientity>78BE</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 4E 4F"><unientity>78CA</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 4E 50"><unientity>78D0</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 4E 51"><unientity>78E8</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 4E 52"><unientity>78EC</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 4E 53"><unientity>78DA</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 4E 54"><unientity>78F7</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 4E 55"><unientity>78F4</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 4E 56"><unientity>E94A</unientity><unientityalt>78FA</unientityalt><desc>Variant of 4B4E56 which maps to 78FA</desc></character>
-<character hex="21 4E 57"><unientity>7901</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 4E 58"><unientity>78EF</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 4E 59"><unientity>790E</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 4E 5A"><unientity>7919</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 4E 5B"><unientity>7926</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 4E 5C"><unientity>792C</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 4E 5D"><unientity>792A</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 4E 5E"><unientity>792B</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 4E 5F"><unientity>793A</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 4E 60"><unientity>7940</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 4E 61"><unientity>793E</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 4E 62"><unientity>7941</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 4E 63"><unientity>7945</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 4E 64"><unientity>7949</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 4E 65"><unientity>7948</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 4E 66"><unientity>7947</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 4E 67"><unientity>7955</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 4E 68"><unientity>7960</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 4E 69"><unientity>7950</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 4E 6A"><unientity>7956</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 4E 6B"><unientity>795E</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 4E 6C"><unientity>795D</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 4E 6D"><unientity>795F</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 4E 6E"><unientity>795A</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 4E 6F"><unientity>7957</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 4E 70"><unientity>7965</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 4E 71"><unientity>7968</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 4E 72"><unientity>796D</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 4E 73"><unientity>797A</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 4E 74"><unientity>7981</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 4E 75"><unientity>797F</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 4E 76"><unientity>798F</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 4E 77"><unientity>798D</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 4E 78"><unientity>798E</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 4E 79"><unientity>79A6</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 4E 7A"><unientity>79A7</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 4E 7B"><unientity>79AA</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 4E 7C"><unientity>79AE</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 4E 7D"><unientity>79B1</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 4E 7E"><unientity>79B9</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 4F 21"><unientity>79BD</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 4F 22"><unientity>842C</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 4F 23"><unientity>79BE</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 4F 24"><unientity>79C0</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 4F 25"><unientity>79C1</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 4F 26"><unientity>79BF</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 4F 27"><unientity>79C9</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 4F 28"><unientity>79D1</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 4F 29"><unientity>79CB</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 4F 2A"><unientity>79D2</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 4F 2B"><unientity>79E4</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 4F 2C"><unientity>79E6</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 4F 2D"><unientity>79E3</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 4F 2E"><unientity>79DF</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 4F 2F"><unientity>79E7</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 4F 30"><unientity>79E9</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 4F 31"><unientity>79FB</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 4F 32"><unientity>7A05</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 4F 33"><unientity>7A0D</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 4F 34"><unientity>7A08</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 4F 35"><unientity>7A0B</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 4F 36"><unientity>7A00</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 4F 37"><unientity>7A1F</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 4F 39"><unientity>7A20</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 4F 3A"><unientity>7A1A</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 4F 3B"><unientity>7A14</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 4F 3C"><unientity>7A31</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 4F 3D"><unientity>7A2E</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 4F 3E"><unientity>7A3F</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 4F 3F"><unientity>7A3C</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 4F 40"><unientity>7A40</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 4F 41"><unientity>7A3D</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 4F 42"><unientity>7A37</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 4F 43"><unientity>7A3B</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 4F 44"><unientity>7A4D</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 4F 45"><unientity>7A4E</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 4F 46"><unientity>7A4C</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 4F 47"><unientity>7A46</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 4F 48"><unientity>7A57</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 4F 49"><unientity>7A61</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 4F 4A"><unientity>7A62</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 4F 4B"><unientity>7A6B</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 4F 4C"><unientity>7A69</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 4F 4D"><unientity>7A74</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 4F 4E"><unientity>7A76</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 4F 4F"><unientity>7A79</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 4F 50"><unientity>7A7A</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 4F 51"><unientity>7A7F</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 4F 52"><unientity>7A81</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 4F 53"><unientity>7A84</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 4F 54"><unientity>7A88</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 4F 55"><unientity>7A92</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 4F 56"><unientity>7A95</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 4F 57"><unientity>7A98</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 4F 58"><unientity>7A96</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 4F 59"><unientity>7A97</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 4F 5A"><unientity>7A9F</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 4F 5B"><unientity>7AA0</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 4F 5C"><unientity>7AAA</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 4F 5D"><unientity>7AA9</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 4F 5E"><unientity>7AAF</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 4F 5F"><unientity>7AAE</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 4F 60"><unientity>7ABA</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 4F 61"><unientity>7AC5</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 4F 62"><unientity>7AC4</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 4F 63"><unientity>7AC7</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 4F 64"><unientity>7ACA</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 4F 65"><unientity>7ACB</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 4F 66"><unientity>7AD9</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 4F 67"><unientity>7AE5</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 4F 68"><unientity>7AE3</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 4F 69"><unientity>7AED</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 4F 6A"><unientity>7AEF</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 4F 6B"><unientity>7AF6</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 4F 6C"><unientity>7AF9</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 4F 6D"><unientity>7AFA</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 4F 6E"><unientity>7AFF</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 4F 6F"><unientity>7AFD</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 4F 70"><unientity>7B06</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 4F 71"><unientity>7B11</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 4F 72"><unientity>7B20</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 4F 73"><unientity>7B2C</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 4F 74"><unientity>7B28</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 4F 75"><unientity>7B1B</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 4F 76"><unientity>7B1E</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 4F 77"><unientity>7B19</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 4F 78"><unientity>7B26</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 4F 79"><unientity>7B46</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 4F 7A"><unientity>7B49</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 4F 7B"><unientity>7B50</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 4F 7C"><unientity>7B56</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 4F 7D"><unientity>7B52</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 4F 7E"><unientity>7B4B</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 50 21"><unientity>7B4D</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 50 22"><unientity>7B4F</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 50 23"><unientity>7B54</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 50 24"><unientity>7B60</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 50 25"><unientity>7B77</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 50 26"><unientity>7B75</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 50 27"><unientity>7BA1</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 50 28"><unientity>7B94</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 50 29"><unientity>7B95</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 50 2A"><unientity>7B9D</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 50 2B"><unientity>7B8B</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 50 2C"><unientity>7B97</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 50 2D"><unientity>7B8F</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 50 2E"><unientity>7BC7</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 50 2F"><unientity>7BAD</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 50 30"><unientity>7BC4</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 50 31"><unientity>7BB1</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 50 32"><unientity>7BB4</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 50 33"><unientity>7BC0</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 50 34"><unientity>7BC6</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 50 35"><unientity>7BC1</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 50 36"><unientity>7C11</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 50 37"><unientity>7BD9</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 50 38"><unientity>7BDB</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 50 39"><unientity>7BE4</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 50 3A"><unientity>7BC9</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 50 3B"><unientity>7BE1</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 50 3C"><unientity>7BE9</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 50 3D"><unientity>7C07</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 50 3E"><unientity>7C0D</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 50 3F"><unientity>7BFE</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 50 40"><unientity>7BF7</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 50 41"><unientity>7C21</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 50 42"><unientity>7C2B</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 50 43"><unientity>7C2A</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 50 44"><unientity>7C27</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 50 45"><unientity>7C1E</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 50 46"><unientity>7C23</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 50 47"><unientity>7C3F</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 50 48"><unientity>7C3E</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 50 49"><unientity>7C38</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 50 4A"><unientity>7C37</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 50 4B"><unientity>7C3D</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 50 4C"><unientity>7C43</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 50 4D"><unientity>7C4C</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 50 4E"><unientity>7C4D</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 50 4F"><unientity>7C50</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 50 50"><unientity>7C60</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 50 51"><unientity>7C5F</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 50 52"><unientity>7C64</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 50 53"><unientity>7C6C</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 50 54"><unientity>7C6E</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 50 55"><unientity>7C72</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 50 56"><unientity>7C73</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 50 57"><unientity>7C89</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 50 58"><unientity>7C92</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 50 59"><unientity>7C97</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 50 5A"><unientity>7C9F</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 50 5B"><unientity>7CA5</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 50 5C"><unientity>7CA4</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 50 5D"><unientity>7CB1</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 50 5E"><unientity>7CB3</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 50 5F"><unientity>7CBD</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 50 60"><unientity>7CB9</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 50 61"><unientity>FA1D</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 50 62"><unientity>7CCA</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 50 63"><unientity>7CD6</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 50 64"><unientity>7CD5</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 50 65"><unientity>7CE0</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 50 66"><unientity>7CDC</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 50 67"><unientity>7CDF</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 50 68"><unientity>7CDE</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 50 69"><unientity>7CE2</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 50 6A"><unientity>7CD9</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 50 6B"><unientity>7CE7</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 50 6C"><unientity>7CEF</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 50 6E"><unientity>7CFB</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 50 6F"><unientity>7CFE</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 50 70"><unientity>7D00</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 50 71"><unientity>7D02</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 50 72"><unientity>7D05</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 50 73"><unientity>7D09</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 50 74"><unientity>7D04</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 50 75"><unientity>7D07</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 50 76"><unientity>7D21</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 50 77"><unientity>7D0B</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 50 78"><unientity>7D0A</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 50 79"><unientity>7D20</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 50 7A"><unientity>7D1C</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 50 7B"><unientity>7D22</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 50 7C"><unientity>7D15</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 50 7D"><unientity>7D14</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 50 7E"><unientity>7D10</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 51 21"><unientity>7D17</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 51 22"><unientity>E94B</unientity><unientityalt>7D0D</unientityalt><desc>Variant of 455122 which maps to 7D0D</desc></character>
-<character hex="21 51 23"><unientity>7D1A</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 51 24"><unientity>7D19</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 51 25"><unientity>7D1B</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 51 26"><unientity>7D46</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 51 28"><unientity>7D3C</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 51 29"><unientity>7D2E</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 51 2A"><unientity>7D39</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 51 2B"><unientity>7D44</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 51 2C"><unientity>7D30</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 51 2D"><unientity>7D33</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 51 2E"><unientity>7D2F</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 51 2F"><unientity>7D40</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 51 30"><unientity>7D42</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 51 31"><unientity>7D71</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 51 32"><unientity>7D5E</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 51 33"><unientity>7D68</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 51 34"><unientity>7D50</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 51 35"><unientity>7D2B</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 51 36"><unientity>7D62</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 51 37"><unientity>7D76</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 51 38"><unientity>7D61</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 51 39"><unientity>7D66</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 51 3A"><unientity>7D6E</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 51 3B"><unientity>7D72</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 51 3C"><unientity>7D93</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 51 3D"><unientity>7D91</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 51 3E"><unientity>7D79</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 51 3F"><unientity>7D8F</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 51 40"><unientity>7D81</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 51 41"><unientity>7D9C</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 51 42"><unientity>7DBB</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 51 43"><unientity>7DB0</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 51 44"><unientity>7DCA</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 51 45"><unientity>7DBE</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 51 46"><unientity>7DB4</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 51 47"><unientity>7DBA</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 51 48"><unientity>7DB2</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 51 49"><unientity>7DB1</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 51 4A"><unientity>7DBD</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 51 4B"><unientity>7DB5</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 51 4C"><unientity>7DA0</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 51 4D"><unientity>7DA2</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 51 4E"><unientity>7DAD</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 51 4F"><unientity>7DBF</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 51 50"><unientity>7DB8</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 51 51"><unientity>7DC7</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 51 52"><unientity>7DE0</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 51 53"><unientity>7DEF</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 51 54"><unientity>E94C</unientity><unientityalt>7DF4</unientityalt><desc>Variant of 4B5154 which maps to 7DF4</desc></character>
-<character hex="21 51 55"><unientity>7DD6</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 51 56"><unientity>7DD8</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 51 57"><unientity>7DEC</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 51 58"><unientity>7DDD</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 51 59"><unientity>7DE9</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 51 5A"><unientity>7DE3</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 51 5B"><unientity>7DE8</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 51 5C"><unientity>7DDA</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 51 5D"><unientity>7D9E</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 51 5E"><unientity>7DDE</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 51 5F"><unientity>7E11</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 51 60"><unientity>7E0A</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 51 61"><unientity>7E08</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 51 62"><unientity>7E1B</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 51 63"><unientity>7DFB</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 51 64"><unientity>7E23</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 51 65"><unientity>7E2E</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 51 66"><unientity>7E3E</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 51 67"><unientity>7E46</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 51 68"><unientity>7E37</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 51 69"><unientity>7E32</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 51 6A"><unientity>7E43</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 51 6B"><unientity>7E41</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 51 6C"><unientity>7E2B</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 51 6D"><unientity>7E3D</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 51 6E"><unientity>7E31</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 51 6F"><unientity>7E45</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 51 70"><unientity>7E55</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 51 71"><unientity>7E54</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 51 72"><unientity>7E61</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 51 73"><unientity>7E5E</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 51 74"><unientity>7E5A</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 51 75"><unientity>7E6B</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 51 76"><unientity>7E69</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 51 77"><unientity>7E6D</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 51 78"><unientity>7E79</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 51 79"><unientity>7E6A</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 51 7A"><unientity>8FAE</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 51 7B"><unientity>7E7D</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 51 7C"><unientity>7E82</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 51 7D"><unientity>7E7C</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 51 7E"><unientity>7E8F</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 52 21"><unientity>7E8C</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 52 22"><unientity>7E93</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 52 23"><unientity>7E96</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 52 24"><unientity>7E9C</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 52 26"><unientity>7F38</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 52 27"><unientity>7F3A</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 52 28"><unientity>7F3D</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 52 29"><unientity>7F44</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 52 2B"><unientity>7F50</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 52 2C"><unientity>7F55</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 52 2D"><unientity>7F54</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 52 2E"><unientity>7F5F</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 52 2F"><unientity>7F72</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 52 30"><unientity>7F6E</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 52 31"><unientity>7F69</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 52 32"><unientity>7F6A</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 52 33"><unientity>7F70</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 52 34"><unientity>7F75</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 52 35"><unientity>7F77</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 52 36"><unientity>7F79</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 52 37"><unientity>7F85</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 52 38"><unientity>7F88</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 52 39"><unientity>7F8A</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 52 3A"><unientity>7F8C</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 52 3B"><unientity>7F8E</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 52 3C"><unientity>7F94</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 52 3D"><unientity>7F9E</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 52 3E"><unientity>7F9A</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 52 3F"><unientity>5584</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 52 40"><unientity>7FA8</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 52 41"><unientity>7FA4</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 52 42"><unientity>7FA9</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 52 43"><unientity>7FAF</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 52 44"><unientity>7FB2</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 52 45"><unientity>7FB6</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 52 46"><unientity>7FB8</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 52 47"><unientity>7FB9</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 52 48"><unientity>7FBD</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 52 49"><unientity>7FBF</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 52 4A"><unientity>7FC5</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 52 4B"><unientity>7FC1</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 52 4C"><unientity>7FCC</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 52 4D"><unientity>7FD2</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 52 4E"><unientity>E94D</unientity><unientityalt>7FCE</unientityalt><desc>Variant of 4B524E which maps to 7FCE</desc></character>
-<character hex="21 52 4F"><unientity>7FD4</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 52 50"><unientity>7FD5</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 52 51"><unientity>7FE0</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 52 52"><unientity>7FE1</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 52 53"><unientity>7FDF</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 52 54"><unientity>7FE9</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 52 55"><unientity>7FF0</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 52 56"><unientity>7FF3</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 52 57"><unientity>7FFC</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 52 58"><unientity>7FF9</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 52 59"><unientity>7FFB</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 52 5A"><unientity>7FF1</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 52 5B"><unientity>8000</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 52 5C"><unientity>8001</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 52 5D"><unientity>8003</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 52 5E"><unientity>8006</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 52 5F"><unientity>8005</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 52 60"><unientity>800C</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 52 61"><unientity>8010</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 52 62"><unientity>800D</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 52 63"><unientity>8012</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 52 64"><unientity>8015</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 52 65"><unientity>8018</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 52 66"><unientity>8019</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 52 67"><unientity>8017</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 52 68"><unientity>801C</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 52 69"><unientity>8033</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 52 6A"><unientity>8036</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 52 6B"><unientity>803F</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 52 6C"><unientity>803D</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 52 6D"><unientity>804A</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 52 6E"><unientity>8046</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 52 6F"><unientity>8056</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 52 70"><unientity>8058</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 52 71"><unientity>805E</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 52 72"><unientity>805A</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 52 73"><unientity>8071</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 52 74"><unientity>8072</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 52 75"><unientity>8073</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 52 76"><unientity>8070</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 52 77"><unientity>806F</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 52 78"><unientity>8077</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 52 79"><unientity>8076</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 52 7A"><unientity>807E</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 52 7B"><unientity>807D</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 52 7C"><unientity>807F</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 52 7E"><unientity>8084</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 53 21"><unientity>8085</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 53 22"><unientity>8087</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 53 23"><unientity>8089</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 53 24"><unientity>808B</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 53 25"><unientity>808C</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 53 26"><unientity>8093</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 53 27"><unientity>809D</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 53 28"><unientity>8098</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 53 29"><unientity>809B</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 53 2A"><unientity>809A</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 53 2B"><unientity>8096</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 53 2C"><unientity>80B2</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 53 2D"><unientity>80AA</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 53 2E"><unientity>80BA</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 53 2F"><unientity>80A5</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 53 30"><unientity>80A2</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 53 31"><unientity>80AB</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 53 32"><unientity>80B1</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 53 33"><unientity>80AF</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 53 34"><unientity>80A1</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 53 35"><unientity>80A9</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 53 36"><unientity>80B4</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 53 37"><unientity>80D6</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 53 38"><unientity>80CC</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 53 39"><unientity>80E5</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 53 3A"><unientity>80DA</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 53 3B"><unientity>80E1</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 53 3C"><unientity>80C3</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 53 3D"><unientity>80DB</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 53 3E"><unientity>80C4</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 53 3F"><unientity>80CE</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 53 40"><unientity>80DE</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 53 41"><unientity>80E4</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 53 42"><unientity>80F0</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 53 43"><unientity>8102</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 53 44"><unientity>8105</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 53 45"><unientity>80F1</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 53 46"><unientity>80F4</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 53 47"><unientity>80ED</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 53 48"><unientity>80FD</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 53 49"><unientity>8106</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 53 4A"><unientity>80F3</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 53 4B"><unientity>80F8</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 53 4C"><unientity>810A</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 53 4D"><unientity>8108</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 53 4E"><unientity>812B</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 53 4F"><unientity>812F</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 53 50"><unientity>8116</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 53 52"><unientity>8129</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 53 53"><unientity>8155</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 53 54"><unientity>8154</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 53 55"><unientity>814B</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 53 56"><unientity>8151</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 53 57"><unientity>8150</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 53 58"><unientity>814E</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 53 59"><unientity>8139</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 53 5A"><unientity>8146</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 53 5B"><unientity>813E</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 53 5C"><unientity>8171</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 53 5D"><unientity>8170</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 53 5E"><unientity>8178</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 53 5F"><unientity>8165</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 53 60"><unientity>816E</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 53 61"><unientity>8173</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 53 62"><unientity>816B</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 53 63"><unientity>8179</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 53 64"><unientity>817A</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 53 65"><unientity>8166</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 53 66"><unientity>8180</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 53 67"><unientity>818F</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 53 68"><unientity>817F</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 53 69"><unientity>818A</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 53 6A"><unientity>8188</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 53 6B"><unientity>819D</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 53 6C"><unientity>81A0</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 53 6D"><unientity>819B</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 53 6E"><unientity>819A</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 53 6F"><unientity>819C</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 53 70"><unientity>81B3</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 53 71"><unientity>81A9</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 53 72"><unientity>81A8</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 53 73"><unientity>81C6</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 53 74"><unientity>81BA</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 53 75"><unientity>81C3</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 53 76"><unientity>81C0</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 53 77"><unientity>81C2</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 53 78"><unientity>81BF</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 53 79"><unientity>81BD</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 53 7A"><unientity>81C9</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 53 7B"><unientity>81BE</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 53 7C"><unientity>81CD</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 53 7D"><unientity>81CF</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 53 7E"><unientity>81D8</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 54 21"><unientity>81DA</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 54 22"><unientity>81DF</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 54 23"><unientity>81E3</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 54 24"><unientity>81E5</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 54 25"><unientity>81E8</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 54 26"><unientity>81EA</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 54 27"><unientity>81EC</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 54 28"><unientity>81ED</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 54 29"><unientity>81F3</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 54 2B"><unientity>81FA</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 54 2C"><unientity>81FB</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 54 2D"><unientity>81FC</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 54 2E"><unientity>81FE</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 54 2F"><unientity>8200</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 54 30"><unientity>8202</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 54 31"><unientity>8205</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 54 32"><unientity>8207</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 54 33"><unientity>8208</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 54 34"><unientity>8209</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 54 35"><unientity>820A</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 54 36"><unientity>820C</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 54 37"><unientity>820D</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 54 38"><unientity>8210</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 54 39"><unientity>8212</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 54 3A"><unientity>8214</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 54 3B"><unientity>821B</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 54 3C"><unientity>821C</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 54 3D"><unientity>821E</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 54 3E"><unientity>821F</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 54 3F"><unientity>8222</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 54 40"><unientity>822A</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 54 41"><unientity>822B</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 54 42"><unientity>822C</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 54 43"><unientity>8228</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 54 44"><unientity>8237</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 54 45"><unientity>8235</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 54 46"><unientity>8239</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 54 47"><unientity>8236</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 54 48"><unientity>8247</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 54 49"><unientity>8258</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 54 4A"><unientity>8259</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 54 4B"><unientity>8266</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 54 4C"><unientity>826E</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 54 4D"><unientity>826F</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 54 4E"><unientity>8271</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 54 4F"><unientity>8272</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 54 50"><unientity>827E</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 54 51"><unientity>8292</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 54 52"><unientity>828B</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 54 53"><unientity>828D</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 54 54"><unientity>82B3</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 54 55"><unientity>829D</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 54 56"><unientity>8299</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 54 57"><unientity>82BD</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 54 58"><unientity>82AD</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 54 59"><unientity>82AC</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 54 5A"><unientity>82A5</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 54 5B"><unientity>829F</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 54 5C"><unientity>82BB</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 54 5D"><unientity>82B1</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 54 5E"><unientity>82B9</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 54 60"><unientity>82E7</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 54 61"><unientity>8305</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 54 62"><unientity>8309</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 54 63"><unientity>82E3</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 54 64"><unientity>82DB</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 54 65"><unientity>82E6</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 54 66"><unientity>8304</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 54 67"><unientity>82E5</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 54 68"><unientity>8302</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 54 69"><unientity>82DC</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 54 6A"><unientity>82D7</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 54 6B"><unientity>82F1</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 54 6C"><unientity>8301</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 54 6D"><unientity>82D3</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 54 6E"><unientity>82D4</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 54 6F"><unientity>82D1</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 54 70"><unientity>82DE</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 54 71"><unientity>82DF</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 54 72"><unientity>832B</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 54 73"><unientity>8352</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 54 74"><unientity>834A</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 54 75"><unientity>8338</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 54 76"><unientity>8354</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 54 77"><unientity>8350</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 54 78"><unientity>8349</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 54 79"><unientity>8335</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 54 7A"><unientity>8334</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 54 7B"><unientity>8336</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 54 7C"><unientity>8331</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 54 7D"><unientity>8340</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 54 7E"><unientity>8317</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 55 21"><unientity>5179</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 55 22"><unientity>834F</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 55 23"><unientity>8339</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 55 24"><unientity>838E</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 55 25"><unientity>8398</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 55 26"><unientity>839E</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 55 27"><unientity>8378</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 55 28"><unientity>83A2</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 55 29"><unientity>8396</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 55 2A"><unientity>83A7</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 55 2B"><unientity>83AB</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 55 2C"><unientity>E94E</unientity><unientityalt>8392</unientityalt><desc>Variant of 4B552C which maps to 8392</desc></character>
-<character hex="21 55 2D"><unientity>838A</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 55 2E"><unientity>8393</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 55 2F"><unientity>83A0</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 55 30"><unientity>8389</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 55 31"><unientity>8377</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 55 32"><unientity>837C</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 55 33"><unientity>837B</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 55 34"><unientity>840D</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 55 35"><unientity>83E0</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 55 36"><unientity>83E9</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 55 38"><unientity>8403</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 55 39"><unientity>83C5</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 55 3A"><unientity>83C1</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 55 3B"><unientity>840B</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 55 3C"><unientity>83EF</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 55 3E"><unientity>83F1</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 55 3F"><unientity>83BD</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 55 41"><unientity>840A</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 55 42"><unientity>840C</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 55 43"><unientity>83CC</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 55 44"><unientity>83DC</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 55 45"><unientity>83CA</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 55 46"><unientity>83F2</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 55 47"><unientity>840E</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 55 48"><unientity>8404</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 55 49"><unientity>843D</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 55 4A"><unientity>8482</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 55 4B"><unientity>8431</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 55 4C"><unientity>8475</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 55 4D"><unientity>8466</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 55 4E"><unientity>8457</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 55 4F"><unientity>8449</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 55 50"><unientity>846C</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 55 51"><unientity>846B</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 55 52"><unientity>845B</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 55 53"><unientity>8477</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 55 54"><unientity>843C</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 55 55"><unientity>8435</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 55 56"><unientity>8461</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 55 57"><unientity>8463</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 55 58"><unientity>8469</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 55 59"><unientity>8438</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 55 5A"><unientity>84B2</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 55 5B"><unientity>849E</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 55 5C"><unientity>84BF</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 55 5D"><unientity>84C6</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 55 5E"><unientity>84C4</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 55 5F"><unientity>84C9</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 55 60"><unientity>849C</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 55 61"><unientity>84CB</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 55 62"><unientity>84B8</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 55 63"><unientity>84C0</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 55 64"><unientity>8499</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 55 65"><unientity>84D3</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 55 66"><unientity>8490</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 55 67"><unientity>84BC</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 55 68"><unientity>853D</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 55 69"><unientity>84FF</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 55 6A"><unientity>8517</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 55 6B"><unientity>851A</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 55 6C"><unientity>84EE</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 55 6D"><unientity>852C</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 55 6E"><unientity>852D</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 55 6F"><unientity>8513</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 55 71"><unientity>8523</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 55 72"><unientity>8521</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 55 73"><unientity>8514</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 55 74"><unientity>84EC</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 55 75"><unientity>8525</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 55 76"><unientity>8569</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 55 77"><unientity>854A</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 55 78"><unientity>8559</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 55 79"><unientity>8548</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 55 7A"><unientity>8568</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 55 7B"><unientity>8543</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 55 7C"><unientity>856A</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 55 7D"><unientity>8549</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 55 7E"><unientity>8584</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 56 21"><unientity>85AA</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 56 22"><unientity>856D</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 56 23"><unientity>859B</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 56 24"><unientity>8591</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 56 25"><unientity>857E</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 56 26"><unientity>8594</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 56 27"><unientity>859C</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 56 28"><unientity>8587</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 56 29"><unientity>E94F</unientity><unientityalt>85CD</unientityalt><desc>Variant of 4B5629 which maps to 85CD</desc></character>
-<character hex="21 56 2A"><unientity>85A9</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 56 2B"><unientity>85CF</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 56 2C"><unientity>85AF</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 56 2D"><unientity>85D0</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 56 2E"><unientity>85C9</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 56 2F"><unientity>85B0</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 56 30"><unientity>85E9</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 56 31"><unientity>85DD</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 56 32"><unientity>85EA</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 56 33"><unientity>85E4</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 56 34"><unientity>85D5</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 56 35"><unientity>85E5</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 56 36"><unientity>85FB</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 56 37"><unientity>85F9</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 56 38"><unientity>8611</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 56 39"><unientity>85FA</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 56 3A"><unientity>8606</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 56 3B"><unientity>860B</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 56 3C"><unientity>8607</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 56 3D"><unientity>860A</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 56 3E"><unientity>862D</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 56 3F"><unientity>8617</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 56 40"><unientity>861A</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 56 41"><unientity>8638</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 56 42"><unientity>863F</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 56 43"><unientity>864E</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 56 44"><unientity>8650</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 56 45"><unientity>8654</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 56 46"><unientity>5F6A</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 56 47"><unientity>8655</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 56 48"><unientity>865C</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 56 49"><unientity>865B</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 56 4A"><unientity>865F</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 56 4B"><unientity>865E</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 56 4C"><unientity>8667</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 56 4F"><unientity>8679</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 56 50"><unientity>86A9</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 56 51"><unientity>86AA</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 56 52"><unientity>868A</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 56 53"><unientity>8693</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 56 54"><unientity>86A4</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 56 55"><unientity>868C</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 56 56"><unientity>86A3</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 56 57"><unientity>86C0</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 56 58"><unientity>86C7</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 56 59"><unientity>86B5</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 56 5A"><unientity>86CB</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 56 5B"><unientity>86B6</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 56 5C"><unientity>86C4</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 56 5D"><unientity>86C6</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 56 5E"><unientity>86B1</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 56 5F"><unientity>86AF</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 56 60"><unientity>86DF</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 56 61"><unientity>86D9</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 56 62"><unientity>86ED</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 56 63"><unientity>86D4</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 56 64"><unientity>86DB</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 56 65"><unientity>86E4</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 56 66"><unientity>86FB</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 56 67"><unientity>86F9</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 56 68"><unientity>8707</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 56 69"><unientity>8703</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 56 6A"><unientity>8708</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 56 6B"><unientity>8700</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 56 6C"><unientity>86FE</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 56 6D"><unientity>8713</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 56 6E"><unientity>8702</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 56 6F"><unientity>871C</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 56 70"><unientity>873F</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 56 71"><unientity>873B</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 56 72"><unientity>8722</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 56 73"><unientity>8725</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 56 74"><unientity>8734</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 56 75"><unientity>8718</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 56 76"><unientity>8755</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 56 77"><unientity>8760</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 56 78"><unientity>8776</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 56 79"><unientity>8774</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 56 7A"><unientity>8766</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 56 7B"><unientity>8778</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 56 7C"><unientity>8768</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 56 7D"><unientity>874C</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 56 7E"><unientity>8757</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 57 21"><unientity>8759</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 57 22"><unientity>8783</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 57 23"><unientity>8782</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 57 24"><unientity>87A2</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 57 25"><unientity>879E</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 57 26"><unientity>878D</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 57 27"><unientity>879F</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 57 28"><unientity>87D1</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 57 29"><unientity>87C0</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 57 2A"><unientity>87AB</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 57 2B"><unientity>87B3</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 57 2C"><unientity>87BB</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 57 2D"><unientity>87C8</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 57 2E"><unientity>87D2</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 57 2F"><unientity>87BA</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 57 30"><unientity>87C6</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 57 31"><unientity>87CB</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 57 32"><unientity>87EF</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 57 33"><unientity>87F2</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 57 34"><unientity>87EC</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 57 35"><unientity>87FB</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 57 36"><unientity>8805</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 57 37"><unientity>880D</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 57 38"><unientity>87F9</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 57 39"><unientity>8814</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 57 3A"><unientity>8815</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 57 3B"><unientity>8822</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 57 3C"><unientity>8823</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 57 3D"><unientity>8821</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 57 3E"><unientity>881F</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 57 3F"><unientity>8831</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 57 40"><unientity>8839</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 57 41"><unientity>8836</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 57 42"><unientity>883B</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 57 43"><unientity>8840</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 57 44"><unientity>884C</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 57 45"><unientity>884D</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 57 46"><unientity>E950</unientity><unientityalt>8853</unientityalt><desc>Variant of 4B5746 which maps to 8853</desc></character>
-<character hex="21 57 47"><unientity>8857</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 57 48"><unientity>8859</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 57 49"><unientity>885B</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 57 4A"><unientity>885D</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 57 4B"><unientity>8861</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 57 4C"><unientity>8862</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 57 4D"><unientity>8863</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 57 4E"><unientity>521D</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 57 4F"><unientity>8868</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 57 50"><unientity>886B</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 57 51"><unientity>8882</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 57 52"><unientity>8881</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 57 53"><unientity>8870</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 57 54"><unientity>8877</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 57 55"><unientity>8888</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 57 56"><unientity>88AB</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 57 57"><unientity>8892</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 57 58"><unientity>8896</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 57 59"><unientity>888D</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 57 5A"><unientity>888B</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 57 5B"><unientity>889E</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 57 5C"><unientity>88C1</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 57 5D"><unientity>88C2</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 57 5E"><unientity>88B1</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 57 5F"><unientity>88DF</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 57 60"><unientity>88D9</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 57 61"><unientity>88D8</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 57 62"><unientity>88DC</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 57 63"><unientity>88CF</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 57 64"><unientity>88D4</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 57 65"><unientity>88DD</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 57 66"><unientity>88D5</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 57 67"><unientity>8902</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 57 68"><unientity>88F3</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 57 69"><unientity>88F8</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 57 6A"><unientity>88F9</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 57 6B"><unientity>88F4</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 57 6C"><unientity>88FD</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 57 6D"><unientity>88E8</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 57 6E"><unientity>891A</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 57 6F"><unientity>8910</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 57 71"><unientity>8913</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 57 72"><unientity>8912</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 57 73"><unientity>8932</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 57 74"><unientity>892A</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 57 75"><unientity>8925</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 57 76"><unientity>892B</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 57 77"><unientity>893B</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 57 78"><unientity>8936</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 57 79"><unientity>8938</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 57 7A"><unientity>8944</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 57 7B"><unientity>895F</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 57 7C"><unientity>8960</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 57 7D"><unientity>8956</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 57 7E"><unientity>8964</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 58 21"><unientity>896A</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 58 22"><unientity>896F</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 58 23"><unientity>8972</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 58 24"><unientity>897F</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 58 25"><unientity>8981</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 58 26"><unientity>8983</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 58 28"><unientity>898B</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 58 29"><unientity>898F</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 58 2A"><unientity>8993</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 58 2B"><unientity>8996</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 58 2C"><unientity>89AA</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 58 2D"><unientity>89A6</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 58 2E"><unientity>89AC</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 58 2F"><unientity>89B2</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 58 30"><unientity>89BA</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 58 31"><unientity>89BD</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 58 32"><unientity>89C0</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 58 33"><unientity>89D2</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 58 34"><unientity>89E3</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 58 35"><unientity>89F4</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 58 36"><unientity>89F8</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 58 37"><unientity>8A00</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 58 38"><unientity>8A08</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 58 39"><unientity>8A02</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 58 3A"><unientity>8A03</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 58 3B"><unientity>8A10</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 58 3C"><unientity>8A18</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 58 3D"><unientity>8A0E</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 58 3E"><unientity>8A0C</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 58 3F"><unientity>8A15</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 58 40"><unientity>8A0A</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 58 41"><unientity>8A16</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 58 42"><unientity>8A17</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 58 43"><unientity>8A13</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 58 44"><unientity>8A2A</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 58 45"><unientity>8A23</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 58 46"><unientity>8A1D</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 58 47"><unientity>8A25</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 58 48"><unientity>8A31</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 58 49"><unientity>8A2D</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 58 4A"><unientity>8A1B</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 58 4B"><unientity>8A1F</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 58 4C"><unientity>8A3B</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 58 4D"><unientity>8A60</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 58 4E"><unientity>8A55</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 58 4F"><unientity>8A5E</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 58 51"><unientity>8A41</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 58 52"><unientity>8A54</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 58 53"><unientity>8A5B</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 58 54"><unientity>8A50</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 58 55"><unientity>8A46</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 58 56"><unientity>8A34</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 58 57"><unientity>8A3A</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 58 58"><unientity>8A6B</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 58 59"><unientity>8A72</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 58 5A"><unientity>8A73</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 58 5B"><unientity>8A66</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 58 5C"><unientity>8A69</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 58 5D"><unientity>8A70</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 58 5E"><unientity>8A63</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 58 5F"><unientity>8A7C</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 58 60"><unientity>8AA0</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 58 61"><unientity>8A87</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 58 62"><unientity>8A85</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 58 63"><unientity>8A6D</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 58 64"><unientity>8A79</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 58 65"><unientity>8A62</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 58 66"><unientity>8A71</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 58 67"><unientity>8A6E</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 58 68"><unientity>8A6C</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 58 69"><unientity>8AAA</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 58 6A"><unientity>8AA6</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 58 6B"><unientity>8AA1</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 58 6C"><unientity>8A9E</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 58 6D"><unientity>8A8C</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 58 6E"><unientity>8A93</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 58 6F"><unientity>8AA3</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 58 70"><unientity>8A8D</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 58 71"><unientity>E951</unientity><unientityalt>8AA4</unientityalt><desc>Variant of 4B5871 which maps to 8AA4</desc></character>
-<character hex="21 58 72"><unientity>8AA8</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 58 73"><unientity>8AA5</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 58 74"><unientity>8A98</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 58 75"><unientity>8A91</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 58 76"><unientity>8ABC</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 58 77"><unientity>8AC4</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 58 78"><unientity>8AD2</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 58 79"><unientity>8AC7</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 58 7A"><unientity>E952</unientity><unientityalt>8ACB</unientityalt><desc>Variant of 4B587A which maps to 8ACB</desc></character>
-<character hex="21 58 7B"><unientity>8AF8</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 58 7C"><unientity>8AB2</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 58 7D"><unientity>8ABF</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 58 7E"><unientity>8AC9</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 59 21"><unientity>8AC2</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 59 22"><unientity>8AB0</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 59 23"><unientity>8A95</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 59 24"><unientity>8AD6</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 59 25"><unientity>8AE6</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 59 26"><unientity>8AFA</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 59 27"><unientity>8AEB</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 59 28"><unientity>8AF1</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 59 29"><unientity>8AE7</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 59 2A"><unientity>8ADC</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 59 2B"><unientity>8B00</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 59 2C"><unientity>E953</unientity><unientityalt>8B01</unientityalt><desc>Variant of 2D592C which maps to 8B01</desc></character>
-<character hex="21 59 2D"><unientity>8B02</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 59 2E"><unientity>8AFE</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 59 2F"><unientity>8AF7</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 59 30"><unientity>8AED</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 59 31"><unientity>8B17</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 59 32"><unientity>8B19</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 59 33"><unientity>8B0E</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 59 34"><unientity>8B1B</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 59 35"><unientity>8B0A</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 59 36"><unientity>8B21</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 59 37"><unientity>8B04</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 59 38"><unientity>8B1D</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 59 39"><unientity>8B39</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 59 3A"><unientity>8B2C</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 59 3B"><unientity>8B28</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 59 3C"><unientity>8B58</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 59 3D"><unientity>8B5C</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 59 3E"><unientity>8B4E</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 59 3F"><unientity>8B49</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 59 40"><unientity>8B5A</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 59 41"><unientity>8B41</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 59 42"><unientity>8B4F</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 59 43"><unientity>8B70</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 59 44"><unientity>8B6C</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 59 45"><unientity>8B66</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 59 46"><unientity>8B6F</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 59 47"><unientity>8B74</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 59 48"><unientity>8B77</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 59 49"><unientity>8B7D</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 59 4A"><unientity>8B80</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 59 4B"><unientity>8B8A</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 59 4C"><unientity>8B93</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 59 4D"><unientity>8B96</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 59 4E"><unientity>8B92</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 59 4F"><unientity>8B9A</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 59 51"><unientity>8C41</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 59 52"><unientity>8C3F</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 59 53"><unientity>8C46</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 59 54"><unientity>8C48</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 59 55"><unientity>8C49</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 59 56"><unientity>8C4C</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 59 57"><unientity>8C4E</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 59 58"><unientity>8C50</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 59 59"><unientity>8C54</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 59 5A"><unientity>8C5A</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 59 5C"><unientity>8C62</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 59 5D"><unientity>8C6A</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 59 5E"><unientity>8C6B</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 59 5F"><unientity>8C6C</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 59 60"><unientity>8C7A</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 59 61"><unientity>8C79</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 59 62"><unientity>8C82</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 59 63"><unientity>8C8A</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 59 64"><unientity>8C89</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 59 65"><unientity>8C8D</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 59 66"><unientity>8C8C</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 59 67"><unientity>8C93</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 59 68"><unientity>8C9D</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 59 69"><unientity>8C9E</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 59 6A"><unientity>8CA0</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 59 6B"><unientity>8CA2</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 59 6C"><unientity>8CA1</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 59 6D"><unientity>8CAC</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 59 6E"><unientity>8CAB</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 59 6F"><unientity>8CA8</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 59 70"><unientity>8CAA</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 59 71"><unientity>8CA7</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 59 72"><unientity>8CA9</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 59 73"><unientity>8CAF</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 59 75"><unientity>8CBB</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 59 76"><unientity>8CC1</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 59 77"><unientity>8CC0</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 59 78"><unientity>8CB4</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 59 79"><unientity>8CBC</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 59 7A"><unientity>8CB7</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 59 7B"><unientity>8CB6</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 59 7C"><unientity>8CBD</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 59 7D"><unientity>8CB8</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 59 7E"><unientity>8CBF</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 5A 21"><unientity>8CC5</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 5A 22"><unientity>8CC7</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 5A 23"><unientity>8CCA</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 5A 24"><unientity>8CC8</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 5A 25"><unientity>8CC4</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 5A 26"><unientity>8CB2</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 5A 27"><unientity>8CC3</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 5A 28"><unientity>8CC2</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 5A 29"><unientity>8CD3</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 5A 2A"><unientity>8CD1</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 5A 2B"><unientity>8CD2</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 5A 2C"><unientity>8CE0</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 5A 2D"><unientity>8CE6</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 5A 2F"><unientity>8CE3</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 5A 30"><unientity>8CE2</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 5A 31"><unientity>8CE4</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 5A 32"><unientity>8CDE</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 5A 33"><unientity>8CDC</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 5A 34"><unientity>8CEA</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 5A 35"><unientity>8CED</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 5A 36"><unientity>8CF4</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 5A 37"><unientity>8CFD</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 5A 38"><unientity>8CFA</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 5A 39"><unientity>8D05</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 5A 3A"><unientity>8CFC</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 5A 3B"><unientity>E954</unientity><unientityalt>8D08</unientityalt><desc>Variant of 4B5A3B which maps to 8D08</desc></character>
-<character hex="21 5A 3C"><unientity>8D0B</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 5A 3D"><unientity>8D0A</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 5A 3E"><unientity>8D0F</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 5A 3F"><unientity>8D0D</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 5A 40"><unientity>8D13</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 5A 41"><unientity>8D16</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 5A 42"><unientity>8D1B</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 5A 43"><unientity>8D64</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 5A 44"><unientity>8D67</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 5A 45"><unientity>8D66</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 5A 46"><unientity>8D6B</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 5A 47"><unientity>8D6D</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 5A 48"><unientity>8D70</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 5A 49"><unientity>8D74</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 5A 4A"><unientity>8D73</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 5A 4B"><unientity>8D77</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 5A 4C"><unientity>8D85</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 5A 4D"><unientity>8D8A</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 5A 4E"><unientity>8D81</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 5A 4F"><unientity>8D99</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 5A 50"><unientity>8D95</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 5A 51"><unientity>8DA3</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 5A 52"><unientity>8D9F</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 5A 53"><unientity>8DA8</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 5A 54"><unientity>8DB3</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 5A 55"><unientity>8DB4</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 5A 56"><unientity>8DBE</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 5A 57"><unientity>8DCE</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 5A 58"><unientity>8DDD</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 5A 59"><unientity>8DDB</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 5A 5A"><unientity>8DCB</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 5A 5B"><unientity>8DDA</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 5A 5C"><unientity>8DC6</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 5A 5D"><unientity>8DD1</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 5A 5E"><unientity>8DCC</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 5A 5F"><unientity>8DE1</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 5A 60"><unientity>8DDF</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 5A 61"><unientity>8DE8</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 5A 62"><unientity>8DF3</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 5A 63"><unientity>8DFA</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 5A 64"><unientity>8DEA</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 5A 65"><unientity>8DEF</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 5A 66"><unientity>8DFC</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 5A 67"><unientity>8E2B</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 5A 68"><unientity>8E10</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 5A 69"><unientity>8E22</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 5A 6A"><unientity>8E1D</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 5A 6B"><unientity>8E0F</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 5A 6C"><unientity>8E29</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 5A 6D"><unientity>8E1F</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 5A 6E"><unientity>8E44</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 5A 6F"><unientity>8E31</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 5A 70"><unientity>8E42</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 5A 71"><unientity>8E34</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 5A 72"><unientity>8E39</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 5A 73"><unientity>8E35</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 5A 74"><unientity>8E49</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 5A 75"><unientity>8E4B</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 5A 76"><unientity>8E48</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 5A 77"><unientity>8E4A</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 5A 78"><unientity>8E63</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 5A 79"><unientity>8E59</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 5A 7A"><unientity>8E66</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 5A 7B"><unientity>8E64</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 5A 7C"><unientity>8E72</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 5A 7D"><unientity>8E6C</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 5A 7E"><unientity>8E7A</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 5B 21"><unientity>8E76</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 5B 22"><unientity>8E7C</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 5B 23"><unientity>8E82</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 5B 24"><unientity>8E81</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 5B 25"><unientity>8E87</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 5B 26"><unientity>8E89</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 5B 27"><unientity>8E85</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 5B 28"><unientity>8E8A</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 5B 29"><unientity>E955</unientity><unientityalt>8E8D</unientityalt><desc>Variant of 4B5B29 which maps to 8E8D</desc></character>
-<character hex="21 5B 2A"><unientity>8E91</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 5B 2B"><unientity>8EA1</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 5B 2C"><unientity>8EAA</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 5B 2D"><unientity>8EAB</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 5B 2E"><unientity>8EAC</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 5B 2F"><unientity>8EB2</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 5B 30"><unientity>8EBA</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 5B 31"><unientity>8EC0</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 5B 32"><unientity>8ECA</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 5B 33"><unientity>8ECB</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 5B 34"><unientity>8ECD</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 5B 35"><unientity>8ECC</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 5B 36"><unientity>8ED2</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 5B 37"><unientity>8ED4</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 5B 38"><unientity>8EDF</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 5B 39"><unientity>8EDB</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 5B 3A"><unientity>8EFB</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 5B 3B"><unientity>8EF8</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 5B 3C"><unientity>8EFC</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 5B 3D"><unientity>8F03</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 5B 3E"><unientity>8EFE</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 5B 3F"><unientity>8F09</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 5B 40"><unientity>8F0A</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 5B 41"><unientity>8F14</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 5B 42"><unientity>8F12</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 5B 43"><unientity>8F15</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 5B 44"><unientity>8F13</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 5B 45"><unientity>8F26</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 5B 46"><unientity>8F1B</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 5B 47"><unientity>8F1F</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 5B 48"><unientity>8F1D</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 5B 49"><unientity>8F29</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 5B 4A"><unientity>8F2A</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 5B 4B"><unientity>8F1C</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 5B 4C"><unientity>8F3B</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 5B 4D"><unientity>8F2F</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 5B 4E"><unientity>8F38</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 5B 4F"><unientity>8F44</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 5B 50"><unientity>8F3E</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 5B 51"><unientity>8F45</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 5B 52"><unientity>E956</unientity><unientityalt>8F42</unientityalt><desc>Variant of 4B5B52 which maps to 8F42</desc></character>
-<character hex="21 5B 53"><unientity>8F3F</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 5B 54"><unientity>8F4D</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 5B 55"><unientity>8F49</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 5B 56"><unientity>8F54</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 5B 57"><unientity>8F4E</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 5B 58"><unientity>8F5F</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 5B 59"><unientity>8F61</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 5B 5A"><unientity>8F9B</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 5B 5B"><unientity>8F9C</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 5B 5C"><unientity>8F9F</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 5B 5D"><unientity>8FA3</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 5B 5E"><unientity>8FA8</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 5B 5F"><unientity>8FA6</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 5B 60"><unientity>8FAD</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 5B 61"><unientity>8FAF</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 5B 62"><unientity>8FB0</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 5B 63"><unientity>8FB1</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 5B 64"><unientity>8FB2</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 5B 66"><unientity>8FC6</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 5B 67"><unientity>8FC5</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 5B 68"><unientity>8FC4</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 5B 69"><unientity>5DE1</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 5B 6A"><unientity>8FCE</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 5B 6B"><unientity>8FD1</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 5B 6C"><unientity>8FD4</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 5B 6D"><unientity>E957</unientity><unientityalt>8FF0</unientityalt><desc>Variant of 275B6D which maps to 8FF0</desc></character>
-<character hex="21 5B 6E"><unientity>8FE6</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 5B 6F"><unientity>8FE2</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 5B 70"><unientity>8FEA</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 5B 71"><unientity>8FE5</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 5B 73"><unientity>8FEB</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 5B 74"><unientity>9001</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 5B 75"><unientity>9006</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 5B 76"><unientity>8FF7</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 5B 77"><unientity>9000</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 5B 7A"><unientity>9003</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 5B 7B"><unientity>8FFD</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 5B 7C"><unientity>9005</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 5B 7D"><unientity>9019</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 5B 7E"><unientity>9023</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 5C 21"><unientity>901F</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 5C 22"><unientity>9017</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 5C 23"><unientity>901D</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 5C 24"><unientity>9010</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 5C 26"><unientity>900D</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 5C 27"><unientity>901E</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 5C 28"><unientity>901A</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 5C 29"><unientity>9020</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 5C 2A"><unientity>900F</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 5C 2B"><unientity>9022</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 5C 2C"><unientity>9016</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 5C 2D"><unientity>901B</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 5C 2E"><unientity>9014</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 5C 2F"><unientity>902E</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 5C 30"><unientity>9035</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 5C 31"><unientity>9031</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 5C 32"><unientity>FA25</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 5C 33"><unientity>9032</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 5C 34"><unientity>904B</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 5C 36"><unientity>9053</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 5C 37"><unientity>9042</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 5C 38"><unientity>9050</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 5C 39"><unientity>9054</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 5C 3A"><unientity>9055</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 5C 3B"><unientity>903C</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 5C 3C"><unientity>9047</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 5C 3D"><unientity>904F</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 5C 3E"><unientity>904E</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 5C 3F"><unientity>904D</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 5C 40"><unientity>9051</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 5C 41"><unientity>9041</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 5C 42"><unientity>903E</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 5C 43"><unientity>9058</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 5C 44"><unientity>9060</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 5C 45"><unientity>905C</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 5C 46"><unientity>9063</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 5C 47"><unientity>9065</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 5C 48"><unientity>905E</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 5C 49"><unientity>9069</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 5C 4A"><unientity>906E</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 5C 4B"><unientity>9068</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 5C 4C"><unientity>906D</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 5C 4D"><unientity>9075</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 5C 4E"><unientity>9074</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 5C 4F"><unientity>9078</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 5C 50"><unientity>9072</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 5C 51"><unientity>9077</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 5C 52"><unientity>907C</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 5C 53"><unientity>907A</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 5C 54"><unientity>907F</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 5C 55"><unientity>907D</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 5C 56"><unientity>9081</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 5C 57"><unientity>9084</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 5C 58"><unientity>9082</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 5C 59"><unientity>9080</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 5C 5A"><unientity>9087</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 5C 5B"><unientity>908A</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 5C 5C"><unientity>9090</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 5C 5D"><unientity>908F</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 5C 5E"><unientity>9091</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 5C 5F"><unientity>9095</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 5C 60"><unientity>90A3</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 5C 61"><unientity>90A2</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 5C 62"><unientity>90AA</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 5C 63"><unientity>90A6</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 5C 64"><unientity>90B5</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 5C 65"><unientity>90B1</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 5C 66"><unientity>90B8</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 5C 67"><unientity>90CE</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 5C 68"><unientity>90CA</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 5C 6A"><unientity>90E1</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 5C 6B"><unientity>90E8</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 5C 6C"><unientity>90ED</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 5C 6D"><unientity>90F5</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 5C 6E"><unientity>90FD</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 5C 6F"><unientity>9102</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 5C 70"><unientity>9109</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 5C 71"><unientity>9112</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 5C 72"><unientity>9119</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 5C 73"><unientity>912D</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 5C 74"><unientity>9130</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 5C 75"><unientity>9127</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 5C 76"><unientity>9131</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 5C 77"><unientity>E958</unientity><unientityalt>9139</unientityalt><desc>Variant of 4B5C77 which maps to 9139</desc></character>
-<character hex="21 5C 78"><unientity>9149</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 5C 79"><unientity>914B</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 5C 7A"><unientity>914A</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 5C 7B"><unientity>9152</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 5C 7C"><unientity>914D</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 5C 7D"><unientity>914C</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 5C 7E"><unientity>9157</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 5D 21"><unientity>9163</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 5D 22"><unientity>9165</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 5D 23"><unientity>916C</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 5D 24"><unientity>9169</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 5D 25"><unientity>916A</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 5D 26"><unientity>9175</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 5D 27"><unientity>9178</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 5D 28"><unientity>9177</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 5D 29"><unientity>9187</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 5D 2A"><unientity>9189</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 5D 2B"><unientity>918B</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 5D 2C"><unientity>9183</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 5D 2D"><unientity>9192</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 5D 2E"><unientity>91A3</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 5D 2F"><unientity>919E</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 5D 30"><unientity>919C</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 5D 31"><unientity>91AB</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 5D 32"><unientity>91AC</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 5D 33"><unientity>91BA</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 5D 34"><unientity>91C0</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 5D 35"><unientity>91C1</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 5D 36"><unientity>91C7</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 5D 37"><unientity>91C9</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 5D 38"><unientity>91CB</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 5D 3A"><unientity>91CD</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 5D 3B"><unientity>91CE</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 5D 3C"><unientity>91CF</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 5D 3D"><unientity>91D0</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 5D 3E"><unientity>91D1</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 5D 3F"><unientity>91DD</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 5D 40"><unientity>91D8</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 5D 41"><unientity>91D7</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 5D 42"><unientity>91DC</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 5D 43"><unientity>91F5</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 5D 44"><unientity>91E6</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 5D 45"><unientity>91E3</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 5D 46"><unientity>91E7</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 5D 47"><unientity>9223</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 5D 48"><unientity>920D</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 5D 49"><unientity>9215</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 5D 4A"><unientity>9209</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 5D 4B"><unientity>9214</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 5D 4C"><unientity>921E</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 5D 4D"><unientity>9210</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 5D 4F"><unientity>9237</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 5D 50"><unientity>9238</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 5D 51"><unientity>923D</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 5D 52"><unientity>923E</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 5D 53"><unientity>9240</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 5D 54"><unientity>924B</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 5D 55"><unientity>925B</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 5D 56"><unientity>9264</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 5D 57"><unientity>9251</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 5D 58"><unientity>E959</unientity><unientityalt>9234</unientityalt><desc>Variant of 4B5D58 which maps to 9234</desc></character>
-<character hex="21 5D 59"><unientity>9278</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 5D 5A"><unientity>9280</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 5D 5B"><unientity>92AC</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 5D 5C"><unientity>9285</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 5D 5D"><unientity>9298</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 5D 5E"><unientity>9296</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 5D 5F"><unientity>927B</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 5D 60"><unientity>9293</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 5D 61"><unientity>929C</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 5D 62"><unientity>92C5</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 5D 63"><unientity>92BB</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 5D 64"><unientity>92B3</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 5D 65"><unientity>92EA</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 5D 66"><unientity>92B7</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 5D 67"><unientity>92C1</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 5D 68"><unientity>92E4</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 5D 69"><unientity>92BC</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 5D 6A"><unientity>92D2</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 5D 6B"><unientity>9320</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 5D 6C"><unientity>9336</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 5D 6D"><unientity>92F8</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 5D 6E"><unientity>9333</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 5D 6F"><unientity>932F</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 5D 70"><unientity>9322</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 5D 71"><unientity>92FC</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 5D 72"><unientity>932B</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 5D 73"><unientity>931A</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 5D 74"><unientity>9304</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 5D 75"><unientity>9310</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 5D 76"><unientity>9326</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 5D 77"><unientity>934D</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 5D 78"><unientity>9382</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 5D 79"><unientity>9375</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 5D 7A"><unientity>9365</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 5D 7C"><unientity>934B</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 5D 7D"><unientity>9328</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 5D 7E"><unientity>9370</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 5E 21"><unientity>937E</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 5E 22"><unientity>9318</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 5E 23"><unientity>936C</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 5E 24"><unientity>935B</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 5E 25"><unientity>938A</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 5E 26"><unientity>9394</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 5E 27"><unientity>93AE</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 5E 28"><unientity>9396</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 5E 29"><unientity>93A2</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 5E 2A"><unientity>93B3</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 5E 2B"><unientity>93E1</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 5E 2C"><unientity>93D1</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 5E 2D"><unientity>93D6</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 5E 2E"><unientity>93C3</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 5E 2F"><unientity>93DF</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 5E 30"><unientity>93D7</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 5E 31"><unientity>93C8</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 5E 32"><unientity>93E2</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 5E 33"><unientity>93DC</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 5E 34"><unientity>93E4</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 5E 35"><unientity>93DD</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 5E 36"><unientity>93CD</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 5E 37"><unientity>93D8</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 5E 39"><unientity>9403</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 5E 3A"><unientity>942E</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 5E 3B"><unientity>93FD</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 5E 3C"><unientity>9433</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 5E 3D"><unientity>9435</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 5E 3E"><unientity>943A</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 5E 3F"><unientity>9438</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 5E 40"><unientity>9432</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 5E 42"><unientity>9451</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 5E 43"><unientity>9444</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 5E 44"><unientity>9463</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 5E 45"><unientity>9460</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 5E 46"><unientity>9472</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 5E 47"><unientity>9470</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 5E 48"><unientity>947E</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 5E 49"><unientity>947C</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 5E 4A"><unientity>947D</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 5E 4B"><unientity>947F</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 5E 4C"><unientity>9577</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 5E 4D"><unientity>9580</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 5E 4E"><unientity>9582</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 5E 4F"><unientity>9583</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 5E 50"><unientity>9589</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 5E 51"><unientity>9594</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 5E 52"><unientity>958F</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 5E 53"><unientity>958B</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 5E 54"><unientity>9591</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 5E 55"><unientity>9593</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 5E 56"><unientity>9592</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 5E 57"><unientity>9598</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 5E 58"><unientity>95A1</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 5E 59"><unientity>95A8</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 5E 5A"><unientity>95A9</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 5E 5B"><unientity>95A3</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 5E 5C"><unientity>95A5</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 5E 5D"><unientity>95A4</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 5E 5E"><unientity>95B1</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 5E 5F"><unientity>95AD</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 5E 60"><unientity>95BB</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 5E 61"><unientity>95CA</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 5E 62"><unientity>95CB</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 5E 63"><unientity>95CC</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 5E 64"><unientity>95C8</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 5E 65"><unientity>95C6</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 5E 67"><unientity>95D6</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 5E 68"><unientity>95D0</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 5E 69"><unientity>95DC</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 5E 6A"><unientity>95E1</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 5E 6B"><unientity>95E2</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 5E 6C"><unientity>961C</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 5E 6D"><unientity>9621</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 5E 6E"><unientity>9632</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 5E 6F"><unientity>9631</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 5E 70"><unientity>962E</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 5E 71"><unientity>962A</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 5E 72"><unientity>9640</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 5E 73"><unientity>963F</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 5E 74"><unientity>963B</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 5E 75"><unientity>9644</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 5E 76"><unientity>9650</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 5E 77"><unientity>964C</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 5E 78"><unientity>964B</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 5E 79"><unientity>964D</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 5E 7A"><unientity>9662</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 5E 7B"><unientity>9663</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 5E 7C"><unientity>965B</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 5E 7D"><unientity>9661</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 5E 7E"><unientity>965D</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 5F 21"><unientity>9664</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 5F 22"><unientity>966A</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 5F 23"><unientity>9673</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 5F 24"><unientity>9678</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 5F 25"><unientity>9675</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 5F 26"><unientity>9672</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 5F 27"><unientity>9676</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 5F 28"><unientity>9677</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 5F 29"><unientity>9674</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 5F 2A"><unientity>9670</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 5F 2B"><unientity>968A</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 5F 2C"><unientity>968E</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 5F 2D"><unientity>968B</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 5F 2E"><unientity>967D</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 5F 2F"><unientity>9685</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 5F 30"><unientity>9686</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 5F 31"><unientity>968D</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 5F 32"><unientity>9698</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 5F 33"><unientity>9694</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 5F 34"><unientity>9699</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 5F 35"><unientity>9695</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 5F 36"><unientity>969C</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 5F 37"><unientity>969B</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 5F 38"><unientity>96A7</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 5F 39"><unientity>96A8</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 5F 3A"><unientity>96AA</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 5F 3B"><unientity>96B1</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 5F 3C"><unientity>96B4</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 5F 3D"><unientity>96B8</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 5F 3E"><unientity>96BB</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 5F 3F"><unientity>96C0</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 5F 40"><unientity>96C7</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 5F 41"><unientity>96C6</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 5F 42"><unientity>96C4</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 5F 43"><unientity>96C1</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 5F 44"><unientity>96C5</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 5F 45"><unientity>96CD</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 5F 46"><unientity>96CB</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 5F 47"><unientity>96C9</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 5F 48"><unientity>96CC</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 5F 49"><unientity>96D5</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 5F 4A"><unientity>96D6</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 5F 4B"><unientity>96DC</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 5F 4C"><unientity>96DE</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 5F 4D"><unientity>96DB</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 5F 4E"><unientity>96D9</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 5F 4F"><unientity>96E2</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 5F 50"><unientity>E95A</unientity><unientityalt>96E3</unientityalt><desc>Variant of 4B5F50 which maps to 96E3</desc></character>
-<character hex="21 5F 51"><unientity>96E8</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 5F 52"><unientity>96EA</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 5F 53"><unientity>96EF</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 5F 54"><unientity>96F2</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 5F 55"><unientity>96FB</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 5F 56"><unientity>96F7</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 5F 57"><unientity>96F9</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 5F 58"><unientity>96F6</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 5F 59"><unientity>9700</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 5F 5A"><unientity>9707</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 5F 5B"><unientity>9704</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 5F 5C"><unientity>9709</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 5F 5D"><unientity>9706</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 5F 5E"><unientity>9711</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 5F 5F"><unientity>970E</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 5F 60"><unientity>9716</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 5F 61"><unientity>970F</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 5F 62"><unientity>970D</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 5F 63"><unientity>9713</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 5F 64"><unientity>971C</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 5F 65"><unientity>971E</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 5F 66"><unientity>972A</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 5F 67"><unientity>9727</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 5F 68"><unientity>9738</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 5F 69"><unientity>9739</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 5F 6A"><unientity>9732</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 5F 6B"><unientity>973D</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 5F 6C"><unientity>973E</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 5F 6D"><unientity>9744</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 5F 6E"><unientity>9742</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 5F 6F"><unientity>9748</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 5F 70"><unientity>9751</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 5F 71"><unientity>FA1C</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 5F 72"><unientity>E95B</unientity><unientityalt>975B</unientityalt><desc>Variant of 4B5F72 which maps to 975B</desc></character>
-<character hex="21 5F 73"><unientity>975C</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 5F 74"><unientity>975E</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 5F 75"><unientity>9760</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 5F 76"><unientity>9761</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 5F 78"><unientity>9766</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 5F 79"><unientity>9768</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 5F 7A"><unientity>9769</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 5F 7B"><unientity>9776</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 5F 7C"><unientity>9774</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 5F 7D"><unientity>977C</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 5F 7E"><unientity>9785</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 60 21"><unientity>978D</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 60 22"><unientity>978B</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 60 23"><unientity>978F</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 60 24"><unientity>9798</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 60 25"><unientity>97A0</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 60 26"><unientity>97A3</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 60 27"><unientity>97A6</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 60 28"><unientity>97AD</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 60 29"><unientity>97C3</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 60 2A"><unientity>97C1</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 60 2B"><unientity>97C6</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 60 2C"><unientity>97CB</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 60 2D"><unientity>97CC</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 60 2E"><unientity>97D3</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 60 2F"><unientity>97DC</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 60 30"><unientity>97ED</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 60 31"><unientity>97F3</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 60 32"><unientity>7AE0</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 60 33"><unientity>7ADF</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 60 34"><unientity>97F6</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 60 35"><unientity>97FB</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 60 36"><unientity>E95C</unientity><unientityalt>97FF</unientityalt><desc>Variant of 456036 which maps to 97FF</desc></character>
-<character hex="21 60 37"><unientity>9801</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 60 38"><unientity>9802</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 60 39"><unientity>9803</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 60 3A"><unientity>9805</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 60 3B"><unientity>9806</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 60 3C"><unientity>9808</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 60 3D"><unientity>9810</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 60 3E"><unientity>980A</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 60 3F"><unientity>9811</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 60 40"><unientity>9813</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 60 41"><unientity>9812</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 60 42"><unientity>980C</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 60 43"><unientity>9817</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 60 44"><unientity>E95D</unientity><unientityalt>9818</unientityalt><desc>Variant of 4B6044 which maps to 9818</desc></character>
-<character hex="21 60 45"><unientity>9821</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 60 46"><unientity>982D</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 60 47"><unientity>9830</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 60 48"><unientity>9838</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 60 49"><unientity>983B</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 60 4A"><unientity>9839</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 60 4B"><unientity>9837</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 60 4C"><unientity>9824</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 60 4D"><unientity>9846</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 60 4E"><unientity>9854</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 60 4F"><unientity>984D</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 60 50"><unientity>984C</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 60 51"><unientity>984E</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 60 52"><unientity>9853</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 60 53"><unientity>E95E</unientity><unientityalt>985E</unientityalt><desc>Variant of 4B6053 which maps to 985E</desc></character>
-<character hex="21 60 54"><unientity>985A</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 60 55"><unientity>9858</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 60 56"><unientity>9867</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 60 57"><unientity>986B</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 60 58"><unientity>986F</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 60 59"><unientity>9871</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 60 5A"><unientity>9870</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 60 5B"><unientity>98A8</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 60 5C"><unientity>98AF</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 60 5D"><unientity>98B1</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 60 5E"><unientity>98B3</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 60 5F"><unientity>98B6</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 60 60"><unientity>98BA</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 60 61"><unientity>98BC</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 60 62"><unientity>98C4</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 60 63"><unientity>98DB</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 60 64"><unientity>98DF</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 60 65"><unientity>98E2</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 60 66"><unientity>98E7</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 60 67"><unientity>98E9</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 60 68"><unientity>98ED</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 60 69"><unientity>98EA</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 60 6A"><unientity>98EE</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 60 6B"><unientity>98EF</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 60 6C"><unientity>98FC</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 60 6D"><unientity>98F4</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 60 6E"><unientity>98FD</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 60 6F"><unientity>98FE</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 60 70"><unientity>9903</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 60 71"><unientity>990A</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 60 72"><unientity>990C</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 60 73"><unientity>9909</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 60 74"><unientity>9910</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 60 75"><unientity>9912</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 60 76"><unientity>9918</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 60 77"><unientity>9913</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 60 78"><unientity>9905</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 60 79"><unientity>9928</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 60 7A"><unientity>991E</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 60 7B"><unientity>991B</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 60 7C"><unientity>9921</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 60 7D"><unientity>9935</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 60 7E"><unientity>993E</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 61 21"><unientity>993F</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 61 22"><unientity>993D</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 61 23"><unientity>9945</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 61 24"><unientity>9952</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 61 25"><unientity>9951</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 61 26"><unientity>995C</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 61 27"><unientity>995E</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 61 28"><unientity>9996</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 61 29"><unientity>9999</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 61 2A"><unientity>99A5</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 61 2B"><unientity>99A8</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 61 2C"><unientity>99AC</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 61 2D"><unientity>99AE</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 61 2E"><unientity>99AD</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 61 2F"><unientity>99B3</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 61 30"><unientity>99B1</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 61 31"><unientity>99B4</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 61 32"><unientity>99C1</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 61 33"><unientity>99D0</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 61 34"><unientity>99DD</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 61 35"><unientity>99D5</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 61 36"><unientity>99DF</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 61 37"><unientity>99DB</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 61 38"><unientity>99D2</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 61 39"><unientity>99D9</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 61 3A"><unientity>99D1</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 61 3B"><unientity>99ED</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 61 3C"><unientity>99F1</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 61 3D"><unientity>9A01</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 61 3E"><unientity>99FF</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 61 3F"><unientity>99E2</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 61 40"><unientity>9A0E</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 61 41"><unientity>9A19</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 61 42"><unientity>9A16</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 61 43"><unientity>9A2B</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 61 44"><unientity>9A30</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 61 45"><unientity>9A37</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 61 46"><unientity>9A43</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 61 47"><unientity>9A45</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 61 48"><unientity>9A40</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 61 49"><unientity>9A3E</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 61 4A"><unientity>9A55</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 61 4B"><unientity>9A5A</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 61 4C"><unientity>9A5B</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 61 4D"><unientity>9A57</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 61 4E"><unientity>9A5F</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 61 4F"><unientity>9A62</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 61 50"><unientity>9A65</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 61 51"><unientity>9A6A</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 61 52"><unientity>9AA8</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 61 53"><unientity>9AAF</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 61 54"><unientity>9AB0</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 61 55"><unientity>9AB7</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 61 56"><unientity>9AB8</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 61 57"><unientity>9ABC</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 61 58"><unientity>9ACF</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 61 59"><unientity>9AD3</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 61 5A"><unientity>9AD4</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 61 5B"><unientity>9AD2</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 61 5C"><unientity>9AD8</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 61 5D"><unientity>9AE5</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 61 5F"><unientity>9AEE</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 61 60"><unientity>9AFB</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 61 61"><unientity>9AED</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 61 62"><unientity>9B03</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 61 63"><unientity>9B06</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 61 64"><unientity>9B0D</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 61 65"><unientity>9B1A</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 61 66"><unientity>9B22</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 61 67"><unientity>9B25</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 61 68"><unientity>9B27</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 61 6A"><unientity>9B31</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 61 6B"><unientity>9B32</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 61 6C"><unientity>9B3C</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 61 6D"><unientity>9B41</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 61 6E"><unientity>9B42</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 61 6F"><unientity>9B45</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 61 70"><unientity>9B44</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 61 71"><unientity>9B4F</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 61 72"><unientity>9B54</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 61 73"><unientity>9B58</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 61 74"><unientity>9B5A</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 61 75"><unientity>9B77</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 61 76"><unientity>9B6F</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 61 77"><unientity>9B91</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 61 78"><unientity>9BAB</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 61 79"><unientity>9BAE</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 61 7A"><unientity>9BAA</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 61 7B"><unientity>9BCA</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 61 7C"><unientity>9BC9</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 61 7D"><unientity>9BE8</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 61 7E"><unientity>9BE7</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 62 21"><unientity>9C13</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 62 22"><unientity>9C0D</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 62 23"><unientity>9BFD</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 62 24"><unientity>9C2D</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 62 25"><unientity>9C25</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 62 26"><unientity>9C31</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 62 27"><unientity>9C3E</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 62 28"><unientity>9C3B</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 62 29"><unientity>9C54</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 62 2A"><unientity>9C57</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 62 2B"><unientity>9C56</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 62 2C"><unientity>9C49</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 62 2D"><unientity>9C77</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 62 2E"><unientity>9C78</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 62 2F"><unientity>9CE5</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 62 30"><unientity>9CE9</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 62 31"><unientity>9CF6</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 62 32"><unientity>9CF4</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 62 33"><unientity>9CF3</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 62 34"><unientity>9D06</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 62 35"><unientity>9D09</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 62 36"><unientity>9D15</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 62 37"><unientity>9D23</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 62 38"><unientity>9D28</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 62 39"><unientity>9D26</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 62 3A"><unientity>9D1B</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 62 3B"><unientity>E95F</unientity><unientityalt>9D12</unientityalt><desc>Variant of 4B623B which maps to 9D12</desc></character>
-<character hex="21 62 3C"><unientity>9D3B</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 62 3D"><unientity>9D3F</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 62 3E"><unientity>9D61</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 62 3F"><unientity>9D51</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 62 40"><unientity>9D60</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 62 41"><unientity>9D5D</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 62 42"><unientity>9D89</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 62 43"><unientity>9D72</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 62 44"><unientity>9D6A</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 62 45"><unientity>9D6C</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 62 46"><unientity>9DB4</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 62 47"><unientity>9DAF</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 62 48"><unientity>9DC2</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 62 49"><unientity>9DD3</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 62 4A"><unientity>9DD7</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 62 4B"><unientity>9DE5</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 62 4C"><unientity>9DF9</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 62 4D"><unientity>9DFA</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 62 4E"><unientity>9E1A</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 62 4F"><unientity>9E1E</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 62 50"><unientity>9E79</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 62 51"><unientity>9E7D</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 62 52"><unientity>9E7C</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 62 53"><unientity>9E7F</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 62 54"><unientity>9E82</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 62 55"><unientity>9E8B</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 62 56"><unientity>9E97</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 62 57"><unientity>9E92</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 62 58"><unientity>9E93</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 62 59"><unientity>9E9D</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 62 5A"><unientity>9E9F</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 62 5B"><unientity>9EA5</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 62 5C"><unientity>9EA9</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 62 5D"><unientity>9EB4</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 62 5E"><unientity>9EB5</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 62 5F"><unientity>9EBB</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 62 60"><unientity>9EBC</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 62 61"><unientity>9EBE</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 62 62"><unientity>9EC3</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 62 63"><unientity>9ECD</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 62 64"><unientity>9ECE</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 62 65"><unientity>9ECF</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 62 66"><unientity>9ED1</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 62 67"><unientity>58A8</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 62 68"><unientity>9ED8</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 62 69"><unientity>9ED4</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 62 6A"><unientity>9EDE</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 62 6B"><unientity>9EDC</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 62 6C"><unientity>9EDB</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 62 6D"><unientity>9EDD</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 62 6E"><unientity>9EE0</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 62 6F"><unientity>9EE8</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 62 70"><unientity>9EEF</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 62 71"><unientity>9EF4</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 62 72"><unientity>9EF7</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 62 73"><unientity>9F07</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 62 74"><unientity>9F0E</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 62 75"><unientity>9F13</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 62 76"><unientity>9F15</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 62 77"><unientity>9F19</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 62 78"><unientity>9F20</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 62 79"><unientity>9F2C</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 62 7A"><unientity>9F34</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 62 7B"><unientity>9F3B</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 62 7C"><unientity>9F3E</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 62 7D"><unientity>9F4A</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 62 7E"><unientity>9F4B</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 63 21"><unientity>9F52</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 63 22"><unientity>9F5F</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 63 23"><unientity>9F63</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 63 24"><unientity>E960</unientity><unientityalt>9F61</unientityalt><desc>Variant of 456324 which maps to 9F61</desc></character>
-<character hex="21 63 25"><unientity>9F66</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 63 26"><unientity>9F5C</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 63 27"><unientity>9F6C</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 63 28"><unientity>9F6A</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 63 29"><unientity>9F77</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 63 2A"><unientity>9F72</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 63 2B"><unientity>9F8D</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 63 2C"><unientity>9F94</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 63 2D"><unientity>9F9C</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 63 30"><unientity>8288</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 64 24"><unientity>4E0F</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 64 25"><unientity>5187</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 64 29"><unientity>4E28</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 64 2E"><unientity>4E31</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 64 31"><unientity>4E36</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 64 33"><unientity>4E3F</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 64 34"><unientity>4E42</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 64 37"><unientity>738D</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 64 3C"><unientity>4E5C</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 64 3F"><unientity>6C39</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 64 46"><unientity>4E85</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 64 50"><unientity>4EA0</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 64 51"><unientity>4EA2</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 64 52"><unientity>4EB3</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 64 55"><unientity>E961</unientity><unientityalt>4EB6</unientityalt><desc>Variant of 4B6455 which maps to 4EB6</desc></character>
-<character hex="21 64 58"><unientity>4EB9</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 64 5A"><unientity>4EBC</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 64 5E"><unientity>4EC9</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 64 61"><unientity>4EC8</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 64 62"><unientity>E9E2</unientity><desc>East Asian ideograph not in Unicode</desc></character>
-<character hex="21 64 63"><unientity>4EE8</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 64 6B"><unientity>4EE1</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 64 72"><unientity>4F08</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 64 73"><unientity>4F0E</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 64 75"><unientity>4F03</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 64 7C"><unientity>4F22</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 65 27"><unientity>4EF5</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 65 28"><unientity>4F07</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 65 2A"><unientity>4F00</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 65 2C"><unientity>4F0B</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 65 32"><unientity>4F3B</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 65 36"><unientity>4F58</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 65 37"><unientity>4F62</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 65 39"><unientity>4F64</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 65 3A"><unientity>4F49</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 65 3F"><unientity>4F3E</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 65 40"><unientity>4F66</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 65 44"><unientity>4F67</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 65 4D"><unientity>4F68</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 65 4E"><unientity>4F5A</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 65 4F"><unientity>4F5F</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 65 56"><unientity>4F82</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 65 57"><unientity>4F7C</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 65 5A"><unientity>4F98</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 65 5B"><unientity>4F92</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 65 5C"><unientity>4F7D</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 65 60"><unientity>4F80</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 65 61"><unientity>4F74</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 65 62"><unientity>4F76</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 65 64"><unientity>4FA2</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 65 66"><unientity>4F91</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 65 67"><unientity>4F95</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 65 6C"><unientity>4F4C</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 65 6D"><unientity>4F97</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 65 6E"><unientity>4F94</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 65 70"><unientity>4F79</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 65 71"><unientity>4F9A</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 65 72"><unientity>4F81</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 65 73"><unientity>4F78</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 65 76"><unientity>4F9C</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 65 77"><unientity>4F90</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 65 7B"><unientity>4F7A</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 65 7C"><unientity>4FCD</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 66 22"><unientity>4FE4</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 66 26"><unientity>4FB7</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 66 27"><unientity>4FC5</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 66 29"><unientity>4FC9</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 66 2A"><unientity>4FE5</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 66 2C"><unientity>4FE7</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 66 33"><unientity>4FDC</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 66 35"><unientity>4FD4</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 66 37"><unientity>4FC1</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 66 3B"><unientity>4FDB</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 66 3E"><unientity>4FC6</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 66 43"><unientity>4FB9</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 66 46"><unientity>501E</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 66 48"><unientity>503F</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 66 49"><unientity>5005</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 66 4C"><unientity>5007</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 66 4D"><unientity>5013</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 66 4E"><unientity>5022</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 66 52"><unientity>4FF5</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 66 59"><unientity>4FF4</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 66 5B"><unientity>5037</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 66 5E"><unientity>502E</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 66 61"><unientity>4FF6</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 66 62"><unientity>501C</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 66 66"><unientity>502C</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 66 69"><unientity>5010</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 66 79"><unientity>503D</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 67 22"><unientity>506F</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 67 23"><unientity>5050</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 67 25"><unientity>5070</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 67 29"><unientity>5053</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 67 2A"><unientity>506A</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 67 2C"><unientity>5056</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 67 31"><unientity>506D</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 67 38"><unientity>505D</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 67 39"><unientity>5048</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 67 3B"><unientity>5058</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 67 3C"><unientity>5072</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 67 41"><unientity>5041</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 67 46"><unientity>5015</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 67 48"><unientity>507A</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 67 4A"><unientity>506C</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 67 4B"><unientity>505F</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 67 4D"><unientity>506B</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 67 4E"><unientity>5094</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 67 50"><unientity>509E</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 67 52"><unientity>509B</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 67 53"><unientity>509A</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 67 57"><unientity>50A3</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 67 5A"><unientity>508C</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 67 5C"><unientity>5088</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 67 62"><unientity>508E</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 67 64"><unientity>5095</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 67 67"><unientity>50A6</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 67 6A"><unientity>5092</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 67 6C"><unientity>509C</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 67 71"><unientity>50C7</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 67 75"><unientity>50C9</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 67 7B"><unientity>50CA</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 67 7C"><unientity>50B4</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 68 22"><unientity>50C2</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 68 2C"><unientity>50BA</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 68 2E"><unientity>50CD</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 68 32"><unientity>50D4</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 68 34"><unientity>50EF</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 68 35"><unientity>50E6</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 68 3A"><unientity>50F4</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 68 3B"><unientity>50CE</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 68 3C"><unientity>50DD</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 68 41"><unientity>50F3</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 68 42"><unientity>50E8</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 68 44"><unientity>50F0</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 68 46"><unientity>50D9</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 68 55"><unientity>50EC</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 68 5B"><unientity>510E</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 68 5F"><unientity>5105</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 68 61"><unientity>50FC</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 68 65"><unientity>5106</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 68 66"><unientity>5107</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 68 67"><unientity>510F</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 68 68"><unientity>50FE</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 68 69"><unientity>510B</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 68 6A"><unientity>50FD</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 68 6D"><unientity>5101</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 68 71"><unientity>5115</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 68 72"><unientity>5113</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 68 78"><unientity>511A</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 68 79"><unientity>9797</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 68 7E"><unientity>5126</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 69 29"><unientity>5124</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 69 2B"><unientity>5129</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 69 30"><unientity>5131</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 69 3E"><unientity>5135</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 69 40"><unientity>5133</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 69 44"><unientity>513A</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 69 47"><unientity>5139</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 69 48"><unientity>513B</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 69 51"><unientity>5159</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 69 52"><unientity>515B</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 69 55"><unientity>515D</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 69 56"><unientity>515E</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 69 58"><unientity>515F</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 69 59"><unientity>5161</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 69 5C"><unientity>5163</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 69 67"><unientity>5182</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 69 69"><unientity>5184</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 69 6E"><unientity>518F</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 69 70"><unientity>5194</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 69 71"><unientity>5193</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 69 75"><unientity>5196</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 69 7B"><unientity>51A1</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 69 7C"><unientity>51A3</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 6A 22"><unientity>51AA</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 6A 23"><unientity>51AB</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 6A 26"><unientity>51B1</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 6A 35"><unientity>51BC</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 6A 43"><unientity>51CA</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 6A 46"><unientity>51C7</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 6A 4E"><unientity>51D1</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 6A 4F"><unientity>51D0</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 6A 54"><unientity>51D3</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 6A 63"><unientity>51D9</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 6A 66"><unientity>51DF</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 6A 68"><unientity>51E2</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 6A 73"><unientity>5160</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 6A 78"><unientity>51F5</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 6A 79"><unientity>51F7</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 6B 24"><unientity>5213</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 6B 26"><unientity>5216</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 6B 2A"><unientity>521C</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 6B 33"><unientity>5231</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 6B 36"><unientity>5235</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 6B 37"><unientity>5232</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 6B 39"><unientity>5233</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 6B 3E"><unientity>5244</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 6B 43"><unientity>5249</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 6B 47"><unientity>5260</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 6B 4B"><unientity>525A</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 6B 4C"><unientity>5252</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 6B 4D"><unientity>525E</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 6B 50"><unientity>525F</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 6B 53"><unientity>5255</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 6B 5B"><unientity>526E</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 6B 5E"><unientity>5268</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 6B 5F"><unientity>7B9A</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 6B 6B"><unientity>5278</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 6B 74"><unientity>5282</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 6B 75"><unientity>5281</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 6B 79"><unientity>528C</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 6B 7A"><unientity>528A</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 6B 7C"><unientity>5290</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 6C 21"><unientity>5293</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 6C 27"><unientity>5296</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 6C 29"><unientity>5298</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 6C 2B"><unientity>529A</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 6C 2C"><unientity>5299</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 6C 2E"><unientity>52A6</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 6C 31"><unientity>52AD</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 6C 33"><unientity>52AE</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 6C 37"><unientity>52BB</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 6C 38"><unientity>52BC</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 6C 3C"><unientity>52CA</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 6C 3D"><unientity>52CD</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 6C 40"><unientity>52D0</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 6C 41"><unientity>52D1</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 6C 46"><unientity>52D4</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 6C 48"><unientity>52D6</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 6C 4C"><unientity>52E3</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 6C 4E"><unientity>52E1</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 6C 50"><unientity>55E7</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 6C 53"><unientity>52E9</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 6C 58"><unientity>52F0</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 6C 5A"><unientity>52F1</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 6C 5E"><unientity>52F7</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 6C 61"><unientity>52F9</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 6C 62"><unientity>52FA</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 6C 64"><unientity>52FC</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 6C 69"><unientity>5307</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 6C 6A"><unientity>5303</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 6C 6B"><unientity>E9E3</unientity><desc>East Asian ideograph not in Unicode</desc></character>
-<character hex="21 6C 6E"><unientity>530A</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 6C 6F"><unientity>530B</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 6C 77"><unientity>5311</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 6C 7B"><unientity>6706</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 6D 23"><unientity>531A</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 6D 24"><unientity>531C</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 6D 25"><unientity>531F</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 6D 2E"><unientity>532D</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 6D 33"><unientity>5330</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 6D 36"><unientity>5335</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 6D 3A"><unientity>5338</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 6D 3E"><unientity>533D</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 6D 41"><unientity>534C</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 6D 42"><unientity>534D</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 6D 4B"><unientity>535D</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 6D 4C"><unientity>5363</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 6D 4E"><unientity>E9E4</unientity><desc>East Asian ideograph not in Unicode</desc></character>
-<character hex="21 6D 53"><unientity>536C</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 6D 57"><unientity>5372</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 6D 58"><unientity>537A</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 6D 5D"><unientity>5380</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 6D 64"><unientity>538E</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 6D 66"><unientity>5393</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 6D 67"><unientity>5394</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 6D 6D"><unientity>5399</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 6D 74"><unientity>8652</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 6D 7A"><unientity>53A4</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 6D 7B"><unientity>53AB</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 6E 2C"><unientity>53B5</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 6E 2E"><unientity>53B9</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 6E 3E"><unientity>53D0</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 6E 48"><unientity>53DA</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 6E 57"><unientity>53FB</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 6E 58"><unientity>535F</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 6E 61"><unientity>5414</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 6E 68"><unientity>5406</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 6E 6C"><unientity>544C</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 6E 6D"><unientity>5445</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 6E 6F"><unientity>541A</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 6E 70"><unientity>5432</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 6E 76"><unientity>5421</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 6E 78"><unientity>5430</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 6E 79"><unientity>5454</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 6E 7D"><unientity>543D</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 6F 21"><unientity>544F</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 6F 24"><unientity>542A</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 6F 26"><unientity>5422</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 6F 27"><unientity>5423</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 6F 2E"><unientity>545F</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 6F 2F"><unientity>549C</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 6F 35"><unientity>5488</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 6F 37"><unientity>547F</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 6F 39"><unientity>5482</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 6F 3A"><unientity>546D</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 6F 3B"><unientity>5491</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 6F 42"><unientity>5494</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 6F 43"><unientity>546B</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 6F 49"><unientity>548D</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 6F 4A"><unientity>5463</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 6F 4B"><unientity>5474</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 6F 52"><unientity>5466</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 6F 53"><unientity>5464</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 6F 55"><unientity>54A4</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 6F 58"><unientity>54A1</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 6F 5A"><unientity>54AD</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 6F 5B"><unientity>54BA</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 6F 5C"><unientity>54CF</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 6F 5E"><unientity>54BE</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 6F 60"><unientity>54A5</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 6F 63"><unientity>54A7</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 6F 64"><unientity>54B5</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 6F 66"><unientity>54A2</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 6F 67"><unientity>5472</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 6F 68"><unientity>5470</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 6F 69"><unientity>54BC</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 6F 6A"><unientity>54B7</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 6F 6B"><unientity>54DE</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 6F 6C"><unientity>54D6</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 6F 6D"><unientity>54AE</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 6F 71"><unientity>54BF</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 6F 74"><unientity>54C6</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 6F 7B"><unientity>551A</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 6F 7C"><unientity>54E2</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 6F 7D"><unientity>5507</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 70 23"><unientity>5517</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 70 24"><unientity>54FD</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 70 25"><unientity>54E7</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 70 27"><unientity>54F3</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 70 2A"><unientity>54E4</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 70 2B"><unientity>550A</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 70 2D"><unientity>54FF</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 70 2E"><unientity>5518</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 70 30"><unientity>5504</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 70 32"><unientity>54EF</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 70 34"><unientity>5508</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 70 38"><unientity>54F6</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 70 39"><unientity>54F7</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 70 3E"><unientity>550E</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 70 44"><unientity>5523</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 70 46"><unientity>550F</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 70 47"><unientity>5511</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 70 4B"><unientity>5575</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 70 4D"><unientity>5573</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 70 4E"><unientity>554C</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 70 4F"><unientity>5576</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 70 50"><unientity>554D</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 70 51"><unientity>555A</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 70 53"><unientity>553C</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 70 55"><unientity>5550</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 70 57"><unientity>5539</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 70 58"><unientity>5548</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 70 59"><unientity>552D</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 70 5A"><unientity>5551</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 70 5D"><unientity>552A</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 70 60"><unientity>5562</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 70 61"><unientity>5536</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 70 64"><unientity>5549</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 70 68"><unientity>5530</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 70 6A"><unientity>5540</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 70 6B"><unientity>5535</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 70 70"><unientity>5545</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 70 79"><unientity>553F</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 70 7B"><unientity>5541</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 70 7D"><unientity>5565</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 71 23"><unientity>5591</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 71 25"><unientity>5577</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 71 26"><unientity>55A8</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 71 27"><unientity>55AD</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 71 2A"><unientity>5605</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 71 2D"><unientity>5593</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 71 2F"><unientity>5586</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 71 34"><unientity>5588</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 71 36"><unientity>55B4</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 71 43"><unientity>E962</unientity><unientityalt>55E2</unientityalt><desc>Variant of 2D7143 which maps to 55E2</desc></character>
-<character hex="21 71 44"><unientity>5581</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 71 45"><unientity>558E</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 71 47"><unientity>55B5</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 71 49"><unientity>558F</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 71 4B"><unientity>5559</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 71 50"><unientity>55A4</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 71 51"><unientity>5592</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 71 52"><unientity>5599</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 71 56"><unientity>55F4</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 71 58"><unientity>55CC</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 71 59"><unientity>55D0</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 71 5A"><unientity>55DB</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 71 5B"><unientity>55CD</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 71 5C"><unientity>55DE</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 71 5D"><unientity>55D9</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 71 5E"><unientity>55C3</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 71 5F"><unientity>55C9</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 71 61"><unientity>55CA</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 71 62"><unientity>55DD</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 71 64"><unientity>55D4</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 71 65"><unientity>55C4</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 71 69"><unientity>55E9</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 71 6F"><unientity>55CF</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 71 70"><unientity>55D2</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 71 75"><unientity>55E5</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 71 77"><unientity>55D6</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 71 78"><unientity>55C1</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 71 79"><unientity>55F2</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 71 7E"><unientity>5627</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 72 24"><unientity>55FB</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 72 25"><unientity>5612</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 72 27"><unientity>55F8</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 72 28"><unientity>560F</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 72 2B"><unientity>55F9</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 72 2E"><unientity>561E</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 72 31"><unientity>560C</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 72 34"><unientity>561C</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 72 35"><unientity>5610</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 72 36"><unientity>5601</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 72 38"><unientity>5613</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 72 39"><unientity>55F6</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 72 3C"><unientity>5602</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 72 42"><unientity>561D</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 72 44"><unientity>55FF</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 72 47"><unientity>5642</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 72 48"><unientity>564C</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 72 4B"><unientity>564B</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 72 52"><unientity>5640</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 72 55"><unientity>5635</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 72 57"><unientity>5649</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 72 58"><unientity>5641</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 72 5C"><unientity>5658</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 72 5D"><unientity>5620</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 72 5E"><unientity>5654</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 72 60"><unientity>562A</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 72 61"><unientity>563D</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 72 64"><unientity>562C</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 72 67"><unientity>5638</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 72 69"><unientity>564D</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 72 6B"><unientity>562B</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 72 6C"><unientity>564F</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 72 6E"><unientity>5670</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 72 6F"><unientity>565F</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 72 70"><unientity>567C</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 72 72"><unientity>5660</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 72 78"><unientity>5676</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 72 7A"><unientity>5666</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 72 7B"><unientity>5673</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 72 7C"><unientity>566D</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 72 7E"><unientity>5672</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 73 25"><unientity>5693</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 73 28"><unientity>568C</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 73 32"><unientity>56BA</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 73 34"><unientity>5686</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 73 35"><unientity>5684</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 73 36"><unientity>5691</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 73 37"><unientity>568A</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 73 3E"><unientity>569E</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 73 41"><unientity>569C</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 73 42"><unientity>569A</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 73 45"><unientity>5699</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 73 4B"><unientity>56AD</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 73 4C"><unientity>56A6</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 73 4E"><unientity>56AC</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 73 53"><unientity>56B2</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 73 5A"><unientity>56B3</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 73 5B"><unientity>56C3</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 73 60"><unientity>56C5</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 73 62"><unientity>56CF</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 73 67"><unientity>56CD</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 73 6A"><unientity>56D4</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 73 6B"><unientity>56D7</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 73 6D"><unientity>56DD</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 73 6F"><unientity>56E1</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 73 70"><unientity>56DF</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 73 75"><unientity>56EB</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 73 76"><unientity>56EE</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 73 77"><unientity>56E7</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 73 79"><unientity>56FB</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 73 7E"><unientity>56F7</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 74 21"><unientity>56F9</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 74 24"><unientity>56FF</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 74 27"><unientity>5705</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 74 28"><unientity>5704</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 74 29"><unientity>5702</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 74 2C"><unientity>570A</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 74 2D"><unientity>5709</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 74 2E"><unientity>5707</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 74 30"><unientity>570C</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 74 31"><unientity>5715</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 74 32"><unientity>5714</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 74 35"><unientity>571A</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 74 36"><unientity>571B</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 74 37"><unientity>571C</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 74 39"><unientity>571D</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 74 3A"><unientity>571E</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 74 41"><unientity>5724</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 74 42"><unientity>572E</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 74 43"><unientity>5729</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 74 48"><unientity>5738</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 74 4C"><unientity>572A</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 74 63"><unientity>5749</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 74 65"><unientity>5745</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 74 68"><unientity>574B</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 74 69"><unientity>574C</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 74 6A"><unientity>573F</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 74 70"><unientity>5768</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 74 75"><unientity>578A</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 74 77"><unientity>576D</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 74 79"><unientity>5774</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 74 7A"><unientity>5767</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 75 26"><unientity>5770</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 75 28"><unientity>5771</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 75 2A"><unientity>576E</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 75 2D"><unientity>5776</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 75 2E"><unientity>5789</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 75 30"><unientity>577F</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 75 31"><unientity>5775</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 75 32"><unientity>577B</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 75 33"><unientity>5788</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 75 35"><unientity>5773</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 75 38"><unientity>579F</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 75 39"><unientity>5790</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 75 3A"><unientity>5793</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 75 3F"><unientity>579E</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 75 40"><unientity>57B5</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 75 43"><unientity>579A</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 75 45"><unientity>5794</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 75 47"><unientity>57A4</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 75 48"><unientity>5799</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 75 49"><unientity>578C</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 75 4B"><unientity>5797</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 75 4E"><unientity>579D</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 75 52"><unientity>579C</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 75 54"><unientity>57A7</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 75 57"><unientity>57A1</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 75 59"><unientity>EA00</unientity><desc>East Asian ideograph not found in unified han</desc></character>
-<character hex="21 75 5B"><unientity>5795</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 75 5F"><unientity>57B8</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 75 60"><unientity>57C7</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 75 6A"><unientity>5809</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 75 6C"><unientity>57BE</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 75 71"><unientity>57DB</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 75 73"><unientity>57D5</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 75 77"><unientity>57D2</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 75 7E"><unientity>57C6</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 76 22"><unientity>57C4</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 76 27"><unientity>70FE</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 76 29"><unientity>57E3</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 76 2A"><unientity>57FB</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 76 2B"><unientity>5803</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 76 2C"><unientity>57F6</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 76 2D"><unientity>57E6</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 76 31"><unientity>57ED</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 76 33"><unientity>5800</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 76 35"><unientity>57EC</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 76 36"><unientity>5807</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 76 39"><unientity>580E</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 76 3B"><unientity>580F</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 76 3D"><unientity>57F4</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 76 3E"><unientity>5810</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 76 40"><unientity>580D</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 76 43"><unientity>57EF</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 76 48"><unientity>5801</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 76 49"><unientity>5812</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 76 4D"><unientity>57FD</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 76 4E"><unientity>57F8</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 76 50"><unientity>580C</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 76 51"><unientity>5813</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 76 52"><unientity>57F0</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 76 56"><unientity>580B</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 76 58"><unientity>57F3</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 76 59"><unientity>5804</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 76 5A"><unientity>57CF</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 76 5B"><unientity>57DD</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 76 5F"><unientity>5847</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 76 67"><unientity>581B</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 76 69"><unientity>5819</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 76 6A"><unientity>5833</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 76 6C"><unientity>581E</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 76 6D"><unientity>583F</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 76 71"><unientity>5827</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 76 76"><unientity>5828</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 76 78"><unientity>582E</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 76 7A"><unientity>581D</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 76 7D"><unientity>5844</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 77 21"><unientity>5848</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 77 23"><unientity>5818</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 77 26"><unientity>57F5</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 77 29"><unientity>582D</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 77 2B"><unientity>5820</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 77 30"><unientity>584E</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 77 33"><unientity>585D</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 77 35"><unientity>5859</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 77 37"><unientity>584B</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 77 3D"><unientity>5865</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 77 40"><unientity>586C</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 77 42"><unientity>5852</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 77 45"><unientity>5864</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 77 47"><unientity>5853</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 77 48"><unientity>584F</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 77 49"><unientity>583D</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 77 4D"><unientity>584D</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 77 4E"><unientity>5856</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 77 55"><unientity>589A</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 77 58"><unientity>5892</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 77 5A"><unientity>588E</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 77 5C"><unientity>5889</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 77 5F"><unientity>5840</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 77 60"><unientity>589B</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 77 61"><unientity>587C</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 77 63"><unientity>5888</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 77 65"><unientity>5890</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 77 68"><unientity>5898</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 77 6B"><unientity>587D</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 77 6F"><unientity>587F</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 77 70"><unientity>5881</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 77 7B"><unientity>58A9</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 77 7E"><unientity>58A1</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 78 24"><unientity>58B1</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 78 2B"><unientity>58AD</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 78 2E"><unientity>58A0</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 78 30"><unientity>58A3</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 78 32"><unientity>58A6</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 78 3A"><unientity>58C8</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 78 41"><unientity>58BC</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 78 49"><unientity>58BF</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 78 4B"><unientity>58C6</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 78 4C"><unientity>58BA</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 78 50"><unientity>58D6</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 78 54"><unientity>58D2</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 78 56"><unientity>58CE</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 78 5A"><unientity>58E0</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 78 5E"><unientity>58DA</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 78 6C"><unientity>58FC</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 78 70"><unientity>5902</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 78 73"><unientity>5906</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 78 74"><unientity>6535</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 78 7A"><unientity>5910</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 78 7C"><unientity>8641</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 79 28"><unientity>592C</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 79 2B"><unientity>592F</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 79 30"><unientity>593C</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 79 33"><unientity>5940</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 79 38"><unientity>594D</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 79 43"><unientity>5953</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 79 4B"><unientity>595C</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 79 4F"><unientity>5961</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 79 54"><unientity>596C</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 79 55"><unientity>596D</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 79 65"><unientity>597C</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 79 69"><unientity>59A7</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 79 6B"><unientity>5998</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 79 6F"><unientity>599A</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 79 71"><unientity>59A0</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 79 7C"><unientity>5997</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 7A 21"><unientity>5990</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 7A 24"><unientity>59C5</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 7A 25"><unientity>59B5</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 7A 28"><unientity>59CF</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 7A 2A"><unientity>59BA</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 7A 2C"><unientity>59B8</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 7A 35"><unientity>59B2</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 7A 3A"><unientity>59B7</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 7A 3E"><unientity>59C1</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 7A 43"><unientity>59F9</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 7A 44"><unientity>59F8</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 7A 4F"><unientity>59EE</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 7A 50"><unientity>59F1</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 7A 51"><unientity>5A00</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 7A 52"><unientity>59DE</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 7A 56"><unientity>59FD</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 7A 5D"><unientity>59F6</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 7A 5E"><unientity>59DD</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 7A 5F"><unientity>59FA</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 7A 61"><unientity>59E4</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 7A 6E"><unientity>5A2A</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 7A 75"><unientity>5A16</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 7A 78"><unientity>5A09</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 7A 7E"><unientity>5A12</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 7B 2C"><unientity>5A60</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 7B 31"><unientity>5A67</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 7B 3A"><unientity>5A38</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 7B 3B"><unientity>5A5E</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 7B 3C"><unientity>5A6D</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 7B 3D"><unientity>5A35</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 7B 3E"><unientity>5A55</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 7B 41"><unientity>5A2C</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 7B 48"><unientity>5A50</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 7B 49"><unientity>5A65</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 7B 52"><unientity>5A64</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 7B 65"><unientity>5A8A</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 7B 69"><unientity>5ACF</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 7B 6A"><unientity>5A7A</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 7B 71"><unientity>5A9F</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 7B 75"><unientity>5AA0</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 7C 21"><unientity>5AA6</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 7C 22"><unientity>5A8C</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 7C 24"><unientity>5AA7</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 7C 25"><unientity>5A9E</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 7C 26"><unientity>5AA2</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 7C 27"><unientity>5A9C</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 7C 28"><unientity>5A7C</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 7C 29"><unientity>5A96</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 7C 30"><unientity>5A93</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 7C 31"><unientity>5AAC</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 7C 34"><unientity>5AAE</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 7C 35"><unientity>5A95</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 7C 36"><unientity>5AAF</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 7C 39"><unientity>5AC8</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 7C 3E"><unientity>5AB5</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 7C 41"><unientity>5AC4</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 7C 45"><unientity>5AB7</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 7C 49"><unientity>5AD1</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 7C 4A"><unientity>5A90</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 7C 4F"><unientity>5AB8</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 7C 50"><unientity>5ABA</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 7C 52"><unientity>5AAA</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 7C 59"><unientity>5AD3</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 7C 5B"><unientity>5AB1</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 7C 60"><unientity>5ADC</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 7C 6D"><unientity>5AE5</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 7C 6E"><unientity>5AE0</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 7C 72"><unientity>5AEA</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 7C 7B"><unientity>5ADA</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 7C 7C"><unientity>5AEB</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 7D 26"><unientity>5AFF</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 7D 2A"><unientity>5AFD</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 7D 2B"><unientity>5B08</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 7D 2E"><unientity>5B0D</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 7D 38"><unientity>5B03</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 7D 3D"><unientity>5B17</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 7D 3E"><unientity>5B16</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 7D 40"><unientity>5B19</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 7D 47"><unientity>5B1B</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 7D 48"><unientity>5B21</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 7D 52"><unientity>5B2C</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 7D 59"><unientity>5B32</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 7D 63"><unientity>5B3F</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 7D 6E"><unientity>5B45</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 7D 74"><unientity>5B4C</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 7D 76"><unientity>5B4B</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 7D 7C"><unientity>5B56</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 7E 21"><unientity>5B5B</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 7E 23"><unientity>5B62</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 7E 24"><unientity>5B65</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 7E 25"><unientity>5B67</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 7E 27"><unientity>E9E5</unientity><desc>East Asian ideograph not in Unicode</desc></character>
-<character hex="21 7E 28"><unientity>5B6C</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 7E 2A"><unientity>5B6E</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 7E 30"><unientity>5B7B</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 7E 31"><unientity>5B7C</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 7E 32"><unientity>5B80</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 7E 34"><unientity>5B84</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 7E 35"><unientity>E9E6</unientity><desc>East Asian ideograph not in Unicode</desc></character>
-<character hex="21 7E 40"><unientity>5B95</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 7E 43"><unientity>5B93</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 7E 49"><unientity>5BAC</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 7E 52"><unientity>5BA7</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 7E 55"><unientity>5BB7</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 7E 59"><unientity>5BC1</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 7E 5B"><unientity>EA01</unientity><desc>East Asian ideography not found in unified han</desc></character>
-<character hex="21 7E 60"><unientity>5BC9</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 7E 68"><unientity>5BD4</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 7E 6A"><unientity>5BC3</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 7E 6E"><unientity>5BD6</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 7E 75"><unientity>5BD7</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 7E 79"><unientity>5BE0</unientity><desc>East Asian ideograph</desc></character>
-<character hex="21 7E 7E"><unientity>5BEA</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 22 24"><unientity>5BF0</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 22 25"><unientity>5BEF</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 22 33"><unientity>5C00</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 22 35"><unientity>5C57</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 22 3C"><unientity>5C15</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 22 46"><unientity>5C22</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 22 48"><unientity>5C25</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 22 4B"><unientity>5C2A</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 22 52"><unientity>5C2F</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 22 5B"><unientity>5C32</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 22 63"><unientity>5C3B</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 22 65"><unientity>5C44</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 22 67"><unientity>5C49</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 22 79"><unientity>5C59</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 22 7B"><unientity>5C5D</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 22 7C"><unientity>5C5F</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 23 23"><unientity>5C63</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 23 29"><unientity>5C67</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 23 2B"><unientity>5C68</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 23 30"><unientity>5C6D</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 23 31"><unientity>5C6E</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 23 37"><unientity>5C74</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 23 39"><unientity>5C73</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 23 3B"><unientity>5C77</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 23 3C"><unientity>5C7A</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 23 40"><unientity>5C7C</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 23 46"><unientity>5C8F</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 23 49"><unientity>5C88</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 23 4B"><unientity>5C8D</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 23 4D"><unientity>5C99</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 23 55"><unientity>5CA6</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 23 57"><unientity>5CA0</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 23 5C"><unientity>5CA2</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 23 60"><unientity>5CB5</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 23 61"><unientity>5CA7</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 23 66"><unientity>5CA8</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 23 67"><unientity>5CAC</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 23 6B"><unientity>5CA3</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 23 6C"><unientity>5CB6</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 23 6D"><unientity>5CC1</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 23 6F"><unientity>5CAD</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 23 70"><unientity>5CD5</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 23 78"><unientity>5CD3</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 23 79"><unientity>E9E7</unientity><desc>East Asian ideograph not in Unicode</desc></character>
-<character hex="22 24 26"><unientity>5CE0</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 24 28"><unientity>5CD2</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 24 29"><unientity>5CDD</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 24 2B"><unientity>5CCB</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 24 30"><unientity>5CC7</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 24 31"><unientity>5CDC</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 24 34"><unientity>5D00</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 24 3B"><unientity>5CFF</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 24 3C"><unientity>5CEB</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 24 41"><unientity>5CF4</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 24 46"><unientity>5CF1</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 24 49"><unientity>5D1E</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 24 4A"><unientity>5D12</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 24 50"><unientity>5D1A</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 24 52"><unientity>5D0C</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 24 53"><unientity>5D20</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 24 54"><unientity>5D21</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 24 57"><unientity>5D27</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 24 58"><unientity>5D0D</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 24 5A"><unientity>5D26</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 24 5D"><unientity>5D2E</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 24 69"><unientity>5D24</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 24 71"><unientity>5D36</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 24 72"><unientity>5D3E</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 24 74"><unientity>5D4B</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 24 76"><unientity>5D57</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 24 77"><unientity>5D34</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 25 25"><unientity>5D3F</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 25 26"><unientity>5D52</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 25 27"><unientity>5D3D</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 25 28"><unientity>5D4E</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 25 2C"><unientity>5D59</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 25 2D"><unientity>5D47</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 25 2F"><unientity>5D32</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 25 31"><unientity>5D42</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 25 34"><unientity>5D74</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 25 39"><unientity>5D6F</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 25 3A"><unientity>5D6B</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 25 3F"><unientity>5D75</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 25 44"><unientity>5D4A</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 25 49"><unientity>5D6C</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 25 4A"><unientity>5D62</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 25 4D"><unientity>5D82</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 25 50"><unientity>5D79</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 25 51"><unientity>5D8E</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 25 5A"><unientity>5D81</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 25 60"><unientity>5D7E</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 25 66"><unientity>5D92</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 25 68"><unientity>5D99</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 25 69"><unientity>5D97</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 25 6A"><unientity>5DA2</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 25 73"><unientity>5DA1</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 25 75"><unientity>5D93</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 25 77"><unientity>5DA0</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 25 7B"><unientity>5D94</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 25 7E"><unientity>5DAC</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 26 26"><unientity>5DA7</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 26 2A"><unientity>5DB0</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 26 2E"><unientity>5DB4</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 26 2F"><unientity>5DAE</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 26 30"><unientity>5DB6</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 26 32"><unientity>5DB8</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 26 34"><unientity>5DBF</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 26 36"><unientity>5DB7</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 26 3E"><unientity>5DC3</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 26 44"><unientity>5DC7</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 26 46"><unientity>5DC9</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 26 47"><unientity>5DCB</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 26 4E"><unientity>5DD8</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 26 50"><unientity>5DDB</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 26 52"><unientity>5DDC</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 26 56"><unientity>5DE4</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 26 62"><unientity>5E00</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 26 64"><unientity>51E7</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 26 72"><unientity>5E14</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 26 73"><unientity>5E17</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 26 76"><unientity>5E19</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 26 77"><unientity>5E12</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 26 78"><unientity>5E1F</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 26 7A"><unientity>5E23</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 26 7B"><unientity>5E21</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 27 22"><unientity>5E22</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 27 24"><unientity>5E28</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 27 35"><unientity>5E44</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 27 36"><unientity>5E43</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 27 39"><unientity>5E42</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 27 3F"><unientity>5E4E</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 27 47"><unientity>5E58</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 27 48"><unientity>5E48</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 27 57"><unientity>5E5E</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 27 58"><unientity>5E61</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 27 5D"><unientity>5E68</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 27 5F"><unientity>5E6C</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 27 60"><unientity>5E6A</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 27 63"><unientity>5E6E</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 27 64"><unientity>5E6D</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 27 65"><unientity>5E70</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 27 6D"><unientity>5E75</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 27 77"><unientity>5E80</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 27 7E"><unientity>5E8B</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 28 2F"><unientity>5EA4</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 28 35"><unientity>5EA5</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 28 36"><unientity>5EAF</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 28 42"><unientity>5EB9</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 28 4B"><unientity>5EB3</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 28 4C"><unientity>5EC4</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 28 51"><unientity>5ECC</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 28 55"><unientity>5ECB</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 28 57"><unientity>5ECD</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 28 5A"><unientity>5ED2</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 28 5B"><unientity>5ED1</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 28 5C"><unientity>5ED5</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 28 5F"><unientity>5ED4</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 28 60"><unientity>5ED9</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 28 61"><unientity>5ECE</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 28 68"><unientity>5EE1</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 28 6D"><unientity>5EE7</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 28 71"><unientity>5EE8</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 28 7C"><unientity>5EED</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 29 21"><unientity>5EF1</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 29 23"><unientity>5EF4</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 29 35"><unientity>5F07</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 29 3A"><unientity>5F0B</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 29 4A"><unientity>5F28</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 29 4B"><unientity>5F22</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 29 4C"><unientity>5F23</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 29 4D"><unientity>5F24</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 29 51"><unientity>5F33</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 29 52"><unientity>5F30</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 29 58"><unientity>5F38</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 29 5C"><unientity>5F40</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 29 5F"><unientity>5F44</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 29 62"><unientity>5F4D</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 29 68"><unientity>5F50</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 29 69"><unientity>5F54</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 29 6A"><unientity>5F56</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 29 6C"><unientity>5F58</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 29 70"><unientity>5F60</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 29 71"><unientity>5F61</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 29 72"><unientity>5F63</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 29 73"><unientity>809C</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 29 74"><unientity>5F67</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 29 78"><unientity>5F72</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 29 79"><unientity>5F73</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 29 7C"><unientity>5F74</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 2A 23"><unientity>5F82</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 2A 27"><unientity>5F89</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 2A 2B"><unientity>5F94</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 2A 34"><unientity>EA02</unientity><desc>East Asian ideograph not found in unified han</desc></character>
-<character hex="22 2A 39"><unientity>5F9C</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 2A 3D"><unientity>5F9A</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 2A 46"><unientity>5FAF</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 2A 50"><unientity>5FBC</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 2A 57"><unientity>5FC9</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 2A 5F"><unientity>5FD1</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 2A 61"><unientity>5FD2</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 2A 63"><unientity>5FD0</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 2A 67"><unientity>5FCE</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 2A 68"><unientity>5FED</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 2A 72"><unientity>5FEE</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 2A 73"><unientity>5FF8</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 2A 78"><unientity>5FE1</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 2A 7B"><unientity>5FE4</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 2B 24"><unientity>5FEA</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 2B 2A"><unientity>6026</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 2B 2C"><unientity>6029</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 2B 2D"><unientity>602B</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 2B 30"><unientity>6019</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 2B 31"><unientity>6008</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 2B 36"><unientity>600A</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 2B 37"><unientity>600C</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 2B 38"><unientity>601B</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 2B 3C"><unientity>6017</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 2B 3D"><unientity>6033</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 2B 45"><unientity>600D</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 2B 46"><unientity>6010</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 2B 4B"><unientity>6039</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 2B 50"><unientity>6013</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 2B 53"><unientity>6054</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 2B 57"><unientity>605D</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 2B 5A"><unientity>6047</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 2B 5E"><unientity>6049</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 2B 5F"><unientity>6053</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 2B 68"><unientity>6067</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 2B 6F"><unientity>604C</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 2B 71"><unientity>6041</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 2B 72"><unientity>6077</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 2B 74"><unientity>6042</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 2B 76"><unientity>605F</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 2B 7A"><unientity>6061</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 2C 24"><unientity>608A</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 2C 2B"><unientity>6092</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 2C 2C"><unientity>609D</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 2C 2D"><unientity>6081</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 2C 2F"><unientity>609E</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 2C 30"><unientity>6083</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 2C 32"><unientity>6097</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 2C 34"><unientity>60A7</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 2C 3A"><unientity>6095</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 2C 3E"><unientity>60C7</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 2C 42"><unientity>60B0</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 2C 46"><unientity>60BE</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 2C 47"><unientity>60D3</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 2C 48"><unientity>60D4</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 2C 4E"><unientity>60CE</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 2C 51"><unientity>60CF</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 2C 53"><unientity>60D9</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 2C 54"><unientity>60B3</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 2C 56"><unientity>60DD</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 2C 5D"><unientity>60C4</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 2C 60"><unientity>60B1</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 2C 62"><unientity>60E3</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 2C 66"><unientity>60E2</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 2C 67"><unientity>60E5</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 2C 69"><unientity>60DB</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 2C 6E"><unientity>60E9</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 2C 70"><unientity>6114</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 2C 73"><unientity>6103</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 2C 75"><unientity>6119</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 2C 7C"><unientity>60FD</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 2C 7D"><unientity>610D</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 2D 2A"><unientity>610A</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 2D 2C"><unientity>6110</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 2D 32"><unientity>6112</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 2D 34"><unientity>60F2</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 2D 37"><unientity>6125</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 2D 3B"><unientity>60F8</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 2D 3F"><unientity>6121</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 2D 41"><unientity>60FC</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 2D 43"><unientity>6106</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 2D 48"><unientity>6149</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 2D 4A"><unientity>614A</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 2D 4E"><unientity>612B</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 2D 50"><unientity>6129</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 2D 51"><unientity>6150</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 2D 56"><unientity>53AF</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 2D 58"><unientity>6130</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 2D 5B"><unientity>6141</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 2D 5E"><unientity>6137</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 2D 61"><unientity>6146</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 2D 66"><unientity>615E</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 2D 67"><unientity>6175</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 2D 68"><unientity>6174</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 2D 6B"><unientity>6183</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 2D 70"><unientity>6171</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 2D 74"><unientity>616A</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 2D 77"><unientity>6173</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 2D 79"><unientity>6164</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 2D 7B"><unientity>6153</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 2E 23"><unientity>618B</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 2E 2C"><unientity>616F</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 2E 2D"><unientity>6165</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 2E 2F"><unientity>615C</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 2E 32"><unientity>619D</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 2E 33"><unientity>61A6</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 2E 3D"><unientity>61A2</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 2E 40"><unientity>61A8</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 2E 42"><unientity>619C</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 2E 43"><unientity>61AF</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 2E 45"><unientity>6196</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 2E 46"><unientity>6197</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 2E 47"><unientity>61AD</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 2E 4C"><unientity>6192</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 2E 52"><unientity>61AE</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 2E 55"><unientity>618D</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 2E 5A"><unientity>61CB</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 2E 5C"><unientity>61CC</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 2E 5D"><unientity>61C6</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 2E 68"><unientity>61BA</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 2E 6A"><unientity>61B8</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 2E 71"><unientity>61E0</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 2E 77"><unientity>61E5</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 2E 7D"><unientity>61DC</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 2E 7E"><unientity>61DF</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 2F 29"><unientity>61F3</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 2F 3D"><unientity>6201</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 2F 41"><unientity>6204</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 2F 43"><unientity>6207</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 2F 44"><unientity>6209</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 2F 47"><unientity>6214</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 2F 56"><unientity>6223</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 2F 5B"><unientity>6225</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 2F 5D"><unientity>6224</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 2F 61"><unientity>6229</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 2F 67"><unientity>622D</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 2F 69"><unientity>97EF</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 2F 6E"><unientity>6239</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 2F 6F"><unientity>623A</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 2F 70"><unientity>623D</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 2F 75"><unientity>6243</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 2F 77"><unientity>6246</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 2F 78"><unientity>6245</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 2F 79"><unientity>624A</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 2F 7A"><unientity>6250</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 2F 7C"><unientity>625E</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 30 26"><unientity>6268</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 30 28"><unientity>6260</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 30 2B"><unientity>625A</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 30 2C"><unientity>6262</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 30 2D"><unientity>6266</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 30 31"><unientity>6286</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 30 32"><unientity>628E</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 30 41"><unientity>62A3</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 30 43"><unientity>6282</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 30 46"><unientity>6285</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 30 4B"><unientity>629D</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 30 56"><unientity>62A6</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 30 57"><unientity>62D1</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 30 61"><unientity>62E4</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 30 69"><unientity>62B6</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 30 6A"><unientity>62C3</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 30 72"><unientity>630D</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 31 25"><unientity>62F5</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 31 31"><unientity>630C</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 31 32"><unientity>6360</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 31 37"><unientity>62F6</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 31 3A"><unientity>6331</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 31 42"><unientity>6345</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 31 44"><unientity>6343</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 31 45"><unientity>6335</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 31 47"><unientity>6353</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 31 48"><unientity>6364</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 31 49"><unientity>6336</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 31 4A"><unientity>6344</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 31 54"><unientity>6339</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 31 58"><unientity>6357</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 31 5A"><unientity>633C</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 31 5B"><unientity>6358</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 31 5C"><unientity>634B</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 31 5F"><unientity>6354</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 31 68"><unientity>637D</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 31 6A"><unientity>63B6</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 31 6B"><unientity>6382</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 31 6C"><unientity>636C</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 31 6E"><unientity>639F</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 31 72"><unientity>639E</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 31 73"><unientity>637F</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 31 79"><unientity>6381</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 31 7B"><unientity>6397</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 31 7D"><unientity>63AB</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 32 25"><unientity>6387</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 32 26"><unientity>637A</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 32 27"><unientity>638E</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 32 2A"><unientity>6386</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 32 2F"><unientity>6375</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 32 30"><unientity>63AF</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 32 37"><unientity>63B1</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 32 38"><unientity>63B0</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 32 39"><unientity>63AE</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 32 3A"><unientity>637C</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 32 3B"><unientity>6390</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 32 3D"><unientity>63AD</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 32 41"><unientity>636D</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 32 43"><unientity>63DE</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 32 44"><unientity>63E5</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 32 47"><unientity>63D3</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 32 4F"><unientity>63BD</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 32 50"><unientity>63C3</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 32 52"><unientity>63F5</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 32 58"><unientity>63E6</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 32 5B"><unientity>63E0</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 32 5C"><unientity>63D5</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 32 5D"><unientity>63F6</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 32 5E"><unientity>63F2</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 32 5F"><unientity>63F8</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 32 66"><unientity>E9E8</unientity><desc>East Asian ideograph not in Unicode</desc></character>
-<character hex="22 32 6A"><unientity>63F9</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 32 70"><unientity>63BE</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 32 72"><unientity>63EB</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 32 73"><unientity>63DD</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 32 76"><unientity>E9E9</unientity><desc>East Asian ideograph not in Unicode</desc></character>
-<character hex="22 32 79"><unientity>63C4</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 32 7A"><unientity>63DC</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 32 7B"><unientity>63D7</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 32 7E"><unientity>6412</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 33 22"><unientity>6410</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 33 24"><unientity>6434</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 33 29"><unientity>641B</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 33 2B"><unientity>6420</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 33 2C"><unientity>6424</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 33 2F"><unientity>6426</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 33 31"><unientity>640C</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 33 36"><unientity>6415</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 33 37"><unientity>6418</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 33 38"><unientity>640E</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 33 39"><unientity>EA03</unientity><desc>East Asian ideography not found in unified han</desc></character>
-<character hex="22 33 3B"><unientity>6422</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 33 3D"><unientity>6421</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 33 44"><unientity>6430</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 33 45"><unientity>6441</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 33 48"><unientity>6435</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 33 4C"><unientity>6409</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 33 51"><unientity>640A</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 33 53"><unientity>6440</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 33 59"><unientity>6407</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 33 5B"><unientity>643B</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 33 5D"><unientity>643F</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 33 68"><unientity>645B</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 33 6A"><unientity>644F</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 33 6C"><unientity>646B</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 33 6F"><unientity>6476</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 33 76"><unientity>6474</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 33 78"><unientity>647D</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 33 7B"><unientity>6473</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 34 23"><unientity>644E</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 34 24"><unientity>6464</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 34 27"><unientity>6482</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 34 28"><unientity>645E</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 34 2C"><unientity>647B</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 34 2E"><unientity>645C</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 34 3C"><unientity>649D</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 34 3F"><unientity>6499</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 34 42"><unientity>648F</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 34 4D"><unientity>6496</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 34 4E"><unientity>64A2</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 34 54"><unientity>6490</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 34 5B"><unientity>64B6</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 34 61"><unientity>6498</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 34 62"><unientity>649F</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 34 65"><unientity>E9EA</unientity><desc>East Asian ideograph not in Unicode</desc></character>
-<character hex="22 34 66"><unientity>64B3</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 34 6A"><unientity>64D7</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 34 6C"><unientity>64D3</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 34 74"><unientity>64BE</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 34 75"><unientity>64D0</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 35 2A"><unientity>64EF</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 35 2D"><unientity>64E1</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 35 2E"><unientity>64E5</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 35 31"><unientity>64EB</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 35 33"><unientity>64E2</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 35 36"><unientity>64ED</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 35 38"><unientity>64E4</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 35 42"><unientity>64F7</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 35 46"><unientity>6504</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 35 4B"><unientity>64FD</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 35 4F"><unientity>6508</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 35 53"><unientity>6509</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 35 59"><unientity>651A</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 35 5B"><unientity>6516</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 35 61"><unientity>651B</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 35 69"><unientity>6527</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 35 6D"><unientity>6522</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 35 6F"><unientity>6529</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 35 72"><unientity>6525</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 35 77"><unientity>652E</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 35 7C"><unientity>6541</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 36 2C"><unientity>6538</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 36 34"><unientity>6542</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 36 36"><unientity>6549</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 36 3E"><unientity>6554</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 36 3F"><unientity>6555</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 36 45"><unientity>6567</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 36 47"><unientity>6561</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 36 4F"><unientity>656D</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 36 54"><unientity>657A</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 36 64"><unientity>6585</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 36 6E"><unientity>658C</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 36 70"><unientity>6592</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 36 71"><unientity>6595</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 36 75"><unientity>659B</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 36 77"><unientity>659D</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 36 7A"><unientity>65A0</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 37 22"><unientity>65A8</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 37 23"><unientity>65A6</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 37 27"><unientity>65AE</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 37 2A"><unientity>65B6</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 37 2C"><unientity>65B8</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 37 2F"><unientity>65BF</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 37 31"><unientity>65C6</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 37 32"><unientity>65C3</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 37 33"><unientity>65C4</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 37 34"><unientity>65C2</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 37 3B"><unientity>65D0</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 37 3C"><unientity>65D2</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 37 44"><unientity>65DB</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 37 45"><unientity>65DC</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 37 47"><unientity>65DD</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 37 48"><unientity>65DF</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 37 4A"><unientity>65E1</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 37 4E"><unientity>65E4</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 37 54"><unientity>65F4</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 37 55"><unientity>65F0</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 37 5A"><unientity>6609</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 37 5B"><unientity>65FB</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 37 5C"><unientity>65FC</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 37 5E"><unientity>660A</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 37 64"><unientity>6603</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 37 6A"><unientity>6611</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 37 6B"><unientity>6615</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 37 6D"><unientity>6604</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 37 6E"><unientity>6631</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 37 72"><unientity>6621</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 37 75"><unientity>662C</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 37 77"><unientity>6635</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 37 7C"><unientity>661E</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 37 7D"><unientity>663A</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 38 27"><unientity>6633</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 38 28"><unientity>662B</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 38 2B"><unientity>6634</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 38 2C"><unientity>6624</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 38 31"><unientity>6645</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 38 32"><unientity>665F</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 38 3D"><unientity>6665</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 38 3E"><unientity>665C</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 38 3F"><unientity>6661</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 38 48"><unientity>665B</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 38 49"><unientity>6659</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 38 4A"><unientity>6667</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 38 4C"><unientity>665E</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 38 4D"><unientity>6657</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 38 50"><unientity>667E</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 38 51"><unientity>666C</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 38 5A"><unientity>6678</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 38 60"><unientity>6673</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 38 66"><unientity>666D</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 38 68"><unientity>6677</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 38 70"><unientity>6684</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 38 71"><unientity>668C</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 38 72"><unientity>6693</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 38 75"><unientity>668B</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 38 76"><unientity>6690</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 38 79"><unientity>6694</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 38 7A"><unientity>668A</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 38 7C"><unientity>6698</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 38 7D"><unientity>668D</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 39 24"><unientity>7A25</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 39 2A"><unientity>66A0</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 39 30"><unientity>5C21</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 39 32"><unientity>669D</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 39 3A"><unientity>66B2</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 39 40"><unientity>66B5</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 39 41"><unientity>66AA</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 39 43"><unientity>66AC</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 39 47"><unientity>66B1</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 39 4E"><unientity>66C8</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 39 4F"><unientity>66BE</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 39 54"><unientity>66C0</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 39 55"><unientity>66C7</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 39 5A"><unientity>66BB</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 39 5C"><unientity>66C4</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 39 60"><unientity>66CF</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 39 71"><unientity>66DA</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 39 72"><unientity>66DB</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 39 73"><unientity>66E2</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 39 76"><unientity>66E1</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 39 78"><unientity>66E8</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 39 7C"><unientity>66E9</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 3A 28"><unientity>6705</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 3A 30"><unientity>670F</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 3A 31"><unientity>6710</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 3A 33"><unientity>6712</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 3A 34"><unientity>6713</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 3A 38"><unientity>6719</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 3A 39"><unientity>6718</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 3A 47"><unientity>6723</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 3A 4C"><unientity>673E</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 3A 4E"><unientity>673F</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 3A 58"><unientity>6757</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 3A 5B"><unientity>6745</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 3A 5C"><unientity>6747</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 3A 60"><unientity>675D</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 3A 61"><unientity>6755</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 3A 66"><unientity>674C</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 3A 67"><unientity>6759</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 3A 68"><unientity>6748</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 3A 6B"><unientity>6763</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 3A 6E"><unientity>6753</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 3A 71"><unientity>674A</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 3A 75"><unientity>6793</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 3A 78"><unientity>677C</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 3A 7A"><unientity>679F</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 3A 7C"><unientity>6785</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 3B 21"><unientity>677B</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 3B 22"><unientity>6792</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 3B 23"><unientity>6776</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 3B 25"><unientity>6791</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 3B 26"><unientity>6799</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 3B 28"><unientity>67A4</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 3B 2E"><unientity>678F</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 3B 30"><unientity>6772</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 3B 31"><unientity>E963</unientity><unientityalt>6798</unientityalt><desc>Variant of 4C3B31 which maps to 6798</desc></character>
-<character hex="22 3B 32"><unientity>676A</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 3B 39"><unientity>67AC</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 3B 3B"><unientity>67A0</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 3B 3F"><unientity>67A1</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 3B 44"><unientity>67F9</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 3B 48"><unientity>678D</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 3B 49"><unientity>678C</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 3B 4C"><unientity>67FC</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 3B 4E"><unientity>6810</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 3B 51"><unientity>67C8</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 3B 54"><unientity>67CC</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 3B 58"><unientity>67C5</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 3B 5C"><unientity>67BB</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 3B 5F"><unientity>67B0</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 3B 60"><unientity>6803</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 3B 61"><unientity>67F8</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 3B 63"><unientity>67D8</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 3B 64"><unientity>67B7</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 3B 6D"><unientity>6802</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 3B 6F"><unientity>67E4</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 3B 70"><unientity>67D9</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 3B 71"><unientity>67DB</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 3B 72"><unientity>67B5</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 3B 74"><unientity>67DF</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 3B 75"><unientity>67F7</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 3B 77"><unientity>67B3</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 3B 78"><unientity>6806</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 3B 79"><unientity>67AE</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 3B 7A"><unientity>67F6</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 3B 7C"><unientity>67EE</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 3B 7D"><unientity>6AAF</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 3B 7E"><unientity>67B2</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 3C 21"><unientity>67B9</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 3C 23"><unientity>67C2</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 3C 24"><unientity>67E3</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 3C 26"><unientity>67CA</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 3C 28"><unientity>67CE</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 3C 29"><unientity>67E2</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 3C 2A"><unientity>67F2</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 3C 2B"><unientity>67C3</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 3C 2D"><unientity>67DD</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 3C 2F"><unientity>67E7</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 3C 30"><unientity>6849</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 3C 31"><unientity>683E</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 3C 36"><unientity>6814</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 3C 37"><unientity>684B</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 3C 38"><unientity>681E</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 3C 3B"><unientity>6833</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 3C 40"><unientity>6831</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 3C 41"><unientity>6832</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 3C 42"><unientity>6835</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 3C 43"><unientity>683B</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 3C 44"><unientity>684E</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 3C 47"><unientity>682B</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 3C 48"><unientity>682D</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 3C 4A"><unientity>684D</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 3C 4F"><unientity>6844</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 3C 55"><unientity>685D</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 3C 56"><unientity>685E</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 3C 58"><unientity>6834</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 3C 59"><unientity>6812</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 3C 65"><unientity>685A</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 3C 68"><unientity>686B</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 3C 69"><unientity>686C</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 3C 6B"><unientity>6879</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 3C 6E"><unientity>68B2</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 3C 71"><unientity>689B</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 3C 72"><unientity>687E</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 3C 74"><unientity>68B6</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 3C 76"><unientity>6882</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 3C 7A"><unientity>6890</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 3D 21"><unientity>6872</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 3D 22"><unientity>689C</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 3D 25"><unientity>686D</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 3D 2E"><unientity>68A9</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 3D 30"><unientity>6898</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 3D 32"><unientity>688B</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 3D 33"><unientity>68A0</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 3D 34"><unientity>686F</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 3D 39"><unientity>68A3</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 3D 3B"><unientity>6874</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 3D 3C"><unientity>6875</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 3D 3F"><unientity>6877</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 3D 40"><unientity>688F</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 3D 43"><unientity>687B</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 3D 44"><unientity>688E</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 3D 4B"><unientity>68B4</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 3D 50"><unientity>692C</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 3D 51"><unientity>6917</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 3D 53"><unientity>690C</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 3D 56"><unientity>690B</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 3D 58"><unientity>68D3</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 3D 59"><unientity>6904</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 3D 5B"><unientity>690A</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 3D 5C"><unientity>6909</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 3D 5D"><unientity>6929</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 3D 62"><unientity>68EC</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 3D 63"><unientity>692A</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 3D 64"><unientity>68EA</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 3D 65"><unientity>681F</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 3D 66"><unientity>7439</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 3D 6A"><unientity>6910</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 3D 6E"><unientity>68D6</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 3D 6F"><unientity>68EB</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 3D 73"><unientity>68F1</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 3D 78"><unientity>68FD</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 3D 79"><unientity>68FC</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 3D 7B"><unientity>68F3</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 3D 7C"><unientity>6913</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 3E 21"><unientity>6907</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 3E 23"><unientity>691A</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 3E 24"><unientity>6919</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 3E 2A"><unientity>68DE</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 3E 2B"><unientity>691B</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 3E 2D"><unientity>68FB</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 3E 33"><unientity>68E1</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 3E 37"><unientity>68D1</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 3E 38"><unientity>68D0</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 3E 39"><unientity>6908</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 3E 3E"><unientity>68E8</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 3E 3F"><unientity>68F0</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 3E 40"><unientity>68C3</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 3E 44"><unientity>6911</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 3E 46"><unientity>68D4</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 3E 47"><unientity>68EF</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 3E 49"><unientity>68C6</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 3E 4B"><unientity>68C7</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 3E 53"><unientity>6974</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 3E 55"><unientity>6938</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 3E 58"><unientity>6962</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 3E 5D"><unientity>6958</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 3E 5F"><unientity>6957</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 3E 60"><unientity>693F</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 3E 61"><unientity>6971</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 3E 64"><unientity>6945</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 3E 65"><unientity>695D</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 3E 66"><unientity>6932</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 3E 69"><unientity>696E</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 3E 6A"><unientity>6963</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 3E 6B"><unientity>6948</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 3E 6E"><unientity>6939</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 3E 70"><unientity>696A</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 3E 73"><unientity>6937</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 3E 7A"><unientity>696C</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 3E 7B"><unientity>694E</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 3E 7D"><unientity>6980</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 3E 7E"><unientity>6933</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 3F 21"><unientity>6952</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 3F 25"><unientity>695B</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 3F 2D"><unientity>6985</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 3F 32"><unientity>693D</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 3F 35"><unientity>6978</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 3F 37"><unientity>697B</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 3F 3A"><unientity>6934</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 3F 3B"><unientity>6969</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 3F 3D"><unientity>6944</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 3F 3E"><unientity>696F</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 3F 44"><unientity>698A</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 3F 45"><unientity>69A0</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 3F 46"><unientity>69B1</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 3F 50"><unientity>69CE</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 3F 51"><unientity>69CA</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 3F 59"><unientity>698D</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 3F 5A"><unientity>6991</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 3F 5C"><unientity>69AA</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 3F 60"><unientity>69BC</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 3F 61"><unientity>69A7</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 3F 65"><unientity>699E</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 3F 68"><unientity>69D9</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 3F 6A"><unientity>698E</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 3F 6D"><unientity>69D6</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 3F 75"><unientity>69A5</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 3F 77"><unientity>69BE</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 3F 78"><unientity>69D1</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 3F 7A"><unientity>69F6</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 3F 7E"><unientity>69D5</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 40 27"><unientity>69BF</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 40 2D"><unientity>69A3</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 40 2E"><unientity>69A4</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 40 34"><unientity>69D4</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 40 38"><unientity>69C3</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 40 3D"><unientity>6A12</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 40 3E"><unientity>6A11</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 40 41"><unientity>6A00</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 40 46"><unientity>69E6</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 40 4B"><unientity>6A0B</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 40 4C"><unientity>69E5</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 40 4D"><unientity>69E9</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 40 50"><unientity>69FC</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 40 54"><unientity>6A17</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 40 56"><unientity>69E7</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 40 57"><unientity>69EB</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 40 5B"><unientity>69F1</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 40 5E"><unientity>6A2B</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 40 5F"><unientity>69FF</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 40 60"><unientity>6A20</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 40 64"><unientity>69ED</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 40 67"><unientity>6A1B</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 40 68"><unientity>6A2D</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 40 6E"><unientity>6A18</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 40 72"><unientity>6A1D</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 40 75"><unientity>6A0C</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 40 76"><unientity>6A0F</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 40 7C"><unientity>69EE</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 41 23"><unientity>69F0</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 41 24"><unientity>69F2</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 41 28"><unientity>6A14</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 41 29"><unientity>6A63</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 41 37"><unientity>6A67</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 41 39"><unientity>6A43</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 41 3A"><unientity>6A33</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 41 3B"><unientity>6A32</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 41 3C"><unientity>6A5A</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 41 3F"><unientity>6A28</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 41 40"><unientity>6A48</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 41 41"><unientity>6A50</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 41 42"><unientity>6A52</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 41 43"><unientity>6A72</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 41 45"><unientity>6A3E</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 41 46"><unientity>6A77</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 41 47"><unientity>6A5B</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 41 4A"><unientity>6A5E</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 41 4B"><unientity>6A5C</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 41 4F"><unientity>6A51</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 41 51"><unientity>6A56</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 41 53"><unientity>6A36</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 41 56"><unientity>6A7A</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 41 58"><unientity>6A3F</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 41 6C"><unientity>69F9</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 41 6D"><unientity>6A64</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 41 73"><unientity>6A8D</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 41 75"><unientity>6AA8</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 41 77"><unientity>6AA5</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 41 79"><unientity>6A96</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 41 7E"><unientity>6A7D</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 42 22"><unientity>6A7F</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 42 23"><unientity>6A89</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 42 24"><unientity>6A91</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 42 26"><unientity>6A9F</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 42 2A"><unientity>6A92</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 42 2B"><unientity>6AA3</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 42 34"><unientity>6A99</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 42 35"><unientity>6A9D</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 42 36"><unientity>6A7E</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 42 37"><unientity>6A9B</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 42 42"><unientity>6AA0</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 42 47"><unientity>6A90</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 42 49"><unientity>6A9E</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 42 4A"><unientity>6A87</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 42 4B"><unientity>6A8E</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 42 51"><unientity>6AAB</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 42 55"><unientity>6AC8</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 42 57"><unientity>6AAE</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 42 5D"><unientity>6ABF</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 42 64"><unientity>6ACA</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 42 68"><unientity>6AB4</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 42 79"><unientity>6AE6</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 42 7E"><unientity>6AED</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 43 25"><unientity>6ACC</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 43 28"><unientity>6AD1</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 43 33"><unientity>6ADF</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 43 34"><unientity>6ACD</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 43 35"><unientity>6ADE</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 43 37"><unientity>6AEC</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 43 39"><unientity>6AF3</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 43 3A"><unientity>6AE7</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 43 3F"><unientity>6AEB</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 43 40"><unientity>6AEA</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 43 44"><unientity>6AF1</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 43 45"><unientity>6AE8</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 43 48"><unientity>6AF5</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 43 4E"><unientity>6AFD</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 43 50"><unientity>6AFA</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 43 52"><unientity>6B01</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 43 58"><unientity>6B03</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 43 59"><unientity>6AF8</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 43 5F"><unientity>6B0D</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 43 60"><unientity>6B09</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 43 61"><unientity>6B0E</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 43 67"><unientity>6B11</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 43 6D"><unientity>6B19</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 43 6E"><unientity>6B17</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 43 72"><unientity>6B1E</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 43 7E"><unientity>6B2C</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 44 2A"><unientity>6B35</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 44 2C"><unientity>6B37</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 44 2D"><unientity>6B3B</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 44 32"><unientity>6B39</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 44 35"><unientity>6B3F</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 44 37"><unientity>6B46</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 44 38"><unientity>6B41</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 44 3A"><unientity>6B40</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 44 3B"><unientity>6B42</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 44 3C"><unientity>6B43</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 44 3E"><unientity>6B48</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 44 3F"><unientity>6B4A</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 44 46"><unientity>E964</unientity><unientityalt>6B4E</unientityalt><desc>Variant of 4C4446 which maps to 6B4E</desc></character>
-<character hex="22 44 4A"><unientity>6B57</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 44 4C"><unientity>6B54</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 44 4E"><unientity>6B55</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 44 51"><unientity>6B5C</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 44 53"><unientity>6B5E</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 44 54"><unientity>6B60</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 44 5B"><unientity>6B6B</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 44 5D"><unientity>6B6C</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 44 5F"><unientity>6B6E</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 44 61"><unientity>6B71</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 44 6B"><unientity>6B7E</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 44 71"><unientity>6B82</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 44 73"><unientity>6B84</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 44 79"><unientity>6B8D</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 44 7B"><unientity>6B95</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 45 25"><unientity>6B99</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 45 29"><unientity>6B9B</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 45 35"><unientity>6BA3</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 45 36"><unientity>6BA2</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 45 38"><unientity>6BAA</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 45 39"><unientity>6BAB</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 45 3B"><unientity>6BAD</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 45 3D"><unientity>6BB0</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 45 3F"><unientity>6BB3</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 45 47"><unientity>6BBD</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 45 4D"><unientity>6996</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 45 54"><unientity>6BC8</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 45 5B"><unientity>6BD6</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 45 60"><unientity>6BDA</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 45 62"><unientity>6BDC</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 45 63"><unientity>6BDD</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 45 65"><unientity>6BDF</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 45 6F"><unientity>6BE7</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 45 70"><unientity>6BEA</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 45 71"><unientity>6BE8</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 46 2A"><unientity>6BF6</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 46 2C"><unientity>6BF3</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 46 33"><unientity>6BF8</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 46 37"><unientity>6BFA</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 46 38"><unientity>6BF9</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 46 42"><unientity>6BFF</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 46 44"><unientity>6C06</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 46 48"><unientity>6C04</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 46 4A"><unientity>6C05</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 46 4C"><unientity>6C08</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 46 51"><unientity>6C0C</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 46 52"><unientity>6C0D</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 46 59"><unientity>6C15</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 46 5A"><unientity>6C18</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 46 5B"><unientity>6C19</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 46 5C"><unientity>6C1A</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 46 5E"><unientity>6C1D</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 46 60"><unientity>6C20</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 46 62"><unientity>6C21</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 46 64"><unientity>6C2A</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 46 66"><unientity>6C2D</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 46 67"><unientity>6C30</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 46 68"><unientity>6C2C</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 46 69"><unientity>E9EB</unientity><desc>East Asian ideograph not in Unicode</desc></character>
-<character hex="22 46 70"><unientity>6C3B</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 46 74"><unientity>6C3F</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 46 78"><unientity>6C46</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 46 7A"><unientity>6C52</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 46 7B"><unientity>6C62</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 46 7C"><unientity>6C4A</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 47 24"><unientity>6C5C</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 47 26"><unientity>6C5B</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 47 27"><unientity>6C4D</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 47 2B"><unientity>6C4B</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 47 2C"><unientity>6C54</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 47 2D"><unientity>6C63</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 47 30"><unientity>6C78</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 47 31"><unientity>6C74</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 47 32"><unientity>6C86</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 47 33"><unientity>6C76</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 47 38"><unientity>6C6C</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 47 39"><unientity>6C67</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 47 3B"><unientity>6C84</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 47 3E"><unientity>6C94</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 47 40"><unientity>6C8F</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 47 42"><unientity>6C65</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 47 47"><unientity>6C6F</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 47 49"><unientity>6C9D</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 47 4A"><unientity>6C69</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 47 4B"><unientity>6C9A</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 47 4C"><unientity>6C6D</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 47 4D"><unientity>6C93</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 47 51"><unientity>6C87</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 47 52"><unientity>6C6E</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 47 56"><unientity>6C95</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 47 5A"><unientity>6C82</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 47 5C"><unientity>6CA0</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 47 62"><unientity>6CEB</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 47 63"><unientity>6CEE</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 47 64"><unientity>6CC0</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 47 66"><unientity>6CEF</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 47 67"><unientity>6CAC</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 47 6E"><unientity>E965</unientity><unientityalt>6CAD</unientityalt><desc>Variant of 4C476E which maps to 6CAD</desc></character>
-<character hex="22 47 70"><unientity>6CAF</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 47 72"><unientity>6CF5</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 47 7A"><unientity>6CBA</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 47 7B"><unientity>7553</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 47 7D"><unientity>6CC2</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 48 24"><unientity>6CD8</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 48 26"><unientity>6CC6</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 48 28"><unientity>6CCE</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 48 29"><unientity>6CE9</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 48 2D"><unientity>6CF2</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 48 2F"><unientity>6CE0</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 48 30"><unientity>6CD1</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 48 32"><unientity>6CD2</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 48 33"><unientity>6CB4</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 48 37"><unientity>6D1D</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 48 3B"><unientity>6D28</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 48 44"><unientity>6D39</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 48 4D"><unientity>6D26</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 48 4E"><unientity>6D27</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 48 4F"><unientity>6D0F</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 48 50"><unientity>6D0A</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 48 51"><unientity>6D3F</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 48 5A"><unientity>6D07</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 48 5B"><unientity>6D04</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 48 5C"><unientity>6CDA</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 48 60"><unientity>6D2E</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 48 61"><unientity>6D35</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 48 62"><unientity>6D3A</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 48 64"><unientity>6D19</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 48 67"><unientity>6D0E</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 48 6A"><unientity>6D2B</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 48 6B"><unientity>6D11</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 48 6C"><unientity>6D00</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 48 6D"><unientity>6D24</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 48 6F"><unientity>6D33</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 48 73"><unientity>6D63</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 48 77"><unientity>6DA5</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 48 7D"><unientity>6D92</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 49 25"><unientity>6D6D</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 49 26"><unientity>6D6F</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 49 28"><unientity>6D61</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 49 29"><unientity>6D91</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 49 2C"><unientity>6D81</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 49 2E"><unientity>6D8A</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 49 2F"><unientity>E966</unientity><unientityalt>6D34</unientityalt><desc>Variant of 34492F which maps to 6D34</desc></character>
-<character hex="22 49 34"><unientity>6D79</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 49 35"><unientity>6DEF</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 49 39"><unientity>6D7F</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 49 3B"><unientity>6D85</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 49 3C"><unientity>6D65</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 49 3E"><unientity>6D5E</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 49 40"><unientity>6D67</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 49 43"><unientity>6D94</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 49 46"><unientity>6D60</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 49 48"><unientity>6D98</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 49 4B"><unientity>6D7C</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 49 4C"><unientity>6D70</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 49 4F"><unientity>6D96</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 49 59"><unientity>6DAB</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 49 5A"><unientity>6DB4</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 49 5C"><unientity>6DAA</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 49 60"><unientity>6DEC</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 49 6A"><unientity>6DAC</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 49 6B"><unientity>6DB7</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 49 6C"><unientity>6DE2</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 49 6D"><unientity>6DD5</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 49 6E"><unientity>6DE9</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 49 71"><unientity>6DF6</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 49 79"><unientity>6E0F</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 49 7B"><unientity>6DBF</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 4A 2A"><unientity>6DDF</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 4A 2D"><unientity>6DD3</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 4A 32"><unientity>6DFC</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 4A 35"><unientity>6DDD</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 4A 36"><unientity>6DDC</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 4A 39"><unientity>6DDB</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 4A 3D"><unientity>6DA4</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 4A 44"><unientity>6E12</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 4A 46"><unientity>6DF0</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 4A 4A"><unientity>6DE6</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 4A 4C"><unientity>6E1F</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 4A 50"><unientity>6E27</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 4A 55"><unientity>6E49</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 4A 58"><unientity>6E3C</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 4A 60"><unientity>6E8A</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 4A 62"><unientity>6E4B</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 4A 66"><unientity>6E62</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 4A 6A"><unientity>6E51</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 4A 6B"><unientity>6E44</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 4A 6D"><unientity>6E63</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 4A 71"><unientity>6E73</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 4A 74"><unientity>6E4F</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 4A 77"><unientity>6E4E</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 4B 22"><unientity>6E28</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 4B 24"><unientity>6E5C</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 4B 26"><unientity>6E31</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 4B 28"><unientity>6E5E</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 4B 2C"><unientity>6E84</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 4B 2E"><unientity>6E2E</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 4B 30"><unientity>6E36</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 4B 31"><unientity>6E5D</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 4B 32"><unientity>6E72</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 4B 33"><unientity>6E30</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 4B 34"><unientity>6E53</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 4B 36"><unientity>6E39</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 4B 37"><unientity>6E71</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 4B 38"><unientity>6E69</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 4B 39"><unientity>6E6B</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 4B 3B"><unientity>6E8B</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 4B 3E"><unientity>6E76</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 4B 40"><unientity>6E2A</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 4B 41"><unientity>6E4C</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 4B 42"><unientity>6E22</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 4B 43"><unientity>6ECE</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 4B 45"><unientity>6E9B</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 4B 46"><unientity>6E9F</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 4B 48"><unientity>6EC8</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 4B 49"><unientity>6ED8</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 4B 4A"><unientity>6E8F</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 4B 4D"><unientity>6E93</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 4B 4F"><unientity>6EA0</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 4B 51"><unientity>6EB1</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 4B 57"><unientity>6EA8</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 4B 59"><unientity>6E92</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 4B 5A"><unientity>6EA7</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 4B 5E"><unientity>6E8E</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 4B 60"><unientity>6ED9</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 4B 61"><unientity>6EBD</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 4B 63"><unientity>6EC1</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 4B 69"><unientity>6EBB</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 4B 6A"><unientity>6EC9</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 4B 6C"><unientity>6EB3</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 4B 6D"><unientity>6EB7</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 4B 75"><unientity>6EA4</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 4B 79"><unientity>6ECF</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 4B 7C"><unientity>6ECA</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 4B 7D"><unientity>6ED5</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 4C 21"><unientity>6EC3</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 4C 24"><unientity>6EB4</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 4C 26"><unientity>6EB2</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 4C 29"><unientity>6EB5</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 4C 2E"><unientity>6EF8</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 4C 30"><unientity>6F37</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 4C 34"><unientity>6EFD</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 4C 35"><unientity>6F09</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 4C 3C"><unientity>6F3B</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 4C 3D"><unientity>6F63</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 4C 3E"><unientity>6F12</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 4C 3F"><unientity>6F26</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 4C 41"><unientity>6F1A</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 4C 42"><unientity>6EF6</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 4C 43"><unientity>6F19</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 4C 44"><unientity>6F00</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 4C 4B"><unientity>6F24</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 4C 51"><unientity>6F18</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 4C 57"><unientity>6F1F</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 4C 5A"><unientity>6F0A</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 4C 5E"><unientity>6F36</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 4C 60"><unientity>6EF9</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 4C 61"><unientity>6EEE</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 4C 62"><unientity>6F41</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 4C 64"><unientity>6F95</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 4C 65"><unientity>6F2D</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 4C 67"><unientity>6F34</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 4C 6B"><unientity>6F49</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 4C 6D"><unientity>6F30</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 4C 76"><unientity>6EFA</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 4C 77"><unientity>6EEB</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 4C 78"><unientity>6F08</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 4C 79"><unientity>6F0E</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 4C 7B"><unientity>6F35</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 4D 23"><unientity>6F7E</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 4D 24"><unientity>6F9D</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 4D 27"><unientity>6F87</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 4D 2B"><unientity>6F6F</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 4D 2F"><unientity>6F5A</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 4D 30"><unientity>6F60</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 4D 35"><unientity>6F90</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 4D 37"><unientity>6F8D</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 4D 39"><unientity>6F92</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 4D 3A"><unientity>6F89</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 4D 3C"><unientity>6F8C</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 4D 3D"><unientity>E967</unientity><unientityalt>6F62</unientityalt><desc>Variant of 4C4D3D which maps to 6F62</desc></character>
-<character hex="22 4D 44"><unientity>6F0B</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 4D 4B"><unientity>6F6C</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 4D 4D"><unientity>6F8B</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 4D 58"><unientity>6E88</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 4D 5A"><unientity>6F55</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 4D 5F"><unientity>6F72</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 4D 62"><unientity>6F57</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 4D 63"><unientity>6F5F</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 4D 68"><unientity>6F5D</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 4D 73"><unientity>6FB6</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 4D 74"><unientity>6F9F</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 4D 79"><unientity>6FA6</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 4D 7C"><unientity>6FC6</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 4D 7D"><unientity>6FBC</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 4E 21"><unientity>6FAA</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 4E 25"><unientity>6FBF</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 4E 26"><unientity>6FC7</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 4E 2D"><unientity>6FC9</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 4E 2E"><unientity>6F5E</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 4E 2F"><unientity>6FC8</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 4E 30"><unientity>6FA0</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 4E 32"><unientity>6FCA</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 4E 35"><unientity>6FB4</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 4E 37"><unientity>6FAF</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 4E 3C"><unientity>6FA8</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 4E 40"><unientity>6FA5</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 4E 41"><unientity>6FB0</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 4E 42"><unientity>6FAE</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 4E 43"><unientity>6FD9</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 4E 44"><unientity>6FDA</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 4E 50"><unientity>6FD4</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 4E 56"><unientity>6FE9</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 4E 57"><unientity>6FF8</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 4E 5D"><unientity>6FDE</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 4E 5E"><unientity>6FEE</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 4E 62"><unientity>6FF0</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 4E 66"><unientity>7005</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 4E 67"><unientity>700C</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 4E 6A"><unientity>700D</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 4E 72"><unientity>7026</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 4F 24"><unientity>7020</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 4F 26"><unientity>7027</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 4F 2B"><unientity>E968</unientity><unientityalt>701E</unientityalt><desc>Variant of 4C4F2B which maps to 701E</desc></character>
-<character hex="22 4F 2F"><unientity>702E</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 4F 31"><unientity>702D</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 4F 35"><unientity>7021</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 4F 39"><unientity>7018</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 4F 3A"><unientity>7023</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 4F 41"><unientity>703C</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 4F 44"><unientity>7035</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 4F 51"><unientity>7034</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 4F 53"><unientity>7039</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 4F 54"><unientity>703A</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 4F 5D"><unientity>7043</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 4F 61"><unientity>7044</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 4F 67"><unientity>7047</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 4F 69"><unientity>7049</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 4F 6B"><unientity>7055</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 4F 71"><unientity>7052</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 4F 73"><unientity>705C</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 4F 78"><unientity>7059</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 4F 7B"><unientity>705E</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 4F 7C"><unientity>7061</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 4F 7D"><unientity>705D</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 50 21"><unientity>9E02</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 50 25"><unientity>7066</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 50 27"><unientity>7065</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 50 28"><unientity>7068</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 50 29"><unientity>7054</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 50 39"><unientity>7074</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 50 3B"><unientity>707A</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 50 40"><unientity>7093</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 50 42"><unientity>7086</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 50 48"><unientity>E9EC</unientity><desc>East Asian ideograph not in Unicode</desc></character>
-<character hex="22 50 49"><unientity>7084</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 50 4A"><unientity>7081</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 50 56"><unientity>7088</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 50 57"><unientity>7098</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 50 59"><unientity>708C</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 50 5C"><unientity>70B7</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 50 62"><unientity>70A1</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 50 63"><unientity>70A3</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 50 68"><unientity>7551</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 50 6F"><unientity>70A7</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 50 70"><unientity>79CC</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 50 71"><unientity>70B5</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 50 72"><unientity>70BF</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 50 73"><unientity>70A9</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 50 78"><unientity>70EA</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 50 7B"><unientity>70E5</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 50 7C"><unientity>70DC</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 50 7D"><unientity>70D3</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 51 22"><unientity>70DD</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 51 23"><unientity>70E1</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 51 26"><unientity>70E3</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 51 28"><unientity>70E0</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 51 2B"><unientity>70D4</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 51 2E"><unientity>70D1</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 51 38"><unientity>70CB</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 51 3A"><unientity>70D0</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 51 3B"><unientity>70C7</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 51 3C"><unientity>70DA</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 51 3D"><unientity>70C6</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 51 3F"><unientity>70FA</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 51 42"><unientity>70F7</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 51 44"><unientity>7104</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 51 48"><unientity>70F3</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 51 4A"><unientity>7110</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 51 4C"><unientity>7103</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 51 50"><unientity>70F4</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 51 55"><unientity>7111</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 51 56"><unientity>7112</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 51 5C"><unientity>710C</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 51 60"><unientity>70F6</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 51 66"><unientity>7113</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 51 67"><unientity>70EF</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 51 68"><unientity>7100</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 51 6C"><unientity>711E</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 51 6D"><unientity>7134</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 51 6E"><unientity>7120</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 51 6F"><unientity>713F</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 51 74"><unientity>7131</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 51 75"><unientity>712D</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 52 27"><unientity>7139</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 52 28"><unientity>7135</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 52 2C"><unientity>713B</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 52 2E"><unientity>711C</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 52 32"><unientity>713D</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 52 35"><unientity>712F</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 52 3B"><unientity>7129</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 52 43"><unientity>712E</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 52 48"><unientity>7177</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 52 51"><unientity>7146</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 52 52"><unientity>7152</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 52 54"><unientity>714F</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 52 55"><unientity>715D</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 52 56"><unientity>7141</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 52 57"><unientity>7160</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 52 59"><unientity>7175</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 52 5A"><unientity>7173</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 52 5C"><unientity>7143</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 52 5D"><unientity>715A</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 52 5E"><unientity>7176</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 52 60"><unientity>714B</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 52 62"><unientity>7147</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 52 65"><unientity>7168</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 52 66"><unientity>7171</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 52 67"><unientity>715F</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 52 69"><unientity>7150</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 52 6B"><unientity>7153</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 52 70"><unientity>7144</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 52 76"><unientity>7172</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 52 78"><unientity>7178</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 52 7B"><unientity>7187</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 52 7C"><unientity>717B</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 53 23"><unientity>7192</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 53 2B"><unientity>7180</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 53 2C"><unientity>7189</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 53 32"><unientity>7185</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 53 33"><unientity>7196</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 53 36"><unientity>717C</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 53 39"><unientity>7198</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 53 3C"><unientity>7197</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 53 3E"><unientity>71B5</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 53 3F"><unientity>71A9</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 53 42"><unientity>71A5</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 53 46"><unientity>719E</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 53 47"><unientity>71B2</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 53 4A"><unientity>719B</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 53 4E"><unientity>71AF</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 53 51"><unientity>71A4</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 53 52"><unientity>71A0</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 53 55"><unientity>719A</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 53 57"><unientity>71B3</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 53 59"><unientity>71B4</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 53 67"><unientity>71D1</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 53 69"><unientity>71C7</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 53 6A"><unientity>71B7</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 53 6D"><unientity>71CA</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 53 6F"><unientity>71CF</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 53 70"><unientity>71D6</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 53 72"><unientity>71BA</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 53 75"><unientity>71C2</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 53 77"><unientity>71C5</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 53 7A"><unientity>71BF</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 53 7C"><unientity>71B8</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 54 21"><unientity>71DD</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 54 22"><unientity>71C0</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 54 24"><unientity>71C1</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 54 26"><unientity>71D4</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 54 29"><unientity>71CB</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 54 2A"><unientity>71DE</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 54 32"><unientity>71EB</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 54 36"><unientity>71E8</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 54 3A"><unientity>71F5</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 54 3D"><unientity>71F3</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 54 3F"><unientity>71E1</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 54 47"><unientity>71E0</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 54 4B"><unientity>720C</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 54 4F"><unientity>71FC</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 54 56"><unientity>71F9</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 54 5B"><unientity>720E</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 54 5C"><unientity>5911</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 54 5E"><unientity>720A</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 54 60"><unientity>7217</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 54 61"><unientity>7207</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 54 66"><unientity>7215</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 54 69"><unientity>7213</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 54 6E"><unientity>7218</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 54 71"><unientity>720B</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 54 79"><unientity>721A</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 54 7D"><unientity>721F</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 55 21"><unientity>721D</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 55 29"><unientity>7225</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 55 2A"><unientity>7226</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 55 41"><unientity>723F</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 55 43"><unientity>7241</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 55 44"><unientity>7242</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 55 4F"><unientity>7250</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 55 51"><unientity>724F</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 55 52"><unientity>7253</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 55 53"><unientity>7255</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 55 56"><unientity>725A</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 55 59"><unientity>7263</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 55 61"><unientity>7273</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 55 63"><unientity>726E</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 55 66"><unientity>7276</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 55 68"><unientity>7277</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 55 6B"><unientity>727E</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 55 6D"><unientity>727C</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 55 71"><unientity>727F</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 55 74"><unientity>7289</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 55 7C"><unientity>728B</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 56 22"><unientity>728D</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 56 28"><unientity>728F</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 56 48"><unientity>72A8</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 56 4C"><unientity>72AB</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 56 4E"><unientity>72B0</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 56 4F"><unientity>72B4</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 56 51"><unientity>72C6</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 56 52"><unientity>72B5</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 56 56"><unientity>72BC</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 56 58"><unientity>72C3</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 56 5B"><unientity>72C1</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 56 60"><unientity>72D6</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 56 64"><unientity>72D2</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 56 67"><unientity>72C9</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 56 6C"><unientity>72CC</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 56 6E"><unientity>72DB</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 56 6F"><unientity>72CD</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 56 73"><unientity>72E8</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 56 76"><unientity>72EB</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 56 79"><unientity>72E5</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 56 7E"><unientity>72FA</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 57 24"><unientity>72F4</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 57 25"><unientity>72FE</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 57 29"><unientity>7302</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 57 2C"><unientity>72FB</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 57 2D"><unientity>7301</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 57 2E"><unientity>72F3</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 57 31"><unientity>731D</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 57 35"><unientity>730B</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 57 36"><unientity>7317</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 57 3B"><unientity>7307</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 57 3E"><unientity>7318</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 57 42"><unientity>731E</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 57 46"><unientity>7331</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 57 49"><unientity>7338</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 57 4A"><unientity>7322</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 57 4C"><unientity>7332</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 57 4D"><unientity>732C</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 57 4E"><unientity>7327</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 57 4F"><unientity>732B</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 57 52"><unientity>732F</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 57 55"><unientity>7328</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 57 5A"><unientity>7347</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 57 5B"><unientity>7348</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 57 5C"><unientity>7349</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 57 5F"><unientity>733B</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 57 62"><unientity>733A</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 57 65"><unientity>7340</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 57 68"><unientity>734D</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 57 6B"><unientity>7352</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 57 72"><unientity>735E</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 57 74"><unientity>735D</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 57 79"><unientity>7360</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 57 7B"><unientity>7358</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 57 7E"><unientity>7362</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 58 21"><unientity>734B</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 58 25"><unientity>7367</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 58 29"><unientity>736C</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 58 2B"><unientity>736B</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 58 2F"><unientity>736F</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 58 36"><unientity>737C</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 58 38"><unientity>737E</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 58 3B"><unientity>7381</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 58 3F"><unientity>7388</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 58 42"><unientity>738E</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 58 46"><unientity>7395</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 58 47"><unientity>7392</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 58 48"><unientity>7397</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 58 4C"><unientity>7393</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 58 4D"><unientity>7394</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 58 51"><unientity>739E</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 58 52"><unientity>73A6</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 58 5D"><unientity>73A5</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 58 62"><unientity>73A2</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 58 63"><unientity>73A0</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 58 67"><unientity>73B6</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 58 68"><unientity>73CF</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 58 6A"><unientity>73C2</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 58 6B"><unientity>73D0</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 58 6F"><unientity>73BF</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 58 70"><unientity>73C8</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 58 7D"><unientity>73CC</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 59 21"><unientity>73D3</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 59 27"><unientity>73EA</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 59 28"><unientity>73E5</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 59 2A"><unientity>73D9</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 59 2B"><unientity>73EF</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 59 2F"><unientity>73D4</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 59 30"><unientity>73DB</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 59 32"><unientity>73D6</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 59 35"><unientity>73BC</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 59 36"><unientity>73E7</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 59 38"><unientity>73E3</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 59 3A"><unientity>73DE</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 59 3C"><unientity>73E6</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 59 3F"><unientity>73E9</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 59 45"><unientity>73F6</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 59 47"><unientity>73FA</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 59 4A"><unientity>73F8</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 59 54"><unientity>73F5</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 59 5A"><unientity>73FD</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 59 5C"><unientity>7407</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 59 5E"><unientity>7412</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 59 63"><unientity>743C</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 59 66"><unientity>742E</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 59 67"><unientity>742F</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 59 69"><unientity>7414</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 59 6A"><unientity>742C</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 59 6C"><unientity>7430</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 59 6E"><unientity>742B</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 59 70"><unientity>73F7</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 59 71"><unientity>741A</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 59 78"><unientity>7416</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 59 7A"><unientity>7426</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 5A 21"><unientity>7428</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 5A 23"><unientity>7429</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 5A 28"><unientity>7420</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 5A 2A"><unientity>741B</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 5A 2B"><unientity>7424</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 5A 2C"><unientity>7432</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 5A 2D"><unientity>742D</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 5A 30"><unientity>7415</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 5A 32"><unientity>743B</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 5A 36"><unientity>7444</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 5A 40"><unientity>7447</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 5A 43"><unientity>7458</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 5A 45"><unientity>7442</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 5A 47"><unientity>744B</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 5A 4A"><unientity>744A</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 5A 4F"><unientity>7452</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 5A 55"><unientity>7457</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 5A 56"><unientity>7451</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 5A 5A"><unientity>745D</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 5A 5B"><unientity>7454</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 5A 5D"><unientity>7440</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 5A 60"><unientity>746D</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 5A 61"><unientity>7462</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 5A 62"><unientity>7473</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 5A 68"><unientity>7474</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 5A 69"><unientity>746E</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 5A 6A"><unientity>7471</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 5A 6B"><unientity>7468</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 5A 78"><unientity>7460</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 5A 79"><unientity>7472</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 5A 7A"><unientity>7484</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 5A 7B"><unientity>7487</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 5A 7E"><unientity>7488</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 5B 21"><unientity>7489</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 5B 22"><unientity>747C</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 5B 27"><unientity>7482</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 5B 28"><unientity>747E</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 5B 2A"><unientity>748A</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 5B 2D"><unientity>7486</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 5B 30"><unientity>747A</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 5B 38"><unientity>7480</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 5B 3C"><unientity>7481</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 5B 3E"><unientity>747D</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 5B 3F"><unientity>7485</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 5B 40"><unientity>7497</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 5B 43"><unientity>7498</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 5B 45"><unientity>749A</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 5B 4D"><unientity>74A4</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 5B 54"><unientity>749F</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 5B 55"><unientity>749D</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 5B 56"><unientity>748D</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 5B 57"><unientity>749E</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 5B 59"><unientity>74A0</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 5B 5D"><unientity>74A1</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 5B 60"><unientity>74B2</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 5B 61"><unientity>74B1</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 5B 66"><unientity>74B4</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 5B 67"><unientity>74AB</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 5B 69"><unientity>74AA</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 5B 6A"><unientity>7490</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 5B 6C"><unientity>74A5</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 5B 6E"><unientity>74A8</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 5B 76"><unientity>74B8</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 5B 7A"><unientity>74C0</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 5C 25"><unientity>74BF</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 5C 28"><unientity>74B5</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 5C 29"><unientity>74BA</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 5C 30"><unientity>74C8</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 5C 31"><unientity>74C5</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 5C 32"><unientity>74CC</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 5C 38"><unientity>74D6</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 5C 3A"><unientity>74D4</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 5C 3D"><unientity>74D8</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 5C 40"><unientity>74DA</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 5C 41"><unientity>74DB</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 5C 47"><unientity>74DE</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 5C 50"><unientity>74E4</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 5C 52"><unientity>74E7</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 5C 54"><unientity>74E9</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 5C 58"><unientity>74F1</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 5C 5A"><unientity>74F0</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 5C 5C"><unientity>74EE</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 5C 61"><unientity>74F4</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 5C 63"><unientity>74F8</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 5C 66"><unientity>74FB</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 5C 67"><unientity>74FF</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 5C 71"><unientity>7505</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 5C 77"><unientity>7503</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 5C 7D"><unientity>7507</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 5D 25"><unientity>750E</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 5D 28"><unientity>750D</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 5D 2C"><unientity>7511</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 5D 2D"><unientity>750F</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 5D 32"><unientity>7512</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 5D 33"><unientity>7513</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 5D 39"><unientity>7517</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 5D 42"><unientity>7521</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 5D 44"><unientity>7524</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 5D 49"><unientity>752F</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 5D 4D"><unientity>753A</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 5D 4F"><unientity>753F</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 5D 51"><unientity>7540</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 5D 52"><unientity>753E</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 5D 55"><unientity>754A</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 5D 57"><unientity>754E</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 5D 58"><unientity>7547</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 5D 59"><unientity>754B</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 5D 5A"><unientity>7548</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 5D 5F"><unientity>755F</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 5D 60"><unientity>755B</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 5D 62"><unientity>7564</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 5D 67"><unientity>7563</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 5D 69"><unientity>756F</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 5D 6B"><unientity>756C</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 5D 6D"><unientity>7579</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 5D 6E"><unientity>757A</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 5D 71"><unientity>7577</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 5D 75"><unientity>7571</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 5D 79"><unientity>757D</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 5D 7E"><unientity>757F</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 5E 25"><unientity>7583</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 5E 2C"><unientity>7590</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 5E 2D"><unientity>7592</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 5E 2E"><unientity>7594</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 5E 31"><unientity>7595</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 5E 35"><unientity>7598</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 5E 37"><unientity>75A2</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 5E 3B"><unientity>75A3</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 5E 3E"><unientity>75BA</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 5E 43"><unientity>75B0</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 5E 44"><unientity>75C3</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 5E 46"><unientity>75BF</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 5E 47"><unientity>75B4</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 5E 4A"><unientity>75C2</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 5E 4E"><unientity>75C1</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 5E 50"><unientity>75B1</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 5E 51"><unientity>75C4</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 5E 58"><unientity>75CD</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 5E 5C"><unientity>75CF</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 5E 5E"><unientity>75CC</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 5E 5F"><unientity>75D0</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 5E 63"><unientity>75E7</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 5E 66"><unientity>75E1</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 5E 67"><unientity>75E6</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 5E 71"><unientity>75E4</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 5E 72"><unientity>75E0</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 5E 73"><unientity>75D7</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 5E 7A"><unientity>7602</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 5E 7E"><unientity>7603</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 5F 21"><unientity>75F9</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 5F 22"><unientity>75FC</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 5F 29"><unientity>7616</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 5F 2C"><unientity>7608</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 5F 2D"><unientity>7615</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 5F 2E"><unientity>760C</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 5F 2F"><unientity>760F</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 5F 3B"><unientity>7610</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 5F 3C"><unientity>760A</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 5F 3E"><unientity>7625</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 5F 3F"><unientity>761A</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 5F 40"><unientity>761B</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 5F 47"><unientity>7619</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 5F 48"><unientity>761E</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 5F 4C"><unientity>761D</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 5F 50"><unientity>7622</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 5F 51"><unientity>762F</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 5F 54"><unientity>762D</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 5F 5C"><unientity>7633</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 5F 5E"><unientity>763B</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 5F 5F"><unientity>7630</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 5F 60"><unientity>763C</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 5F 62"><unientity>7635</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 5F 67"><unientity>7648</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 5F 68"><unientity>764E</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 5F 69"><unientity>7647</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 5F 6A"><unientity>7643</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 5F 6E"><unientity>764D</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 5F 6F"><unientity>7649</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 5F 75"><unientity>7654</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 5F 7A"><unientity>765C</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 5F 7B"><unientity>7657</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 60 22"><unientity>7664</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 60 24"><unientity>7659</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 60 2B"><unientity>765F</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 60 32"><unientity>7667</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 60 35"><unientity>766A</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 60 37"><unientity>766D</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 60 38"><unientity>766F</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 60 3A"><unientity>7670</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 60 40"><unientity>7676</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 60 41"><unientity>7677</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 60 48"><unientity>7680</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 60 4A"><unientity>768B</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 60 52"><unientity>7695</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 60 55"><unientity>656B</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 60 59"><unientity>7699</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 60 5D"><unientity>769C</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 60 5F"><unientity>769D</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 60 65"><unientity>76A4</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 60 66"><unientity>76A5</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 60 67"><unientity>76A6</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 60 6A"><unientity>76AA</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 60 6D"><unientity>76AD</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 60 74"><unientity>76B8</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 60 77"><unientity>76BD</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 61 23"><unientity>76CB</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 61 26"><unientity>76CC</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 61 3B"><unientity>76E6</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 61 3C"><unientity>76E9</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 61 40"><unientity>76EC</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 61 44"><unientity>76ED</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 61 48"><unientity>76F1</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 61 4B"><unientity>7704</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 61 4F"><unientity>7708</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 61 50"><unientity>7707</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 61 53"><unientity>76F7</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 61 54"><unientity>770A</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 61 59"><unientity>76FB</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 61 5E"><unientity>772B</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 61 60"><unientity>770E</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 61 62"><unientity>771B</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 61 63"><unientity>7724</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 61 6C"><unientity>7722</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 61 6D"><unientity>771A</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 61 6F"><unientity>7721</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 61 74"><unientity>7740</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 61 75"><unientity>7739</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 61 76"><unientity>772F</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 61 77"><unientity>7731</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 62 22"><unientity>7725</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 62 25"><unientity>7735</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 62 26"><unientity>7734</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 62 2D"><unientity>7747</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 62 31"><unientity>7745</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 62 32"><unientity>774D</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 62 33"><unientity>774A</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 62 35"><unientity>7743</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 62 37"><unientity>774E</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 62 3A"><unientity>775F</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 62 3D"><unientity>7760</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 62 3E"><unientity>7752</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 62 42"><unientity>7758</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 62 44"><unientity>7756</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 62 45"><unientity>775A</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 62 4F"><unientity>7762</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 62 52"><unientity>7780</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 62 56"><unientity>776F</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 62 5D"><unientity>777E</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 62 5F"><unientity>7785</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 62 60"><unientity>777A</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 62 66"><unientity>E969</unientity><unientityalt>778B</unientityalt><desc>Variant of 4C6266 which maps to 778B</desc></character>
-<character hex="22 62 6A"><unientity>778D</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 62 72"><unientity>7798</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 62 73"><unientity>7796</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 62 75"><unientity>77A2</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 62 76"><unientity>7799</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 62 7A"><unientity>77B5</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 62 7D"><unientity>77B7</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 63 23"><unientity>77B6</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 63 29"><unientity>77BE</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 63 2B"><unientity>77B9</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 63 2C"><unientity>77BC</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 63 35"><unientity>77CD</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 63 3A"><unientity>77D1</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 63 45"><unientity>77DE</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 63 46"><unientity>77DF</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 63 4F"><unientity>77E7</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 63 52"><unientity>77E6</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 63 55"><unientity>77EC</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 63 59"><unientity>77F0</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 63 5A"><unientity>77F1</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 63 5C"><unientity>77F4</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 63 60"><unientity>77FC</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 63 67"><unientity>77F8</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 63 68"><unientity>77FB</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 63 70"><unientity>7809</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 63 71"><unientity>7806</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 63 73"><unientity>7819</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 63 74"><unientity>7811</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 63 78"><unientity>7812</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 64 24"><unientity>781B</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 64 26"><unientity>782C</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 64 27"><unientity>7823</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 64 28"><unientity>782B</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 64 2A"><unientity>7829</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 64 2D"><unientity>7822</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 64 31"><unientity>7835</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 64 32"><unientity>7833</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 64 33"><unientity>782E</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 64 35"><unientity>7820</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 64 38"><unientity>783D</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 64 3B"><unientity>781F</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 64 3D"><unientity>7831</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 64 44"><unientity>784D</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 64 48"><unientity>7848</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 64 49"><unientity>7853</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 64 4A"><unientity>7854</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 64 4B"><unientity>7845</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 64 4C"><unientity>7852</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 64 4E"><unientity>7850</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 64 4F"><unientity>7858</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 64 50"><unientity>7826</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 64 52"><unientity>7847</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 64 56"><unientity>784C</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 64 5A"><unientity>7868</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 64 5B"><unientity>786D</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 64 60"><unientity>7864</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 64 61"><unientity>785C</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 64 64"><unientity>7876</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 64 66"><unientity>786A</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 64 69"><unientity>7886</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 64 6B"><unientity>789A</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 64 6C"><unientity>787F</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 64 6D"><unientity>7887</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 64 70"><unientity>7894</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 64 76"><unientity>788F</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 64 7E"><unientity>7899</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 65 29"><unientity>7893</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 65 2C"><unientity>7892</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 65 2D"><unientity>7896</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 65 2F"><unientity>78B2</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 65 31"><unientity>78A1</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 65 32"><unientity>78B6</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 65 39"><unientity>78B7</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 65 3B"><unientity>78A4</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 65 3E"><unientity>78B4</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 65 40"><unientity>78AD</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 65 41"><unientity>78A3</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 65 43"><unientity>789E</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 65 44"><unientity>78A8</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 65 48"><unientity>78AB</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 65 4E"><unientity>78BB</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 65 55"><unientity>78CC</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 65 56"><unientity>78C9</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 65 58"><unientity>78D1</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 65 5A"><unientity>78D8</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 65 5E"><unientity>78C8</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 65 60"><unientity>78D4</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 65 68"><unientity>78DF</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 65 6A"><unientity>78E7</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 65 6E"><unientity>78DB</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 65 6F"><unientity>78E1</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 65 73"><unientity>78E0</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 65 76"><unientity>78EE</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 65 77"><unientity>78E3</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 65 79"><unientity>78F2</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 65 7E"><unientity>7905</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 66 21"><unientity>78F9</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 66 22"><unientity>78FD</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 66 27"><unientity>78FE</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 66 29"><unientity>78FB</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 66 2B"><unientity>7904</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 66 2E"><unientity>7912</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 66 32"><unientity>790C</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 66 34"><unientity>7913</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 66 35"><unientity>7911</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 66 43"><unientity>791E</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 66 46"><unientity>7922</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 66 4C"><unientity>7924</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 66 4D"><unientity>7927</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 66 50"><unientity>7929</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 66 55"><unientity>7931</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 66 5D"><unientity>7934</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 66 60"><unientity>7936</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 66 65"><unientity>793D</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 66 67"><unientity>7942</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 66 68"><unientity>793F</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 66 6A"><unientity>794A</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 66 6B"><unientity>794D</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 66 75"><unientity>7946</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 66 77"><unientity>7958</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 66 79"><unientity>795B</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 66 7A"><unientity>795C</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 66 7B"><unientity>794F</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 66 7C"><unientity>7953</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 66 7D"><unientity>E9D0</unientity><unientityalt>7953</unientityalt><desc>Unrelated variant of EACC 22667C which maps to 7953</desc></character>
-<character hex="22 67 21"><unientity>7951</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 67 23"><unientity>7954</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 67 2A"><unientity>7967</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 67 2D"><unientity>796B</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 67 30"><unientity>7972</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 67 3E"><unientity>797C</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 67 4A"><unientity>7998</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 67 4B"><unientity>798A</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 67 4D"><unientity>7999</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 67 4E"><unientity>7995</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 67 4F"><unientity>798B</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 67 50"><unientity>7996</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 67 54"><unientity>7994</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 67 55"><unientity>7993</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 67 5C"><unientity>799A</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 67 5F"><unientity>79A1</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 67 60"><unientity>799B</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 67 61"><unientity>79A3</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 67 64"><unientity>799D</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 67 6E"><unientity>79A9</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 67 70"><unientity>79AB</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 67 71"><unientity>79A8</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 67 75"><unientity>79B0</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 67 7A"><unientity>79B3</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 67 7B"><unientity>79B4</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 68 22"><unientity>79B8</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 68 23"><unientity>79BA</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 68 25"><unientity>79BC</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 68 28"><unientity>79C6</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 68 2A"><unientity>79C8</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 68 2D"><unientity>79D4</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 68 2E"><unientity>79D5</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 68 32"><unientity>79D6</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 68 3D"><unientity>79EC</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 68 3E"><unientity>E96A</unientity><unientityalt>79EB</unientityalt><desc>Variant of 4C683E which maps to 79EB</desc></character>
-<character hex="22 68 42"><unientity>79E1</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 68 44"><unientity>79DD</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 68 45"><unientity>79ED</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 68 48"><unientity>79F8</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 68 4F"><unientity>7A02</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 68 50"><unientity>7A0A</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 68 54"><unientity>7A09</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 68 5C"><unientity>7A03</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 68 61"><unientity>7A0C</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 68 6B"><unientity>7A11</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 68 6C"><unientity>7A18</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 68 6F"><unientity>E96B</unientity><unientityalt>7A19</unientityalt><desc>Variant of 2E686F which maps to 7A19</desc></character>
-<character hex="22 68 71"><unientity>7A1E</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 68 76"><unientity>7A17</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 68 7E"><unientity>7A2D</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 69 22"><unientity>7A2C</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 69 39"><unientity>7A48</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 69 3D"><unientity>7A4B</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 69 3E"><unientity>7A47</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 69 3F"><unientity>7A44</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 69 40"><unientity>7A5C</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 69 4D"><unientity>7A5F</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 69 4F"><unientity>7A60</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 69 57"><unientity>7A6E</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 69 5F"><unientity>7A70</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 69 66"><unientity>7A75</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 69 69"><unientity>7A78</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 69 6B"><unientity>7A80</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 69 70"><unientity>7A85</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 69 75"><unientity>7A86</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 69 78"><unientity>7A8A</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 69 7A"><unientity>7A94</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 69 7E"><unientity>68A5</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 6A 28"><unientity>7AA3</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 6A 2B"><unientity>7A9E</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 6A 2C"><unientity>7AA7</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 6A 2E"><unientity>7AA8</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 6A 31"><unientity>7AAC</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 6A 36"><unientity>7AB3</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 6A 3A"><unientity>7ABD</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 6A 3C"><unientity>7AB6</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 6A 3D"><unientity>7AB8</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 6A 3E"><unientity>7AB5</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 6A 3F"><unientity>7ABB</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 6A 43"><unientity>7ABF</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 6A 49"><unientity>7ACD</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 6A 4B"><unientity>7ACF</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 6A 4F"><unientity>7AD1</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 6A 51"><unientity>7AD3</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 6A 52"><unientity>7AD4</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 6A 54"><unientity>7AD5</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 6A 55"><unientity>7ADA</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 6A 5A"><unientity>7AE1</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 6A 5E"><unientity>7AE6</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 6A 66"><unientity>7AEB</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 6A 6B"><unientity>7AF0</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 6A 76"><unientity>7AF5</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 6A 7C"><unientity>7AFE</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 6B 27"><unientity>7B39</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 6B 2D"><unientity>7B0F</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 6B 2E"><unientity>7B08</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 6B 33"><unientity>7B0A</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 6B 35"><unientity>7B35</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 6B 36"><unientity>7B25</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 6B 39"><unientity>7B38</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 6B 3B"><unientity>7B3B</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 6B 3F"><unientity>7B24</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 6B 40"><unientity>7B33</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 6B 42"><unientity>7B2A</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 6B 44"><unientity>7B18</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 6B 47"><unientity>7B31</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 6B 4A"><unientity>7B2B</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 6B 4B"><unientity>7B37</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 6B 4D"><unientity>7B1F</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 6B 52"><unientity>7B4A</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 6B 53"><unientity>E9ED</unientity><desc>East Asian ideograph not in Unicode</desc></character>
-<character hex="22 6B 54"><unientity>E96C</unientity><unientityalt>7B04</unientityalt><desc>Variant of 2E6B54 which maps to 7B04</desc></character>
-<character hex="22 6B 55"><unientity>7B47</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 6B 59"><unientity>7B58</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 6B 5B"><unientity>7B6C</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 6B 60"><unientity>7B48</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 6B 61"><unientity>7B45</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 6B 62"><unientity>7B4C</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 6B 63"><unientity>7B4E</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 6B 68"><unientity>7B66</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 6B 6C"><unientity>7B64</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 6B 6E"><unientity>7B69</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 6B 70"><unientity>7B6D</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 6B 74"><unientity>7B62</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 6B 75"><unientity>7B6E</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 6B 76"><unientity>7B74</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 6B 79"><unientity>7B72</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 6B 7A"><unientity>7B78</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 6B 7B"><unientity>7B6F</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 6B 7C"><unientity>7B67</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 6B 7E"><unientity>7B65</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 6C 26"><unientity>7B71</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 6C 27"><unientity>7B70</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 6C 29"><unientity>7B73</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 6C 2D"><unientity>7B9C</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 6C 33"><unientity>7B92</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 6C 34"><unientity>7B91</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 6C 35"><unientity>7B90</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 6C 38"><unientity>7BA3</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 6C 3A"><unientity>7B8D</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 6C 41"><unientity>7B85</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 6C 43"><unientity>7B8E</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 6C 44"><unientity>7B98</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 6C 46"><unientity>7B86</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 6C 48"><unientity>7B99</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 6C 52"><unientity>7BB2</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 6C 58"><unientity>7BCB</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 6C 59"><unientity>7BB8</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 6C 5A"><unientity>7BCF</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 6C 5C"><unientity>7BD0</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 6C 60"><unientity>7BBE</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 6C 6F"><unientity>7BCC</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 6D 22"><unientity>7BDD</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 6D 24"><unientity>7BE5</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 6D 29"><unientity>7BE8</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 6D 2E"><unientity>7BF9</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 6D 2F"><unientity>7BD4</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 6D 32"><unientity>7BDF</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 6D 35"><unientity>7BD8</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 6D 37"><unientity>E9D1</unientity><unientityalt>7BEA</unientityalt><desc>Unrelated variant of EACC 3A6A7C which maps to 7BEA</desc></character>
-<character hex="22 6D 3B"><unientity>7C06</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 6D 3E"><unientity>7BF0</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 6D 41"><unientity>7C0F</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 6D 46"><unientity>7C0B</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 6D 47"><unientity>7C00</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 6D 4B"><unientity>7C0C</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 6D 4F"><unientity>7BF4</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 6D 54"><unientity>7BF3</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 6D 5A"><unientity>7C09</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 6D 5B"><unientity>7C03</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 6D 5C"><unientity>7BFC</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 6D 5F"><unientity>7C1C</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 6D 61"><unientity>7C26</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 6D 62"><unientity>7C28</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 6D 63"><unientity>7C20</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 6D 66"><unientity>7C1F</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 6D 68"><unientity>7C2F</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 6D 75"><unientity>7C30</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 6E 27"><unientity>7C35</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 6E 2A"><unientity>7C40</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 6E 30"><unientity>7C39</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 6E 34"><unientity>7C3B</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 6E 35"><unientity>7C34</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 6E 3B"><unientity>7C42</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 6E 46"><unientity>7C4E</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 6E 54"><unientity>7C5D</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 6E 56"><unientity>7C5C</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 6E 57"><unientity>7C5A</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 6E 58"><unientity>7C5B</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 6E 59"><unientity>7C59</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 6E 5B"><unientity>7C5E</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 6E 5C"><unientity>7C67</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 6E 5E"><unientity>7C63</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 6E 61"><unientity>7C68</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 6E 62"><unientity>7C65</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 6E 6F"><unientity>7C6F</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 6E 75"><unientity>7C75</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 6E 79"><unientity>7C7E</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 6E 7A"><unientity>7C78</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 6E 7D"><unientity>7C7D</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 6F 21"><unientity>7C81</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 6F 28"><unientity>7C8E</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 6F 29"><unientity>7C91</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 6F 2A"><unientity>7C83</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 6F 2C"><unientity>7C8D</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 6F 3A"><unientity>7C99</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 6F 3B"><unientity>7C98</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 6F 3E"><unientity>7C9C</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 6F 40"><unientity>7C95</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 6F 42"><unientity>7CA7</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 6F 43"><unientity>7CA2</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 6F 45"><unientity>7C9E</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 6F 46"><unientity>7CA9</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 6F 48"><unientity>7CA8</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 6F 49"><unientity>7CA1</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 6F 4A"><unientity>7CAC</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 6F 4C"><unientity>7CA6</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 6F 54"><unientity>7CB2</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 6F 58"><unientity>7CBB</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 6F 59"><unientity>7CBF</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 6F 5E"><unientity>7CBA</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 6F 5F"><unientity>7CBC</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 6F 64"><unientity>7CC2</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 6F 66"><unientity>7CCE</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 6F 68"><unientity>7CC8</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 6F 69"><unientity>7CC5</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 6F 6D"><unientity>7CCC</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 6F 6F"><unientity>7CC9</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 6F 71"><unientity>7CD2</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 6F 75"><unientity>7CD7</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 6F 77"><unientity>7CE1</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 6F 7B"><unientity>E96D</unientity><unientityalt>7CE8</unientityalt><desc>Variant of 4C6F7B which maps to 7CE8</desc></character>
-<character hex="22 70 22"><unientity>7CDD</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 70 28"><unientity>7CED</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 70 2E"><unientity>7CF0</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 70 30"><unientity>7CF2</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 70 35"><unientity>7CF4</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 70 39"><unientity>7CF6</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 70 42"><unientity>7D06</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 70 44"><unientity>7D03</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 70 45"><unientity>7D08</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 70 49"><unientity>7D0F</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 70 4A"><unientity>7D13</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 70 50"><unientity>7D18</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 70 51"><unientity>7D1E</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 70 52"><unientity>7D1D</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 70 59"><unientity>7D35</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 70 5A"><unientity>7D3D</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 70 61"><unientity>7D3A</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 70 62"><unientity>7D32</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 70 65"><unientity>7D31</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 70 68"><unientity>7D45</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 70 6A"><unientity>7D3F</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 70 6C"><unientity>7D29</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 70 6F"><unientity>7D41</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 70 71"><unientity>7D3E</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 70 7A"><unientity>7D5C</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 70 7C"><unientity>7D53</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 70 7E"><unientity>7D5A</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 71 22"><unientity>7D70</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 71 29"><unientity>7D67</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 71 2B"><unientity>7D6A</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 71 2C"><unientity>7D6B</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 71 30"><unientity>7D73</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 71 34"><unientity>7D4E</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 71 37"><unientity>7D8B</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 71 39"><unientity>7D88</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 71 3B"><unientity>7D85</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 71 3D"><unientity>7D8E</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 71 42"><unientity>7D7F</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 71 44"><unientity>7D86</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 71 48"><unientity>7D8D</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 71 4B"><unientity>7D9B</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 71 4D"><unientity>7D83</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 71 4F"><unientity>7D7D</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 71 54"><unientity>7D7B</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 71 58"><unientity>7D7A</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 71 59"><unientity>7D96</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 71 5A"><unientity>7D5B</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 71 5B"><unientity>7D8C</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 71 61"><unientity>7DA3</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 71 62"><unientity>7DAE</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 71 67"><unientity>7DCB</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 71 69"><unientity>7DAA</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 71 6A"><unientity>7DCE</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 71 6B"><unientity>7DC9</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 71 6E"><unientity>7DC5</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 71 6F"><unientity>7DA6</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 71 74"><unientity>7DC4</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 71 78"><unientity>7DAC</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 71 7D"><unientity>7DB9</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 72 22"><unientity>7D9F</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 72 29"><unientity>7DE1</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 72 2A"><unientity>7DD9</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 72 2B"><unientity>7DE4</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 72 31"><unientity>7DD7</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 72 36"><unientity>7DF9</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 72 3A"><unientity>7E06</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 72 3C"><unientity>7DF2</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 72 3E"><unientity>7DE6</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 72 46"><unientity>7DDC</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 72 47"><unientity>7DF1</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 72 48"><unientity>7DF6</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 72 49"><unientity>7DE5</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 72 4B"><unientity>7DF5</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 72 50"><unientity>7E17</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 72 51"><unientity>7E1E</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 72 52"><unientity>7E21</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 72 53"><unientity>7E0B</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 72 55"><unientity>7E12</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 72 56"><unientity>7E22</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 72 5B"><unientity>7E20</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 72 5D"><unientity>7E1D</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 72 5E"><unientity>7E09</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 72 5F"><unientity>7E1F</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 72 65"><unientity>7E15</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 72 69"><unientity>7E10</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 72 6A"><unientity>7E0F</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 72 6D"><unientity>7E3B</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 72 71"><unientity>7E34</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 72 72"><unientity>7E2D</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 72 73"><unientity>7E2F</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 72 75"><unientity>7E36</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 72 77"><unientity>7E3A</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 72 79"><unientity>7E39</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 72 7D"><unientity>7E44</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 73 21"><unientity>7E35</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 73 26"><unientity>7E3F</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 73 28"><unientity>7E47</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 73 2D"><unientity>7E52</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 73 2F"><unientity>7E51</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 73 33"><unientity>7E50</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 73 34"><unientity>7E67</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 73 37"><unientity>7E56</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 73 48"><unientity>7E68</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 73 49"><unientity>7E6E</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 73 4E"><unientity>7E70</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 73 51"><unientity>7E6F</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 73 52"><unientity>7E73</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 73 58"><unientity>7E7B</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 73 59"><unientity>7E7E</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 73 5B"><unientity>7E81</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 73 5D"><unientity>7E8A</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 73 5E"><unientity>7E87</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 73 60"><unientity>7E88</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 73 64"><unientity>7E86</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 73 6A"><unientity>7E91</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 73 6B"><unientity>7E95</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 73 6D"><unientity>7E94</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 73 70"><unientity>7E9B</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 73 71"><unientity>7E9A</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 73 73"><unientity>7E99</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 73 74"><unientity>7E98</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 74 25"><unientity>7F43</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 74 27"><unientity>7F46</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 74 28"><unientity>7F45</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 74 2B"><unientity>7F4B</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 74 2E"><unientity>7F4C</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 74 2F"><unientity>7F4D</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 74 31"><unientity>7F4E</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 74 32"><unientity>7F4F</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 74 3E"><unientity>7F60</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 74 3F"><unientity>7F61</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 74 43"><unientity>7F5D</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 74 45"><unientity>7F5B</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 74 47"><unientity>7F63</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 74 50"><unientity>7F65</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 74 51"><unientity>7F66</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 74 53"><unientity>7F6D</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 74 54"><unientity>7F6B</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 74 55"><unientity>7F67</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 74 57"><unientity>7F68</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 74 5E"><unientity>7F71</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 74 60"><unientity>7F73</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 74 63"><unientity>7F76</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 74 6A"><unientity>7F7F</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 74 6B"><unientity>7F7E</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 74 6C"><unientity>7F7D</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 74 72"><unientity>7F86</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 74 7A"><unientity>7F91</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 74 7E"><unientity>7F96</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 75 23"><unientity>7F97</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 75 24"><unientity>7F95</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 75 2C"><unientity>7FA2</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 75 33"><unientity>7FA7</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 75 3B"><unientity>7FB0</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 75 3C"><unientity>7FAD</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 75 3F"><unientity>7FB1</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 75 40"><unientity>7FB4</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 75 42"><unientity>7FB5</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 75 4A"><unientity>7FBC</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 75 4C"><unientity>7FBE</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 75 51"><unientity>7FC3</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 75 57"><unientity>7FCA</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 75 67"><unientity>7FDB</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 75 68"><unientity>7FE3</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 75 6C"><unientity>7FE6</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 75 6F"><unientity>7FE5</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 75 72"><unientity>7FEC</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 75 73"><unientity>7FEB</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 75 77"><unientity>7FEF</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 75 7A"><unientity>7FEE</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 76 29"><unientity>7FFD</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 76 2A"><unientity>7FFE</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 76 2C"><unientity>7FFF</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 76 2E"><unientity>8004</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 76 31"><unientity>8008</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 76 33"><unientity>800B</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 76 34"><unientity>800E</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 76 35"><unientity>8011</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 76 36"><unientity>800F</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 76 37"><unientity>8014</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 76 39"><unientity>8016</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 76 3B"><unientity>801F</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 76 3D"><unientity>801E</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 76 3E"><unientity>801D</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 76 4B"><unientity>8025</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 76 4C"><unientity>8026</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 76 4D"><unientity>802A</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 76 4E"><unientity>8029</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 76 4F"><unientity>8028</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 76 5B"><unientity>8030</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 76 5D"><unientity>8031</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 76 60"><unientity>8035</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 76 69"><unientity>8039</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 76 6B"><unientity>8041</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 76 70"><unientity>8043</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 76 7B"><unientity>8052</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 76 7E"><unientity>8062</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 77 28"><unientity>8063</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 77 32"><unientity>806C</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 77 39"><unientity>8075</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 77 3E"><unientity>807B</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 77 3F"><unientity>8079</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 77 47"><unientity>808A</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 77 49"><unientity>808E</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 77 4E"><unientity>809F</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 77 5C"><unientity>670A</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 77 60"><unientity>80A7</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 77 61"><unientity>80B0</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 77 68"><unientity>80B8</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 77 69"><unientity>80B5</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 77 6A"><unientity>80A6</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 77 73"><unientity>80E0</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 77 75"><unientity>6711</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 77 7B"><unientity>80DF</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 77 7D"><unientity>80C2</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 78 27"><unientity>80D9</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 78 2A"><unientity>80DD</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 78 2D"><unientity>80CF</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 78 2F"><unientity>80CD</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 78 30"><unientity>80D7</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 78 33"><unientity>80F2</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 78 34"><unientity>80FA</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 78 38"><unientity>80FE</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 78 3C"><unientity>8103</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 78 40"><unientity>80F9</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 78 41"><unientity>80EF</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 78 42"><unientity>80D4</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 78 49"><unientity>811D</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 78 4B"><unientity>8118</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 78 50"><unientity>8130</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 78 54"><unientity>8124</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 78 55"><unientity>811B</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 78 60"><unientity>812A</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 78 61"><unientity>811E</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 78 64"><unientity>8121</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 78 66"><unientity>8117</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 78 69"><unientity>813A</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 78 6A"><unientity>815A</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 78 6D"><unientity>8148</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 78 77"><unientity>814C</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 78 7C"><unientity>8153</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 78 7D"><unientity>8141</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 79 25"><unientity>814D</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 79 2E"><unientity>6720</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 79 32"><unientity>8160</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 79 3B"><unientity>8169</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 79 3C"><unientity>817C</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 79 41"><unientity>8161</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 79 46"><unientity>8176</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 79 47"><unientity>8174</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 79 48"><unientity>8167</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 79 4B"><unientity>816F</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 79 4D"><unientity>8182</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 79 51"><unientity>818B</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 79 52"><unientity>8186</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 79 59"><unientity>8183</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 79 6A"><unientity>819F</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 79 6B"><unientity>81A3</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 79 70"><unientity>8198</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 79 75"><unientity>8195</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 79 77"><unientity>8197</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 79 7C"><unientity>81AA</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 79 7D"><unientity>81A6</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 79 7E"><unientity>6725</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 7A 2C"><unientity>81B5</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 7A 2E"><unientity>81B0</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 7A 2F"><unientity>81B4</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 7A 33"><unientity>81B7</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 7A 37"><unientity>81BB</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 7A 38"><unientity>81C1</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 7A 39"><unientity>81CC</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 7A 3A"><unientity>81CA</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 7A 3B"><unientity>81C4</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 7A 40"><unientity>81D1</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 7A 41"><unientity>81CE</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 7A 43"><unientity>81D0</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 7A 4B"><unientity>81DB</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 7A 4F"><unientity>81DD</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 7A 53"><unientity>81DE</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 7A 56"><unientity>81E0</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 7A 57"><unientity>81E2</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 7A 5B"><unientity>81E7</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 7A 60"><unientity>81EF</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 7A 65"><unientity>81F2</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 7A 68"><unientity>81F6</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 7A 70"><unientity>8201</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 7A 72"><unientity>E9EE</unientity><desc>East Asian ideograph not in Unicode</desc></character>
-<character hex="22 7A 74"><unientity>8203</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 7A 75"><unientity>8204</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 7A 77"><unientity>820B</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 7B 27"><unientity>821D</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 7B 29"><unientity>8220</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 7B 2E"><unientity>822D</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 7B 2F"><unientity>822F</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 7B 32"><unientity>8238</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 7B 34"><unientity>823A</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 7B 35"><unientity>8233</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 7B 36"><unientity>8234</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 7B 3A"><unientity>8232</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 7B 42"><unientity>8248</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 7B 43"><unientity>8249</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 7B 45"><unientity>8244</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 7B 47"><unientity>8240</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 7B 48"><unientity>8241</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 7B 4A"><unientity>8245</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 7B 4B"><unientity>824B</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 7B 50"><unientity>824F</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 7B 53"><unientity>824E</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 7B 56"><unientity>8256</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 7B 57"><unientity>8257</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 7B 5E"><unientity>825A</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 7B 62"><unientity>825F</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 7B 67"><unientity>8262</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 7B 6B"><unientity>8268</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 7B 6F"><unientity>826D</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 7B 77"><unientity>8278</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 7B 7D"><unientity>827F</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 7C 24"><unientity>828E</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 7C 25"><unientity>8291</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 7C 27"><unientity>828F</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 7C 28"><unientity>8284</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 7C 2D"><unientity>8283</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 7C 2E"><unientity>828A</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 7C 31"><unientity>82AF</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 7C 34"><unientity>82A7</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 7C 38"><unientity>82AB</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 7C 3A"><unientity>82B0</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 7C 3C"><unientity>82A4</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 7C 3F"><unientity>829A</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 7C 42"><unientity>82A3</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 7C 44"><unientity>82B7</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 7C 45"><unientity>E96E</unientity><unientityalt>82AE</unientityalt><desc>Variant of 4C7C45 which maps to 82AE</desc></character>
-<character hex="22 7C 46"><unientity>82A9</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 7C 49"><unientity>82BC</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 7C 4C"><unientity>82A8</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 7C 4E"><unientity>82B4</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 7C 50"><unientity>82A1</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 7C 53"><unientity>82AA</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 7C 55"><unientity>82D9</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 7C 57"><unientity>82FE</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 7C 5A"><unientity>82E0</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 7C 5B"><unientity>82D0</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 7C 5C"><unientity>8300</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 7C 5F"><unientity>82EA</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 7C 60"><unientity>82F7</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 7C 62"><unientity>82EF</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 7C 63"><unientity>833A</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 7C 64"><unientity>82E4</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 7C 65"><unientity>82D5</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 7C 67"><unientity>8307</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 7C 68"><unientity>82FA</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 7C 69"><unientity>82F4</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 7C 6A"><unientity>82E2</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 7C 6D"><unientity>82D2</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 7C 6E"><unientity>8314</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 7C 71"><unientity>82EB</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 7C 72"><unientity>82D8</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 7C 73"><unientity>82E1</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 7C 75"><unientity>82F6</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 7C 7B"><unientity>8310</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 7C 7C"><unientity>82F3</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 7D 21"><unientity>830C</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 7D 22"><unientity>82FB</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 7D 24"><unientity>82FD</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 7D 26"><unientity>8333</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 7D 29"><unientity>8328</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 7D 2B"><unientity>8344</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 7D 2E"><unientity>8351</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 7D 35"><unientity>831B</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 7D 3B"><unientity>8356</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 7D 3F"><unientity>8322</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 7D 40"><unientity>832C</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 7D 48"><unientity>833C</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 7D 4A"><unientity>834D</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 7D 4D"><unientity>E96F</unientity><unientityalt>8343</unientityalt><desc>Variant of 4C7D4D which maps to 8343</desc></character>
-<character hex="22 7D 52"><unientity>832F</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 7D 53"><unientity>8348</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 7D 54"><unientity>8312</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 7D 56"><unientity>8316</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 7D 58"><unientity>831A</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 7D 5F"><unientity>8347</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 7D 62"><unientity>83A8</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 7D 67"><unientity>83AD</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 7D 6D"><unientity>8373</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 7D 72"><unientity>83B0</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 7D 76"><unientity>831D</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 7D 7A"><unientity>838F</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 7D 7C"><unientity>8395</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 7D 7E"><unientity>8375</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 7E 21"><unientity>837F</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 7E 22"><unientity>8399</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 7E 23"><unientity>83A6</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 7E 25"><unientity>8387</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 7E 26"><unientity>83B9</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 7E 2B"><unientity>83A9</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 7E 2F"><unientity>839B</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 7E 33"><unientity>83AA</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 7E 37"><unientity>839C</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 7E 38"><unientity>839F</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 7E 41"><unientity>83CF</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 7E 43"><unientity>83F9</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 7E 45"><unientity>8421</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 7E 51"><unientity>8423</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 7E 52"><unientity>83EA</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 7E 53"><unientity>8413</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 7E 56"><unientity>83FC</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 7E 57"><unientity>83F6</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 7E 59"><unientity>8410</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 7E 5A"><unientity>83E1</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 7E 60"><unientity>83C6</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 7E 61"><unientity>8407</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 7E 63"><unientity>83EB</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 7E 6A"><unientity>83BF</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 7E 6B"><unientity>83E2</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 7E 6D"><unientity>8401</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 7E 71"><unientity>83D8</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 7E 72"><unientity>83E5</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 7E 74"><unientity>8418</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 7E 79"><unientity>83CE</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 7E 7B"><unientity>83D3</unientity><desc>East Asian ideograph</desc></character>
-<character hex="22 7E 7D"><unientity>83D6</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 22 23"><unientity>83FD</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 22 25"><unientity>841E</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 22 29"><unientity>83C9</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 22 2A"><unientity>83DF</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 22 2C"><unientity>841F</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 22 2E"><unientity>840F</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 22 30"><unientity>8411</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 22 36"><unientity>839A</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 22 3C"><unientity>83F3</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 22 43"><unientity>83D1</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 22 48"><unientity>8453</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 22 4A"><unientity>848E</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 22 4C"><unientity>8439</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 22 4D"><unientity>8476</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 22 4E"><unientity>8479</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 22 5C"><unientity>8451</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 22 5F"><unientity>847D</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 22 62"><unientity>845A</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 22 66"><unientity>8459</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 22 69"><unientity>8473</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 22 6E"><unientity>843E</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 22 71"><unientity>846D</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 22 78"><unientity>847A</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 22 7B"><unientity>8484</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 22 7C"><unientity>8478</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 23 24"><unientity>8432</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 23 29"><unientity>845C</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 23 2D"><unientity>842A</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 23 2E"><unientity>8429</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 23 32"><unientity>8471</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 23 35"><unientity>845F</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 23 36"><unientity>8460</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 23 37"><unientity>846E</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 23 3A"><unientity>8446</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 23 3C"><unientity>8452</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 23 3F"><unientity>844A</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 23 45"><unientity>844E</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 23 49"><unientity>8497</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 23 50"><unientity>84A1</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 23 53"><unientity>849F</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 23 56"><unientity>84BA</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 23 58"><unientity>84B9</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 23 5C"><unientity>84B4</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 23 5E"><unientity>84C1</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 23 5F"><unientity>84BB</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 23 68"><unientity>84CD</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 23 70"><unientity>84B1</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 23 71"><unientity>849D</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 23 72"><unientity>84D0</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 23 75"><unientity>8494</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 23 79"><unientity>84C7</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 23 7A"><unientity>84BD</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 23 7C"><unientity>84C2</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 24 21"><unientity>8495</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 24 27"><unientity>84AF</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 24 29"><unientity>84AD</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 24 32"><unientity>84A8</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 24 33"><unientity>84D6</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 24 35"><unientity>84DA</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 24 3A"><unientity>8493</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 24 3F"><unientity>84CF</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 24 41"><unientity>84CA</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 24 46"><unientity>8506</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 24 47"><unientity>850B</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 24 4D"><unientity>8500</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 24 59"><unientity>851F</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 24 5C"><unientity>853B</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 24 5F"><unientity>84EA</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 24 66"><unientity>84F4</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 24 6A"><unientity>850C</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 24 72"><unientity>852F</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 24 75"><unientity>8515</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 24 77"><unientity>84F7</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 24 7A"><unientity>84FC</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 24 7C"><unientity>84EB</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 24 7D"><unientity>84FD</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 25 24"><unientity>851E</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 25 2A"><unientity>8518</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 25 2D"><unientity>8526</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 25 2E"><unientity>E970</unientity><unientityalt>8507</unientityalt><desc>Variant of 2F252E which maps to 8507</desc></character>
-<character hex="23 25 2F"><unientity>84E7</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 25 34"><unientity>84F0</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 25 35"><unientity>84EF</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 25 36"><unientity>8556</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 25 46"><unientity>8541</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 25 4B"><unientity>8558</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 25 4D"><unientity>8553</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 25 4E"><unientity>8561</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 25 4F"><unientity>8540</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 25 5A"><unientity>8546</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 25 5C"><unientity>8564</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 25 5D"><unientity>855E</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 25 5E"><unientity>8573</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 25 5F"><unientity>8551</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 25 64"><unientity>8562</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 25 6B"><unientity>8563</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 25 6C"><unientity>848D</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 25 6D"><unientity>8542</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 25 71"><unientity>854E</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 25 74"><unientity>8555</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 25 76"><unientity>855D</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 25 77"><unientity>858C</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 26 25"><unientity>8580</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 26 28"><unientity>858F</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 26 2D"><unientity>8579</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 26 32"><unientity>857F</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 26 33"><unientity>8577</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 26 34"><unientity>8578</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 26 35"><unientity>8598</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 26 36"><unientity>857B</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 26 3D"><unientity>85A4</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 26 42"><unientity>857A</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 26 44"><unientity>8597</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 26 45"><unientity>8557</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 26 49"><unientity>85A8</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 26 4E"><unientity>8586</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 26 50"><unientity>8599</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 26 51"><unientity>858A</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 26 52"><unientity>85A2</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 26 54"><unientity>8590</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 26 56"><unientity>8585</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 26 57"><unientity>8588</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 26 5A"><unientity>85B8</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 26 5D"><unientity>85C1</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 26 61"><unientity>85BA</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 26 68"><unientity>85CE</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 26 6A"><unientity>85C2</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 26 6B"><unientity>85B7</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 26 6C"><unientity>85B9</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 26 6E"><unientity>85B3</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 26 6F"><unientity>85BD</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 26 70"><unientity>85C4</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 26 72"><unientity>85BF</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 26 75"><unientity>85BE</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 26 7E"><unientity>85B6</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 27 24"><unientity>8624</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 27 28"><unientity>85F7</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 27 2C"><unientity>85E6</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 27 2E"><unientity>85D4</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 27 31"><unientity>85ED</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 27 39"><unientity>85DA</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 27 43"><unientity>85DF</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 27 45"><unientity>85D8</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 27 4C"><unientity>85DC</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 27 4E"><unientity>85F5</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 27 52"><unientity>8622</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 27 54"><unientity>8610</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 27 57"><unientity>85FC</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 27 5B"><unientity>85FF</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 27 5E"><unientity>85FE</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 27 60"><unientity>8600</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 27 68"><unientity>8604</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 27 71"><unientity>8605</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 27 75"><unientity>862B</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 28 22"><unientity>8627</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 28 26"><unientity>8629</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 28 32"><unientity>8637</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 28 38"><unientity>8636</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 28 3E"><unientity>863C</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 28 3F"><unientity>8640</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 28 40"><unientity>863A</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 28 4C"><unientity>8645</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 28 59"><unientity>864D</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 28 5A"><unientity>8653</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 28 5E"><unientity>8659</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 28 66"><unientity>8661</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 28 69"><unientity>8662</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 28 6A"><unientity>8663</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 28 71"><unientity>8669</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 28 78"><unientity>866C</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 28 7B"><unientity>8672</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 28 7C"><unientity>866F</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 28 7E"><unientity>867B</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 29 25"><unientity>867A</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 29 26"><unientity>8673</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 29 27"><unientity>867C</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 29 2E"><unientity>8696</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 29 2F"><unientity>86A8</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 29 36"><unientity>8691</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 29 37"><unientity>869C</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 29 39"><unientity>8698</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 29 3C"><unientity>868D</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 29 3D"><unientity>868B</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 29 40"><unientity>86A6</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 29 42"><unientity>869D</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 29 46"><unientity>86A0</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 29 48"><unientity>86A7</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 29 4B"><unientity>86BF</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 29 58"><unientity>86BA</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 29 59"><unientity>86B0</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 29 60"><unientity>86B3</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 29 62"><unientity>86C9</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 29 63"><unientity>86B4</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 29 67"><unientity>86D8</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 29 6E"><unientity>86E3</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 29 6F"><unientity>86E9</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 29 71"><unientity>86EC</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 29 74"><unientity>86D5</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 29 77"><unientity>86D0</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 29 7A"><unientity>86D1</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 29 7E"><unientity>86DE</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 2A 25"><unientity>870B</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 2A 2F"><unientity>86FA</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 2A 33"><unientity>86F8</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 2A 34"><unientity>8706</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 2A 36"><unientity>870E</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 2A 38"><unientity>8709</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 2A 3A"><unientity>870A</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 2A 3E"><unientity>870D</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 2A 42"><unientity>874A</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 2A 43"><unientity>8723</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 2A 44"><unientity>8737</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 2A 45"><unientity>8728</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 2A 49"><unientity>8740</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 2A 4B"><unientity>872E</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 2A 4C"><unientity>873D</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 2A 4E"><unientity>871E</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 2A 53"><unientity>8743</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 2A 55"><unientity>8744</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 2A 57"><unientity>873E</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 2A 59"><unientity>8729</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 2A 5A"><unientity>8739</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 2A 5F"><unientity>871A</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 2A 64"><unientity>8731</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 2A 65"><unientity>8711</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 2A 66"><unientity>8712</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 2A 6B"><unientity>874F</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 2A 6C"><unientity>8771</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 2A 6D"><unientity>8763</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 2A 71"><unientity>8764</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 2A 73"><unientity>8765</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 2A 74"><unientity>877D</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 2A 79"><unientity>8758</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 2A 7B"><unientity>877B</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 2B 21"><unientity>8761</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 2B 24"><unientity>876A</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 2B 27"><unientity>874E</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 2B 28"><unientity>875F</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 2B 2D"><unientity>876F</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 2B 2E"><unientity>875D</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 2B 30"><unientity>876E</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 2B 33"><unientity>874D</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 2B 35"><unientity>8753</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 2B 3A"><unientity>87A3</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 2B 3D"><unientity>8793</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 2B 45"><unientity>8799</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 2B 48"><unientity>8788</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 2B 4C"><unientity>8798</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 2B 53"><unientity>8785</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 2B 54"><unientity>878B</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 2B 55"><unientity>8784</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 2B 58"><unientity>87A9</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 2B 5D"><unientity>8789</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 2B 60"><unientity>87AD</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 2B 66"><unientity>87BE</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 2B 6E"><unientity>87C4</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 2B 6F"><unientity>87AF</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 2B 72"><unientity>87AC</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 2B 78"><unientity>87AE</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 2B 7E"><unientity>87BF</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 2C 24"><unientity>87BD</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 2C 2C"><unientity>87EE</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 2C 30"><unientity>87F3</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 2C 31"><unientity>87F0</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 2C 34"><unientity>87EA</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 2C 36"><unientity>87DB</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 2C 37"><unientity>87E2</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 2C 39"><unientity>87EB</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 2C 3A"><unientity>87D6</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 2C 3F"><unientity>87F5</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 2C 47"><unientity>87E0</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 2C 48"><unientity>87D3</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 2C 49"><unientity>87DC</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 2C 4C"><unientity>87E3</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 2C 4D"><unientity>8801</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 2C 4F"><unientity>8803</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 2C 50"><unientity>880A</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 2C 55"><unientity>87F6</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 2C 57"><unientity>87F7</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 2C 5C"><unientity>880B</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 2C 5D"><unientity>8806</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 2C 5F"><unientity>87FE</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 2C 61"><unientity>8810</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 2C 63"><unientity>8819</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 2C 64"><unientity>8811</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 2C 66"><unientity>8818</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 2C 6A"><unientity>8813</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 2C 6B"><unientity>8816</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 2C 72"><unientity>8834</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 2C 73"><unientity>881C</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 2C 7A"><unientity>881B</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 2D 23"><unientity>8828</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 2D 2A"><unientity>8832</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 2D 2E"><unientity>882E</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 2D 32"><unientity>882D</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 2D 3C"><unientity>883C</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 2D 41"><unientity>8841</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 2D 42"><unientity>E9EF</unientity><desc>East Asian ideograph not in Unicode</desc></character>
-<character hex="23 2D 44"><unientity>8844</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 2D 4B"><unientity>8847</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 2D 51"><unientity>884A</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 2D 53"><unientity>884E</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 2D 56"><unientity>8852</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 2D 57"><unientity>8850</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 2D 59"><unientity>8856</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 2D 5A"><unientity>8855</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 2D 5E"><unientity>885C</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 2D 5F"><unientity>885A</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 2D 69"><unientity>8869</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 2D 6D"><unientity>886D</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 2D 6E"><unientity>887A</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 2D 71"><unientity>8875</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 2D 75"><unientity>8872</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 2D 79"><unientity>887D</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 2D 7C"><unientity>8879</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 2D 7D"><unientity>887F</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 2D 7E"><unientity>887E</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 2E 28"><unientity>88A2</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 2E 2A"><unientity>88A4</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 2E 2F"><unientity>88AA</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 2E 34"><unientity>889A</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 2E 3A"><unientity>8890</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 2E 3B"><unientity>888C</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 2E 3D"><unientity>88A0</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 2E 40"><unientity>8899</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 2E 45"><unientity>8897</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 2E 48"><unientity>88C9</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 2E 49"><unientity>88BF</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 2E 4A"><unientity>88BA</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 2E 4F"><unientity>88C0</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 2E 51"><unientity>88B2</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 2E 54"><unientity>88BC</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 2E 57"><unientity>88B7</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 2E 59"><unientity>88BD</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 2E 5A"><unientity>88C4</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 2E 5E"><unientity>88CB</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 2E 60"><unientity>88CC</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 2E 62"><unientity>88DB</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 2E 64"><unientity>88CE</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 2E 68"><unientity>88D2</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 2E 71"><unientity>88F1</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 2E 72"><unientity>88FE</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 2E 75"><unientity>88F2</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 2E 78"><unientity>8900</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 2E 7A"><unientity>88F0</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 2F 21"><unientity>88FC</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 2F 23"><unientity>88EF</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 2F 24"><unientity>8903</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 2F 2D"><unientity>8909</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 2F 2F"><unientity>8918</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 2F 35"><unientity>8906</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 2F 36"><unientity>890C</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 2F 37"><unientity>8919</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 2F 3D"><unientity>890A</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 2F 43"><unientity>8915</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 2F 45"><unientity>892F</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 2F 47"><unientity>8930</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 2F 4E"><unientity>8921</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 2F 4F"><unientity>8927</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 2F 51"><unientity>891F</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 2F 53"><unientity>8931</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 2F 54"><unientity>891E</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 2F 56"><unientity>8926</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 2F 57"><unientity>8922</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 2F 5A"><unientity>8935</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 2F 5D"><unientity>8941</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 2F 60"><unientity>8933</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 2F 66"><unientity>8954</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 2F 6F"><unientity>894F</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 2F 72"><unientity>8947</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 2F 7A"><unientity>894C</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 2F 7B"><unientity>8946</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 30 21"><unientity>894D</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 30 23"><unientity>8962</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 30 24"><unientity>895A</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 30 25"><unientity>895E</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 30 29"><unientity>895B</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 30 2C"><unientity>895C</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 30 2D"><unientity>895D</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 30 31"><unientity>8966</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 30 37"><unientity>896D</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 30 3A"><unientity>896B</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 30 3B"><unientity>896E</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 30 3C"><unientity>896C</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 30 41"><unientity>8976</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 30 42"><unientity>8974</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 30 49"><unientity>897B</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 30 4A"><unientity>897C</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 30 53"><unientity>8984</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 30 55"><unientity>8985</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 30 62"><unientity>8991</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 30 64"><unientity>8997</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 30 66"><unientity>8998</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 30 6B"><unientity>899C</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 30 6F"><unientity>89A1</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 30 76"><unientity>89A5</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 30 79"><unientity>89A9</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 30 7D"><unientity>89AF</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 31 2A"><unientity>89B8</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 31 2B"><unientity>89B7</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 31 2C"><unientity>89B6</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 31 2F"><unientity>89BC</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 31 32"><unientity>89BF</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 31 3A"><unientity>89D6</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 31 3B"><unientity>89D5</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 31 3F"><unientity>89DA</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 31 43"><unientity>89E5</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 31 45"><unientity>89DC</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 31 47"><unientity>89E1</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 31 4C"><unientity>89E9</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 31 4D"><unientity>89EB</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 31 53"><unientity>89ED</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 31 58"><unientity>89F1</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 31 5C"><unientity>89F3</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 31 5E"><unientity>89F5</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 31 60"><unientity>89F6</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 31 64"><unientity>89F7</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 31 6B"><unientity>89FF</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 31 6C"><unientity>8A06</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 31 6D"><unientity>8A07</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 31 6E"><unientity>8A04</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 31 70"><unientity>8A0F</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 31 71"><unientity>8A11</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 31 72"><unientity>8A12</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 31 73"><unientity>8A0D</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 31 7A"><unientity>8A27</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 31 7D"><unientity>8A29</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 32 25"><unientity>8A22</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 32 27"><unientity>8A51</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 32 28"><unientity>8A4A</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 32 2A"><unientity>8A4E</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 32 30"><unientity>8A56</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 32 37"><unientity>8A57</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 32 39"><unientity>8A48</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 32 3B"><unientity>8A58</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 32 3C"><unientity>8A52</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 32 40"><unientity>8A3D</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 32 42"><unientity>8A45</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 32 4F"><unientity>8A7F</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 32 50"><unientity>8A86</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 32 56"><unientity>8A61</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 32 58"><unientity>8A3E</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 32 59"><unientity>8A82</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 32 5D"><unientity>8A84</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 32 5E"><unientity>8A75</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 32 69"><unientity>8A8F</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 32 6F"><unientity>8A96</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 32 71"><unientity>8A9A</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 32 7E"><unientity>8AB6</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 33 21"><unientity>8ABE</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 33 25"><unientity>8ACF</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 33 27"><unientity>8AC6</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 33 2C"><unientity>8AD1</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 33 2D"><unientity>8AD3</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 33 31"><unientity>8AAF</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 33 33"><unientity>8AD4</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 33 36"><unientity>8ACD</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 33 38"><unientity>8AB9</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 33 3B"><unientity>8ADB</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 33 3F"><unientity>8AD0</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 33 40"><unientity>8AD7</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 33 44"><unientity>8AF3</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 33 45"><unientity>8AE2</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 33 49"><unientity>8B4C</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 33 4C"><unientity>8ADD</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 33 4E"><unientity>8AF6</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 33 4F"><unientity>8AF4</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 33 50"><unientity>8AF5</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 33 53"><unientity>8ADF</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 33 56"><unientity>8B03</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 33 57"><unientity>8AE4</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 33 59"><unientity>8B14</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 33 5D"><unientity>8AFC</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 33 62"><unientity>8ADE</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 33 63"><unientity>8AE1</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 33 64"><unientity>8B07</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 33 6B"><unientity>8B0C</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 33 6F"><unientity>8B1C</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 33 73"><unientity>8B16</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 33 76"><unientity>8B1F</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 33 78"><unientity>8B0B</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 33 79"><unientity>8B06</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 33 7A"><unientity>8B05</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 33 7C"><unientity>8B0F</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 33 7D"><unientity>8B10</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 34 22"><unientity>8B2B</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 34 2A"><unientity>8B37</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 34 2D"><unientity>8B26</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 34 30"><unientity>8B33</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 34 38"><unientity>8B3E</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 34 3A"><unientity>8B29</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 34 42"><unientity>8B48</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 34 44"><unientity>8B54</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 34 48"><unientity>8B53</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 34 49"><unientity>8B4A</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 34 4A"><unientity>8B46</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 34 4D"><unientity>8B56</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 34 4F"><unientity>8B3F</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 34 59"><unientity>8B59</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 34 5F"><unientity>8B4D</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 34 68"><unientity>8B6B</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 34 6B"><unientity>8B6D</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 34 70"><unientity>8B78</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 34 73"><unientity>8B45</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 34 78"><unientity>8B85</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 34 79"><unientity>8B81</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 34 7B"><unientity>8B7E</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 35 23"><unientity>8B8B</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 35 26"><unientity>8B87</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 35 2D"><unientity>8B95</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 35 2E"><unientity>8B94</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 35 37"><unientity>8B9C</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 35 3A"><unientity>8B9F</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 35 3D"><unientity>8C3A</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 35 44"><unientity>8C40</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 35 45"><unientity>8C42</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 35 4B"><unientity>8C47</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 35 4D"><unientity>8C4B</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 35 50"><unientity>8C4F</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 35 52"><unientity>8C55</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 35 54"><unientity>8C57</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 35 55"><unientity>8C5C</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 35 56"><unientity>8C5D</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 35 5C"><unientity>86C3</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 35 63"><unientity>8C68</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 35 65"><unientity>8C6D</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 35 6D"><unientity>8C73</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 35 6F"><unientity>8C74</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 35 71"><unientity>8C75</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 35 73"><unientity>8C77</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 35 74"><unientity>8C76</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 35 7B"><unientity>8C78</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 35 7D"><unientity>8C7B</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 36 2A"><unientity>8C86</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 36 2D"><unientity>8C85</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 36 2E"><unientity>8C88</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 36 39"><unientity>8C94</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 36 41"><unientity>8C9B</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 36 43"><unientity>8C9F</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 36 44"><unientity>8CA4</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 36 4E"><unientity>8CB0</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 36 51"><unientity>8CBA</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 36 52"><unientity>8CB5</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 36 53"><unientity>8CB9</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 36 57"><unientity>8CCD</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 36 5E"><unientity>8CD8</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 36 5F"><unientity>8CD5</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 36 67"><unientity>8CE8</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 36 68"><unientity>8CE9</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 36 6A"><unientity>8CE1</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 36 6F"><unientity>8CEB</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 36 70"><unientity>8CDA</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 36 72"><unientity>8CDD</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 36 74"><unientity>8CD9</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 36 76"><unientity>8CEE</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 36 7B"><unientity>8CF1</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 36 7C"><unientity>8CF5</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 36 7E"><unientity>8CFB</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 37 21"><unientity>8CF7</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 37 25"><unientity>8D04</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 37 26"><unientity>8CFE</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 37 2B"><unientity>8D07</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 37 2D"><unientity>8D09</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 37 32"><unientity>8D0C</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 37 39"><unientity>8D11</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 37 3A"><unientity>8D10</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 37 3B"><unientity>8D12</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 37 3D"><unientity>8D14</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 37 3E"><unientity>8D18</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 37 48"><unientity>8D6C</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 37 52"><unientity>8D78</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 37 5C"><unientity>8D7A</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 37 61"><unientity>8D84</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 37 71"><unientity>8D94</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 37 75"><unientity>8D8D</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 38 22"><unientity>8D96</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 38 2F"><unientity>8DA1</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 38 33"><unientity>8DA6</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 38 52"><unientity>8DAB</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 38 59"><unientity>8DAF</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 38 5A"><unientity>8DB0</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 38 66"><unientity>8DB2</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 38 6E"><unientity>8DBC</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 38 6F"><unientity>8DBA</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 38 70"><unientity>8DB9</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 38 71"><unientity>8DC2</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 38 72"><unientity>8DC1</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 38 73"><unientity>8DBF</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 39 21"><unientity>8DCF</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 39 22"><unientity>8DD6</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 39 27"><unientity>8DD0</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 39 2B"><unientity>8DC5</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 39 2F"><unientity>8DE4</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 39 34"><unientity>8DEC</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 39 35"><unientity>8DEB</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 39 36"><unientity>8DF4</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 39 38"><unientity>8DE9</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 39 3A"><unientity>8DE6</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 39 3B"><unientity>8DE3</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 39 3D"><unientity>8DE7</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 39 3E"><unientity>8DF2</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 39 3F"><unientity>8E09</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 39 41"><unientity>8DFD</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 39 44"><unientity>8DFF</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 39 46"><unientity>8E05</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 39 49"><unientity>8E01</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 39 4E"><unientity>8E04</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 39 50"><unientity>8E06</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 39 52"><unientity>8E2A</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 39 54"><unientity>8E23</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 39 57"><unientity>8E2E</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 39 58"><unientity>8E21</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 39 5C"><unientity>8E1E</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 39 64"><unientity>8E16</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 39 66"><unientity>8E26</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 39 67"><unientity>8E27</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 39 68"><unientity>8E14</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 39 69"><unientity>8E18</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 39 6F"><unientity>8E41</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 39 77"><unientity>8E40</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 39 79"><unientity>8E36</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 39 7E"><unientity>8E3D</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 3A 21"><unientity>8E30</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 3A 24"><unientity>8E47</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 3A 26"><unientity>8E46</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 3A 2E"><unientity>8E4C</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 3A 30"><unientity>8E50</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 3A 32"><unientity>8E4F</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 3A 34"><unientity>8E5C</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 3A 35"><unientity>8E62</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 3A 36"><unientity>8E60</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 3A 3A"><unientity>8E54</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 3A 3B"><unientity>8E67</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 3A 3E"><unientity>8E5A</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 3A 3F"><unientity>8E5E</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 3A 40"><unientity>8E55</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 3A 41"><unientity>8E61</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 3A 43"><unientity>8E5D</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 3A 44"><unientity>8E75</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 3A 45"><unientity>8E74</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 3A 46"><unientity>8E95</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 3A 48"><unientity>8E6D</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 3A 4B"><unientity>8E69</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 3A 52"><unientity>8E83</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 3A 53"><unientity>8E84</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 3A 57"><unientity>8E8B</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 3A 5D"><unientity>8E94</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 3A 5E"><unientity>8E9A</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 3A 5F"><unientity>8E92</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 3A 60"><unientity>8E93</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 3A 62"><unientity>8E90</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 3A 63"><unientity>8E98</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 3A 64"><unientity>8E9E</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 3A 6B"><unientity>8EA5</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 3A 6F"><unientity>8EA7</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 3A 71"><unientity>8EA9</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 3A 72"><unientity>8E99</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 3A 78"><unientity>8EB3</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 3A 7A"><unientity>8EBC</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 3A 7D"><unientity>8EB6</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 3B 2E"><unientity>8EC9</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 3B 2F"><unientity>8ECF</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 3B 31"><unientity>8ECE</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 3B 33"><unientity>8ED5</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 3B 3F"><unientity>8EFA</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 3B 42"><unientity>8EF9</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 3B 4B"><unientity>8EE8</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 3B 4F"><unientity>8EEB</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 3B 51"><unientity>8EFF</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 3B 56"><unientity>8F00</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 3B 59"><unientity>8F05</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 3B 5A"><unientity>8F08</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 3B 5B"><unientity>8F07</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 3B 63"><unientity>8F27</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 3B 64"><unientity>8F2C</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 3B 6B"><unientity>8F1E</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 3B 6D"><unientity>8F25</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 3B 6E"><unientity>8F20</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 3B 75"><unientity>8F17</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 3B 78"><unientity>8F36</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 3B 79"><unientity>8F2E</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 3B 7A"><unientity>8F33</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 3B 7D"><unientity>8F2D</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 3C 26"><unientity>8F39</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 3C 27"><unientity>8F34</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 3C 2D"><unientity>8F40</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 3C 30"><unientity>8F46</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 3C 31"><unientity>8F4A</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 3C 33"><unientity>8F47</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 3C 3D"><unientity>8F52</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 3C 48"><unientity>8F56</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 3C 49"><unientity>8F57</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 3C 4B"><unientity>8F55</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 3C 4C"><unientity>8F58</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 3C 4D"><unientity>8F5C</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 3C 4E"><unientity>8F5E</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 3C 53"><unientity>8F5D</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 3C 57"><unientity>8F62</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 3C 59"><unientity>8F63</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 3C 5A"><unientity>8F64</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 3C 65"><unientity>8FA4</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 3C 66"><unientity>8FA5</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 3C 6C"><unientity>8FB5</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 3C 6D"><unientity>8FB7</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 3C 6E"><unientity>8FBB</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 3C 70"><unientity>8FBC</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 3C 74"><unientity>8FBF</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 3C 75"><unientity>8FD2</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 3C 77"><unientity>8FCB</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 3C 7A"><unientity>8FCA</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 3C 7B"><unientity>8FD3</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 3C 7D"><unientity>8FCD</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 3D 21"><unientity>8FDA</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 3D 22"><unientity>8FD5</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 3D 2F"><unientity>8FE4</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 3D 30"><unientity>8FEE</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 3D 35"><unientity>8FF9</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 3D 3C"><unientity>8FFB</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 3D 3F"><unientity>9004</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 3D 40"><unientity>9008</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 3D 44"><unientity>9011</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 3D 45"><unientity>900B</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 3D 48"><unientity>900C</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 3D 49"><unientity>9021</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 3D 4A"><unientity>902D</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 3D 4E"><unientity>902C</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 3D 56"><unientity>9037</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 3D 57"><unientity>9034</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 3D 58"><unientity>902F</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 3D 59"><unientity>9036</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 3D 5B"><unientity>9046</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 3D 5D"><unientity>9052</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 3D 67"><unientity>9049</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 3D 6A"><unientity>9044</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 3D 74"><unientity>9062</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 3D 75"><unientity>905D</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 3D 78"><unientity>905B</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 3D 7B"><unientity>906B</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 3E 21"><unientity>9070</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 3E 25"><unientity>906F</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 3E 26"><unientity>9079</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 3E 28"><unientity>9076</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 3E 2A"><unientity>907B</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 3E 2C"><unientity>9085</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 3E 34"><unientity>9083</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 3E 37"><unientity>9088</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 3E 3A"><unientity>908B</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 3E 3F"><unientity>9099</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 3E 40"><unientity>9097</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 3E 43"><unientity>909B</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 3E 44"><unientity>909C</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 3E 48"><unientity>90A1</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 3E 51"><unientity>90A8</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 3E 54"><unientity>90A0</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 3E 58"><unientity>90AF</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 3E 59"><unientity>90B3</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 3E 5B"><unientity>90B6</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 3E 5D"><unientity>90B0</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 3E 5F"><unientity>90AD</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 3E 61"><unientity>90B2</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 3E 68"><unientity>90C9</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 3E 6A"><unientity>90BD</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 3E 6F"><unientity>90D5</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 3E 72"><unientity>90BE</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 3E 75"><unientity>90C7</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 3E 78"><unientity>90C8</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 3E 79"><unientity>90C3</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 3F 22"><unientity>90DD</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 3F 23"><unientity>90DF</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 3F 26"><unientity>90E2</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 3F 27"><unientity>90D8</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 3F 28"><unientity>90DB</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 3F 2A"><unientity>90DC</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 3F 2C"><unientity>90D7</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 3F 2D"><unientity>90E4</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 3F 2E"><unientity>90EF</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 3F 2F"><unientity>90EA</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 3F 32"><unientity>90F0</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 3F 33"><unientity>90F4</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 3F 34"><unientity>90F2</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 3F 3E"><unientity>90EB</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 3F 3F"><unientity>90F3</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 3F 46"><unientity>90FC</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 3F 47"><unientity>90FE</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 3F 49"><unientity>9104</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 3F 4A"><unientity>90FF</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 3F 4C"><unientity>9106</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 3F 4E"><unientity>9100</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 3F 50"><unientity>9107</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 3F 57"><unientity>910F</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 3F 58"><unientity>9111</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 3F 5A"><unientity>9116</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 3F 5C"><unientity>9114</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 3F 60"><unientity>910B</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 3F 63"><unientity>9118</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 3F 64"><unientity>911C</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 3F 66"><unientity>9120</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 3F 67"><unientity>9122</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 3F 6A"><unientity>911E</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 3F 71"><unientity>9124</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 3F 72"><unientity>911A</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 3F 74"><unientity>9125</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 3F 77"><unientity>912F</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 3F 79"><unientity>912B</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 40 21"><unientity>9132</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 40 24"><unientity>9126</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 40 2B"><unientity>9134</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 40 2C"><unientity>9136</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 40 31"><unientity>913A</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 40 32"><unientity>913B</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 40 3B"><unientity>9143</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 40 3E"><unientity>9146</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 40 3F"><unientity>9145</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 40 40"><unientity>9148</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 40 41"><unientity>9147</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 40 42"><unientity>9150</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 40 43"><unientity>914E</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 40 48"><unientity>9159</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 40 49"><unientity>915C</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 40 4D"><unientity>9156</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 40 50"><unientity>9158</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 40 52"><unientity>915A</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 40 53"><unientity>9161</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 40 56"><unientity>9164</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 40 61"><unientity>916F</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 40 62"><unientity>916E</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 40 66"><unientity>917A</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 40 68"><unientity>9172</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 40 69"><unientity>9179</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 40 6A"><unientity>9176</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 40 6B"><unientity>9174</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 40 6C"><unientity>9173</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 40 6D"><unientity>9185</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 40 6F"><unientity>9182</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 40 70"><unientity>918A</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 40 71"><unientity>9186</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 40 72"><unientity>918C</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 40 73"><unientity>9181</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 40 7B"><unientity>9191</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 40 7D"><unientity>9190</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 40 7E"><unientity>918E</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 41 24"><unientity>918D</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 41 25"><unientity>9193</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 41 2B"><unientity>919D</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 41 2C"><unientity>919A</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 41 30"><unientity>91A2</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 41 34"><unientity>E971</unientity><unientityalt>919B</unientityalt><desc>Variant of 4D4134 which maps to 919B</desc></character>
-<character hex="23 41 37"><unientity>91A8</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 41 3D"><unientity>91AA</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 41 41"><unientity>91AF</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 41 42"><unientity>91B1</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 41 47"><unientity>91AD</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 41 48"><unientity>91AE</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 41 4B"><unientity>91B4</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 41 4C"><unientity>91B2</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 41 4D"><unientity>91B5</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 41 56"><unientity>91BF</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 41 57"><unientity>91BD</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 41 5A"><unientity>91C2</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 41 5B"><unientity>91C4</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 41 5C"><unientity>91C3</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 41 61"><unientity>91D4</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 41 62"><unientity>91D3</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 41 63"><unientity>91D5</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 41 64"><unientity>91D9</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 41 68"><unientity>91E2</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 41 69"><unientity>91ED</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 41 6A"><unientity>91F7</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 41 6B"><unientity>91FA</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 41 6F"><unientity>91F2</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 41 71"><unientity>91E8</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 41 72"><unientity>91F6</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 41 73"><unientity>91EE</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 41 74"><unientity>91F4</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 41 77"><unientity>91F1</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 41 79"><unientity>91E9</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 41 7A"><unientity>91F8</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 42 21"><unientity>91F9</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 42 22"><unientity>91E4</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 42 23"><unientity>9204</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 42 25"><unientity>9201</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 42 26"><unientity>922B</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 42 27"><unientity>920A</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 42 28"><unientity>9225</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 42 2A"><unientity>9292</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 42 2C"><unientity>9228</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 42 2E"><unientity>9207</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 42 2F"><unientity>9203</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 42 31"><unientity>9200</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 42 32"><unientity>9218</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 42 33"><unientity>91FE</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 42 36"><unientity>9208</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 42 37"><unientity>9226</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 42 38"><unientity>921C</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 42 3B"><unientity>9224</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 42 43"><unientity>9212</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 42 48"><unientity>91FF</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 42 4A"><unientity>9216</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 42 4B"><unientity>9211</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 42 4E"><unientity>9206</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 42 4F"><unientity>92A2</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 42 51"><unientity>9230</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 42 52"><unientity>9249</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 42 54"><unientity>924D</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 42 55"><unientity>9248</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 42 58"><unientity>923A</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 42 5C"><unientity>922E</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 42 5F"><unientity>9233</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 42 61"><unientity>9266</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 42 64"><unientity>925E</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 42 68"><unientity>9235</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 42 6B"><unientity>9250</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 42 6C"><unientity>926B</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 42 6D"><unientity>9239</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 42 6F"><unientity>926D</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 42 70"><unientity>926C</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 42 71"><unientity>924F</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 42 74"><unientity>923F</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 42 77"><unientity>9260</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 42 7E"><unientity>9236</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 43 23"><unientity>924E</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 43 26"><unientity>924C</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 43 27"><unientity>9256</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 43 2B"><unientity>925A</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 43 2E"><unientity>9241</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 43 2F"><unientity>9283</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 43 31"><unientity>92A5</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 43 33"><unientity>9282</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 43 35"><unientity>92A8</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 43 37"><unientity>927C</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 43 38"><unientity>92A4</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 43 3E"><unientity>9276</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 43 3F"><unientity>928D</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 43 40"><unientity>92EE</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 43 42"><unientity>9288</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 43 43"><unientity>927A</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 43 45"><unientity>928E</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 43 46"><unientity>92A0</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 43 47"><unientity>9277</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 43 49"><unientity>92AA</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 43 50"><unientity>92A6</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 43 54"><unientity>927E</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 43 55"><unientity>929A</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 43 58"><unientity>92AB</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 43 5B"><unientity>9291</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 43 5D"><unientity>929B</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 43 62"><unientity>927F</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 43 64"><unientity>92A3</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 43 66"><unientity>92C8</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 43 6A"><unientity>92C3</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 43 6F"><unientity>92D0</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 43 71"><unientity>92F1</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 43 72"><unientity>92DF</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 43 75"><unientity>92E6</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 43 76"><unientity>92B6</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 43 77"><unientity>92C0</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 43 79"><unientity>92BE</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 43 7A"><unientity>92D9</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 43 7E"><unientity>92D5</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 44 21"><unientity>92C6</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 44 25"><unientity>92F4</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 44 27"><unientity>92CF</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 44 2A"><unientity>92B2</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 44 2C"><unientity>92E7</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 44 2D"><unientity>92C7</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 44 2E"><unientity>92F0</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 44 2F"><unientity>92DB</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 44 30"><unientity>92DC</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 44 31"><unientity>92D8</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 44 33"><unientity>92E9</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 44 35"><unientity>92DD</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 44 39"><unientity>92D1</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 44 3A"><unientity>92CA</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 44 3C"><unientity>92C2</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 44 3E"><unientity>92CC</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 44 40"><unientity>92EF</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 44 41"><unientity>92E8</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 44 43"><unientity>92EB</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 44 45"><unientity>92F5</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 44 48"><unientity>92F2</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 44 4C"><unientity>9303</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 44 4D"><unientity>9307</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 44 4E"><unientity>931E</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 44 4F"><unientity>9344</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 44 53"><unientity>931D</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 44 54"><unientity>92FA</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 44 58"><unientity>931F</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 44 5A"><unientity>9331</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 44 5B"><unientity>9306</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 44 5D"><unientity>92F9</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 44 5F"><unientity>930F</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 44 62"><unientity>9302</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 44 64"><unientity>9324</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 44 66"><unientity>9312</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 44 69"><unientity>9338</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 44 6A"><unientity>9323</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 44 6C"><unientity>9321</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 44 71"><unientity>9340</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 44 72"><unientity>9301</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 44 74"><unientity>9315</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 44 76"><unientity>9329</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 44 78"><unientity>932E</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 44 79"><unientity>932A</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 44 7B"><unientity>933F</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 44 7C"><unientity>933A</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 44 7E"><unientity>9335</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 45 22"><unientity>9314</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 45 28"><unientity>92FE</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 45 2F"><unientity>9342</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 45 31"><unientity>9341</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 45 32"><unientity>9319</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 45 35"><unientity>934C</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 45 41"><unientity>9379</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 45 44"><unientity>9386</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 45 47"><unientity>936A</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 45 48"><unientity>935C</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 45 4C"><unientity>934F</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 45 4D"><unientity>9347</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 45 51"><unientity>937A</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 45 53"><unientity>9356</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 45 54"><unientity>9371</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 45 56"><unientity>937C</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 45 5C"><unientity>9377</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 45 5D"><unientity>9349</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 45 5E"><unientity>9358</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 45 5F"><unientity>935A</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 45 60"><unientity>E9F0</unientity><desc>East Asian ideograph not in Unicode</desc></character>
-<character hex="23 45 62"><unientity>935F</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 45 64"><unientity>9376</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 45 66"><unientity>9355</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 45 67"><unientity>9354</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 45 6A"><unientity>9348</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 45 6B"><unientity>9374</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 45 6E"><unientity>9351</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 45 6F"><unientity>9364</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 45 71"><unientity>936B</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 45 72"><unientity>936D</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 45 73"><unientity>9360</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 45 77"><unientity>936E</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 45 79"><unientity>938F</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 45 7A"><unientity>93AC</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 45 7B"><unientity>9395</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 45 7E"><unientity>938B</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 46 21"><unientity>93B5</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 46 22"><unientity>938C</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 46 23"><unientity>9388</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 46 25"><unientity>93B9</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 46 27"><unientity>93A1</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 46 28"><unientity>93B0</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 46 29"><unientity>93A3</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 46 2A"><unientity>93B7</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 46 2B"><unientity>939B</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 46 2D"><unientity>9398</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 46 3C"><unientity>9389</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 46 3D"><unientity>93A4</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 46 40"><unientity>93BC</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 46 42"><unientity>93A7</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 46 44"><unientity>93BD</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 46 47"><unientity>93A6</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 46 48"><unientity>939A</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 46 4A"><unientity>93AA</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 46 4D"><unientity>939E</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 46 4F"><unientity>9397</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 46 51"><unientity>93BB</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 46 53"><unientity>93F1</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 46 56"><unientity>93DE</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 46 57"><unientity>93EE</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 46 5A"><unientity>93C7</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 46 5B"><unientity>93F2</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 46 5D"><unientity>93D4</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 46 5F"><unientity>93E5</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 46 62"><unientity>93F9</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 46 63"><unientity>93CA</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 46 64"><unientity>93C4</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 46 66"><unientity>93E8</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 46 67"><unientity>93E7</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 46 72"><unientity>93DA</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 46 73"><unientity>93D0</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 46 74"><unientity>93EF</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 46 75"><unientity>93DB</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 46 7C"><unientity>93CC</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 47 2C"><unientity>93D3</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 47 2F"><unientity>93A9</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 47 30"><unientity>93E6</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 47 32"><unientity>940B</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 47 34"><unientity>9413</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 47 3B"><unientity>940F</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 47 3C"><unientity>E9F1</unientity><desc>East Asian ideograph not in Unicode</desc></character>
-<character hex="23 47 3D"><unientity>93FB</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 47 49"><unientity>93FA</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 47 4D"><unientity>9419</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 47 4E"><unientity>940D</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 47 50"><unientity>9426</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 47 51"><unientity>9427</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 47 55"><unientity>9409</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 47 58"><unientity>9414</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 47 59"><unientity>9404</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 47 5C"><unientity>9422</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 47 5D"><unientity>9406</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 47 60"><unientity>9410</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 47 62"><unientity>9423</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 47 67"><unientity>93F5</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 47 69"><unientity>93F7</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 47 6A"><unientity>9407</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 47 6F"><unientity>940E</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 47 71"><unientity>9411</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 47 74"><unientity>943F</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 47 79"><unientity>9429</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 47 7C"><unientity>943D</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 48 27"><unientity>93F4</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 48 28"><unientity>9436</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 48 2B"><unientity>943B</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 48 2D"><unientity>9424</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 48 30"><unientity>9437</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 48 32"><unientity>9440</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 48 35"><unientity>942B</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 48 36"><unientity>942D</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 48 37"><unientity>9441</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 48 38"><unientity>9431</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 48 3D"><unientity>9467</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 48 3E"><unientity>944C</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 48 40"><unientity>9445</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 48 42"><unientity>9450</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 48 4A"><unientity>944A</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 48 53"><unientity>9466</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 48 57"><unientity>9464</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 48 58"><unientity>9462</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 48 5C"><unientity>9465</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 48 5D"><unientity>9455</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 48 5E"><unientity>945E</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 48 62"><unientity>946A</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 48 68"><unientity>946B</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 48 69"><unientity>946D</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 48 6C"><unientity>946F</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 48 6D"><unientity>9471</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 48 71"><unientity>9477</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 48 7B"><unientity>9482</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 48 7C"><unientity>9481</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 49 2E"><unientity>9585</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 49 30"><unientity>9588</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 49 31"><unientity>958C</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 49 34"><unientity>9597</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 49 36"><unientity>958E</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 49 38"><unientity>959F</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 49 3A"><unientity>95A0</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 49 42"><unientity>95AC</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 49 44"><unientity>95AB</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 49 48"><unientity>95BC</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 49 49"><unientity>95BE</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 49 4A"><unientity>95CD</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 49 4D"><unientity>95B9</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 49 4E"><unientity>95BA</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 49 4F"><unientity>95B6</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 49 50"><unientity>95BF</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 49 52"><unientity>95BD</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 49 59"><unientity>95C9</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 49 5D"><unientity>95CE</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 49 60"><unientity>95D5</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 49 62"><unientity>95D2</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 49 63"><unientity>95D3</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 49 64"><unientity>95D1</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 49 65"><unientity>95C3</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 49 66"><unientity>95DA</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 49 69"><unientity>95DE</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 49 6A"><unientity>95E0</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 49 6F"><unientity>95E5</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 49 72"><unientity>95E4</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 49 76"><unientity>95E7</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 49 7A"><unientity>961E</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 49 7B"><unientity>9624</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 49 7C"><unientity>9622</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 4A 21"><unientity>9627</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 4A 2F"><unientity>9642</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 4A 30"><unientity>963D</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 4A 32"><unientity>963C</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 4A 3C"><unientity>9651</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 4A 42"><unientity>9660</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 4A 44"><unientity>965C</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 4A 46"><unientity>9658</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 4A 4A"><unientity>965F</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 4A 4B"><unientity>9656</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 4A 51"><unientity>966C</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 4A 5D"><unientity>967B</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 4A 5E"><unientity>967F</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 4A 62"><unientity>967E</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 4A 63"><unientity>9684</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 4A 65"><unientity>9688</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 4A 6C"><unientity>9689</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 4A 6D"><unientity>9682</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 4A 6E"><unientity>9683</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 4A 79"><unientity>9696</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 4A 7A"><unientity>9697</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 4B 2F"><unientity>96A4</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 4B 35"><unientity>96A9</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 4B 37"><unientity>96AE</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 4B 3B"><unientity>96B0</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 4B 3C"><unientity>96B2</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 4B 3E"><unientity>96B3</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 4B 48"><unientity>96B9</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 4B 49"><unientity>96BC</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 4B 52"><unientity>96CE</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 4B 53"><unientity>96CA</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 4B 57"><unientity>96D2</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 4B 64"><unientity>96DF</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 4B 66"><unientity>96D8</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 4B 67"><unientity>96DD</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 4B 71"><unientity>96E9</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 4B 74"><unientity>96F1</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 4B 76"><unientity>96F0</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 4B 77"><unientity>96F4</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 4B 78"><unientity>96FA</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 4B 7A"><unientity>96F5</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 4C 22"><unientity>96FF</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 4C 27"><unientity>9702</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 4C 29"><unientity>9708</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 4C 2A"><unientity>9705</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 4C 38"><unientity>971B</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 4C 3D"><unientity>971D</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 4C 3E"><unientity>9719</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 4C 47"><unientity>9723</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 4C 49"><unientity>9722</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 4C 4A"><unientity>9724</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 4C 4E"><unientity>9728</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 4C 50"><unientity>9726</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 4C 52"><unientity>9731</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 4C 58"><unientity>9730</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 4C 5C"><unientity>9736</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 4C 6A"><unientity>9741</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 4C 6B"><unientity>9747</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 4C 6C"><unientity>9746</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 4C 6E"><unientity>9749</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 4C 75"><unientity>9758</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 4C 76"><unientity>975A</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 4C 78"><unientity>975D</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 4C 7B"><unientity>975F</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 4C 7D"><unientity>9764</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 4D 25"><unientity>9767</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 4D 2C"><unientity>976B</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 4D 30"><unientity>976E</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 4D 31"><unientity>9777</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 4D 32"><unientity>9778</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 4D 35"><unientity>9773</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 4D 37"><unientity>9783</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 4D 38"><unientity>977A</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 4D 3A"><unientity>9780</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 4D 3C"><unientity>9781</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 4D 40"><unientity>9784</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 4D 43"><unientity>977F</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 4D 49"><unientity>9789</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 4D 54"><unientity>9794</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 4D 59"><unientity>979B</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 4D 5A"><unientity>979F</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 4D 5C"><unientity>979A</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 4D 62"><unientity>979C</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 4D 6A"><unientity>97AC</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 4D 70"><unientity>97AE</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 4D 71"><unientity>97A8</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 4D 74"><unientity>97AB</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 4D 78"><unientity>97A5</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 4D 7A"><unientity>97B2</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 4D 7C"><unientity>97B4</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 4E 24"><unientity>97B3</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 4E 26"><unientity>97B5</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 4E 29"><unientity>97B9</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 4E 2D"><unientity>97B8</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 4E 35"><unientity>97BE</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 4E 38"><unientity>97C0</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 4E 3B"><unientity>97C5</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 4E 43"><unientity>97C9</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 4E 4B"><unientity>97CE</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 4E 4C"><unientity>97CD</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 4E 4E"><unientity>97D0</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 4E 51"><unientity>97D4</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 4E 53"><unientity>97D8</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 4E 54"><unientity>97D9</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 4E 59"><unientity>97DD</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 4E 5C"><unientity>97DE</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 4E 5E"><unientity>97E0</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 4E 60"><unientity>97E1</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 4E 6C"><unientity>97F5</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 4E 73"><unientity>97FA</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 4E 79"><unientity>9807</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 4E 7B"><unientity>980F</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 4E 7E"><unientity>980D</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 4F 23"><unientity>980E</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 4F 26"><unientity>9816</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 4F 2C"><unientity>9826</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 4F 2D"><unientity>981E</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 4F 34"><unientity>982B</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 4F 37"><unientity>9820</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 4F 38"><unientity>981F</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 4F 3D"><unientity>9833</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 4F 40"><unientity>982E</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 4F 44"><unientity>982F</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 4F 45"><unientity>9832</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 4F 4B"><unientity>9847</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 4F 4E"><unientity>9844</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 4F 60"><unientity>9852</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 4F 62"><unientity>984B</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 4F 66"><unientity>983F</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 4F 6A"><unientity>985C</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 4F 6B"><unientity>9859</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 4F 6F"><unientity>9857</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 4F 72"><unientity>9856</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 4F 77"><unientity>9862</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 4F 7E"><unientity>9868</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 50 21"><unientity>9865</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 50 22"><unientity>9866</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 50 29"><unientity>986C</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 50 30"><unientity>9873</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 50 31"><unientity>9874</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 50 39"><unientity>98AD</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 50 40"><unientity>98B4</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 50 48"><unientity>98B8</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 50 4A"><unientity>98BF</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 50 4D"><unientity>98BB</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 50 4E"><unientity>98C0</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 50 53"><unientity>98C6</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 50 5F"><unientity>98E1</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 50 60"><unientity>98E3</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 50 61"><unientity>98E4</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 50 63"><unientity>98E5</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 50 68"><unientity>98F1</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 50 6C"><unientity>98EB</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 51 24"><unientity>9907</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 51 28"><unientity>9902</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 51 2F"><unientity>9916</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 51 30"><unientity>9914</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 51 31"><unientity>9917</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 51 32"><unientity>9911</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 51 38"><unientity>9915</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 51 3A"><unientity>9924</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 51 3B"><unientity>991F</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 51 40"><unientity>991C</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 51 43"><unientity>9929</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 51 45"><unientity>9927</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 51 47"><unientity>991A</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 51 4F"><unientity>992E</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 51 50"><unientity>992C</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 51 51"><unientity>992A</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 51 53"><unientity>9933</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 51 54"><unientity>E972</unientity><unientityalt>9942</unientityalt><desc>Variant of 4D5154 which maps to 9942</desc></character>
-<character hex="23 51 55"><unientity>9932</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 51 56"><unientity>992B</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 51 58"><unientity>9931</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 51 5C"><unientity>993B</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 51 60"><unientity>993A</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 51 61"><unientity>9941</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 51 64"><unientity>9940</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 51 66"><unientity>993C</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 51 6A"><unientity>9948</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 51 6C"><unientity>9947</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 51 6D"><unientity>9949</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 51 70"><unientity>9943</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 51 71"><unientity>994D</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 51 72"><unientity>994C</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 51 73"><unientity>994E</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 51 74"><unientity>9950</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 51 7A"><unientity>9958</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 51 7B"><unientity>9954</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 51 7E"><unientity>9955</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 52 22"><unientity>E973</unientity><unientityalt>9957</unientityalt><desc>Variant of 475222 which maps to 9957</desc></character>
-<character hex="23 52 29"><unientity>995D</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 52 2B"><unientity>995F</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 52 2F"><unientity>9997</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 52 30"><unientity>9998</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 52 3B"><unientity>99A3</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 52 3C"><unientity>99A1</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 52 3E"><unientity>99A6</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 52 41"><unientity>99A9</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 52 42"><unientity>99AA</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 52 49"><unientity>99B5</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 52 4D"><unientity>99BF</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 52 4E"><unientity>99BC</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 52 4F"><unientity>99C3</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 52 53"><unientity>99B9</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 52 54"><unientity>99BD</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 52 61"><unientity>99D3</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 52 63"><unientity>99D4</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 52 65"><unientity>99C9</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 52 69"><unientity>99D8</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 52 74"><unientity>99EC</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 52 7A"><unientity>99F0</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 52 7B"><unientity>99E3</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 52 7C"><unientity>99EA</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 53 24"><unientity>9A02</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 53 29"><unientity>99F8</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 53 2A"><unientity>99F4</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 53 30"><unientity>99FB</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 53 31"><unientity>99FD</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 53 3D"><unientity>9A0F</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 53 3E"><unientity>9A0B</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 53 3F"><unientity>9A09</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 53 44"><unientity>9A04</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 53 45"><unientity>9A11</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 53 47"><unientity>9A05</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 53 48"><unientity>9A10</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 53 4C"><unientity>9A24</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 53 4D"><unientity>9A22</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 53 4F"><unientity>9A20</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 53 52"><unientity>9A27</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 53 59"><unientity>9A2F</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 53 5A"><unientity>9A38</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 53 60"><unientity>9A2D</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 53 61"><unientity>9A35</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 53 64"><unientity>9A32</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 53 69"><unientity>9A36</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 53 6A"><unientity>9A2E</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 53 70"><unientity>9A41</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 53 74"><unientity>9A3B</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 53 79"><unientity>9A42</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 53 7A"><unientity>9A44</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 53 7D"><unientity>9A48</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 53 7E"><unientity>9A4C</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 54 22"><unientity>9A4D</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 54 24"><unientity>9A52</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 54 27"><unientity>9A4A</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 54 2A"><unientity>9A58</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 54 2C"><unientity>9A56</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 54 33"><unientity>9A64</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 54 34"><unientity>9A66</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 54 3A"><unientity>9A6B</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 54 3F"><unientity>9AAD</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 54 41"><unientity>9AAB</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 54 43"><unientity>9AB1</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 54 45"><unientity>9AB3</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 54 49"><unientity>9AB6</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 54 4C"><unientity>9ABB</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 54 50"><unientity>9ABA</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 54 54"><unientity>9ABD</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 54 57"><unientity>9AC1</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 54 59"><unientity>9AC0</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 54 5A"><unientity>9AC2</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 54 5D"><unientity>9AC8</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 54 66"><unientity>9AD0</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 54 6A"><unientity>9AD1</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 54 6D"><unientity>9AD6</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 54 72"><unientity>9ADC</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 54 74"><unientity>9ADF</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 54 76"><unientity>9AE0</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 54 77"><unientity>9AE2</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 55 21"><unientity>9AE7</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 55 27"><unientity>9AEB</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 55 28"><unientity>9AF2</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 55 2A"><unientity>9AEF</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 55 32"><unientity>9AF9</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 55 35"><unientity>9AFD</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 55 36"><unientity>9B01</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 55 38"><unientity>9B02</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 55 3B"><unientity>9B00</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 55 3C"><unientity>9B08</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 55 3E"><unientity>9B04</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 55 41"><unientity>9B05</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 55 43"><unientity>9B0B</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 55 47"><unientity>9B0E</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 55 4E"><unientity>9B11</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 55 4F"><unientity>9B10</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 55 54"><unientity>9B18</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 55 56"><unientity>9B1D</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 55 5E"><unientity>9B1F</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 55 66"><unientity>9B23</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 55 6C"><unientity>9B29</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 55 73"><unientity>9B2D</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 55 74"><unientity>E9F2</unientity><desc>East Asian ideograph not in Unicode</desc></character>
-<character hex="23 55 76"><unientity>9B2F</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 55 7D"><unientity>9B34</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 56 22"><unientity>9B35</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 56 23"><unientity>9B37</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 56 36"><unientity>9B43</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 56 3A"><unientity>9B48</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 56 3C"><unientity>9B4E</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 56 3E"><unientity>9B4D</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 56 41"><unientity>9B4B</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 56 47"><unientity>9B51</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 56 5D"><unientity>9B74</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 56 63"><unientity>9B68</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 56 72"><unientity>9B80</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 56 73"><unientity>9B8C</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 56 7A"><unientity>9B95</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 56 7B"><unientity>9B7D</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 57 21"><unientity>9B83</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 57 29"><unientity>9B8E</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 57 2B"><unientity>9B90</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 57 2E"><unientity>9B93</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 57 2F"><unientity>9B97</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 57 31"><unientity>9B92</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 57 32"><unientity>9B98</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 57 36"><unientity>9B9F</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 57 39"><unientity>9B9D</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 57 3C"><unientity>9BAD</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 57 3D"><unientity>9B9A</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 57 3F"><unientity>9BA8</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 57 42"><unientity>9B9E</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 57 43"><unientity>9B99</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 57 49"><unientity>9B86</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 57 4E"><unientity>9BA0</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 57 56"><unientity>9BC7</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 57 59"><unientity>9BD2</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 57 5D"><unientity>9BC6</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 57 5E"><unientity>9BBF</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 57 5F"><unientity>9BC1</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 57 66"><unientity>9BB9</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 57 6B"><unientity>9BBB</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 57 6C"><unientity>9BD3</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 57 6E"><unientity>9BC0</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 57 72"><unientity>9BC8</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 57 77"><unientity>9BD7</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 57 7A"><unientity>9BD6</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 57 7C"><unientity>9BEB</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 58 23"><unientity>9BD5</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 58 27"><unientity>9BE4</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 58 2B"><unientity>9BF1</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 58 2C"><unientity>9BE1</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 58 2D"><unientity>9BDB</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 58 2F"><unientity>9BE2</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 58 31"><unientity>9BF0</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 58 34"><unientity>9BD4</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 58 3E"><unientity>9BFF</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 58 43"><unientity>9C06</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 58 44"><unientity>9C15</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 58 49"><unientity>9C0A</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 58 4B"><unientity>9C08</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 58 4C"><unientity>9C14</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 58 4D"><unientity>9C04</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 58 52"><unientity>9C02</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 58 54"><unientity>9C10</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 58 59"><unientity>9C12</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 58 5C"><unientity>9C09</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 58 66"><unientity>9C1C</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 58 69"><unientity>9C2F</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 58 6E"><unientity>9C23</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 58 70"><unientity>9C2E</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 58 71"><unientity>9C28</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 58 78"><unientity>9C21</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 58 79"><unientity>9C24</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 58 7E"><unientity>9C46</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 59 25"><unientity>9C32</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 59 26"><unientity>9C44</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 59 28"><unientity>9C48</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 59 29"><unientity>9C39</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 59 2A"><unientity>9C33</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 59 30"><unientity>9C47</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 59 32"><unientity>9C35</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 59 34"><unientity>9C37</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 59 38"><unientity>9C52</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 59 3B"><unientity>9C58</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 59 45"><unientity>9C51</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 59 49"><unientity>9C63</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 59 4F"><unientity>9C67</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 59 55"><unientity>9C5F</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 59 56"><unientity>9C60</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 59 58"><unientity>9C6D</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 59 5B"><unientity>9C68</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 59 5C"><unientity>9C6F</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 59 5E"><unientity>9C6E</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 59 6B"><unientity>9C7A</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 59 73"><unientity>9CE7</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 59 74"><unientity>9CF0</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 59 77"><unientity>9CF2</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 5A 21"><unientity>9D02</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 5A 22"><unientity>9D03</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 5A 23"><unientity>9CF7</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 5A 24"><unientity>9D04</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 5A 28"><unientity>9D07</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 5A 2C"><unientity>9CF8</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 5A 2F"><unientity>9D2A</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 5A 30"><unientity>9D25</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 5A 3F"><unientity>9D1E</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 5A 44"><unientity>9D1D</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 5A 48"><unientity>9D1F</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 5A 4F"><unientity>9D41</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 5A 53"><unientity>9D36</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 5A 63"><unientity>9D3E</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 5A 65"><unientity>9D30</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 5A 68"><unientity>9D42</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 5A 69"><unientity>9D40</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 5A 6B"><unientity>9D3D</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 5A 70"><unientity>9D5C</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 5A 75"><unientity>9D53</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 5A 7B"><unientity>9D59</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 5B 26"><unientity>9D5A</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 5B 2A"><unientity>9D52</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 5B 2C"><unientity>9D77</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 5B 2E"><unientity>9D8A</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 5B 2F"><unientity>9D7A</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 5B 35"><unientity>9D87</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 5B 3F"><unientity>9D78</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 5B 42"><unientity>9D7E</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 5B 47"><unientity>9D69</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 5B 4D"><unientity>9D7B</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 5B 4F"><unientity>9D83</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 5B 52"><unientity>9D6F</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 5B 59"><unientity>9DA9</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 5B 5E"><unientity>9D92</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 5B 60"><unientity>9D98</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 5B 66"><unientity>9DA4</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 5B 67"><unientity>9DAA</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 5B 6A"><unientity>9DA1</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 5B 6B"><unientity>9D9A</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 5B 70"><unientity>9D96</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 5B 74"><unientity>9DB1</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 5B 76"><unientity>9DB6</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 5B 77"><unientity>9DBC</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 5B 79"><unientity>9DC0</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 5B 7A"><unientity>9DC1</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 5B 7B"><unientity>9DB8</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 5B 7C"><unientity>9DBA</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 5B 7E"><unientity>9DCF</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 5C 22"><unientity>9DC7</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 5C 27"><unientity>9DC3</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 5C 28"><unientity>9DBB</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 5C 32"><unientity>9DB9</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 5C 34"><unientity>9DAC</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 5C 36"><unientity>9DB2</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 5C 3A"><unientity>9DDF</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 5C 3E"><unientity>9DD9</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 5C 45"><unientity>9DD6</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 5C 46"><unientity>9DDE</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 5C 4F"><unientity>9DE9</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 5C 57"><unientity>9DF2</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 5C 5B"><unientity>9DF8</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 5C 5C"><unientity>9DFC</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 5C 5F"><unientity>9DEB</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 5C 65"><unientity>9DEF</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 5C 6A"><unientity>9DED</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 5C 6C"><unientity>9DE6</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 5C 6D"><unientity>9DEE</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 5C 71"><unientity>9E07</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 5C 7E"><unientity>9DFD</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 5D 27"><unientity>9E0E</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 5D 2B"><unientity>9E11</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 5D 36"><unientity>9E15</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 5D 37"><unientity>9E18</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 5D 39"><unientity>9E1C</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 5D 3A"><unientity>9E1B</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 5D 3B"><unientity>9E1D</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 5D 3C"><unientity>9E75</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 5D 42"><unientity>9E7A</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 5D 43"><unientity>9E7B</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 5D 47"><unientity>9E80</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 5D 48"><unientity>9E83</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 5D 49"><unientity>9E84</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 5D 4B"><unientity>9E88</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 5D 4F"><unientity>9E87</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 5D 55"><unientity>9E90</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 5D 58"><unientity>9E8C</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 5D 5A"><unientity>9E95</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 5D 5C"><unientity>9E91</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 5D 5D"><unientity>9E9B</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 5D 66"><unientity>9E9E</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 5D 77"><unientity>9EAD</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 5D 79"><unientity>9EAF</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 5D 7A"><unientity>9EB0</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 5E 30"><unientity>9EC1</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 5E 35"><unientity>9EC6</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 5E 37"><unientity>9EC8</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 5E 42"><unientity>9ECC</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 5E 4A"><unientity>9ED0</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 5E 4C"><unientity>9ED3</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 5E 53"><unientity>9EDA</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 5E 55"><unientity>9EDF</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 5E 57"><unientity>9EE3</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 5E 59"><unientity>9EE5</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 5E 5C"><unientity>9EE7</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 5E 60"><unientity>9EEE</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 5E 66"><unientity>9EF0</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 5E 6F"><unientity>9EF6</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 5E 74"><unientity>9EF9</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 5E 76"><unientity>9EFB</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 5E 77"><unientity>9EFC</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 5E 7A"><unientity>9EFD</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 5E 7B"><unientity>E9F3</unientity><desc>East Asian ideograph not in Unicode</desc></character>
-<character hex="23 5E 7C"><unientity>9EFF</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 5E 7D"><unientity>9F02</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 5F 2F"><unientity>9F0F</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 5F 31"><unientity>9F10</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 5F 32"><unientity>9F12</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 5F 33"><unientity>9F16</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 5F 34"><unientity>9F17</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 5F 37"><unientity>9F1A</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 5F 45"><unientity>9F22</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 5F 48"><unientity>9F2B</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 5F 49"><unientity>9F26</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 5F 53"><unientity>9F2F</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 5F 5E"><unientity>9F39</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 5F 5F"><unientity>9F37</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 5F 64"><unientity>9F3D</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 5F 69"><unientity>9F41</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 5F 6D"><unientity>9F45</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 5F 6F"><unientity>9F46</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 5F 71"><unientity>9F48</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 5F 73"><unientity>9F49</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 5F 79"><unientity>9F4E</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 5F 7B"><unientity>9F4F</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 5F 7C"><unientity>9F54</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 5F 7E"><unientity>9F55</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 60 23"><unientity>9F57</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 60 28"><unientity>9F60</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 60 3F"><unientity>9F6E</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 60 40"><unientity>9F6F</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 60 47"><unientity>9F76</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 60 5B"><unientity>9F8E</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 60 61"><unientity>9F93</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 60 62"><unientity>9F95</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 60 6B"><unientity>9FA0</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 60 71"><unientity>9FA5</unientity><desc>East Asian ideograph</desc></character>
-<character hex="23 60 72"><unientity>9FA4</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 30 32"><unientity>5E76</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 30 4C"><unientity>5E72</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 30 4D"><unientity>4E71</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 30 58"><unientity>4E9A</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 31 38"><unientity>5E03</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 31 3C"><unientity>5360</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 31 4C"><unientity>6765</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 31 4F"><unientity>4ED1</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 31 5D"><unientity>4FA0</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 31 69"><unientity>E901</unientity><desc>Duplicate simplified ideograph</desc></character>
-<character hex="27 31 6C"><unientity>4ED3</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 31 73"><unientity>4EEC</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 31 79"><unientity>4FE9</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 32 24"><unientity>4E2A</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 32 26"><unientity>4F25</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 32 2D"><unientity>4F26</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 32 2E"><unientity>E902</unientity><desc>Duplicate simplified ideograph</desc></character>
-<character hex="27 32 33"><unientity>4F1F</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 32 35"><unientity>4FA7</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 32 38"><unientity>4FA6</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 32 3E"><unientity>5BB6</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 32 40"><unientity>5907</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 32 41"><unientity>6770</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 32 43"><unientity>4F27</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 32 44"><unientity>4F1E</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 32 46"><unientity>4F20</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 32 47"><unientity>503A</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 32 49"><unientity>4EC5</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 32 4A"><unientity>503E</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 32 4C"><unientity>4F24</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 32 51"><unientity>4FA5</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 32 55"><unientity>4EC6</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 32 56"><unientity>4F2A</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 32 57"><unientity>8C61</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 32 58"><unientity>4FA8</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 32 59"><unientity>4EEA</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 32 5A"><unientity>4EBF</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 32 5D"><unientity>4EF7</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 32 5E"><unientity>4FAC</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 32 60"><unientity>4FA9</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 32 61"><unientity>4FED</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 32 62"><unientity>50A7</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 32 63"><unientity>E903</unientity><desc>Duplicate simplified ideograph</desc></character>
-<character hex="27 32 65"><unientity>4FE6</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 32 66"><unientity>4F18</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 32 67"><unientity>507F</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 32 69"><unientity>50A8</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 32 6A"><unientity>4FEA</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 32 6B"><unientity>4FE8</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 32 73"><unientity>51F6</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 32 7A"><unientity>513F</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 32 7B"><unientity>5156</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 33 23"><unientity>4E24</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 33 40"><unientity>51BB</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 33 48"><unientity>51EF</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 33 6B"><unientity>514B</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 33 6D"><unientity>5219</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 33 70"><unientity>521A</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 33 76"><unientity>5240</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 33 78"><unientity>521B</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 33 7C"><unientity>5212</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 33 7E"><unientity>5267</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 34 21"><unientity>5251</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 34 22"><unientity>5218</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 34 23"><unientity>5242</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 34 2F"><unientity>52B2</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 34 33"><unientity>52A1</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 34 34"><unientity>52A8</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 34 35"><unientity>52B3</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 34 36"><unientity>52CB</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 34 37"><unientity>80DC</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 34 38"><unientity>52BF</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 34 3C"><unientity>52B1</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 34 3D"><unientity>529D</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 34 51"><unientity>6C47</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 34 52"><unientity>532E</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 34 55"><unientity>533A</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 34 5F"><unientity>5346</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 34 60"><unientity>534F</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 34 7A"><unientity>538C</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 34 7B"><unientity>5389</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 34 7D"><unientity>53C2</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 35 2B"><unientity>4E1B</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 36 3E"><unientity>5458</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 36 48"><unientity>95EE</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 36 49"><unientity>54D1</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 36 63"><unientity>4E27</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 36 68"><unientity>5355</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 36 6D"><unientity>5524</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 36 6F"><unientity>4E54</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 36 71"><unientity>54DF</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 36 78"><unientity>556C</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 36 7A"><unientity>5417</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 37 21"><unientity>545C</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 37 22"><unientity>545B</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 37 27"><unientity>5567</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 37 2C"><unientity>53F9</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 37 2E"><unientity>5455</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 37 30"><unientity>5C1D</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 37 31"><unientity>55BD</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 37 32"><unientity>5520</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 37 33"><unientity>5578</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 37 3D"><unientity>5480</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 37 40"><unientity>53FD</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 37 44"><unientity>5428</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 37 45"><unientity>55B7</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 37 46"><unientity>E904</unientity><desc>Duplicate simplified ideograph</desc></character>
-<character hex="27 37 47"><unientity>54DD</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 37 4B"><unientity>55F3</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 37 4E"><unientity>549B</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 37 51"><unientity>5413</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 37 54"><unientity>565C</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 37 55"><unientity>5411</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 37 56"><unientity>5499</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 37 5A"><unientity>4E25</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 37 5B"><unientity>5624</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 37 5C"><unientity>556D</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 37 5D"><unientity>55EB</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 37 5E"><unientity>56A3</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 37 61"><unientity>E905</unientity><desc>Duplicate simplified ideograph</desc></character>
-<character hex="27 37 62"><unientity>5453</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 37 64"><unientity>5631</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 37 6F"><unientity>56EF</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 37 70"><unientity>56F4</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 37 71"><unientity>56ED</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 37 72"><unientity>5706</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 37 73"><unientity>56E2</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 37 74"><unientity>56FE</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 38 3B"><unientity>6267</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 38 3E"><unientity>57A9</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 38 44"><unientity>62A5</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 38 45"><unientity>5C27</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 38 4A"><unientity>573A</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 38 4D"><unientity>6D82</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 38 55"><unientity>575E</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 38 56"><unientity>5757</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 38 59"><unientity>5C18</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 38 5A"><unientity>57AB</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 38 5B"><unientity>5811</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 38 60"><unientity>575F</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 38 61"><unientity>5760</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 38 62"><unientity>5815</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 38 64"><unientity>575B</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 38 67"><unientity>57A6</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 38 69"><unientity>538B</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 38 6B"><unientity>5739</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 38 6C"><unientity>5792</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 38 6D"><unientity>5784</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 38 6E"><unientity>574F</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 38 6F"><unientity>575C</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 38 71"><unientity>575D</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 38 74"><unientity>58EE</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 38 76"><unientity>58F6</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 38 77"><unientity>5BFF</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 39 23"><unientity>4F19</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 39 24"><unientity>68A6</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 39 2E"><unientity>5939</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 39 3F"><unientity>5941</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 39 40"><unientity>593A</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 39 41"><unientity>594B</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 39 53"><unientity>5986</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 3A 27"><unientity>5987</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 3A 28"><unientity>5A04</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 3A 36"><unientity>5988</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 3A 3B"><unientity>59AA</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 3A 41"><unientity>5A34</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 3A 43"><unientity>5A75</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 3A 44"><unientity>5A07</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 3A 45"><unientity>59A9</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 3A 48"><unientity>5AD4</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 3A 4A"><unientity>5A74</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 3A 4B"><unientity>5A76</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 3A 5B"><unientity>5B59</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 3A 5F"><unientity>5B5A</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 3A 60"><unientity>5B66</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 3A 63"><unientity>5B6A</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 3B 2E"><unientity>5BDD</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 3B 31"><unientity>5B9E</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 3B 32"><unientity>5B81</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 3B 35"><unientity>5BBD</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 3B 36"><unientity>5BA1</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 3B 37"><unientity>5199</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 3B 38"><unientity>5BA0</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 3B 39"><unientity>5B9D</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 3B 3F"><unientity>4E13</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 3B 40"><unientity>5C06</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 3B 42"><unientity>5BFB</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 3B 43"><unientity>5BF9</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 3B 44"><unientity>5BFC</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 3B 4C"><unientity>5C34</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 3B 60"><unientity>5C61</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 3B 61"><unientity>5C42</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 3B 63"><unientity>5C5E</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 3B 6E"><unientity>5188</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 3B 74"><unientity>5CE1</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 3B 79"><unientity>5C9B</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 3C 28"><unientity>5C9A</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 3C 2A"><unientity>5D2D</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 3C 2B"><unientity>5C96</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 3C 2D"><unientity>5C7F</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 3C 2E"><unientity>5CB3</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 3C 31"><unientity>5CE6</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 3C 32"><unientity>5DC5</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 3C 33"><unientity>5CA9</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 3C 4F"><unientity>5E05</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 3C 51"><unientity>5E08</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 3C 52"><unientity>5E10</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 3C 53"><unientity>5E26</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 3C 58"><unientity>5E27</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 3C 5C"><unientity>5E3C</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 3C 5E"><unientity>5E01</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 3C 60"><unientity>5E1C</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 3C 61"><unientity>5E2E</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 3C 6B"><unientity>51E0</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 3C 76"><unientity>5E93</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 3C 77"><unientity>5750</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 3C 7E"><unientity>5395</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 3D 27"><unientity>5E9F</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 3D 2A"><unientity>5E7F</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 3D 2B"><unientity>5E99</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 3D 2C"><unientity>5382</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 3D 2D"><unientity>5E9E</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 3D 2E"><unientity>5E90</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 3D 2F"><unientity>5385</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 3D 47"><unientity>5F20</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 3D 4B"><unientity>5F39</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 3D 4C"><unientity>5F25</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 3D 4D"><unientity>5F2F</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 3D 4F"><unientity>E906</unientity><desc>Duplicate simplified ideograph</desc></character>
-<character hex="27 3D 65"><unientity>540E</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 3D 67"><unientity>5F84</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 3D 6C"><unientity>4ECE</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 3D 6F"><unientity>590D</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 3D 74"><unientity>5F7B</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 3D 76"><unientity>5F81</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 3E 57"><unientity>5FF0</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 3E 5C"><unientity>95F7</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 3E 5E"><unientity>6005</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 3E 61"><unientity>6076</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 3E 6C"><unientity>60EC</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 3E 70"><unientity>607B</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 3E 77"><unientity>7231</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 3E 7E"><unientity>607C</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 3F 28"><unientity>6001</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 3F 29"><unientity>5FFE</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 3F 2B"><unientity>6006</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 3F 2E"><unientity>5E86</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 3F 31"><unientity>60ED</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 3F 33"><unientity>5FE7</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 3F 36"><unientity>8651</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 3F 38"><unientity>60E8</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 3F 39"><unientity>60EF</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 3F 3A"><unientity>6078</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 3F 3B"><unientity>6002</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 3F 3C"><unientity>6B32</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 3F 3E"><unientity>5BAA</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 3F 3F"><unientity>51ED</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 3F 41"><unientity>60AF</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 3F 42"><unientity>6124</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 3F 44"><unientity>60EE</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 3F 45"><unientity>6187</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 3F 47"><unientity>60EB</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 3F 48"><unientity>5FC6</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 3F 4A"><unientity>5E94</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 3F 4B"><unientity>601C</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 3F 4E"><unientity>6073</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 3F 54"><unientity>6000</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 3F 55"><unientity>61D2</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 3F 56"><unientity>60AC</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 3F 58"><unientity>5FCF</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 3F 59"><unientity>6151</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 3F 5B"><unientity>60E7</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 3F 5C"><unientity>604B</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 3F 6E"><unientity>6218</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 3F 6F"><unientity>620F</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 40 6C"><unientity>631F</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 40 7B"><unientity>5377</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 40 7D"><unientity>626B</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 40 7E"><unientity>626A</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 41 23"><unientity>6302</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 41 36"><unientity>62A1</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 41 3C"><unientity>62E3</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 41 3F"><unientity>626C</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 41 42"><unientity>6325</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 41 4F"><unientity>635F</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 41 53"><unientity>6363</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 41 55"><unientity>62A2</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 41 5A"><unientity>5C4F</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 41 5B"><unientity>631A</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 41 5F"><unientity>6402</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 41 60"><unientity>63B4</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 41 65"><unientity>635E</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 41 66"><unientity>62E8</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 41 68"><unientity>6320</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 41 6E"><unientity>6251</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 41 71"><unientity>629A</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 41 74"><unientity>62E5</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 41 76"><unientity>51FB</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 41 77"><unientity>631E</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 41 7A"><unientity>6321</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 41 7C"><unientity>636E</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 41 7D"><unientity>63B3</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 41 7E"><unientity>62E9</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 42 22"><unientity>62C5</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 42 24"><unientity>6361</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 42 25"><unientity>6324</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 42 26"><unientity>62E7</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 42 28"><unientity>62DF</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 42 29"><unientity>6401</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 42 2A"><unientity>6269</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 42 2B"><unientity>63B7</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 42 2C"><unientity>64B5</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 42 2E"><unientity>6270</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 42 2F"><unientity>64DE</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 42 30"><unientity>6446</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 42 31"><unientity>62E2</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 42 33"><unientity>62E6</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 42 34"><unientity>6400</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 42 35"><unientity>6444</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 42 37"><unientity>631B</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 42 38"><unientity>644A</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 42 3A"><unientity>6405</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 42 3B"><unientity>63FD</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 42 47"><unientity>8D25</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 42 4F"><unientity>542F</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 42 52"><unientity>654C</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 42 54"><unientity>6570</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 42 56"><unientity>655B</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 42 57"><unientity>6BD9</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 42 63"><unientity>65A9</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 42 66"><unientity>65AD</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 43 2D"><unientity>65F6</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 43 32"><unientity>663C</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 43 40"><unientity>6656</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 43 41"><unientity>6655</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 43 43"><unientity>7545</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 43 44"><unientity>6682</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 43 48"><unientity>6653</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 43 49"><unientity>E907</unientity><desc>Duplicate simplified ideograph</desc></character>
-<character hex="27 43 4B"><unientity>66A7</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 43 4D"><unientity>65F7</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 43 55"><unientity>4E66</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 43 5A"><unientity>4F1A</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 43 66"><unientity>80E7</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 44 26"><unientity>4E1C</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 44 63"><unientity>6761</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 44 68"><unientity>67AD</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 44 69"><unientity>6800</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 44 6D"><unientity>5F03</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 44 6E"><unientity>6816</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 44 71"><unientity>680B</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 44 76"><unientity>6808</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 44 7A"><unientity>67A3</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 44 7C"><unientity>832D</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 45 26"><unientity>6781</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 45 2A"><unientity>6768</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 45 2B"><unientity>6862</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 45 2D"><unientity>4E1A</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 45 2F"><unientity>67AB</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 45 37"><unientity>8363</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 45 39"><unientity>6784</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 45 40"><unientity>67AA</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 45 44"><unientity>6837</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 45 46"><unientity>6869</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 45 47"><unientity>6807</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 45 49"><unientity>67A2</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 45 4A"><unientity>697C</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 45 4C"><unientity>6868</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 45 4E"><unientity>4E50</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 45 4F"><unientity>679E</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 45 53"><unientity>692D</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 45 55"><unientity>6811</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 45 57"><unientity>6866</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 45 58"><unientity>6734</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 45 5B"><unientity>6865</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 45 5D"><unientity>673A</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 45 5F"><unientity>6863</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 45 61"><unientity>68C0</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 45 62"><unientity>6867</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 45 63"><unientity>67E0</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 45 64"><unientity>69DF</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 45 65"><unientity>67DC</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 45 66"><unientity>69DB</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 45 6A"><unientity>6988</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 45 6B"><unientity>691F</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 45 6C"><unientity>6809</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 45 6D"><unientity>6A79</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 45 6E"><unientity>680F</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 45 6F"><unientity>6A31</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 45 70"><unientity>6743</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 45 71"><unientity>6984</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 45 78"><unientity>94A6</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 45 7A"><unientity>E908</unientity><desc>Duplicate simplified ideograph</desc></character>
-<character hex="27 45 7C"><unientity>6B27</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 45 7E"><unientity>6B24</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 46 21"><unientity>6B22</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 46 29"><unientity>5C81</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 46 2A"><unientity>5386</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 46 2B"><unientity>5F52</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 46 33"><unientity>6B8B</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 46 35"><unientity>6B87</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 46 36"><unientity>6B93</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 46 37"><unientity>6BA1</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 46 38"><unientity>6B7C</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 46 3B"><unientity>6740</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 46 3C"><unientity>58F3</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 46 40"><unientity>6BB4</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 46 55"><unientity>6C14</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 46 58"><unientity>6C22</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 47 4E"><unientity>6CFE</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 47 59"><unientity>6CEA</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 47 68"><unientity>6D45</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 47 74"><unientity>6E0A</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 47 77"><unientity>6CA6</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 47 7D"><unientity>6D8C</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 48 2D"><unientity>6C64</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 48 30"><unientity>6D4B</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 48 31"><unientity>6DA1</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 48 33"><unientity>6D51</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 48 3D"><unientity>6C9F</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 48 41"><unientity>6C85</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 48 42"><unientity>706D</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 48 44"><unientity>6E7F</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 48 48"><unientity>6CA7</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 48 4B"><unientity>51C6</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 48 4F"><unientity>6CAA</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 48 54"><unientity>6E0D</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 48 55"><unientity>6DA8</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 48 57"><unientity>6C49</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 48 58"><unientity>6EE1</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 48 59"><unientity>6D9F</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 48 5A"><unientity>6E10</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 48 5F"><unientity>6EDE</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 48 63"><unientity>6D46</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 48 64"><unientity>6E17</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 48 65"><unientity>6E14</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 48 6C"><unientity>6CFC</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 48 6D"><unientity>6DA6</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 48 6E"><unientity>6DA7</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 48 6F"><unientity>6D01</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 48 71"><unientity>6D47</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 48 78"><unientity>6E83</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 48 7B"><unientity>6DC0</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 48 7C"><unientity>6D53</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 49 21"><unientity>6CFD</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 49 22"><unientity>6D4A</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 49 26"><unientity>6D4E</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 49 27"><unientity>6CDE</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 49 28"><unientity>6EE8</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 49 2B"><unientity>6EE5</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 49 2D"><unientity>6D9B</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 49 2E"><unientity>6DA9</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 49 31"><unientity>6C88</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 49 32"><unientity>6CFB</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 49 33"><unientity>6E0E</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 49 34"><unientity>6E85</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 49 36"><unientity>6EE4</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 49 37"><unientity>6D4F</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 49 3A"><unientity>6FD1</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 49 3B"><unientity>6CA5</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 49 3C"><unientity>6FD2</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 49 3D"><unientity>6F47</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 49 3F"><unientity>6F9C</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 49 41"><unientity>6D12</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 49 42"><unientity>6EE9</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 49 43"><unientity>6E7E</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 49 44"><unientity>6EE6</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 49 4A"><unientity>707E</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 49 51"><unientity>4E3A</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 49 5D"><unientity>4E4C</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 49 66"><unientity>65E0</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 49 6A"><unientity>70BC</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 49 6D"><unientity>70E6</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 49 6F"><unientity>7080</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 49 75"><unientity>6247</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 49 7D"><unientity>70ED</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 49 7E"><unientity>70EB</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 4A 21"><unientity>70BD</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 4A 22"><unientity>7096</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 4A 24"><unientity>706F</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 4A 25"><unientity>7116</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 4A 26"><unientity>70E7</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 4A 2E"><unientity>8425</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 4A 30"><unientity>70DB</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 4A 31"><unientity>707F</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 4A 33"><unientity>70E9</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 4A 36"><unientity>70C1</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 4A 37"><unientity>7089</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 4A 38"><unientity>70C2</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 4A 42"><unientity>7237</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 4A 45"><unientity>5C14</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 4A 46"><unientity>5899</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 4A 4C"><unientity>724D</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 4A 53"><unientity>5B83</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 4A 5A"><unientity>7275</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 4A 5E"><unientity>8366</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 4A 61"><unientity>728A</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 4A 62"><unientity>727A</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 4A 68"><unientity>72B6</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 4A 70"><unientity>72ED</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 4A 72"><unientity>72C8</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 4A 79"><unientity>72B9</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 4A 7E"><unientity>72F1</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 4B 22"><unientity>72EF</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 4B 23"><unientity>72EE</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 4B 27"><unientity>72EC</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 4B 28"><unientity>72DE</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 4B 29"><unientity>83B7</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 4B 2A"><unientity>72B7</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 4B 2B"><unientity>517D</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 4B 2C"><unientity>730E</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 4B 2D"><unientity>736D</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 4B 2E"><unientity>732E</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 4B 2F"><unientity>7321</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 4B 47"><unientity>73B0</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 4B 57"><unientity>73F2</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 4B 5E"><unientity>739B</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 4B 5F"><unientity>7410</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 4B 64"><unientity>7391</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 4B 67"><unientity>73AF</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 4B 68"><unientity>7477</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 4B 69"><unientity>73BA</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 4B 6B"><unientity>73D1</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 4B 74"><unientity>74EF</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 4B 7A"><unientity>4EA7</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 4C 2D"><unientity>4EA9</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 4C 31"><unientity>7544</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 4C 33"><unientity>6BD5</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 4C 34"><unientity>5F02</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 4C 36"><unientity>753B</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 4C 39"><unientity>5F53</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 4C 3B"><unientity>7574</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 4C 3C"><unientity>8FED</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 4C 56"><unientity>75C9</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 4C 60"><unientity>75A1</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 4C 61"><unientity>759F</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 4C 62"><unientity>75EA</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 4C 63"><unientity>75AF</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 4C 6A"><unientity>75AE</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 4C 6D"><unientity>75E8</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 4C 6E"><unientity>7597</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 4C 71"><unientity>75A0</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 4C 73"><unientity>75D2</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 4C 75"><unientity>765E</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 4C 76"><unientity>763E</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 4C 77"><unientity>7663</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 4C 78"><unientity>762B</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 4C 79"><unientity>766B</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 4C 7B"><unientity>53D1</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 4D 29"><unientity>7691</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 4D 2D"><unientity>76B1</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 4D 3A"><unientity>76CF</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 4D 3C"><unientity>5C3D</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 4D 3D"><unientity>76D1</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 4D 3E"><unientity>76D8</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 4D 3F"><unientity>5362</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 4D 56"><unientity>4F17</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 4D 57"><unientity>56F0</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 4D 5D"><unientity>7750</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 4D 73"><unientity>4E86</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 4D 7C"><unientity>77A9</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 4E 27"><unientity>77EB</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 4E 3B"><unientity>781A</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 4E 3E"><unientity>7815</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 4E 45"><unientity>7855</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 4E 49"><unientity>786E</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 4E 4C"><unientity>7801</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 4E 53"><unientity>7816</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 4E 58"><unientity>77F6</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 4E 59"><unientity>7840</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 4E 5A"><unientity>788D</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 4E 5B"><unientity>77FF</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 4E 5C"><unientity>77FE</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 4E 5D"><unientity>783A</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 4E 5E"><unientity>783E</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 4E 6F"><unientity>E909</unientity><desc>Duplicate simplified ideograph</desc></character>
-<character hex="27 4E 77"><unientity>7978</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 4E 78"><unientity>796F</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 4E 7B"><unientity>7985</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 4E 7C"><unientity>793C</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 4E 7D"><unientity>7977</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 4F 22"><unientity>4E07</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 4F 25"><unientity>53B6</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 4F 36"><unientity>5E0C</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 4F 3C"><unientity>79F0</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 4F 3D"><unientity>79CD</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 4F 40"><unientity>8C37</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 4F 44"><unientity>79EF</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 4F 46"><unientity>7A23</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 4F 49"><unientity>7A51</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 4F 4A"><unientity>79FD</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 4F 4B"><unientity>E90A</unientity><desc>Duplicate simplified ideograph</desc></character>
-<character hex="27 4F 4C"><unientity>7A33</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 4F 5C"><unientity>6D3C</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 4F 5D"><unientity>7A9D</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 4F 5F"><unientity>7A77</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 4F 60"><unientity>7AA5</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 4F 61"><unientity>7A8D</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 4F 62"><unientity>7A9C</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 4F 63"><unientity>7AA6</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 4F 64"><unientity>7A83</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 4F 6B"><unientity>7ADE</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 4F 70"><unientity>E90B</unientity><desc>Duplicate simplified ideograph</desc></character>
-<character hex="27 4F 79"><unientity>7B14</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 50 21"><unientity>7B0B</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 50 23"><unientity>8345</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 50 2A"><unientity>94B3</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 50 2B"><unientity>7B3A</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 50 30"><unientity>8303</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 50 33"><unientity>8282</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 50 38"><unientity>7BAC</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 50 39"><unientity>7B03</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 50 3A"><unientity>7B51</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 50 3C"><unientity>7B5B</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 50 3E"><unientity>7BD3</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 50 41"><unientity>7B80</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 50 42"><unientity>7BAB</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 50 45"><unientity>7BAA</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 50 46"><unientity>7BD1</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 50 48"><unientity>5E18</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 50 4B"><unientity>7B7E</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 50 4C"><unientity>7BEE</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 50 4D"><unientity>7B79</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 50 50"><unientity>7B3C</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 50 51"><unientity>7C41</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 50 52"><unientity>E90C</unientity><desc>Duplicate simplified ideograph</desc></character>
-<character hex="27 50 53"><unientity>7BF1</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 50 54"><unientity>7BA9</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 50 55"><unientity>5401</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 50 60"><unientity>7C8B</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 50 62"><unientity>E90D</unientity><desc>Duplicate simplified ideograph</desc></character>
-<character hex="27 50 68"><unientity>7CAA</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 50 6B"><unientity>7CAE</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 50 6F"><unientity>7EA0</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 50 70"><unientity>7EAA</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 50 71"><unientity>7EA3</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 50 72"><unientity>7EA2</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 50 73"><unientity>7EAB</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 50 74"><unientity>7EA6</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 50 75"><unientity>7EA5</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 50 76"><unientity>7EBA</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 50 77"><unientity>7EB9</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 50 7A"><unientity>7EAD</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 50 7C"><unientity>7EB0</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 50 7D"><unientity>7EAF</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 50 7E"><unientity>7EBD</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 51 21"><unientity>7EB1</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 51 22"><unientity>7EB3</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 51 23"><unientity>7EA7</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 51 24"><unientity>7EB8</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 51 25"><unientity>7EB7</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 51 26"><unientity>7ECA</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 51 28"><unientity>7ECB</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 51 29"><unientity>624E</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 51 2A"><unientity>7ECD</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 51 2B"><unientity>7EC4</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 51 2C"><unientity>7EC6</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 51 2D"><unientity>7EC5</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 51 2F"><unientity>7ECC</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 51 30"><unientity>7EC8</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 51 31"><unientity>7EDF</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 51 32"><unientity>7EDE</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 51 33"><unientity>7ED2</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 51 34"><unientity>7ED3</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 51 36"><unientity>7EDA</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 51 37"><unientity>7EDD</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 51 38"><unientity>7EDC</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 51 39"><unientity>7ED9</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 51 3B"><unientity>4E1D</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 51 3C"><unientity>7ECF</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 51 3D"><unientity>6346</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 51 3E"><unientity>7EE2</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 51 3F"><unientity>7EE5</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 51 40"><unientity>7ED1</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 51 41"><unientity>7EFC</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 51 42"><unientity>7EFD</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 51 43"><unientity>7EFE</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 51 44"><unientity>7D27</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 51 45"><unientity>7EEB</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 51 46"><unientity>7F00</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 51 48"><unientity>7F51</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 51 49"><unientity>7EB2</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 51 4A"><unientity>7EF0</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 51 4C"><unientity>7EFF</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 51 4D"><unientity>7EF8</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 51 4E"><unientity>7EF4</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 51 4F"><unientity>7EF5</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 51 50"><unientity>7EB6</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 51 51"><unientity>7F01</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 51 52"><unientity>7F14</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 51 53"><unientity>7EAC</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 51 54"><unientity>7EC3</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 51 55"><unientity>7EEA</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 51 56"><unientity>7F04</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 51 57"><unientity>7F05</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 51 58"><unientity>7F09</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 51 59"><unientity>7F13</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 51 5A"><unientity>7F18</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 51 5B"><unientity>7F16</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 51 5C"><unientity>7EBF</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 51 5D"><unientity>7F0D</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 51 5E"><unientity>7F0E</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 51 5F"><unientity>7F23</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 51 60"><unientity>7F22</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 51 61"><unientity>8426</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 51 62"><unientity>7F1A</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 51 63"><unientity>81F4</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 51 64"><unientity>E974</unientity><unientityalt>53BF</unientityalt><desc>Variant of 455164 which maps to 53BF</desc></character>
-<character hex="27 51 65"><unientity>7F29</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 51 66"><unientity>7EE9</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 51 67"><unientity>7F2A</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 51 68"><unientity>7F15</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 51 69"><unientity>7F27</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 51 6C"><unientity>7F1D</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 51 6D"><unientity>603B</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 51 6E"><unientity>7EB5</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 51 6F"><unientity>7F2B</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 51 70"><unientity>7F2E</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 51 71"><unientity>7EC7</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 51 72"><unientity>7EE3</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 51 73"><unientity>7ED5</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 51 74"><unientity>7F2D</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 51 75"><unientity>E90E</unientity><desc>Duplicate simplified ideograph</desc></character>
-<character hex="27 51 76"><unientity>7EF3</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 51 77"><unientity>8327</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 51 78"><unientity>7ECE</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 51 79"><unientity>7ED8</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 51 7A"><unientity>8FAB</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 51 7B"><unientity>7F24</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 51 7D"><unientity>7EE7</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 51 7E"><unientity>7F20</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 52 21"><unientity>7EED</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 52 22"><unientity>7F28</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 52 23"><unientity>7EA4</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 52 24"><unientity>7F06</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 52 33"><unientity>7F5A</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 52 34"><unientity>9A82</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 52 35"><unientity>7F62</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 52 37"><unientity>7F57</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 52 38"><unientity>7F81</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 52 42"><unientity>4E49</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 52 4D"><unientity>4E60</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 52 51"><unientity>7FC6</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 52 58"><unientity>7FD8</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 52 6F"><unientity>5723</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 52 71"><unientity>95FB</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 52 74"><unientity>58F0</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 52 75"><unientity>8038</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 52 76"><unientity>806A</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 52 77"><unientity>8054</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 52 78"><unientity>804C</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 52 79"><unientity>8042</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 52 7A"><unientity>804B</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 52 7B"><unientity>542C</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 53 21"><unientity>8083</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 53 44"><unientity>80C1</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 53 4A"><unientity>8090</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 53 4D"><unientity>8109</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 53 58"><unientity>80BE</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 53 59"><unientity>80C0</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 53 5E"><unientity>80A0</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 53 62"><unientity>80BF</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 53 65"><unientity>8111</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 53 6C"><unientity>80F6</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 53 6E"><unientity>80A4</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 53 71"><unientity>817B</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 53 78"><unientity>8113</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 53 79"><unientity>80C6</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 53 7A"><unientity>8138</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 53 7B"><unientity>810D</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 53 7C"><unientity>8110</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 53 7D"><unientity>8191</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 53 7E"><unientity>814A</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 54 21"><unientity>80EA</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 54 22"><unientity>E90F</unientity><desc>Duplicate simplified ideograph</desc></character>
-<character hex="27 54 25"><unientity>4E34</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 54 2B"><unientity>53F0</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 54 32"><unientity>4E0E</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 54 33"><unientity>5174</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 54 34"><unientity>4E3E</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 54 35"><unientity>65E7</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 54 4A"><unientity>8231</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 54 4B"><unientity>8230</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 54 4E"><unientity>8270</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 54 58"><unientity>E910</unientity><desc>Duplicate simplified ideograph</desc></character>
-<character hex="27 54 5C"><unientity>520D</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 55 28"><unientity>835A</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 55 29"><unientity>830E</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 55 2A"><unientity>82CB</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 55 2D"><unientity>5E84</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 55 3C"><unientity>534E</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 55 41"><unientity>83B1</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 55 4D"><unientity>82C7</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 55 4F"><unientity>53F6</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 55 51"><unientity>E911</unientity><desc>Duplicate simplified ideograph</desc></character>
-<character hex="27 55 53"><unientity>8364</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 55 55"><unientity>83B4</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 55 5D"><unientity>5E2D</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 55 63"><unientity>836A</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 55 64"><unientity>82CE</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 55 67"><unientity>82CD</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 55 68"><unientity>8298</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 55 6C"><unientity>83B2</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 55 6E"><unientity>836B</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 55 71"><unientity>848B</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 55 73"><unientity>535C</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 55 76"><unientity>8361</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 55 7C"><unientity>829C</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 56 22"><unientity>8427</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 56 24"><unientity>59DC</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 56 26"><unientity>8537</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 56 29"><unientity>84DD</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 56 2A"><unientity>8428</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 56 2E"><unientity>501F</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 56 31"><unientity>827A</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 56 32"><unientity>85AE</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 56 35"><unientity>836F</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 56 37"><unientity>853C</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 56 39"><unientity>853A</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 56 3A"><unientity>82A6</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 56 3B"><unientity>82F9</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 56 3C"><unientity>82CF</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 56 3D"><unientity>8574</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 56 3E"><unientity>5170</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 56 40"><unientity>85D3</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 56 42"><unientity>841D</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 56 44"><unientity>4E47</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 56 47"><unientity>5904</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 56 48"><unientity>864F</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 56 4A"><unientity>53F7</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 56 4C"><unientity>4E8F</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 56 5A"><unientity>65E6</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 56 76"><unientity>8680</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 56 79"><unientity>E912</unientity><desc>Duplicate simplified ideograph</desc></character>
-<character hex="27 56 7A"><unientity>867E</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 57 24"><unientity>8424</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 57 25"><unientity>8682</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 57 2C"><unientity>877C</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 57 32"><unientity>86F2</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 57 33"><unientity>866B</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 57 34"><unientity>8749</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 57 35"><unientity>8681</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 57 36"><unientity>8747</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 57 3C"><unientity>86CE</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 57 3E"><unientity>8721</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 57 3F"><unientity>86CA</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 57 41"><unientity>8695</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 57 42"><unientity>86EE</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 57 46"><unientity>672E</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 57 47"><unientity>4E8D</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 57 49"><unientity>536B</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 57 4A"><unientity>E913</unientity><desc>Duplicate simplified ideograph</desc></character>
-<character hex="27 57 62"><unientity>8865</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 57 63"><unientity>91CC</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 57 65"><unientity>88C5</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 57 6C"><unientity>5236</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 57 71"><unientity>8934</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 57 73"><unientity>88E4</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 57 77"><unientity>4EB5</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 57 79"><unientity>891B</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 57 7C"><unientity>88C6</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 57 7D"><unientity>8884</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 58 21"><unientity>889C</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 58 22"><unientity>886C</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 58 23"><unientity>88AD</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 58 28"><unientity>89C1</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 58 29"><unientity>89C4</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 58 2A"><unientity>89C5</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 58 2B"><unientity>89C6</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 58 2C"><unientity>4EB2</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 58 2D"><unientity>89CE</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 58 2E"><unientity>89CA</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 58 2F"><unientity>89D0</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 58 30"><unientity>89C9</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 58 31"><unientity>89C8</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 58 32"><unientity>89C2</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 58 35"><unientity>89DE</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 58 38"><unientity>8BA1</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 58 39"><unientity>8BA2</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 58 3A"><unientity>8BA3</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 58 3B"><unientity>8BA6</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 58 3C"><unientity>8BB0</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 58 3D"><unientity>8BA8</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 58 3E"><unientity>8BA7</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 58 3F"><unientity>8BAA</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 58 40"><unientity>8BAF</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 58 41"><unientity>8BAB</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 58 43"><unientity>8BAD</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 58 44"><unientity>8BBF</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 58 45"><unientity>8BC0</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 58 46"><unientity>8BB6</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 58 47"><unientity>8BB7</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 58 48"><unientity>8BB8</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 58 49"><unientity>8BBE</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 58 4A"><unientity>8BB9</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 58 4B"><unientity>8BBC</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 58 4C"><unientity>6CE8</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 58 4E"><unientity>8BC4</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 58 4F"><unientity>8BCD</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 58 51"><unientity>8BC2</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 58 52"><unientity>8BCF</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 58 53"><unientity>8BC5</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 58 54"><unientity>8BC8</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 58 55"><unientity>8BCB</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 58 56"><unientity>8BC9</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 58 57"><unientity>8BCA</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 58 58"><unientity>8BE7</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 58 59"><unientity>8BE5</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 58 5A"><unientity>8BE6</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 58 5B"><unientity>8BD5</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 58 5C"><unientity>8BD7</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 58 5D"><unientity>8BD8</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 58 5E"><unientity>8BE3</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 58 5F"><unientity>8BD9</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 58 60"><unientity>8BDA</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 58 61"><unientity>5938</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 58 62"><unientity>8BDB</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 58 63"><unientity>8BE1</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 58 65"><unientity>8BE2</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 58 66"><unientity>8BDD</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 58 67"><unientity>8BE0</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 58 68"><unientity>8BDF</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 58 69"><unientity>8BF4</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 58 6A"><unientity>8BF5</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 58 6B"><unientity>8BEB</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 58 6C"><unientity>8BED</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 58 6D"><unientity>5FD7</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 58 6F"><unientity>8BEC</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 58 70"><unientity>8BA4</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 58 71"><unientity>8BEF</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 58 72"><unientity>8BF2</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 58 73"><unientity>8BF0</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 58 74"><unientity>8BF1</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 58 75"><unientity>8BF3</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 58 76"><unientity>8C0A</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 58 77"><unientity>8C06</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 58 78"><unientity>8C05</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 58 79"><unientity>8C08</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 58 7A"><unientity>8BF7</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 58 7B"><unientity>8BF8</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 58 7C"><unientity>8BFE</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 58 7D"><unientity>8C03</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 58 7E"><unientity>8BFF</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 59 21"><unientity>8C04</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 59 22"><unientity>8C01</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 59 23"><unientity>8BDE</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 59 24"><unientity>8BBA</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 59 25"><unientity>8C1B</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 59 26"><unientity>8C1A</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 59 27"><unientity>8C0F</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 59 28"><unientity>8BB3</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 59 29"><unientity>8C10</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 59 2A"><unientity>8C0D</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 59 2B"><unientity>8C0B</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 59 2C"><unientity>8C12</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 59 2D"><unientity>8C13</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 59 2E"><unientity>8BFA</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 59 2F"><unientity>8BBD</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 59 30"><unientity>8C15</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 59 31"><unientity>8C24</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 59 32"><unientity>8C26</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 59 33"><unientity>8C1C</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 59 34"><unientity>8BB2</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 59 35"><unientity>8C0E</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 59 36"><unientity>8C23</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 59 37"><unientity>8A8A</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 59 38"><unientity>8C22</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 59 39"><unientity>8C28</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 59 3A"><unientity>8C2C</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 59 3B"><unientity>8C1F</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 59 3C"><unientity>8BC6</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 59 3D"><unientity>8C31</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 59 3E"><unientity>8C32</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 59 3F"><unientity>8BC1</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 59 40"><unientity>8C2D</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 59 42"><unientity>8BA5</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 59 43"><unientity>8BAE</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 59 46"><unientity>8BD1</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 59 47"><unientity>8C34</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 59 48"><unientity>62A4</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 59 49"><unientity>8A89</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 59 4A"><unientity>8BFB</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 59 4B"><unientity>53D8</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 59 4C"><unientity>8BA9</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 59 4D"><unientity>8C36</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 59 4E"><unientity>8C17</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 59 54"><unientity>5C82</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 59 57"><unientity>7AD6</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 59 58"><unientity>4E30</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 59 5E"><unientity>4E88</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 59 66"><unientity>7683</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 59 68"><unientity>8D1D</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 59 69"><unientity>8D1E</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 59 6A"><unientity>8D1F</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 59 6B"><unientity>8D21</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 59 6C"><unientity>8D22</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 59 6D"><unientity>8D23</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 59 6E"><unientity>8D2F</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 59 6F"><unientity>8D27</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 59 70"><unientity>8D2A</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 59 71"><unientity>8D2B</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 59 72"><unientity>8D29</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 59 75"><unientity>8D39</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 59 76"><unientity>8D32</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 59 77"><unientity>8D3A</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 59 78"><unientity>8D35</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 59 79"><unientity>8D34</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 59 7A"><unientity>4E70</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 59 7B"><unientity>8D2C</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 59 7C"><unientity>8D3B</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 59 7D"><unientity>8D37</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 59 7E"><unientity>8D38</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 5A 21"><unientity>8D45</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 5A 22"><unientity>8D44</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 5A 23"><unientity>8D3C</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 5A 24"><unientity>8D3E</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 5A 25"><unientity>8D3F</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 5A 26"><unientity>8D40</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 5A 27"><unientity>8D41</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 5A 28"><unientity>8D42</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 5A 29"><unientity>5BBE</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 5A 2A"><unientity>8D48</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 5A 2B"><unientity>8D4A</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 5A 2C"><unientity>8D54</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 5A 2D"><unientity>8D4B</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 5A 2F"><unientity>5356</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 5A 30"><unientity>8D24</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 5A 31"><unientity>8D31</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 5A 32"><unientity>8D4F</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 5A 33"><unientity>8D50</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 5A 34"><unientity>8D28</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 5A 35"><unientity>8D4C</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 5A 36"><unientity>8D56</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 5A 37"><unientity>8D5B</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 5A 38"><unientity>8D5A</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 5A 39"><unientity>8D58</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 5A 3A"><unientity>8D2D</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 5A 3B"><unientity>8D60</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 5A 3C"><unientity>8D5D</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 5A 3D"><unientity>8D5E</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 5A 3E"><unientity>8D62</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 5A 3F"><unientity>8D61</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 5A 40"><unientity>8D43</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 5A 41"><unientity>8D4E</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 5A 42"><unientity>8D63</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 5A 4F"><unientity>8D75</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 5A 50"><unientity>8D76</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 5A 53"><unientity>8D8B</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 5A 68"><unientity>8DF5</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 5A 71"><unientity>8E0A</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 5A 78"><unientity>8E52</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 5A 7E"><unientity>8DF7</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 5B 26"><unientity>8DB8</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 5B 28"><unientity>8E0C</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 5B 29"><unientity>8DC3</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 5B 2A"><unientity>8E2F</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 5B 2B"><unientity>8E51</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 5B 2C"><unientity>8E8F</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 5B 31"><unientity>8EAF</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 5B 32"><unientity>8F66</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 5B 33"><unientity>8F67</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 5B 34"><unientity>519B</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 5B 35"><unientity>8F68</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 5B 36"><unientity>8F69</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 5B 37"><unientity>8F6B</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 5B 38"><unientity>8F6F</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 5B 39"><unientity>8F6D</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 5B 3A"><unientity>8F72</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 5B 3B"><unientity>8F74</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 5B 3C"><unientity>8F76</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 5B 3D"><unientity>8F83</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 5B 3E"><unientity>8F7C</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 5B 3F"><unientity>8F7D</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 5B 40"><unientity>8F7E</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 5B 41"><unientity>8F85</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 5B 42"><unientity>8F84</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 5B 43"><unientity>8F7B</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 5B 45"><unientity>8F87</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 5B 46"><unientity>8F86</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 5B 47"><unientity>8F8D</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 5B 48"><unientity>8F89</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 5B 49"><unientity>8F88</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 5B 4A"><unientity>8F6E</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 5B 4B"><unientity>8F8E</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 5B 4C"><unientity>8F90</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 5B 4D"><unientity>8F91</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 5B 4E"><unientity>8F93</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 5B 4F"><unientity>8F96</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 5B 50"><unientity>8F97</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 5B 51"><unientity>8F95</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 5B 52"><unientity>6BC2</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 5B 53"><unientity>8206</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 5B 54"><unientity>8F99</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 5B 55"><unientity>8F6C</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 5B 56"><unientity>8F9A</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 5B 57"><unientity>8F7F</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 5B 58"><unientity>8F70</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 5B 59"><unientity>8F94</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 5B 5F"><unientity>529E</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 5B 60"><unientity>8F9E</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 5B 61"><unientity>8FA9</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 5B 64"><unientity>519C</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 5B 6D"><unientity>8FF0</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 5B 7D"><unientity>8FD9</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 5B 7E"><unientity>8FDE</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 5C 33"><unientity>8FDB</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 5C 34"><unientity>8FD0</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 5C 39"><unientity>8FBE</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 5C 3A"><unientity>8FDD</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 5C 3C"><unientity>8FC2</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 5C 3E"><unientity>8FC7</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 5C 44"><unientity>8FDC</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 5C 45"><unientity>900A</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 5C 48"><unientity>9012</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 5C 49"><unientity>9002</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 5C 4F"><unientity>9009</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 5C 50"><unientity>8FDF</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 5C 51"><unientity>8FC1</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 5C 52"><unientity>8FBD</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 5C 53"><unientity>9057</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 5C 56"><unientity>8FC8</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 5C 57"><unientity>8FD8</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 5C 5A"><unientity>E975</unientity><unientityalt>8FE9</unientityalt><desc>Variant of 2D5C5A which maps to 8FE9</desc></character>
-<character hex="27 5C 5B"><unientity>8FB9</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 5C 5C"><unientity>9026</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 5C 5D"><unientity>903B</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 5C 6B"><unientity>5369</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 5C 6D"><unientity>90AE</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 5C 70"><unientity>4E61</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 5C 71"><unientity>90B9</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 5C 73"><unientity>90D1</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 5C 74"><unientity>90BB</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 5C 75"><unientity>9093</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 5D 2A"><unientity>9154</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 5D 2F"><unientity>915D</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 5D 30"><unientity>4E11</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 5D 31"><unientity>533B</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 5D 32"><unientity>9171</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 5D 34"><unientity>917F</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 5D 35"><unientity>8845</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 5D 38"><unientity>91CA</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 5D 3D"><unientity>5398</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 5D 3F"><unientity>9488</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 5D 40"><unientity>9489</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 5D 41"><unientity>948A</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 5D 43"><unientity>9497</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 5D 45"><unientity>9493</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 5D 46"><unientity>948F</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 5D 47"><unientity>9499</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 5D 48"><unientity>949D</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 5D 49"><unientity>94AE</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 5D 4A"><unientity>94A0</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 5D 4B"><unientity>949E</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 5D 4C"><unientity>94A7</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 5D 4D"><unientity>94A4</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 5D 4F"><unientity>94B4</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 5D 50"><unientity>94B9</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 5D 51"><unientity>94B8</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 5D 52"><unientity>94C0</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 5D 53"><unientity>94BE</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 5D 55"><unientity>94C5</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 5D 56"><unientity>94A9</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 5D 57"><unientity>94C2</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 5D 58"><unientity>94C3</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 5D 59"><unientity>94F0</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 5D 5A"><unientity>94F6</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 5D 5B"><unientity>94D0</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 5D 5C"><unientity>94DC</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 5D 5D"><unientity>94ED</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 5D 5E"><unientity>94E2</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 5D 5F"><unientity>94EC</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 5D 60"><unientity>94E8</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 5D 61"><unientity>8854</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 5D 62"><unientity>950C</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 5D 63"><unientity>9511</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 5D 64"><unientity>9510</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 5D 65"><unientity>94FA</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 5D 66"><unientity>9500</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 5D 67"><unientity>94DD</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 5D 68"><unientity>9504</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 5D 69"><unientity>9509</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 5D 6A"><unientity>950B</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 5D 6B"><unientity>952D</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 5D 6D"><unientity>952F</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 5D 6E"><unientity>9530</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 5D 6F"><unientity>9519</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 5D 70"><unientity>94B1</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 5D 71"><unientity>94A2</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 5D 72"><unientity>9521</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 5D 73"><unientity>94EE</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 5D 74"><unientity>5F55</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 5D 75"><unientity>9525</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 5D 76"><unientity>9526</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 5D 77"><unientity>9540</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 5D 78"><unientity>9541</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 5D 79"><unientity>952E</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 5D 7A"><unientity>9532</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 5D 7C"><unientity>9505</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 5D 7D"><unientity>951A</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 5D 7E"><unientity>953E</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 5E 21"><unientity>949F</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 5E 22"><unientity>9524</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 5E 23"><unientity>9539</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 5E 24"><unientity>953B</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 5E 25"><unientity>9551</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 5E 27"><unientity>9547</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 5E 28"><unientity>9501</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 5E 29"><unientity>94A8</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 5E 2A"><unientity>954D</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 5E 2B"><unientity>955C</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 5E 2C"><unientity>955D</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 5E 2E"><unientity>955E</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 5E 2F"><unientity>94F2</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 5E 30"><unientity>94FF</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 5E 31"><unientity>94FE</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 5E 32"><unientity>9556</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 5E 33"><unientity>9557</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 5E 34"><unientity>9542</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 5E 35"><unientity>9558</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 5E 36"><unientity>9559</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 5E 37"><unientity>9535</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 5E 39"><unientity>94D9</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 5E 3A"><unientity>9570</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 5E 3B"><unientity>9508</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 5E 3C"><unientity>956D</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 5E 3D"><unientity>94C1</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 5E 3E"><unientity>94DB</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 5E 3F"><unientity>94CE</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 5E 40"><unientity>956F</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 5E 43"><unientity>94F8</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 5E 44"><unientity>9573</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 5E 45"><unientity>94C4</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 5E 46"><unientity>9576</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 5E 47"><unientity>94A5</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 5E 48"><unientity>92AE</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 5E 49"><unientity>9523</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 5E 4A"><unientity>94BB</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 5E 4B"><unientity>51FF</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 5E 4C"><unientity>957F</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 5E 4D"><unientity>95E8</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 5E 4E"><unientity>95E9</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 5E 4F"><unientity>95EA</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 5E 50"><unientity>95ED</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 5E 51"><unientity>95F5</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 5E 52"><unientity>95F0</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 5E 53"><unientity>5F00</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 5E 54"><unientity>95F2</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 5E 55"><unientity>95F4</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 5E 57"><unientity>95F8</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 5E 58"><unientity>9602</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 5E 59"><unientity>95FA</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 5E 5A"><unientity>95FD</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 5E 5B"><unientity>9601</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 5E 5C"><unientity>9600</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 5E 5D"><unientity>5408</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 5E 5E"><unientity>9605</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 5E 5F"><unientity>95FE</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 5E 60"><unientity>960E</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 5E 61"><unientity>9614</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 5E 62"><unientity>9615</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 5E 63"><unientity>9611</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 5E 64"><unientity>95F1</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 5E 65"><unientity>677F</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 5E 67"><unientity>95EF</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 5E 68"><unientity>9617</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 5E 69"><unientity>5173</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 5E 6A"><unientity>9610</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 5E 6B"><unientity>E914</unientity><desc>Duplicate simplified ideograph</desc></character>
-<character hex="27 5E 7B"><unientity>9635</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 5F 23"><unientity>9648</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 5F 24"><unientity>9646</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 5F 2A"><unientity>9634</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 5F 2B"><unientity>961F</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 5F 2C"><unientity>9636</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 5F 2E"><unientity>9633</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 5F 37"><unientity>9645</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 5F 39"><unientity>968F</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 5F 3A"><unientity>9669</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 5F 3B"><unientity>9690</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 5F 3C"><unientity>9647</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 5F 3D"><unientity>96B6</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 5F 3E"><unientity>E915</unientity><desc>Duplicate simplified ideograph</desc></character>
-<character hex="27 5F 4A"><unientity>867D</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 5F 4B"><unientity>6742</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 5F 4C"><unientity>9E21</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 5F 4D"><unientity>96CF</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 5F 4E"><unientity>53CC</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 5F 4F"><unientity>79BB</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 5F 50"><unientity>96BE</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 5F 54"><unientity>4E91</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 5F 55"><unientity>7535</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 5F 67"><unientity>96FE</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 5F 6B"><unientity>9701</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 5F 6D"><unientity>972D</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 5F 6E"><unientity>96F3</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 5F 6F"><unientity>7075</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 5F 79"><unientity>9765</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 60 23"><unientity>5DE9</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 60 29"><unientity>9791</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 60 2C"><unientity>97E6</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 60 2D"><unientity>97E7</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 60 2E"><unientity>97E9</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 60 2F"><unientity>97EC</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 60 30"><unientity>827D</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 60 36"><unientity>54CD</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 60 37"><unientity>9875</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 60 38"><unientity>9876</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 60 39"><unientity>9877</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 60 3A"><unientity>9879</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 60 3B"><unientity>987A</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 60 3C"><unientity>987B</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 60 3D"><unientity>9884</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 60 3E"><unientity>987C</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 60 3F"><unientity>987D</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 60 40"><unientity>987F</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 60 41"><unientity>9881</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 60 42"><unientity>9882</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 60 43"><unientity>9887</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 60 44"><unientity>9886</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 60 45"><unientity>9889</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 60 46"><unientity>5934</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 60 47"><unientity>988A</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 60 48"><unientity>9888</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 60 49"><unientity>9891</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 60 4A"><unientity>9893</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 60 4B"><unientity>9894</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 60 4C"><unientity>9890</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 60 4D"><unientity>9897</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 60 4E"><unientity>989C</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 60 4F"><unientity>989D</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 60 50"><unientity>9898</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 60 51"><unientity>989A</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 60 52"><unientity>989B</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 60 53"><unientity>7C7B</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 60 54"><unientity>98A0</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 60 55"><unientity>613F</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 60 56"><unientity>987E</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 60 57"><unientity>98A4</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 60 58"><unientity>663E</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 60 59"><unientity>9885</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 60 5A"><unientity>98A6</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 60 5B"><unientity>98CE</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 60 5C"><unientity>98D2</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 60 5D"><unientity>E916</unientity><desc>Duplicate simplified ideograph</desc></character>
-<character hex="27 60 5E"><unientity>522E</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 60 5F"><unientity>98D3</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 60 61"><unientity>98D5</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 60 62"><unientity>98D8</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 60 63"><unientity>98DE</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 60 65"><unientity>9965</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 60 67"><unientity>9968</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 60 68"><unientity>996C</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 60 69"><unientity>996A</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 60 6A"><unientity>996E</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 60 6B"><unientity>996D</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 60 6C"><unientity>9972</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 60 6D"><unientity>9974</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 60 6E"><unientity>9971</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 60 6F"><unientity>9970</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 60 70"><unientity>997A</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 60 71"><unientity>517B</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 60 72"><unientity>9975</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 60 73"><unientity>9977</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 60 75"><unientity>9981</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 60 76"><unientity>4F59</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 60 77"><unientity>997F</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 60 78"><unientity>997C</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 60 79"><unientity>9986</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 60 7A"><unientity>996F</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 60 7B"><unientity>9984</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 60 7C"><unientity>9985</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 60 7E"><unientity>998F</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 61 21"><unientity>998A</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 61 23"><unientity>9992</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 61 24"><unientity>9976</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 61 26"><unientity>990D</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 61 27"><unientity>998B</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 61 2C"><unientity>9A6C</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 61 2D"><unientity>51AF</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 61 2E"><unientity>9A6D</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 61 2F"><unientity>9A70</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 61 30"><unientity>9A6E</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 61 31"><unientity>9A6F</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 61 32"><unientity>9A73</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 61 33"><unientity>9A7B</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 61 34"><unientity>9A7C</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 61 35"><unientity>9A7E</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 61 36"><unientity>9A77</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 61 37"><unientity>9A76</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 61 38"><unientity>9A79</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 61 39"><unientity>9A78</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 61 3A"><unientity>9A7D</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 61 3B"><unientity>9A87</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 61 3C"><unientity>9A86</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 61 3D"><unientity>9A8B</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 61 3E"><unientity>9A8F</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 61 3F"><unientity>9A88</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 61 40"><unientity>9A91</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 61 41"><unientity>9A97</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 61 42"><unientity>9A9B</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 61 43"><unientity>9A9E</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 61 44"><unientity>817E</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 61 45"><unientity>9A9A</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 61 46"><unientity>9AA0</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 61 47"><unientity>9A71</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 61 48"><unientity>84E6</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 61 49"><unientity>9AA1</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 61 4A"><unientity>9A84</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 61 4B"><unientity>60CA</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 61 4C"><unientity>9A7F</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 61 4D"><unientity>9A8C</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 61 4E"><unientity>9AA4</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 61 4F"><unientity>9A74</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 61 50"><unientity>9AA5</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 61 51"><unientity>9A8A</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 61 53"><unientity>80AE</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 61 58"><unientity>9AC5</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 61 5A"><unientity>4F53</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 61 5B"><unientity>810F</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 61 5F"><unientity>E917</unientity><desc>Duplicate simplified ideograph</desc></character>
-<character hex="27 61 63"><unientity>E918</unientity><desc>Duplicate simplified ideograph</desc></character>
-<character hex="27 61 64"><unientity>E919</unientity><desc>Duplicate simplified ideograph</desc></character>
-<character hex="27 61 65"><unientity>E91A</unientity><desc>Duplicate simplified ideograph</desc></character>
-<character hex="27 61 66"><unientity>9B13</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 61 67"><unientity>6597</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 61 68"><unientity>95F9</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 61 6A"><unientity>90C1</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 61 73"><unientity>9B47</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 61 74"><unientity>9C7C</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 61 75"><unientity>9C7F</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 61 76"><unientity>9C81</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 61 77"><unientity>9C8D</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 61 78"><unientity>9C9B</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 61 79"><unientity>9C9C</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 61 7A"><unientity>9C94</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 61 7B"><unientity>9CA8</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 61 7C"><unientity>9CA4</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 61 7D"><unientity>9CB8</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 61 7E"><unientity>9CB3</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 62 21"><unientity>9CC3</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 62 22"><unientity>9CC5</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 62 23"><unientity>9CAB</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 62 24"><unientity>9CCD</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 62 25"><unientity>9CCF</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 62 26"><unientity>9CA2</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 62 27"><unientity>9CD4</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 62 28"><unientity>9CD7</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 62 29"><unientity>9CDD</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 62 2A"><unientity>9CDE</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 62 2B"><unientity>9CDC</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 62 2C"><unientity>9CD6</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 62 2E"><unientity>9C88</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 62 2F"><unientity>9E1F</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 62 30"><unientity>9E20</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 62 31"><unientity>9E22</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 62 32"><unientity>9E23</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 62 33"><unientity>51E4</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 62 34"><unientity>9E29</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 62 35"><unientity>9E26</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 62 36"><unientity>9E35</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 62 37"><unientity>9E2A</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 62 38"><unientity>9E2D</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 62 39"><unientity>9E2F</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 62 3A"><unientity>9E33</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 62 3C"><unientity>9E3F</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 62 3D"><unientity>9E3D</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 62 3E"><unientity>9E49</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 62 3F"><unientity>9E43</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 62 40"><unientity>9E44</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 62 41"><unientity>9E45</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 62 42"><unientity>9E51</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 62 43"><unientity>9E4A</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 62 44"><unientity>9E4C</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 62 45"><unientity>9E4F</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 62 46"><unientity>9E64</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 62 47"><unientity>83BA</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 62 48"><unientity>9E5E</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 62 49"><unientity>9E67</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 62 4A"><unientity>9E25</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 62 4B"><unientity>9E36</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 62 4C"><unientity>9E70</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 62 4D"><unientity>9E6D</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 62 4E"><unientity>9E66</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 62 4F"><unientity>9E3E</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 62 50"><unientity>54B8</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 62 51"><unientity>76D0</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 62 52"><unientity>7877</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 62 56"><unientity>4E3D</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 62 5B"><unientity>9EA6</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 62 5C"><unientity>9EB8</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 62 5E"><unientity>9762</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 62 60"><unientity>4E48</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 62 6A"><unientity>70B9</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 62 6F"><unientity>515A</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 62 72"><unientity>9EE9</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 62 76"><unientity>51AC</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 62 7D"><unientity>9F50</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 62 7E"><unientity>658E</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 63 21"><unientity>9F7F</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 63 22"><unientity>9F83</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 63 24"><unientity>9F84</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 63 25"><unientity>9F88</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 63 26"><unientity>9F87</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 63 27"><unientity>9F89</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 63 28"><unientity>9F8A</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 63 29"><unientity>9F8C</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 63 2A"><unientity>9F8B</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 63 2B"><unientity>9F99</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 63 2C"><unientity>9F9A</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 63 2D"><unientity>9F9F</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 66 49"><unientity>4F1C</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 67 75"><unientity>4F65</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 67 7C"><unientity>4F1B</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 68 22"><unientity>507B</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 68 42"><unientity>507E</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 68 71"><unientity>4FAA</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 69 44"><unientity>50A9</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 69 48"><unientity>50A5</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 6B 3E"><unientity>522D</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 6B 5B"><unientity>5250</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 6B 5F"><unientity>672D</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 6B 79"><unientity>523F</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 6B 7A"><unientity>523D</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 6D 2E"><unientity>5326</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 6D 6D"><unientity>538D</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 6E 2A"><unientity>53A3</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 6F 69"><unientity>5459</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 70 30"><unientity>5457</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 71 69"><unientity>5522</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 72 34"><unientity>551B</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 72 39"><unientity>54D4</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 72 55"><unientity>54D3</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 72 58"><unientity>E91B</unientity><desc>Duplicate simplified ideograph</desc></character>
-<character hex="27 72 67"><unientity>5452</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 72 72"><unientity>54D2</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 72 7A"><unientity>54D5</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 72 7E"><unientity>54D9</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 73 28"><unientity>54DC</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 73 45"><unientity>556E</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 73 4C"><unientity>5456</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 73 5A"><unientity>55BE</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 73 60"><unientity>5181</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 74 2E"><unientity>56F5</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 76 38"><unientity>57AD</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 76 7A"><unientity>57DA</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 77 42"><unientity>57D8</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 77 45"><unientity>57D9</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 77 48"><unientity>57B2</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 78 5A"><unientity>5785</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 78 5E"><unientity>5786</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 79 54"><unientity>5956</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 7B 3C"><unientity>5A05</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 7C 24"><unientity>5A32</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 7C 36"><unientity>59AB</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 7D 2B"><unientity>5A06</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 7D 40"><unientity>5AF1</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 7D 48"><unientity>5AD2</unientity><desc>East Asian ideograph</desc></character>
-<character hex="27 7D 74"><unientity>5A08</unientity><desc>East Asian ideograph</desc></character>
-<character hex="28 23 2B"><unientity>5C66</unientity><desc>East Asian ideograph</desc></character>
-<character hex="28 24 41"><unientity>5C98</unientity><desc>East Asian ideograph</desc></character>
-<character hex="28 24 58"><unientity>5D03</unientity><desc>East Asian ideograph</desc></character>
-<character hex="28 25 5A"><unientity>5D5D</unientity><desc>East Asian ideograph</desc></character>
-<character hex="28 25 69"><unientity>5D02</unientity><desc>East Asian ideograph</desc></character>
-<character hex="28 25 77"><unientity>5CE4</unientity><desc>East Asian ideograph</desc></character>
-<character hex="28 26 26"><unientity>5CC4</unientity><desc>East Asian ideograph</desc></character>
-<character hex="28 26 32"><unientity>5D58</unientity><desc>East Asian ideograph</desc></character>
-<character hex="28 26 47"><unientity>5CBF</unientity><desc>East Asian ideograph</desc></character>
-<character hex="28 26 59"><unientity>5DEF</unientity><desc>East Asian ideograph</desc></character>
-<character hex="28 27 36"><unientity>5E0F</unientity><desc>East Asian ideograph</desc></character>
-<character hex="28 27 47"><unientity>5E3B</unientity><desc>East Asian ideograph</desc></character>
-<character hex="28 27 5F"><unientity>5E31</unientity><desc>East Asian ideograph</desc></character>
-<character hex="28 28 68"><unientity>5E91</unientity><desc>East Asian ideograph</desc></character>
-<character hex="28 29 51"><unientity>5F2A</unientity><desc>East Asian ideograph</desc></character>
-<character hex="28 2D 34"><unientity>607D</unientity><desc>East Asian ideograph</desc></character>
-<character hex="28 2D 5E"><unientity>607A</unientity><desc>East Asian ideograph</desc></character>
-<character hex="28 2D 74"><unientity>6004</unientity><desc>East Asian ideograph</desc></character>
-<character hex="28 2D 77"><unientity>60AD</unientity><desc>East Asian ideograph</desc></character>
-<character hex="28 2D 79"><unientity>60AB</unientity><desc>East Asian ideograph</desc></character>
-<character hex="28 2E 4C"><unientity>6126</unientity><desc>East Asian ideograph</desc></character>
-<character hex="28 2E 52"><unientity>6003</unientity><desc>East Asian ideograph</desc></character>
-<character hex="28 2E 5C"><unientity>603F</unientity><desc>East Asian ideograph</desc></character>
-<character hex="28 2E 79"><unientity>6079</unientity><desc>East Asian ideograph</desc></character>
-<character hex="28 2E 7E"><unientity>603C</unientity><desc>East Asian ideograph</desc></character>
-<character hex="28 2F 43"><unientity>6206</unientity><desc>East Asian ideograph</desc></character>
-<character hex="28 2F 47"><unientity>620B</unientity><desc>East Asian ideograph</desc></character>
-<character hex="28 2F 66"><unientity>6217</unientity><desc>East Asian ideograph</desc></character>
-<character hex="28 33 6F"><unientity>629F</unientity><desc>East Asian ideograph</desc></character>
-<character hex="28 33 7B"><unientity>62A0</unientity><desc>East Asian ideograph</desc></character>
-<character hex="28 34 2C"><unientity>63BA</unientity><desc>East Asian ideograph</desc></character>
-<character hex="28 34 2E"><unientity>63BC</unientity><desc>East Asian ideograph</desc></character>
-<character hex="28 34 57"><unientity>63B8</unientity><desc>East Asian ideograph</desc></character>
-<character hex="28 34 62"><unientity>6322</unientity><desc>East Asian ideograph</desc></character>
-<character hex="28 34 66"><unientity>63FF</unientity><desc>East Asian ideograph</desc></character>
-<character hex="28 35 2A"><unientity>6448</unientity><desc>East Asian ideograph</desc></character>
-<character hex="28 35 42"><unientity>64B7</unientity><desc>East Asian ideograph</desc></character>
-<character hex="28 35 46"><unientity>6445</unientity><desc>East Asian ideograph</desc></character>
-<character hex="28 35 5B"><unientity>6484</unientity><desc>East Asian ideograph</desc></character>
-<character hex="28 35 61"><unientity>64BA</unientity><desc>East Asian ideograph</desc></character>
-<character hex="28 35 6D"><unientity>6512</unientity><desc>East Asian ideograph</desc></character>
-<character hex="28 36 71"><unientity>6593</unientity><desc>East Asian ideograph</desc></character>
-<character hex="28 39 55"><unientity>6619</unientity><desc>East Asian ideograph</desc></character>
-<character hex="28 39 5C"><unientity>6654</unientity><desc>East Asian ideograph</desc></character>
-<character hex="28 3B 22"><unientity>4E2B</unientity><desc>East Asian ideograph</desc></character>
-<character hex="28 3B 7D"><unientity>E91C</unientity><desc>Duplicate simplified ideograph</desc></character>
-<character hex="28 3D 30"><unientity>67A7</unientity><desc>East Asian ideograph</desc></character>
-<character hex="28 3D 6E"><unientity>67A8</unientity><desc>East Asian ideograph</desc></character>
-<character hex="28 3F 30"><unientity>6966</unientity><desc>East Asian ideograph</desc></character>
-<character hex="28 3F 5C"><unientity>6769</unientity><desc>East Asian ideograph</desc></character>
-<character hex="28 40 27"><unientity>6864</unientity><desc>East Asian ideograph</desc></character>
-<character hex="28 40 56"><unientity>6920</unientity><desc>East Asian ideograph</desc></character>
-<character hex="28 40 5E"><unientity>67FD</unientity><desc>East Asian ideograph</desc></character>
-<character hex="28 41 40"><unientity>6861</unientity><desc>East Asian ideograph</desc></character>
-<character hex="28 42 2B"><unientity>6A2F</unientity><desc>East Asian ideograph</desc></character>
-<character hex="28 42 57"><unientity>68BC</unientity><desc>East Asian ideograph</desc></character>
-<character hex="28 43 33"><unientity>680E</unientity><desc>East Asian ideograph</desc></character>
-<character hex="28 43 35"><unientity>6A7C</unientity><desc>East Asian ideograph</desc></character>
-<character hex="28 43 37"><unientity>6987</unientity><desc>East Asian ideograph</desc></character>
-<character hex="28 43 39"><unientity>680A</unientity><desc>East Asian ideograph</desc></character>
-<character hex="28 43 3A"><unientity>69E0</unientity><desc>East Asian ideograph</desc></character>
-<character hex="28 43 40"><unientity>67A5</unientity><desc>East Asian ideograph</desc></character>
-<character hex="28 43 45"><unientity>680C</unientity><desc>East Asian ideograph</desc></character>
-<character hex="28 43 50"><unientity>68C2</unientity><desc>East Asian ideograph</desc></character>
-<character hex="28 43 59"><unientity>6989</unientity><desc>East Asian ideograph</desc></character>
-<character hex="28 43 66"><unientity>6924</unientity><desc>East Asian ideograph</desc></character>
-<character hex="28 45 39"><unientity>6B9A</unientity><desc>East Asian ideograph</desc></character>
-<character hex="28 46 42"><unientity>6BF5</unientity><desc>East Asian ideograph</desc></character>
-<character hex="28 46 4C"><unientity>6BE1</unientity><desc>East Asian ideograph</desc></character>
-<character hex="28 46 51"><unientity>6C07</unientity><desc>East Asian ideograph</desc></character>
-<character hex="28 46 68"><unientity>6C29</unientity><desc>East Asian ideograph</desc></character>
-<character hex="28 49 34"><unientity>6D43</unientity><desc>East Asian ideograph</desc></character>
-<character hex="28 49 71"><unientity>6D9E</unientity><desc>East Asian ideograph</desc></character>
-<character hex="28 4B 28"><unientity>6D48</unientity><desc>East Asian ideograph</desc></character>
-<character hex="28 4B 43"><unientity>8365</unientity><desc>East Asian ideograph</desc></character>
-<character hex="28 4C 2E"><unientity>6D52</unientity><desc>East Asian ideograph</desc></character>
-<character hex="28 4C 41"><unientity>6CA4</unientity><desc>East Asian ideograph</desc></character>
-<character hex="28 4C 62"><unientity>988D</unientity><desc>East Asian ideograph</desc></character>
-<character hex="28 4D 27"><unientity>6D9D</unientity><desc>East Asian ideograph</desc></character>
-<character hex="28 4D 2B"><unientity>6D54</unientity><desc>East Asian ideograph</desc></character>
-<character hex="28 4D 49"><unientity>6DA0</unientity><desc>East Asian ideograph</desc></character>
-<character hex="28 4D 58"><unientity>6CA9</unientity><desc>East Asian ideograph</desc></character>
-<character hex="28 4D 59"><unientity>6ED7</unientity><desc>East Asian ideograph</desc></character>
-<character hex="28 4E 30"><unientity>6E11</unientity><desc>East Asian ideograph</desc></character>
-<character hex="28 4E 3E"><unientity>6CF6</unientity><desc>East Asian ideograph</desc></character>
-<character hex="28 4E 41"><unientity>6F4B</unientity><desc>East Asian ideograph</desc></character>
-<character hex="28 4E 42"><unientity>6D4D</unientity><desc>East Asian ideograph</desc></character>
-<character hex="28 4E 62"><unientity>6F4D</unientity><desc>East Asian ideograph</desc></character>
-<character hex="28 4E 66"><unientity>6EE2</unientity><desc>East Asian ideograph</desc></character>
-<character hex="28 4F 26"><unientity>6CF7</unientity><desc>East Asian ideograph</desc></character>
-<character hex="28 4F 39"><unientity>6CF8</unientity><desc>East Asian ideograph</desc></character>
-<character hex="28 4F 5D"><unientity>6CA3</unientity><desc>East Asian ideograph</desc></character>
-<character hex="28 4F 61"><unientity>6EE0</unientity><desc>East Asian ideograph</desc></character>
-<character hex="28 4F 6B"><unientity>6F13</unientity><desc>East Asian ideograph</desc></character>
-<character hex="28 4F 7D"><unientity>704F</unientity><desc>East Asian ideograph</desc></character>
-<character hex="28 50 29"><unientity>6EDF</unientity><desc>East Asian ideograph</desc></character>
-<character hex="28 51 50"><unientity>70C3</unientity><desc>East Asian ideograph</desc></character>
-<character hex="28 52 52"><unientity>709C</unientity><desc>East Asian ideograph</desc></character>
-<character hex="28 53 23"><unientity>8367</unientity><desc>East Asian ideograph</desc></character>
-<character hex="28 53 3C"><unientity>709D</unientity><desc>East Asian ideograph</desc></character>
-<character hex="28 54 24"><unientity>70E8</unientity><desc>East Asian ideograph</desc></character>
-<character hex="28 54 4F"><unientity>70EC</unientity><desc>East Asian ideograph</desc></character>
-<character hex="28 57 5E"><unientity>72B8</unientity><desc>East Asian ideograph</desc></character>
-<character hex="28 57 5F"><unientity>72F2</unientity><desc>East Asian ideograph</desc></character>
-<character hex="28 58 2B"><unientity>7303</unientity><desc>East Asian ideograph</desc></character>
-<character hex="28 58 36"><unientity>7315</unientity><desc>East Asian ideograph</desc></character>
-<character hex="28 5A 47"><unientity>73AE</unientity><desc>East Asian ideograph</desc></character>
-<character hex="28 5B 21"><unientity>740F</unientity><desc>East Asian ideograph</desc></character>
-<character hex="28 5C 3A"><unientity>748E</unientity><desc>East Asian ideograph</desc></character>
-<character hex="28 5C 40"><unientity>74D2</unientity><desc>East Asian ideograph</desc></character>
-<character hex="28 5D 6B"><unientity>7572</unientity><desc>East Asian ideograph</desc></character>
-<character hex="28 5E 7A"><unientity>75D6</unientity><desc>East Asian ideograph</desc></character>
-<character hex="28 5F 48"><unientity>7617</unientity><desc>East Asian ideograph</desc></character>
-<character hex="28 5F 5E"><unientity>7618</unientity><desc>East Asian ideograph</desc></character>
-<character hex="28 5F 6F"><unientity>7605</unientity><desc>East Asian ideograph</desc></character>
-<character hex="28 60 2B"><unientity>762A</unientity><desc>East Asian ideograph</desc></character>
-<character hex="28 60 32"><unientity>75AC</unientity><desc>East Asian ideograph</desc></character>
-<character hex="28 60 37"><unientity>763F</unientity><desc>East Asian ideograph</desc></character>
-<character hex="28 60 3A"><unientity>75C8</unientity><desc>East Asian ideograph</desc></character>
-<character hex="28 62 22"><unientity>7726</unientity><desc>East Asian ideograph</desc></character>
-<character hex="28 62 72"><unientity>770D</unientity><desc>East Asian ideograph</desc></character>
-<character hex="28 63 2C"><unientity>7751</unientity><desc>East Asian ideograph</desc></character>
-<character hex="28 64 5A"><unientity>7817</unientity><desc>East Asian ideograph</desc></character>
-<character hex="28 64 60"><unientity>7856</unientity><desc>East Asian ideograph</desc></character>
-<character hex="28 65 40"><unientity>7800</unientity><desc>East Asian ideograph</desc></character>
-<character hex="28 65 6A"><unientity>789B</unientity><desc>East Asian ideograph</desc></character>
-<character hex="28 65 77"><unientity>789C</unientity><desc>East Asian ideograph</desc></character>
-<character hex="28 66 22"><unientity>7857</unientity><desc>East Asian ideograph</desc></character>
-<character hex="28 66 55"><unientity>783B</unientity><desc>East Asian ideograph</desc></character>
-<character hex="28 6A 3C"><unientity>7AAD</unientity><desc>East Asian ideograph</desc></character>
-<character hex="28 6B 7C"><unientity>7B15</unientity><desc>East Asian ideograph</desc></character>
-<character hex="28 6C 58"><unientity>7BA7</unientity><desc>East Asian ideograph</desc></character>
-<character hex="28 6D 47"><unientity>7BA6</unientity><desc>East Asian ideograph</desc></character>
-<character hex="28 6D 54"><unientity>7B5A</unientity><desc>East Asian ideograph</desc></character>
-<character hex="28 6E 56"><unientity>7BA8</unientity><desc>East Asian ideograph</desc></character>
-<character hex="28 6E 68"><unientity>7B3E</unientity><desc>East Asian ideograph</desc></character>
-<character hex="28 6E 69"><unientity>7C16</unientity><desc>East Asian ideograph</desc></character>
-<character hex="28 70 22"><unientity>7CC1</unientity><desc>East Asian ideograph</desc></character>
-<character hex="28 70 2E"><unientity>E91D</unientity><desc>Duplicate simplified ideograph</desc></character>
-<character hex="28 70 30"><unientity>7C9D</unientity><desc>East Asian ideograph</desc></character>
-<character hex="28 70 35"><unientity>7C74</unientity><desc>East Asian ideograph</desc></character>
-<character hex="28 70 42"><unientity>7EA1</unientity><desc>East Asian ideograph</desc></character>
-<character hex="28 70 45"><unientity>7EA8</unientity><desc>East Asian ideograph</desc></character>
-<character hex="28 70 4A"><unientity>7EBE</unientity><desc>East Asian ideograph</desc></character>
-<character hex="28 70 61"><unientity>7EC0</unientity><desc>East Asian ideograph</desc></character>
-<character hex="28 70 62"><unientity>7EC1</unientity><desc>East Asian ideograph</desc></character>
-<character hex="28 70 65"><unientity>7EC2</unientity><desc>East Asian ideograph</desc></character>
-<character hex="28 70 6A"><unientity>7ED0</unientity><desc>East Asian ideograph</desc></character>
-<character hex="28 71 30"><unientity>7EDB</unientity><desc>East Asian ideograph</desc></character>
-<character hex="28 71 34"><unientity>7ED7</unientity><desc>East Asian ideograph</desc></character>
-<character hex="28 71 39"><unientity>7EE8</unientity><desc>East Asian ideograph</desc></character>
-<character hex="28 71 44"><unientity>7EE0</unientity><desc>East Asian ideograph</desc></character>
-<character hex="28 71 4D"><unientity>7EE1</unientity><desc>East Asian ideograph</desc></character>
-<character hex="28 71 61"><unientity>7EFB</unientity><desc>East Asian ideograph</desc></character>
-<character hex="28 71 67"><unientity>7EEF</unientity><desc>East Asian ideograph</desc></character>
-<character hex="28 71 74"><unientity>7EF2</unientity><desc>East Asian ideograph</desc></character>
-<character hex="28 71 78"><unientity>7EF6</unientity><desc>East Asian ideograph</desc></character>
-<character hex="28 71 7D"><unientity>7EFA</unientity><desc>East Asian ideograph</desc></character>
-<character hex="28 72 29"><unientity>7F17</unientity><desc>East Asian ideograph</desc></character>
-<character hex="28 72 2A"><unientity>7F02</unientity><desc>East Asian ideograph</desc></character>
-<character hex="28 72 31"><unientity>7F03</unientity><desc>East Asian ideograph</desc></character>
-<character hex="28 72 36"><unientity>7F07</unientity><desc>East Asian ideograph</desc></character>
-<character hex="28 72 3C"><unientity>7F08</unientity><desc>East Asian ideograph</desc></character>
-<character hex="28 72 3E"><unientity>7F0C</unientity><desc>East Asian ideograph</desc></character>
-<character hex="28 72 47"><unientity>7F11</unientity><desc>East Asian ideograph</desc></character>
-<character hex="28 72 48"><unientity>7F0F</unientity><desc>East Asian ideograph</desc></character>
-<character hex="28 72 51"><unientity>7F1F</unientity><desc>East Asian ideograph</desc></character>
-<character hex="28 72 53"><unientity>7F12</unientity><desc>East Asian ideograph</desc></character>
-<character hex="28 72 5D"><unientity>7F1C</unientity><desc>East Asian ideograph</desc></character>
-<character hex="28 72 5E"><unientity>7F19</unientity><desc>East Asian ideograph</desc></character>
-<character hex="28 72 5F"><unientity>7F1B</unientity><desc>East Asian ideograph</desc></character>
-<character hex="28 72 69"><unientity>7EC9</unientity><desc>East Asian ideograph</desc></character>
-<character hex="28 72 71"><unientity>E91E</unientity><desc>Duplicate simplified ideograph</desc></character>
-<character hex="28 72 72"><unientity>7F21</unientity><desc>East Asian ideograph</desc></character>
-<character hex="28 72 75"><unientity>7D77</unientity><desc>East Asian ideograph</desc></character>
-<character hex="28 72 79"><unientity>7F25</unientity><desc>East Asian ideograph</desc></character>
-<character hex="28 73 21"><unientity>7F26</unientity><desc>East Asian ideograph</desc></character>
-<character hex="28 73 2D"><unientity>7F2F</unientity><desc>East Asian ideograph</desc></character>
-<character hex="28 73 49"><unientity>7F30</unientity><desc>East Asian ideograph</desc></character>
-<character hex="28 73 4E"><unientity>7F32</unientity><desc>East Asian ideograph</desc></character>
-<character hex="28 73 51"><unientity>7F33</unientity><desc>East Asian ideograph</desc></character>
-<character hex="28 73 52"><unientity>7F34</unientity><desc>East Asian ideograph</desc></character>
-<character hex="28 73 59"><unientity>7F31</unientity><desc>East Asian ideograph</desc></character>
-<character hex="28 73 5D"><unientity>7EA9</unientity><desc>East Asian ideograph</desc></character>
-<character hex="28 73 60"><unientity>7F2C</unientity><desc>East Asian ideograph</desc></character>
-<character hex="28 73 6D"><unientity>624D</unientity><desc>East Asian ideograph</desc></character>
-<character hex="28 73 74"><unientity>7F35</unientity><desc>East Asian ideograph</desc></character>
-<character hex="28 74 2E"><unientity>7F42</unientity><desc>East Asian ideograph</desc></character>
-<character hex="28 74 31"><unientity>E91F</unientity><desc>Duplicate simplified ideograph</desc></character>
-<character hex="28 74 72"><unientity>7F74</unientity><desc>East Asian ideograph</desc></character>
-<character hex="28 75 31"><unientity>7F9F</unientity><desc>East Asian ideograph</desc></character>
-<character hex="28 76 55"><unientity>8027</unientity><desc>East Asian ideograph</desc></character>
-<character hex="28 77 39"><unientity>8069</unientity><desc>East Asian ideograph</desc></character>
-<character hex="28 77 3F"><unientity>804D</unientity><desc>East Asian ideograph</desc></character>
-<character hex="28 78 55"><unientity>80EB</unientity><desc>East Asian ideograph</desc></character>
-<character hex="28 78 6E"><unientity>80E8</unientity><desc>East Asian ideograph</desc></character>
-<character hex="28 79 41"><unientity>8136</unientity><desc>East Asian ideograph</desc></character>
-<character hex="28 7A 56"><unientity>8114</unientity><desc>East Asian ideograph</desc></character>
-<character hex="28 7E 61"><unientity>82CC</unientity><desc>East Asian ideograph</desc></character>
-<character hex="29 23 3C"><unientity>836D</unientity><desc>East Asian ideograph</desc></character>
-<character hex="29 23 3D"><unientity>836E</unientity><desc>East Asian ideograph</desc></character>
-<character hex="29 23 75"><unientity>83B3</unientity><desc>East Asian ideograph</desc></character>
-<character hex="29 24 33"><unientity>E920</unientity><desc>Duplicate simplified ideograph</desc></character>
-<character hex="29 24 3A"><unientity>83BC</unientity><desc>East Asian ideograph</desc></character>
-<character hex="29 24 7D"><unientity>835C</unientity><desc>East Asian ideograph</desc></character>
-<character hex="29 25 24"><unientity>848C</unientity><desc>East Asian ideograph</desc></character>
-<character hex="29 25 2D"><unientity>8311</unientity><desc>East Asian ideograph</desc></character>
-<character hex="29 25 35"><unientity>82C1</unientity><desc>East Asian ideograph</desc></character>
-<character hex="29 25 46"><unientity>8368</unientity><desc>East Asian ideograph</desc></character>
-<character hex="29 25 4B"><unientity>835B</unientity><desc>East Asian ideograph</desc></character>
-<character hex="29 25 5A"><unientity>8487</unientity><desc>East Asian ideograph</desc></character>
-<character hex="29 25 64"><unientity>8489</unientity><desc>East Asian ideograph</desc></character>
-<character hex="29 25 67"><unientity>836C</unientity><desc>East Asian ideograph</desc></character>
-<character hex="29 25 71"><unientity>835E</unientity><desc>East Asian ideograph</desc></character>
-<character hex="29 25 74"><unientity>83B8</unientity><desc>East Asian ideograph</desc></character>
-<character hex="29 25 77"><unientity>8297</unientity><desc>East Asian ideograph</desc></character>
-<character hex="29 26 33"><unientity>84E3</unientity><desc>East Asian ideograph</desc></character>
-<character hex="29 26 51"><unientity>84DF</unientity><desc>East Asian ideograph</desc></character>
-<character hex="29 26 57"><unientity>835F</unientity><desc>East Asian ideograph</desc></character>
-<character hex="29 26 58"><unientity>83B6</unientity><desc>East Asian ideograph</desc></character>
-<character hex="29 26 61"><unientity>8360</unientity><desc>East Asian ideograph</desc></character>
-<character hex="29 26 68"><unientity>8369</unientity><desc>East Asian ideograph</desc></character>
-<character hex="29 27 52"><unientity>830F</unientity><desc>East Asian ideograph</desc></character>
-<character hex="29 27 65"><unientity>82C8</unientity><desc>East Asian ideograph</desc></character>
-<character hex="29 27 68"><unientity>8572</unientity><desc>East Asian ideograph</desc></character>
-<character hex="29 28 2A"><unientity>8539</unientity><desc>East Asian ideograph</desc></character>
-<character hex="29 28 40"><unientity>84E0</unientity><desc>East Asian ideograph</desc></character>
-<character hex="29 2A 2F"><unientity>86F1</unientity><desc>East Asian ideograph</desc></character>
-<character hex="29 2A 34"><unientity>86AC</unientity><desc>East Asian ideograph</desc></character>
-<character hex="29 2B 55"><unientity>86F3</unientity><desc>East Asian ideograph</desc></character>
-<character hex="29 2B 6E"><unientity>86F0</unientity><desc>East Asian ideograph</desc></character>
-<character hex="29 2C 4C"><unientity>866E</unientity><desc>East Asian ideograph</desc></character>
-<character hex="29 2C 55"><unientity>86CF</unientity><desc>East Asian ideograph</desc></character>
-<character hex="29 2C 5D"><unientity>867F</unientity><desc>East Asian ideograph</desc></character>
-<character hex="29 2C 61"><unientity>86F4</unientity><desc>East Asian ideograph</desc></character>
-<character hex="29 2C 64"><unientity>877E</unientity><desc>East Asian ideograph</desc></character>
-<character hex="29 2D 51"><unientity>8511</unientity><desc>East Asian ideograph</desc></character>
-<character hex="29 2F 60"><unientity>88E2</unientity><desc>East Asian ideograph</desc></character>
-<character hex="29 2F 72"><unientity>88E5</unientity><desc>East Asian ideograph</desc></character>
-<character hex="29 30 2D"><unientity>88E3</unientity><desc>East Asian ideograph</desc></character>
-<character hex="29 30 32"><unientity>7962</unientity><desc>East Asian ideograph</desc></character>
-<character hex="29 30 66"><unientity>89C7</unientity><desc>East Asian ideograph</desc></character>
-<character hex="29 30 6F"><unientity>89CB</unientity><desc>East Asian ideograph</desc></character>
-<character hex="29 30 7D"><unientity>89CF</unientity><desc>East Asian ideograph</desc></character>
-<character hex="29 31 2B"><unientity>89D1</unientity><desc>East Asian ideograph</desc></character>
-<character hex="29 31 32"><unientity>89CC</unientity><desc>East Asian ideograph</desc></character>
-<character hex="29 31 60"><unientity>89EF</unientity><desc>East Asian ideograph</desc></character>
-<character hex="29 32 2A"><unientity>8BB5</unientity><desc>East Asian ideograph</desc></character>
-<character hex="29 32 3B"><unientity>8BCE</unientity><desc>East Asian ideograph</desc></character>
-<character hex="29 32 3C"><unientity>8BD2</unientity><desc>East Asian ideograph</desc></character>
-<character hex="29 32 4F"><unientity>8BD6</unientity><desc>East Asian ideograph</desc></character>
-<character hex="29 32 50"><unientity>8BD3</unientity><desc>East Asian ideograph</desc></character>
-<character hex="29 32 56"><unientity>8BE9</unientity><desc>East Asian ideograph</desc></character>
-<character hex="29 32 5D"><unientity>8BD4</unientity><desc>East Asian ideograph</desc></character>
-<character hex="29 32 5E"><unientity>8BDC</unientity><desc>East Asian ideograph</desc></character>
-<character hex="29 32 71"><unientity>8BEE</unientity><desc>East Asian ideograph</desc></character>
-<character hex="29 32 7E"><unientity>8C07</unientity><desc>East Asian ideograph</desc></character>
-<character hex="29 33 25"><unientity>8BF9</unientity><desc>East Asian ideograph</desc></character>
-<character hex="29 33 2C"><unientity>8BFC</unientity><desc>East Asian ideograph</desc></character>
-<character hex="29 33 36"><unientity>8BE4</unientity><desc>East Asian ideograph</desc></character>
-<character hex="29 33 38"><unientity>8BFD</unientity><desc>East Asian ideograph</desc></character>
-<character hex="29 33 3B"><unientity>8C00</unientity><desc>East Asian ideograph</desc></character>
-<character hex="29 33 40"><unientity>8C02</unientity><desc>East Asian ideograph</desc></character>
-<character hex="29 33 44"><unientity>8C19</unientity><desc>East Asian ideograph</desc></character>
-<character hex="29 33 45"><unientity>8BE8</unientity><desc>East Asian ideograph</desc></character>
-<character hex="29 33 4E"><unientity>8C0C</unientity><desc>East Asian ideograph</desc></character>
-<character hex="29 33 57"><unientity>8C14</unientity><desc>East Asian ideograph</desc></character>
-<character hex="29 33 59"><unientity>8C11</unientity><desc>East Asian ideograph</desc></character>
-<character hex="29 33 5D"><unientity>8C16</unientity><desc>East Asian ideograph</desc></character>
-<character hex="29 33 62"><unientity>8C1D</unientity><desc>East Asian ideograph</desc></character>
-<character hex="29 33 73"><unientity>8C21</unientity><desc>East Asian ideograph</desc></character>
-<character hex="29 33 7A"><unientity>8BCC</unientity><desc>East Asian ideograph</desc></character>
-<character hex="29 33 7D"><unientity>8C27</unientity><desc>East Asian ideograph</desc></character>
-<character hex="29 34 30"><unientity>8BB4</unientity><desc>East Asian ideograph</desc></character>
-<character hex="29 34 38"><unientity>8C29</unientity><desc>East Asian ideograph</desc></character>
-<character hex="29 34 4D"><unientity>8C2E</unientity><desc>East Asian ideograph</desc></character>
-<character hex="29 34 59"><unientity>8C2F</unientity><desc>East Asian ideograph</desc></character>
-<character hex="29 34 68"><unientity>8C35</unientity><desc>East Asian ideograph</desc></character>
-<character hex="29 35 2D"><unientity>8C30</unientity><desc>East Asian ideograph</desc></character>
-<character hex="29 35 37"><unientity>8C20</unientity><desc>East Asian ideograph</desc></character>
-<character hex="29 35 39"><unientity>8C33</unientity><desc>East Asian ideograph</desc></character>
-<character hex="29 36 4E"><unientity>8D33</unientity><desc>East Asian ideograph</desc></character>
-<character hex="29 36 51"><unientity>8D36</unientity><desc>East Asian ideograph</desc></character>
-<character hex="29 36 5F"><unientity>8D47</unientity><desc>East Asian ideograph</desc></character>
-<character hex="29 36 6A"><unientity>8D53</unientity><desc>East Asian ideograph</desc></character>
-<character hex="29 36 6B"><unientity>8D55</unientity><desc>East Asian ideograph</desc></character>
-<character hex="29 36 70"><unientity>8D49</unientity><desc>East Asian ideograph</desc></character>
-<character hex="29 36 7E"><unientity>8D59</unientity><desc>East Asian ideograph</desc></character>
-<character hex="29 37 25"><unientity>8D3D</unientity><desc>East Asian ideograph</desc></character>
-<character hex="29 37 26"><unientity>8D5C</unientity><desc>East Asian ideograph</desc></character>
-<character hex="29 37 3A"><unientity>8D46</unientity><desc>East Asian ideograph</desc></character>
-<character hex="29 38 66"><unientity>8DB1</unientity><desc>East Asian ideograph</desc></character>
-<character hex="29 3A 2E"><unientity>8DC4</unientity><desc>East Asian ideograph</desc></character>
-<character hex="29 3A 40"><unientity>8DF8</unientity><desc>East Asian ideograph</desc></character>
-<character hex="29 3A 46"><unientity>8E70</unientity><desc>East Asian ideograph</desc></character>
-<character hex="29 3A 57"><unientity>8DFB</unientity><desc>East Asian ideograph</desc></character>
-<character hex="29 3A 5E"><unientity>8DF9</unientity><desc>East Asian ideograph</desc></character>
-<character hex="29 3A 5F"><unientity>8DDE</unientity><desc>East Asian ideograph</desc></character>
-<character hex="29 3A 60"><unientity>8E2C</unientity><desc>East Asian ideograph</desc></character>
-<character hex="29 3A 6B"><unientity>8E7F</unientity><desc>East Asian ideograph</desc></character>
-<character hex="29 3A 70"><unientity>8E9C</unientity><desc>East Asian ideograph</desc></character>
-<character hex="29 3B 3E"><unientity>8F71</unientity><desc>East Asian ideograph</desc></character>
-<character hex="29 3B 3F"><unientity>8F7A</unientity><desc>East Asian ideograph</desc></character>
-<character hex="29 3B 42"><unientity>8F75</unientity><desc>East Asian ideograph</desc></character>
-<character hex="29 3B 47"><unientity>8F77</unientity><desc>East Asian ideograph</desc></character>
-<character hex="29 3B 4F"><unientity>8F78</unientity><desc>East Asian ideograph</desc></character>
-<character hex="29 3B 59"><unientity>8F82</unientity><desc>East Asian ideograph</desc></character>
-<character hex="29 3B 5B"><unientity>8F81</unientity><desc>East Asian ideograph</desc></character>
-<character hex="29 3B 6B"><unientity>8F8B</unientity><desc>East Asian ideograph</desc></character>
-<character hex="29 3B 6D"><unientity>8F8A</unientity><desc>East Asian ideograph</desc></character>
-<character hex="29 3B 7A"><unientity>8F8F</unientity><desc>East Asian ideograph</desc></character>
-<character hex="29 3C 30"><unientity>8F98</unientity><desc>East Asian ideograph</desc></character>
-<character hex="29 3C 57"><unientity>8F79</unientity><desc>East Asian ideograph</desc></character>
-<character hex="29 3C 5A"><unientity>8F73</unientity><desc>East Asian ideograph</desc></character>
-<character hex="29 3D 4E"><unientity>8FF8</unientity><desc>East Asian ideograph</desc></character>
-<character hex="29 3F 23"><unientity>90CF</unientity><desc>East Asian ideograph</desc></character>
-<character hex="29 3F 4C"><unientity>90D3</unientity><desc>East Asian ideograph</desc></character>
-<character hex="29 3F 5A"><unientity>90E7</unientity><desc>East Asian ideograph</desc></character>
-<character hex="29 3F 5C"><unientity>90AC</unientity><desc>East Asian ideograph</desc></character>
-<character hex="29 40 21"><unientity>90F8</unientity><desc>East Asian ideograph</desc></character>
-<character hex="29 40 2B"><unientity>90BA</unientity><desc>East Asian ideograph</desc></character>
-<character hex="29 40 2C"><unientity>90D0</unientity><desc>East Asian ideograph</desc></character>
-<character hex="29 40 31"><unientity>909D</unientity><desc>East Asian ideograph</desc></character>
-<character hex="29 40 40"><unientity>90E6</unientity><desc>East Asian ideograph</desc></character>
-<character hex="29 41 5C"><unientity>917E</unientity><desc>East Asian ideograph</desc></character>
-<character hex="29 41 5D"><unientity>917D</unientity><desc>East Asian ideograph</desc></character>
-<character hex="29 41 61"><unientity>9487</unientity><desc>East Asian ideograph</desc></character>
-<character hex="29 41 62"><unientity>9486</unientity><desc>East Asian ideograph</desc></character>
-<character hex="29 41 63"><unientity>948C</unientity><desc>East Asian ideograph</desc></character>
-<character hex="29 41 64"><unientity>948B</unientity><desc>East Asian ideograph</desc></character>
-<character hex="29 41 6A"><unientity>948D</unientity><desc>East Asian ideograph</desc></character>
-<character hex="29 41 6B"><unientity>948E</unientity><desc>East Asian ideograph</desc></character>
-<character hex="29 41 79"><unientity>9492</unientity><desc>East Asian ideograph</desc></character>
-<character hex="29 42 21"><unientity>9495</unientity><desc>East Asian ideograph</desc></character>
-<character hex="29 42 22"><unientity>9490</unientity><desc>East Asian ideograph</desc></character>
-<character hex="29 42 23"><unientity>94AD</unientity><desc>East Asian ideograph</desc></character>
-<character hex="29 42 24"><unientity>94AA</unientity><desc>East Asian ideograph</desc></character>
-<character hex="29 42 25"><unientity>94AB</unientity><desc>East Asian ideograph</desc></character>
-<character hex="29 42 28"><unientity>94AC</unientity><desc>East Asian ideograph</desc></character>
-<character hex="29 42 31"><unientity>94AF</unientity><desc>East Asian ideograph</desc></character>
-<character hex="29 42 37"><unientity>949B</unientity><desc>East Asian ideograph</desc></character>
-<character hex="29 42 4B"><unientity>94A3</unientity><desc>East Asian ideograph</desc></character>
-<character hex="29 42 51"><unientity>94C8</unientity><desc>East Asian ideograph</desc></character>
-<character hex="29 42 52"><unientity>94C9</unientity><desc>East Asian ideograph</desc></character>
-<character hex="29 42 54"><unientity>94CB</unientity><desc>East Asian ideograph</desc></character>
-<character hex="29 42 55"><unientity>94CA</unientity><desc>East Asian ideograph</desc></character>
-<character hex="29 42 58"><unientity>94B0</unientity><desc>East Asian ideograph</desc></character>
-<character hex="29 42 5C"><unientity>94CC</unientity><desc>East Asian ideograph</desc></character>
-<character hex="29 42 5F"><unientity>94B6</unientity><desc>East Asian ideograph</desc></character>
-<character hex="29 42 60"><unientity>94B7</unientity><desc>East Asian ideograph</desc></character>
-<character hex="29 42 61"><unientity>94B2</unientity><desc>East Asian ideograph</desc></character>
-<character hex="29 42 64"><unientity>94BA</unientity><desc>East Asian ideograph</desc></character>
-<character hex="29 42 6D"><unientity>94CD</unientity><desc>East Asian ideograph</desc></character>
-<character hex="29 42 6F"><unientity>94BD</unientity><desc>East Asian ideograph</desc></character>
-<character hex="29 42 74"><unientity>94BF</unientity><desc>East Asian ideograph</desc></character>
-<character hex="29 43 2B"><unientity>94C6</unientity><desc>East Asian ideograph</desc></character>
-<character hex="29 43 2F"><unientity>94F3</unientity><desc>East Asian ideograph</desc></character>
-<character hex="29 43 31"><unientity>94F1</unientity><desc>East Asian ideograph</desc></character>
-<character hex="29 43 35"><unientity>94F5</unientity><desc>East Asian ideograph</desc></character>
-<character hex="29 43 40"><unientity>94D6</unientity><desc>East Asian ideograph</desc></character>
-<character hex="29 43 43"><unientity>94D2</unientity><desc>East Asian ideograph</desc></character>
-<character hex="29 43 46"><unientity>94D1</unientity><desc>East Asian ideograph</desc></character>
-<character hex="29 43 49"><unientity>94D5</unientity><desc>East Asian ideograph</desc></character>
-<character hex="29 43 4F"><unientity>94DE</unientity><desc>East Asian ideograph</desc></character>
-<character hex="29 43 50"><unientity>94DF</unientity><desc>East Asian ideograph</desc></character>
-<character hex="29 43 55"><unientity>94EB</unientity><desc>East Asian ideograph</desc></character>
-<character hex="29 43 58"><unientity>94EF</unientity><desc>East Asian ideograph</desc></character>
-<character hex="29 43 59"><unientity>94E5</unientity><desc>East Asian ideograph</desc></character>
-<character hex="29 43 5B"><unientity>94E3</unientity><desc>East Asian ideograph</desc></character>
-<character hex="29 43 62"><unientity>94EA</unientity><desc>East Asian ideograph</desc></character>
-<character hex="29 43 64"><unientity>94F7</unientity><desc>East Asian ideograph</desc></character>
-<character hex="29 43 6A"><unientity>9512</unientity><desc>East Asian ideograph</desc></character>
-<character hex="29 43 6C"><unientity>950D</unientity><desc>East Asian ideograph</desc></character>
-<character hex="29 43 71"><unientity>94FD</unientity><desc>East Asian ideograph</desc></character>
-<character hex="29 43 72"><unientity>9513</unientity><desc>East Asian ideograph</desc></character>
-<character hex="29 43 75"><unientity>9514</unientity><desc>East Asian ideograph</desc></character>
-<character hex="29 43 7D"><unientity>94D8</unientity><desc>East Asian ideograph</desc></character>
-<character hex="29 44 27"><unientity>94D7</unientity><desc>East Asian ideograph</desc></character>
-<character hex="29 44 2B"><unientity>9503</unientity><desc>East Asian ideograph</desc></character>
-<character hex="29 44 2D"><unientity>94A1</unientity><desc>East Asian ideograph</desc></character>
-<character hex="29 44 2E"><unientity>9502</unientity><desc>East Asian ideograph</desc></character>
-<character hex="29 44 35"><unientity>950A</unientity><desc>East Asian ideograph</desc></character>
-<character hex="29 44 3E"><unientity>94E4</unientity><desc>East Asian ideograph</desc></character>
-<character hex="29 44 40"><unientity>9506</unientity><desc>East Asian ideograph</desc></character>
-<character hex="29 44 41"><unientity>9507</unientity><desc>East Asian ideograph</desc></character>
-<character hex="29 44 4D"><unientity>952B</unientity><desc>East Asian ideograph</desc></character>
-<character hex="29 44 57"><unientity>9529</unientity><desc>East Asian ideograph</desc></character>
-<character hex="29 44 58"><unientity>952C</unientity><desc>East Asian ideograph</desc></character>
-<character hex="29 44 5B"><unientity>9516</unientity><desc>East Asian ideograph</desc></character>
-<character hex="29 44 66"><unientity>9515</unientity><desc>East Asian ideograph</desc></character>
-<character hex="29 44 69"><unientity>94FC</unientity><desc>East Asian ideograph</desc></character>
-<character hex="29 44 6D"><unientity>951B</unientity><desc>East Asian ideograph</desc></character>
-<character hex="29 44 71"><unientity>951D</unientity><desc>East Asian ideograph</desc></character>
-<character hex="29 44 72"><unientity>951E</unientity><desc>East Asian ideograph</desc></character>
-<character hex="29 44 74"><unientity>951F</unientity><desc>East Asian ideograph</desc></character>
-<character hex="29 44 75"><unientity>9494</unientity><desc>East Asian ideograph</desc></character>
-<character hex="29 44 78"><unientity>9522</unientity><desc>East Asian ideograph</desc></character>
-<character hex="29 45 31"><unientity>9528</unientity><desc>East Asian ideograph</desc></character>
-<character hex="29 45 32"><unientity>9531</unientity><desc>East Asian ideograph</desc></character>
-<character hex="29 45 4D"><unientity>9534</unientity><desc>East Asian ideograph</desc></character>
-<character hex="29 45 4E"><unientity>9545</unientity><desc>East Asian ideograph</desc></character>
-<character hex="29 45 51"><unientity>9517</unientity><desc>East Asian ideograph</desc></character>
-<character hex="29 45 5E"><unientity>94E1</unientity><desc>East Asian ideograph</desc></character>
-<character hex="29 45 64"><unientity>9536</unientity><desc>East Asian ideograph</desc></character>
-<character hex="29 45 67"><unientity>9537</unientity><desc>East Asian ideograph</desc></character>
-<character hex="29 45 68"><unientity>9518</unientity><desc>East Asian ideograph</desc></character>
-<character hex="29 45 6F"><unientity>9538</unientity><desc>East Asian ideograph</desc></character>
-<character hex="29 45 7A"><unientity>9550</unientity><desc>East Asian ideograph</desc></character>
-<character hex="29 46 21"><unientity>9553</unientity><desc>East Asian ideograph</desc></character>
-<character hex="29 46 28"><unientity>9552</unientity><desc>East Asian ideograph</desc></character>
-<character hex="29 46 29"><unientity>84E5</unientity><desc>East Asian ideograph</desc></character>
-<character hex="29 46 2D"><unientity>9549</unientity><desc>East Asian ideograph</desc></character>
-<character hex="29 46 42"><unientity>94E0</unientity><desc>East Asian ideograph</desc></character>
-<character hex="29 46 47"><unientity>954F</unientity><desc>East Asian ideograph</desc></character>
-<character hex="29 46 4A"><unientity>953C</unientity><desc>East Asian ideograph</desc></character>
-<character hex="29 46 56"><unientity>955B</unientity><desc>East Asian ideograph</desc></character>
-<character hex="29 46 5A"><unientity>955F</unientity><desc>East Asian ideograph</desc></character>
-<character hex="29 46 62"><unientity>956A</unientity><desc>East Asian ideograph</desc></character>
-<character hex="29 46 66"><unientity>933E</unientity><desc>East Asian ideograph</desc></character>
-<character hex="29 46 7C"><unientity>9546</unientity><desc>East Asian ideograph</desc></character>
-<character hex="29 47 2F"><unientity>94E9</unientity><desc>East Asian ideograph</desc></character>
-<character hex="29 47 32"><unientity>94F4</unientity><desc>East Asian ideograph</desc></character>
-<character hex="29 47 34"><unientity>9566</unientity><desc>East Asian ideograph</desc></character>
-<character hex="29 47 3C"><unientity>9568</unientity><desc>East Asian ideograph</desc></character>
-<character hex="29 47 3E"><unientity>94F9</unientity><desc>East Asian ideograph</desc></character>
-<character hex="29 47 4D"><unientity>956B</unientity><desc>East Asian ideograph</desc></character>
-<character hex="29 47 50"><unientity>950E</unientity><desc>East Asian ideograph</desc></character>
-<character hex="29 47 51"><unientity>950F</unientity><desc>East Asian ideograph</desc></character>
-<character hex="29 47 58"><unientity>9561</unientity><desc>East Asian ideograph</desc></character>
-<character hex="29 47 5E"><unientity>9562</unientity><desc>East Asian ideograph</desc></character>
-<character hex="29 47 60"><unientity>9563</unientity><desc>East Asian ideograph</desc></character>
-<character hex="29 47 67"><unientity>94E7</unientity><desc>East Asian ideograph</desc></character>
-<character hex="29 47 69"><unientity>9564</unientity><desc>East Asian ideograph</desc></character>
-<character hex="29 47 74"><unientity>9571</unientity><desc>East Asian ideograph</desc></character>
-<character hex="29 48 3E"><unientity>9554</unientity><desc>East Asian ideograph</desc></character>
-<character hex="29 48 3F"><unientity>9572</unientity><desc>East Asian ideograph</desc></character>
-<character hex="29 48 4A"><unientity>956C</unientity><desc>East Asian ideograph</desc></character>
-<character hex="29 48 5C"><unientity>9565</unientity><desc>East Asian ideograph</desc></character>
-<character hex="29 48 69"><unientity>9567</unientity><desc>East Asian ideograph</desc></character>
-<character hex="29 48 6F"><unientity>9569</unientity><desc>East Asian ideograph</desc></character>
-<character hex="29 48 71"><unientity>954A</unientity><desc>East Asian ideograph</desc></character>
-<character hex="29 49 36"><unientity>95F3</unientity><desc>East Asian ideograph</desc></character>
-<character hex="29 49 42"><unientity>9606</unientity><desc>East Asian ideograph</desc></character>
-<character hex="29 49 44"><unientity>9603</unientity><desc>East Asian ideograph</desc></character>
-<character hex="29 49 48"><unientity>960F</unientity><desc>East Asian ideograph</desc></character>
-<character hex="29 49 49"><unientity>9608</unientity><desc>East Asian ideograph</desc></character>
-<character hex="29 49 4D"><unientity>9609</unientity><desc>East Asian ideograph</desc></character>
-<character hex="29 49 4F"><unientity>960A</unientity><desc>East Asian ideograph</desc></character>
-<character hex="29 49 50"><unientity>960C</unientity><desc>East Asian ideograph</desc></character>
-<character hex="29 49 52"><unientity>960D</unientity><desc>East Asian ideograph</desc></character>
-<character hex="29 49 5A"><unientity>9612</unientity><desc>East Asian ideograph</desc></character>
-<character hex="29 49 60"><unientity>9619</unientity><desc>East Asian ideograph</desc></character>
-<character hex="29 49 69"><unientity>961A</unientity><desc>East Asian ideograph</desc></character>
-<character hex="29 49 6F"><unientity>95FC</unientity><desc>East Asian ideograph</desc></character>
-<character hex="29 4A 44"><unientity>9655</unientity><desc>East Asian ideograph</desc></character>
-<character hex="29 4A 46"><unientity>9649</unientity><desc>East Asian ideograph</desc></character>
-<character hex="29 4C 76"><unientity>9753</unientity><desc>East Asian ideograph</desc></character>
-<character hex="29 4E 43"><unientity>97AF</unientity><desc>East Asian ideograph</desc></character>
-<character hex="29 4E 54"><unientity>97EA</unientity><desc>East Asian ideograph</desc></character>
-<character hex="29 4E 5C"><unientity>97EB</unientity><desc>East Asian ideograph</desc></character>
-<character hex="29 4E 79"><unientity>9878</unientity><desc>East Asian ideograph</desc></character>
-<character hex="29 4E 7B"><unientity>9883</unientity><desc>East Asian ideograph</desc></character>
-<character hex="29 4F 23"><unientity>9880</unientity><desc>East Asian ideograph</desc></character>
-<character hex="29 4F 2C"><unientity>988F</unientity><desc>East Asian ideograph</desc></character>
-<character hex="29 4F 6B"><unientity>98A1</unientity><desc>East Asian ideograph</desc></character>
-<character hex="29 4F 77"><unientity>989F</unientity><desc>East Asian ideograph</desc></character>
-<character hex="29 50 21"><unientity>98A2</unientity><desc>East Asian ideograph</desc></character>
-<character hex="29 50 29"><unientity>98A5</unientity><desc>East Asian ideograph</desc></character>
-<character hex="29 50 30"><unientity>989E</unientity><desc>East Asian ideograph</desc></character>
-<character hex="29 50 31"><unientity>98A7</unientity><desc>East Asian ideograph</desc></character>
-<character hex="29 50 53"><unientity>98D9</unientity><desc>East Asian ideograph</desc></character>
-<character hex="29 50 6C"><unientity>996B</unientity><desc>East Asian ideograph</desc></character>
-<character hex="29 51 32"><unientity>997D</unientity><desc>East Asian ideograph</desc></character>
-<character hex="29 51 53"><unientity>9967</unientity><desc>East Asian ideograph</desc></character>
-<character hex="29 51 66"><unientity>9969</unientity><desc>East Asian ideograph</desc></character>
-<character hex="29 51 6A"><unientity>9990</unientity><desc>East Asian ideograph</desc></character>
-<character hex="29 51 6D"><unientity>9991</unientity><desc>East Asian ideograph</desc></character>
-<character hex="29 51 70"><unientity>998D</unientity><desc>East Asian ideograph</desc></character>
-<character hex="29 51 72"><unientity>9994</unientity><desc>East Asian ideograph</desc></character>
-<character hex="29 51 75"><unientity>9993</unientity><desc>East Asian ideograph</desc></character>
-<character hex="29 52 22"><unientity>98E8</unientity><desc>East Asian ideograph</desc></character>
-<character hex="29 52 63"><unientity>9A75</unientity><desc>East Asian ideograph</desc></character>
-<character hex="29 52 69"><unientity>9A80</unientity><desc>East Asian ideograph</desc></character>
-<character hex="29 53 3D"><unientity>9A90</unientity><desc>East Asian ideograph</desc></character>
-<character hex="29 53 40"><unientity>9A92</unientity><desc>East Asian ideograph</desc></character>
-<character hex="29 53 47"><unientity>9A93</unientity><desc>East Asian ideograph</desc></character>
-<character hex="29 53 5A"><unientity>9A9F</unientity><desc>East Asian ideograph</desc></character>
-<character hex="29 53 60"><unientity>9A98</unientity><desc>East Asian ideograph</desc></character>
-<character hex="29 53 69"><unientity>9A7A</unientity><desc>East Asian ideograph</desc></character>
-<character hex="29 53 6A"><unientity>9A9D</unientity><desc>East Asian ideograph</desc></character>
-<character hex="29 53 70"><unientity>9A9C</unientity><desc>East Asian ideograph</desc></character>
-<character hex="29 53 79"><unientity>9A96</unientity><desc>East Asian ideograph</desc></character>
-<character hex="29 53 7A"><unientity>9AA2</unientity><desc>East Asian ideograph</desc></character>
-<character hex="29 54 21"><unientity>9AA3</unientity><desc>East Asian ideograph</desc></character>
-<character hex="29 54 22"><unientity>9A81</unientity><desc>East Asian ideograph</desc></character>
-<character hex="29 54 27"><unientity>9A85</unientity><desc>East Asian ideograph</desc></character>
-<character hex="29 54 33"><unientity>9AA7</unientity><desc>East Asian ideograph</desc></character>
-<character hex="29 54 6D"><unientity>9ACB</unientity><desc>East Asian ideograph</desc></character>
-<character hex="29 55 6C"><unientity>960B</unientity><desc>East Asian ideograph</desc></character>
-<character hex="29 55 74"><unientity>9604</unientity><desc>East Asian ideograph</desc></character>
-<character hex="29 56 3C"><unientity>9B49</unientity><desc>East Asian ideograph</desc></character>
-<character hex="29 56 5D"><unientity>9C82</unientity><desc>East Asian ideograph</desc></character>
-<character hex="29 57 21"><unientity>9C86</unientity><desc>East Asian ideograph</desc></character>
-<character hex="29 57 29"><unientity>9C87</unientity><desc>East Asian ideograph</desc></character>
-<character hex="29 57 2B"><unientity>9C90</unientity><desc>East Asian ideograph</desc></character>
-<character hex="29 57 31"><unientity>9C8B</unientity><desc>East Asian ideograph</desc></character>
-<character hex="29 57 39"><unientity>9C9E</unientity><desc>East Asian ideograph</desc></character>
-<character hex="29 57 3C"><unientity>9C91</unientity><desc>East Asian ideograph</desc></character>
-<character hex="29 57 3D"><unientity>9C92</unientity><desc>East Asian ideograph</desc></character>
-<character hex="29 57 42"><unientity>9C95</unientity><desc>East Asian ideograph</desc></character>
-<character hex="29 57 56"><unientity>9CA9</unientity><desc>East Asian ideograph</desc></character>
-<character hex="29 57 5F"><unientity>9CA0</unientity><desc>East Asian ideograph</desc></character>
-<character hex="29 57 6E"><unientity>9CA7</unientity><desc>East Asian ideograph</desc></character>
-<character hex="29 57 7A"><unientity>9CAD</unientity><desc>East Asian ideograph</desc></character>
-<character hex="29 57 7C"><unientity>9CB0</unientity><desc>East Asian ideograph</desc></character>
-<character hex="29 58 22"><unientity>9CAE</unientity><desc>East Asian ideograph</desc></character>
-<character hex="29 58 25"><unientity>9CBA</unientity><desc>East Asian ideograph</desc></character>
-<character hex="29 58 27"><unientity>9CB2</unientity><desc>East Asian ideograph</desc></character>
-<character hex="29 58 28"><unientity>9CB4</unientity><desc>East Asian ideograph</desc></character>
-<character hex="29 58 2C"><unientity>9CB1</unientity><desc>East Asian ideograph</desc></character>
-<character hex="29 58 2D"><unientity>9CB7</unientity><desc>East Asian ideograph</desc></character>
-<character hex="29 58 2F"><unientity>9CB5</unientity><desc>East Asian ideograph</desc></character>
-<character hex="29 58 31"><unientity>9CB6</unientity><desc>East Asian ideograph</desc></character>
-<character hex="29 58 34"><unientity>9CBB</unientity><desc>East Asian ideograph</desc></character>
-<character hex="29 58 3E"><unientity>9CCA</unientity><desc>East Asian ideograph</desc></character>
-<character hex="29 58 4B"><unientity>9CBD</unientity><desc>East Asian ideograph</desc></character>
-<character hex="29 58 54"><unientity>9CC4</unientity><desc>East Asian ideograph</desc></character>
-<character hex="29 58 59"><unientity>9CC6</unientity><desc>East Asian ideograph</desc></character>
-<character hex="29 58 5C"><unientity>9CC7</unientity><desc>East Asian ideograph</desc></character>
-<character hex="29 58 6A"><unientity>9CCB</unientity><desc>East Asian ideograph</desc></character>
-<character hex="29 58 6E"><unientity>9CA5</unientity><desc>East Asian ideograph</desc></character>
-<character hex="29 58 71"><unientity>9CCE</unientity><desc>East Asian ideograph</desc></character>
-<character hex="29 59 21"><unientity>9CD9</unientity><desc>East Asian ideograph</desc></character>
-<character hex="29 59 25"><unientity>9CCC</unientity><desc>East Asian ideograph</desc></character>
-<character hex="29 59 28"><unientity>9CD5</unientity><desc>East Asian ideograph</desc></character>
-<character hex="29 59 29"><unientity>9CA3</unientity><desc>East Asian ideograph</desc></character>
-<character hex="29 59 2A"><unientity>9CD3</unientity><desc>East Asian ideograph</desc></character>
-<character hex="29 59 32"><unientity>9CD8</unientity><desc>East Asian ideograph</desc></character>
-<character hex="29 59 38"><unientity>9CDF</unientity><desc>East Asian ideograph</desc></character>
-<character hex="29 59 3A"><unientity>9C85</unientity><desc>East Asian ideograph</desc></character>
-<character hex="29 59 3B"><unientity>9C9F</unientity><desc>East Asian ideograph</desc></character>
-<character hex="29 59 40"><unientity>9CBC</unientity><desc>East Asian ideograph</desc></character>
-<character hex="29 59 4F"><unientity>9CE2</unientity><desc>East Asian ideograph</desc></character>
-<character hex="29 59 55"><unientity>9C8E</unientity><desc>East Asian ideograph</desc></character>
-<character hex="29 59 58"><unientity>9C9A</unientity><desc>East Asian ideograph</desc></character>
-<character hex="29 59 6B"><unientity>9CA1</unientity><desc>East Asian ideograph</desc></character>
-<character hex="29 5A 28"><unientity>9E28</unientity><desc>East Asian ideograph</desc></character>
-<character hex="29 5A 44"><unientity>9E32</unientity><desc>East Asian ideograph</desc></character>
-<character hex="29 5A 48"><unientity>9E31</unientity><desc>East Asian ideograph</desc></character>
-<character hex="29 5A 59"><unientity>9E38</unientity><desc>East Asian ideograph</desc></character>
-<character hex="29 5A 65"><unientity>9E39</unientity><desc>East Asian ideograph</desc></character>
-<character hex="29 5A 68"><unientity>9E3A</unientity><desc>East Asian ideograph</desc></character>
-<character hex="29 5A 70"><unientity>9E48</unientity><desc>East Asian ideograph</desc></character>
-<character hex="29 5A 75"><unientity>9E41</unientity><desc>East Asian ideograph</desc></character>
-<character hex="29 5B 2A"><unientity>9E46</unientity><desc>East Asian ideograph</desc></character>
-<character hex="29 5B 35"><unientity>9E2B</unientity><desc>East Asian ideograph</desc></character>
-<character hex="29 5B 52"><unientity>9E4E</unientity><desc>East Asian ideograph</desc></character>
-<character hex="29 5B 59"><unientity>9E5C</unientity><desc>East Asian ideograph</desc></character>
-<character hex="29 5B 5C"><unientity>9E5B</unientity><desc>East Asian ideograph</desc></character>
-<character hex="29 5B 60"><unientity>9E55</unientity><desc>East Asian ideograph</desc></character>
-<character hex="29 5B 6B"><unientity>9E57</unientity><desc>East Asian ideograph</desc></character>
-<character hex="29 5B 6C"><unientity>9E4B</unientity><desc>East Asian ideograph</desc></character>
-<character hex="29 5B 77"><unientity>9E63</unientity><desc>East Asian ideograph</desc></character>
-<character hex="29 5B 79"><unientity>9E5A</unientity><desc>East Asian ideograph</desc></character>
-<character hex="29 5C 28"><unientity>9E58</unientity><desc>East Asian ideograph</desc></character>
-<character hex="29 5C 3E"><unientity>9E37</unientity><desc>East Asian ideograph</desc></character>
-<character hex="29 5C 47"><unientity>9E68</unientity><desc>East Asian ideograph</desc></character>
-<character hex="29 5C 49"><unientity>9E47</unientity><desc>East Asian ideograph</desc></character>
-<character hex="29 5C 57"><unientity>9E6B</unientity><desc>East Asian ideograph</desc></character>
-<character hex="29 5C 5B"><unientity>9E6C</unientity><desc>East Asian ideograph</desc></character>
-<character hex="29 5C 65"><unientity>9E69</unientity><desc>East Asian ideograph</desc></character>
-<character hex="29 5C 6C"><unientity>9E6A</unientity><desc>East Asian ideograph</desc></character>
-<character hex="29 5D 29"><unientity>9E71</unientity><desc>East Asian ideograph</desc></character>
-<character hex="29 5D 36"><unientity>9E2C</unientity><desc>East Asian ideograph</desc></character>
-<character hex="29 5D 3A"><unientity>9E73</unientity><desc>East Asian ideograph</desc></character>
-<character hex="29 5D 3B"><unientity>9E42</unientity><desc>East Asian ideograph</desc></character>
-<character hex="29 5D 3C"><unientity>5364</unientity><desc>East Asian ideograph</desc></character>
-<character hex="29 5D 42"><unientity>9E7E</unientity><desc>East Asian ideograph</desc></character>
-<character hex="29 5E 6A"><unientity>9EEA</unientity><desc>East Asian ideograph</desc></character>
-<character hex="29 5E 7A"><unientity>9EFE</unientity><desc>East Asian ideograph</desc></character>
-<character hex="29 5E 7C"><unientity>9F0B</unientity><desc>East Asian ideograph</desc></character>
-<character hex="29 5F 2B"><unientity>9F0D</unientity><desc>East Asian ideograph</desc></character>
-<character hex="29 5F 7B"><unientity>9F51</unientity><desc>East Asian ideograph</desc></character>
-<character hex="29 5F 7C"><unientity>9F80</unientity><desc>East Asian ideograph</desc></character>
-<character hex="29 60 28"><unientity>9F86</unientity><desc>East Asian ideograph</desc></character>
-<character hex="29 60 2B"><unientity>9F85</unientity><desc>East Asian ideograph</desc></character>
-<character hex="29 60 62"><unientity>9F9B</unientity><desc>East Asian ideograph</desc></character>
-<character hex="2D 30 21"><unientity>5F0C</unientity><desc>East Asian ideograph</desc></character>
-<character hex="2D 30 2D"><unientity>4E17</unientity><desc>East Asian ideograph</desc></character>
-<character hex="2D 30 32"><unientity>7ADD</unientity><desc>East Asian ideograph</desc></character>
-<character hex="2D 30 45"><unientity>4E57</unientity><desc>East Asian ideograph</desc></character>
-<character hex="2D 30 51"><unientity>5F0D</unientity><desc>East Asian ideograph</desc></character>
-<character hex="2D 30 53"><unientity>4E3C</unientity><desc>East Asian ideograph</desc></character>
-<character hex="2D 30 58"><unientity>4E9C</unientity><desc>East Asian ideograph</desc></character>
-<character hex="2D 30 5B"><unientity>4EBE</unientity><desc>East Asian ideograph</desc></character>
-<character hex="2D 30 61"><unientity>4EB0</unientity><desc>East Asian ideograph</desc></character>
-<character hex="2D 30 6C"><unientity>8B8E</unientity><desc>East Asian ideograph</desc></character>
-<character hex="2D 31 32"><unientity>4ECF</unientity><desc>East Asian ideograph</desc></character>
-<character hex="2D 31 3A"><unientity>62BB</unientity><desc>East Asian ideograph</desc></character>
-<character hex="2D 31 40"><unientity>4F32</unientity><desc>East Asian ideograph</desc></character>
-<character hex="2D 31 47"><unientity>5002</unientity><desc>East Asian ideograph</desc></character>
-<character hex="2D 31 4C"><unientity>5008</unientity><desc>East Asian ideograph</desc></character>
-<character hex="2D 31 5F"><unientity>4FA3</unientity><desc>East Asian ideograph</desc></character>
-<character hex="2D 31 64"><unientity>7AE2</unientity><desc>East Asian ideograph</desc></character>
-<character hex="2D 31 65"><unientity>EA04</unientity><desc>East Asian ideography not found in unified han</desc></character>
-<character hex="2D 31 77"><unientity>5E78</unientity><desc>East Asian ideograph</desc></character>
-<character hex="2D 32 24"><unientity>7B87</unientity><desc>East Asian ideograph</desc></character>
-<character hex="2D 32 51"><unientity>510C</unientity><desc>East Asian ideograph</desc></character>
-<character hex="2D 32 53"><unientity>50E3</unientity><desc>East Asian ideograph</desc></character>
-<character hex="2D 32 5F"><unientity>E976</unientity><unientityalt>50BB</unientityalt><desc>Variant of 4B325F which maps to 50BB</desc></character>
-<character hex="2D 32 61"><unientity>5039</unientity><desc>East Asian ideograph</desc></character>
-<character hex="2D 32 63"><unientity>4FAD</unientity><desc>East Asian ideograph</desc></character>
-<character hex="2D 32 72"><unientity>706E</unientity><desc>East Asian ideograph</desc></character>
-<character hex="2D 32 79"><unientity>514E</unientity><desc>East Asian ideograph</desc></character>
-<character hex="2D 33 24"><unientity>634C</unientity><desc>East Asian ideograph</desc></character>
-<character hex="2D 33 2A"><unientity>4E0C</unientity><desc>East Asian ideograph</desc></character>
-<character hex="2D 33 32"><unientity>5190</unientity><desc>East Asian ideograph</desc></character>
-<character hex="2D 33 4F"><unientity>5202</unientity><desc>East Asian ideograph</desc></character>
-<character hex="2D 33 56"><unientity>E9F4</unientity><desc>East Asian ideograph not in Unicode</desc></character>
-<character hex="2D 33 5F"><unientity>52B5</unientity><desc>East Asian ideograph</desc></character>
-<character hex="2D 33 66"><unientity>5234</unientity><desc>East Asian ideograph</desc></character>
-<character hex="2D 33 6B"><unientity>5C05</unientity><desc>East Asian ideograph</desc></character>
-<character hex="2D 33 72"><unientity>5265</unientity><desc>East Asian ideograph</desc></character>
-<character hex="2D 33 77"><unientity>8CF8</unientity><desc>East Asian ideograph</desc></character>
-<character hex="2D 34 21"><unientity>5294</unientity><desc>East Asian ideograph</desc></character>
-<character hex="2D 34 28"><unientity>5226</unientity><desc>East Asian ideograph</desc></character>
-<character hex="2D 34 2E"><unientity>8274</unientity><desc>East Asian ideograph</desc></character>
-<character hex="2D 34 36"><unientity>52F3</unientity><desc>East Asian ideograph</desc></character>
-<character hex="2D 34 3C"><unientity>52A2</unientity><desc>East Asian ideograph</desc></character>
-<character hex="2D 34 3D"><unientity>52E7</unientity><desc>East Asian ideograph</desc></character>
-<character hex="2D 34 53"><unientity>758B</unientity><desc>East Asian ideograph</desc></character>
-<character hex="2D 34 57"><unientity>62FE</unientity><desc>East Asian ideograph</desc></character>
-<character hex="2D 34 58"><unientity>4EDF</unientity><desc>East Asian ideograph</desc></character>
-<character hex="2D 34 5B"><unientity>6607</unientity><desc>East Asian ideograph</desc></character>
-<character hex="2D 34 5D"><unientity>5349</unientity><desc>East Asian ideograph</desc></character>
-<character hex="2D 34 64"><unientity>613D</unientity><desc>East Asian ideograph</desc></character>
-<character hex="2D 34 6A"><unientity>5918</unientity><desc>East Asian ideograph</desc></character>
-<character hex="2D 34 6E"><unientity>5373</unientity><desc>East Asian ideograph</desc></character>
-<character hex="2D 34 73"><unientity>5374</unientity><desc>East Asian ideograph</desc></character>
-<character hex="2D 35 39"><unientity>52FE</unientity><desc>East Asian ideograph</desc></character>
-<character hex="2D 35 3C"><unientity>6B62</unientity><desc>East Asian ideograph</desc></character>
-<character hex="2D 35 43"><unientity>4EDD</unientity><desc>East Asian ideograph</desc></character>
-<character hex="2D 35 47"><unientity>55AB</unientity><desc>East Asian ideograph</desc></character>
-<character hex="2D 35 56"><unientity>7343</unientity><desc>East Asian ideograph</desc></character>
-<character hex="2D 35 5C"><unientity>5434</unientity><desc>East Asian ideograph</desc></character>
-<character hex="2D 35 6A"><unientity>8A36</unientity><desc>East Asian ideograph</desc></character>
-<character hex="2D 35 71"><unientity>546A</unientity><desc>East Asian ideograph</desc></character>
-<character hex="2D 36 22"><unientity>8AEE</unientity><desc>East Asian ideograph</desc></character>
-<character hex="2D 36 2A"><unientity>95A7</unientity><desc>East Asian ideograph</desc></character>
-<character hex="2D 36 32"><unientity>8A7B</unientity><desc>East Asian ideograph</desc></character>
-<character hex="2D 36 42"><unientity>6B38</unientity><desc>East Asian ideograph</desc></character>
-<character hex="2D 36 44"><unientity>5557</unientity><desc>East Asian ideograph</desc></character>
-<character hex="2D 36 61"><unientity>6199</unientity><desc>East Asian ideograph</desc></character>
-<character hex="2D 37 30"><unientity>751E</unientity><desc>East Asian ideograph</desc></character>
-<character hex="2D 37 48"><unientity>8B5F</unientity><desc>East Asian ideograph</desc></character>
-<character hex="2D 37 49"><unientity>5650</unientity><desc>East Asian ideograph</desc></character>
-<character hex="2D 37 58"><unientity>54BD</unientity><desc>East Asian ideograph</desc></character>
-<character hex="2D 37 65"><unientity>8086</unientity><desc>East Asian ideograph</desc></character>
-<character hex="2D 37 68"><unientity>56EC</unientity><desc>East Asian ideograph</desc></character>
-<character hex="2D 37 6F"><unientity>5700</unientity><desc>East Asian ideograph</desc></character>
-<character hex="2D 37 7C"><unientity>962C</unientity><desc>East Asian ideograph</desc></character>
-<character hex="2D 38 21"><unientity>962F</unientity><desc>East Asian ideograph</desc></character>
-<character hex="2D 38 30"><unientity>573B</unientity><desc>East Asian ideograph</desc></character>
-<character hex="2D 38 3F"><unientity>575A</unientity><desc>East Asian ideograph</desc></character>
-<character hex="2D 38 4A"><unientity>5872</unientity><desc>East Asian ideograph</desc></character>
-<character hex="2D 38 52"><unientity>51A2</unientity><desc>East Asian ideograph</desc></character>
-<character hex="2D 38 54"><unientity>5896</unientity><desc>East Asian ideograph</desc></character>
-<character hex="2D 38 6E"><unientity>58CA</unientity><desc>East Asian ideograph</desc></character>
-<character hex="2D 38 76"><unientity>58F7</unientity><desc>East Asian ideograph</desc></character>
-<character hex="2D 38 77"><unientity>5900</unientity><desc>East Asian ideograph</desc></character>
-<character hex="2D 39 21"><unientity>591F</unientity><desc>East Asian ideograph</desc></character>
-<character hex="2D 39 29"><unientity>6B80</unientity><desc>East Asian ideograph</desc></character>
-<character hex="2D 39 2F"><unientity>7287</unientity><desc>East Asian ideograph</desc></character>
-<character hex="2D 39 31"><unientity>67F0</unientity><desc>East Asian ideograph</desc></character>
-<character hex="2D 39 32"><unientity>7AD2</unientity><desc>East Asian ideograph</desc></character>
-<character hex="2D 39 44"><unientity>511E</unientity><desc>East Asian ideograph</desc></character>
-<character hex="2D 39 4D"><unientity>59AC</unientity><desc>East Asian ideograph</desc></character>
-<character hex="2D 39 54"><unientity>7385</unientity><desc>East Asian ideograph</desc></character>
-<character hex="2D 39 56"><unientity>59D9</unientity><desc>East Asian ideograph</desc></character>
-<character hex="2D 39 6E"><unientity>4F84</unientity><desc>East Asian ideograph</desc></character>
-<character hex="2D 39 70"><unientity>5A63</unientity><desc>East Asian ideograph</desc></character>
-<character hex="2D 39 74"><unientity>5B43</unientity><desc>East Asian ideograph</desc></character>
-<character hex="2D 39 7B"><unientity>5A31</unientity><desc>East Asian ideograph</desc></character>
-<character hex="2D 3A 26"><unientity>5A3F</unientity><desc>East Asian ideograph</desc></character>
-<character hex="2D 3A 2F"><unientity>58FB</unientity><desc>East Asian ideograph</desc></character>
-<character hex="2D 3A 41"><unientity>5AFA</unientity><desc>East Asian ideograph</desc></character>
-<character hex="2D 3A 47"><unientity>5ACB</unientity><desc>East Asian ideograph</desc></character>
-<character hex="2D 3A 60"><unientity>6588</unientity><desc>East Asian ideograph</desc></character>
-<character hex="2D 3B 27"><unientity>51A8</unientity><desc>East Asian ideograph</desc></character>
-<character hex="2D 3B 2A"><unientity>5EBD</unientity><desc>East Asian ideograph</desc></character>
-<character hex="2D 3B 33"><unientity>8A67</unientity><desc>East Asian ideograph</desc></character>
-<character hex="2D 3B 3F"><unientity>5C02</unientity><desc>East Asian ideograph</desc></character>
-<character hex="2D 3B 40"><unientity>E977</unientity><unientityalt>5C06</unientityalt><desc>Variant of 273B40 which maps to 5C06</desc></character>
-<character hex="2D 3B 52"><unientity>6EBA</unientity><desc>East Asian ideograph</desc></character>
-<character hex="2D 3B 54"><unientity>5C4A</unientity><desc>East Asian ideograph</desc></character>
-<character hex="2D 3B 6E"><unientity>5D17</unientity><desc>East Asian ideograph</desc></character>
-<character hex="2D 3B 77"><unientity>5CE9</unientity><desc>East Asian ideograph</desc></character>
-<character hex="2D 3B 78"><unientity>5CEF</unientity><desc>East Asian ideograph</desc></character>
-<character hex="2D 3B 79"><unientity>5D8B</unientity><desc>East Asian ideograph</desc></character>
-<character hex="2D 3B 7B"><unientity>5D08</unientity><desc>East Asian ideograph</desc></character>
-<character hex="2D 3C 21"><unientity>57FC</unientity><desc>East Asian ideograph</desc></character>
-<character hex="2D 3C 22"><unientity>5D10</unientity><desc>East Asian ideograph</desc></character>
-<character hex="2D 3C 26"><unientity>5D18</unientity><desc>East Asian ideograph</desc></character>
-<character hex="2D 3C 36"><unientity>5DE3</unientity><desc>East Asian ideograph</desc></character>
-<character hex="2D 3C 38"><unientity>9245</unientity><desc>East Asian ideograph</desc></character>
-<character hex="2D 3C 49"><unientity>83F7</unientity><desc>East Asian ideograph</desc></character>
-<character hex="2D 3C 5F"><unientity>6A66</unientity><desc>East Asian ideograph</desc></character>
-<character hex="2D 3C 61"><unientity>5E47</unientity><desc>East Asian ideograph</desc></character>
-<character hex="2D 3C 65"><unientity>79CA</unientity><desc>East Asian ideograph</desc></character>
-<character hex="2D 3C 6A"><unientity>51FC</unientity><desc>East Asian ideograph</desc></character>
-<character hex="2D 3C 6D"><unientity>E921</unientity><desc>Duplicate simplified ideograph</desc></character>
-<character hex="2D 3C 6E"><unientity>7240</unientity><desc>East Asian ideograph</desc></character>
-<character hex="2D 3C 70"><unientity>576B</unientity><desc>East Asian ideograph</desc></character>
-<character hex="2D 3C 7C"><unientity>83F4</unientity><desc>East Asian ideograph</desc></character>
-<character hex="2D 3C 7D"><unientity>53A2</unientity><desc>East Asian ideograph</desc></character>
-<character hex="2D 3C 7E"><unientity>53A0</unientity><desc>East Asian ideograph</desc></character>
-<character hex="2D 3D 29"><unientity>53AE</unientity><desc>East Asian ideograph</desc></character>
-<character hex="2D 3D 2B"><unientity>5EBF</unientity><desc>East Asian ideograph</desc></character>
-<character hex="2D 3D 2D"><unientity>5396</unientity><desc>East Asian ideograph</desc></character>
-<character hex="2D 3D 2F"><unientity>539B</unientity><desc>East Asian ideograph</desc></character>
-<character hex="2D 3D 34"><unientity>5EFE</unientity><desc>East Asian ideograph</desc></character>
-<character hex="2D 3D 48"><unientity>5F4A</unientity><desc>East Asian ideograph</desc></character>
-<character hex="2D 3D 4E"><unientity>7BF2</unientity><desc>East Asian ideograph</desc></character>
-<character hex="2D 3D 50"><unientity>5F5C</unientity><desc>East Asian ideograph</desc></character>
-<character hex="2D 3D 5E"><unientity>9AF4</unientity><desc>East Asian ideograph</desc></character>
-<character hex="2D 3D 67"><unientity>9015</unientity><desc>East Asian ideograph</desc></character>
-<character hex="2D 3D 6C"><unientity>5F93</unientity><desc>East Asian ideograph</desc></character>
-<character hex="2D 3D 75"><unientity>60EA</unientity><desc>East Asian ideograph</desc></character>
-<character hex="2D 3D 76"><unientity>5FB4</unientity><desc>East Asian ideograph</desc></character>
-<character hex="2D 3E 2B"><unientity>6060</unientity><desc>East Asian ideograph</desc></character>
-<character hex="2D 3E 3C"><unientity>803B</unientity><desc>East Asian ideograph</desc></character>
-<character hex="2D 3E 40"><unientity>6052</unientity><desc>East Asian ideograph</desc></character>
-<character hex="2D 3E 60"><unientity>6075</unientity><desc>East Asian ideograph</desc></character>
-<character hex="2D 3F 24"><unientity>661A</unientity><desc>East Asian ideograph</desc></character>
-<character hex="2D 3F 27"><unientity>6120</unientity><desc>East Asian ideograph</desc></character>
-<character hex="2D 3F 2A"><unientity>5ABF</unientity><desc>East Asian ideograph</desc></character>
-<character hex="2D 3F 31"><unientity>6159</unientity><desc>East Asian ideograph</desc></character>
-<character hex="2D 3F 3A"><unientity>6185</unientity><desc>East Asian ideograph</desc></character>
-<character hex="2D 3F 54"><unientity>61D0</unientity><desc>East Asian ideograph</desc></character>
-<character hex="2D 3F 67"><unientity>621E</unientity><desc>East Asian ideograph</desc></character>
-<character hex="2D 3F 6E"><unientity>6226</unientity><desc>East Asian ideograph</desc></character>
-<character hex="2D 3F 6F"><unientity>622F</unientity><desc>East Asian ideograph</desc></character>
-<character hex="2D 3F 76"><unientity>78A5</unientity><desc>East Asian ideograph</desc></character>
-<character hex="2D 40 29"><unientity>5214</unientity><desc>East Asian ideograph</desc></character>
-<character hex="2D 40 31"><unientity>64A6</unientity><desc>East Asian ideograph</desc></character>
-<character hex="2D 40 39"><unientity>67C6</unientity><desc>East Asian ideograph</desc></character>
-<character hex="2D 40 3F"><unientity>6255</unientity><desc>East Asian ideograph</desc></character>
-<character hex="2D 40 49"><unientity>67B4</unientity><desc>East Asian ideograph</desc></character>
-<character hex="2D 40 4C"><unientity>6283</unientity><desc>East Asian ideograph</desc></character>
-<character hex="2D 40 4F"><unientity>6294</unientity><desc>East Asian ideograph</desc></character>
-<character hex="2D 40 66"><unientity>63CE</unientity><desc>East Asian ideograph</desc></character>
-<character hex="2D 40 67"><unientity>62CF</unientity><desc>East Asian ideograph</desc></character>
-<character hex="2D 41 22"><unientity>6485</unientity><desc>East Asian ideograph</desc></character>
-<character hex="2D 41 32"><unientity>642F</unientity><desc>East Asian ideograph</desc></character>
-<character hex="2D 41 41"><unientity>63B2</unientity><desc>East Asian ideograph</desc></character>
-<character hex="2D 41 47"><unientity>6271</unientity><desc>East Asian ideograph</desc></character>
-<character hex="2D 41 50"><unientity>6428</unientity><desc>East Asian ideograph</desc></character>
-<character hex="2D 41 52"><unientity>6447</unientity><desc>East Asian ideograph</desc></character>
-<character hex="2D 41 53"><unientity>64E3</unientity><desc>East Asian ideograph</desc></character>
-<character hex="2D 41 54"><unientity>635C</unientity><desc>East Asian ideograph</desc></character>
-<character hex="2D 41 6E"><unientity>6534</unientity><desc>East Asian ideograph</desc></character>
-<character hex="2D 41 71"><unientity>62CA</unientity><desc>East Asian ideograph</desc></character>
-<character hex="2D 41 76"><unientity>6483</unientity><desc>East Asian ideograph</desc></character>
-<character hex="2D 42 28"><unientity>5117</unientity><desc>East Asian ideograph</desc></character>
-<character hex="2D 42 49"><unientity>53D9</unientity><desc>East Asian ideograph</desc></character>
-<character hex="2D 42 4F"><unientity>555F</unientity><desc>East Asian ideograph</desc></character>
-<character hex="2D 42 72"><unientity>65E3</unientity><desc>East Asian ideograph</desc></character>
-<character hex="2D 42 77"><unientity>65EE</unientity><desc>East Asian ideograph</desc></character>
-<character hex="2D 43 27"><unientity>6630</unientity><desc>East Asian ideograph</desc></character>
-<character hex="2D 43 29"><unientity>668E</unientity><desc>East Asian ideograph</desc></character>
-<character hex="2D 43 2E"><unientity>66EC</unientity><desc>East Asian ideograph</desc></character>
-<character hex="2D 43 3B"><unientity>6662</unientity><desc>East Asian ideograph</desc></character>
-<character hex="2D 43 3E"><unientity>667B</unientity><desc>East Asian ideograph</desc></character>
-<character hex="2D 43 43"><unientity>6636</unientity><desc>East Asian ideograph</desc></character>
-<character hex="2D 43 48"><unientity>6681</unientity><desc>East Asian ideograph</desc></character>
-<character hex="2D 43 49"><unientity>66A6</unientity><desc>East Asian ideograph</desc></character>
-<character hex="2D 43 5F"><unientity>6716</unientity><desc>East Asian ideograph</desc></character>
-<character hex="2D 43 62"><unientity>6722</unientity><desc>East Asian ideograph</desc></character>
-<character hex="2D 43 64"><unientity>671E</unientity><desc>East Asian ideograph</desc></character>
-<character hex="2D 43 70"><unientity>6736</unientity><desc>East Asian ideograph</desc></character>
-<character hex="2D 44 25"><unientity>686E</unientity><desc>East Asian ideograph</desc></character>
-<character hex="2D 44 2D"><unientity>6780</unientity><desc>East Asian ideograph</desc></character>
-<character hex="2D 44 37"><unientity>67FE</unientity><desc>East Asian ideograph</desc></character>
-<character hex="2D 44 3A"><unientity>6942</unientity><desc>East Asian ideograph</desc></character>
-<character hex="2D 44 40"><unientity>6822</unientity><desc>East Asian ideograph</desc></character>
-<character hex="2D 44 44"><unientity>69C5</unientity><desc>East Asian ideograph</desc></character>
-<character hex="2D 44 4B"><unientity>6852</unientity><desc>East Asian ideograph</desc></character>
-<character hex="2D 44 50"><unientity>8308</unientity><desc>East Asian ideograph</desc></character>
-<character hex="2D 44 61"><unientity>6746</unientity><desc>East Asian ideograph</desc></character>
-<character hex="2D 44 66"><unientity>6973</unientity><desc>East Asian ideograph</desc></character>
-<character hex="2D 44 6B"><unientity>6936</unientity><desc>East Asian ideograph</desc></character>
-<character hex="2D 44 72"><unientity>68CA</unientity><desc>East Asian ideograph</desc></character>
-<character hex="2D 44 74"><unientity>E978</unientity><unientityalt>690D</unientityalt><desc>Variant of 214474 which maps to 690D</desc></character>
-<character hex="2D 44 7D"><unientity>684C</unientity><desc>East Asian ideograph</desc></character>
-<character hex="2D 45 39"><unientity>6406</unientity><desc>East Asian ideograph</desc></character>
-<character hex="2D 45 3A"><unientity>6760</unientity><desc>East Asian ideograph</desc></character>
-<character hex="2D 45 43"><unientity>6901</unientity><desc>East Asian ideograph</desc></character>
-<character hex="2D 45 4E"><unientity>697D</unientity><desc>East Asian ideograph</desc></character>
-<character hex="2D 45 50"><unientity>58AB</unientity><desc>East Asian ideograph</desc></character>
-<character hex="2D 45 62"><unientity>681D</unientity><desc>East Asian ideograph</desc></character>
-<character hex="2D 45 64"><unientity>68B9</unientity><desc>East Asian ideograph</desc></character>
-<character hex="2D 45 69"><unientity>6AC9</unientity><desc>East Asian ideograph</desc></character>
-<character hex="2D 45 74"><unientity>5FFB</unientity><desc>East Asian ideograph</desc></character>
-<character hex="2D 46 21"><unientity>61FD</unientity><desc>East Asian ideograph</desc></character>
-<character hex="2D 46 2C"><unientity>6B7A</unientity><desc>East Asian ideograph</desc></character>
-<character hex="2D 46 47"><unientity>6BD8</unientity><desc>East Asian ideograph</desc></character>
-<character hex="2D 46 6D"><unientity>51B3</unientity><desc>East Asian ideograph</desc></character>
-<character hex="2D 46 74"><unientity>51B2</unientity><desc>East Asian ideograph</desc></character>
-<character hex="2D 46 7C"><unientity>6CB2</unientity><desc>East Asian ideograph</desc></character>
-<character hex="2D 47 29"><unientity>6D29</unientity><desc>East Asian ideograph</desc></character>
-<character hex="2D 47 30"><unientity>51B5</unientity><desc>East Asian ideograph</desc></character>
-<character hex="2D 47 35"><unientity>6C4E</unientity><desc>East Asian ideograph</desc></character>
-<character hex="2D 47 38"><unientity>6FFC</unientity><desc>East Asian ideograph</desc></character>
-<character hex="2D 47 46"><unientity>6C79</unientity><desc>East Asian ideograph</desc></character>
-<character hex="2D 47 56"><unientity>6F94</unientity><desc>East Asian ideograph</desc></character>
-<character hex="2D 47 5B"><unientity>51C9</unientity><desc>East Asian ideograph</desc></character>
-<character hex="2D 47 5F"><unientity>51C4</unientity><desc>East Asian ideograph</desc></character>
-<character hex="2D 47 68"><unientity>E979</unientity><unientityalt>6D45</unientityalt><desc>Variant of 274768 which maps to 6D45</desc></character>
-<character hex="2D 48 29"><unientity>51CF</unientity><desc>East Asian ideograph</desc></character>
-<character hex="2D 48 2F"><unientity>6E07</unientity><desc>East Asian ideograph</desc></character>
-<character hex="2D 48 44"><unientity>6FD5</unientity><desc>East Asian ideograph</desc></character>
-<character hex="2D 48 45"><unientity>6E29</unientity><desc>East Asian ideograph</desc></character>
-<character hex="2D 48 50"><unientity>6EDA</unientity><desc>East Asian ideograph</desc></character>
-<character hex="2D 48 53"><unientity>7001</unientity><desc>East Asian ideograph</desc></character>
-<character hex="2D 48 5C"><unientity>6F44</unientity><desc>East Asian ideograph</desc></character>
-<character hex="2D 48 6B"><unientity>6F82</unientity><desc>East Asian ideograph</desc></character>
-<character hex="2D 48 6E"><unientity>E9F5</unientity><desc>East Asian ideograph not in Unicode</desc></character>
-<character hex="2D 48 74"><unientity>6F5C</unientity><desc>East Asian ideograph</desc></character>
-<character hex="2D 49 3A"><unientity>702C</unientity><desc>East Asian ideograph</desc></character>
-<character hex="2D 49 47"><unientity>7AC8</unientity><desc>East Asian ideograph</desc></character>
-<character hex="2D 49 54"><unientity>70F1</unientity><desc>East Asian ideograph</desc></character>
-<character hex="2D 49 56"><unientity>70B0</unientity><desc>East Asian ideograph</desc></character>
-<character hex="2D 49 6B"><unientity>70DF</unientity><desc>East Asian ideograph</desc></character>
-<character hex="2D 49 71"><unientity>70A4</unientity><desc>East Asian ideograph</desc></character>
-<character hex="2D 4A 26"><unientity>713C</unientity><desc>East Asian ideograph</desc></character>
-<character hex="2D 4A 28"><unientity>8B8C</unientity><desc>East Asian ideograph</desc></character>
-<character hex="2D 4A 34"><unientity>718F</unientity><desc>East Asian ideograph</desc></character>
-<character hex="2D 4A 3B"><unientity>4E89</unientity><desc>East Asian ideograph</desc></character>
-<character hex="2D 4A 45"><unientity>5C12</unientity><desc>East Asian ideograph</desc></character>
-<character hex="2D 4A 46"><unientity>58BB</unientity><desc>East Asian ideograph</desc></character>
-<character hex="2D 4A 58"><unientity>7F9D</unientity><desc>East Asian ideograph</desc></character>
-<character hex="2D 4A 5B"><unientity>7282</unientity><desc>East Asian ideograph</desc></character>
-<character hex="2D 4A 60"><unientity>6C02</unientity><desc>East Asian ideograph</desc></character>
-<character hex="2D 4B 22"><unientity>736A</unientity><desc>East Asian ideograph</desc></character>
-<character hex="2D 4B 35"><unientity>73C9</unientity><desc>East Asian ideograph</desc></character>
-<character hex="2D 4B 3F"><unientity>73CE</unientity><desc>East Asian ideograph</desc></character>
-<character hex="2D 4B 43"><unientity>746F</unientity><desc>East Asian ideograph</desc></character>
-<character hex="2D 4B 45"><unientity>6BEC</unientity><desc>East Asian ideograph</desc></character>
-<character hex="2D 4B 5B"><unientity>78AF</unientity><desc>East Asian ideograph</desc></character>
-<character hex="2D 4B 71"><unientity>7F3E</unientity><desc>East Asian ideograph</desc></character>
-<character hex="2D 4B 72"><unientity>7506</unientity><desc>East Asian ideograph</desc></character>
-<character hex="2D 4C 2C"><unientity>583A</unientity><desc>East Asian ideograph</desc></character>
-<character hex="2D 4C 2D"><unientity>756E</unientity><desc>East Asian ideograph</desc></character>
-<character hex="2D 4C 35"><unientity>7567</unientity><desc>East Asian ideograph</desc></character>
-<character hex="2D 4C 3C"><unientity>53E0</unientity><desc>East Asian ideograph</desc></character>
-<character hex="2D 4C 3E"><unientity>758E</unientity><desc>East Asian ideograph</desc></character>
-<character hex="2D 4C 5D"><unientity>7661</unientity><desc>East Asian ideograph</desc></character>
-<character hex="2D 4C 7E"><unientity>4F70</unientity><desc>East Asian ideograph</desc></character>
-<character hex="2D 4D 21"><unientity>7681</unientity><desc>East Asian ideograph</desc></character>
-<character hex="2D 4D 34"><unientity>76C7</unientity><desc>East Asian ideograph</desc></character>
-<character hex="2D 4D 38"><unientity>76D7</unientity><desc>East Asian ideograph</desc></character>
-<character hex="2D 4D 4F"><unientity>771F</unientity><desc>East Asian ideograph</desc></character>
-<character hex="2D 4D 5F"><unientity>7741</unientity><desc>East Asian ideograph</desc></character>
-<character hex="2D 4D 65"><unientity>53E1</unientity><desc>East Asian ideograph</desc></character>
-<character hex="2D 4D 6D"><unientity>7792</unientity><desc>East Asian ideograph</desc></character>
-<character hex="2D 4D 71"><unientity>7719</unientity><desc>East Asian ideograph</desc></character>
-<character hex="2D 4E 24"><unientity>6998</unientity><desc>East Asian ideograph</desc></character>
-<character hex="2D 4E 33"><unientity>78AA</unientity><desc>East Asian ideograph</desc></character>
-<character hex="2D 4E 5B"><unientity>945B</unientity><desc>East Asian ideograph</desc></character>
-<character hex="2D 4E 79"><unientity>5FA1</unientity><desc>East Asian ideograph</desc></character>
-<character hex="2D 4F 29"><unientity>9F9D</unientity><desc>East Asian ideograph</desc></character>
-<character hex="2D 4F 37"><unientity>7980</unientity><desc>East Asian ideograph</desc></character>
-<character hex="2D 4F 3E"><unientity>7A3E</unientity><desc>East Asian ideograph</desc></character>
-<character hex="2D 4F 41"><unientity>4E69</unientity><desc>East Asian ideograph</desc></character>
-<character hex="2D 4F 45"><unientity>9834</unientity><desc>East Asian ideograph</desc></character>
-<character hex="2D 4F 48"><unientity>7A42</unientity><desc>East Asian ideograph</desc></character>
-<character hex="2D 4F 5E"><unientity>7AB0</unientity><desc>East Asian ideograph</desc></character>
-<character hex="2D 4F 6B"><unientity>7AF8</unientity><desc>East Asian ideograph</desc></character>
-<character hex="2D 4F 7C"><unientity>7B5E</unientity><desc>East Asian ideograph</desc></character>
-<character hex="2D 50 2B"><unientity>693E</unientity><desc>East Asian ideograph</desc></character>
-<character hex="2D 50 2D"><unientity>7B5D</unientity><desc>East Asian ideograph</desc></character>
-<character hex="2D 50 36"><unientity>84D1</unientity><desc>East Asian ideograph</desc></character>
-<character hex="2D 50 4F"><unientity>7C58</unientity><desc>East Asian ideograph</desc></character>
-<character hex="2D 50 6F"><unientity>7CFA</unientity><desc>East Asian ideograph</desc></character>
-<character hex="2D 51 24"><unientity>5E0B</unientity><desc>East Asian ideograph</desc></character>
-<character hex="2D 51 29"><unientity>7D25</unientity><desc>East Asian ideograph</desc></character>
-<character hex="2D 51 4A"><unientity>6DD6</unientity><desc>East Asian ideograph</desc></character>
-<character hex="2D 51 4D"><unientity>7D2C</unientity><desc>East Asian ideograph</desc></character>
-<character hex="2D 51 6A"><unientity>7DB3</unientity><desc>East Asian ideograph</desc></character>
-<character hex="2D 51 79"><unientity>7E62</unientity><desc>East Asian ideograph</desc></character>
-<character hex="2D 51 7D"><unientity>7D99</unientity><desc>East Asian ideograph</desc></character>
-<character hex="2D 52 28"><unientity>9262</unientity><desc>East Asian ideograph</desc></character>
-<character hex="2D 52 2B"><unientity>9475</unientity><desc>East Asian ideograph</desc></character>
-<character hex="2D 52 32"><unientity>8FA0</unientity><desc>East Asian ideograph</desc></character>
-<character hex="2D 52 33"><unientity>7F78</unientity><desc>East Asian ideograph</desc></character>
-<character hex="2D 52 38"><unientity>898A</unientity><desc>East Asian ideograph</desc></character>
-<character hex="2D 52 40"><unientity>7FA1</unientity><desc>East Asian ideograph</desc></character>
-<character hex="2D 52 41"><unientity>7FA3</unientity><desc>East Asian ideograph</desc></character>
-<character hex="2D 52 4A"><unientity>7FC4</unientity><desc>East Asian ideograph</desc></character>
-<character hex="2D 52 59"><unientity>98DC</unientity><desc>East Asian ideograph</desc></character>
-<character hex="2D 52 5D"><unientity>6537</unientity><desc>East Asian ideograph</desc></character>
-<character hex="2D 52 65"><unientity>79D0</unientity><desc>East Asian ideograph</desc></character>
-<character hex="2D 52 67"><unientity>79CF</unientity><desc>East Asian ideograph</desc></character>
-<character hex="2D 52 6B"><unientity>7085</unientity><desc>East Asian ideograph</desc></character>
-<character hex="2D 52 6C"><unientity>8EAD</unientity><desc>East Asian ideograph</desc></character>
-<character hex="2D 52 7B"><unientity>8074</unientity><desc>East Asian ideograph</desc></character>
-<character hex="2D 53 21"><unientity>7C9B</unientity><desc>East Asian ideograph</desc></character>
-<character hex="2D 53 23"><unientity>5B8D</unientity><desc>East Asian ideograph</desc></character>
-<character hex="2D 53 2C"><unientity>6BD3</unientity><desc>East Asian ideograph</desc></character>
-<character hex="2D 53 40"><unientity>812C</unientity><desc>East Asian ideograph</desc></character>
-<character hex="2D 53 44"><unientity>8107</unientity><desc>East Asian ideograph</desc></character>
-<character hex="2D 53 4B"><unientity>80F7</unientity><desc>East Asian ideograph</desc></character>
-<character hex="2D 53 5E"><unientity>8193</unientity><desc>East Asian ideograph</desc></character>
-<character hex="2D 53 61"><unientity>811A</unientity><desc>East Asian ideograph</desc></character>
-<character hex="2D 53 7E"><unientity>81C8</unientity><desc>East Asian ideograph</desc></character>
-<character hex="2D 54 21"><unientity>9AD7</unientity><desc>East Asian ideograph</desc></character>
-<character hex="2D 54 24"><unientity>5367</unientity><desc>East Asian ideograph</desc></character>
-<character hex="2D 54 34"><unientity>64E7</unientity><desc>East Asian ideograph</desc></character>
-<character hex="2D 54 40"><unientity>6841</unientity><desc>East Asian ideograph</desc></character>
-<character hex="2D 54 46"><unientity>8229</unientity><desc>East Asian ideograph</desc></character>
-<character hex="2D 54 47"><unientity>824A</unientity><desc>East Asian ideograph</desc></character>
-<character hex="2D 54 61"><unientity>8306</unientity><desc>East Asian ideograph</desc></character>
-<character hex="2D 54 68"><unientity>6959</unientity><desc>East Asian ideograph</desc></character>
-<character hex="2D 54 6F"><unientity>83C0</unientity><desc>East Asian ideograph</desc></character>
-<character hex="2D 54 76"><unientity>8318</unientity><desc>East Asian ideograph</desc></character>
-<character hex="2D 55 29"><unientity>E97A</unientity><unientityalt>830E</unientityalt><desc>Variant of 275529 which maps to 830E</desc></character>
-<character hex="2D 55 2D"><unientity>8358</unientity><desc>East Asian ideograph</desc></character>
-<character hex="2D 55 2E"><unientity>E97B</unientity><unientityalt>8393</unientityalt><desc>Variant of 21552E which maps to 8393</desc></character>
-<character hex="2D 55 47"><unientity>837D</unientity><desc>East Asian ideograph</desc></character>
-<character hex="2D 55 50"><unientity>585F</unientity><desc>East Asian ideograph</desc></character>
-<character hex="2D 55 54"><unientity>855A</unientity><desc>East Asian ideograph</desc></character>
-<character hex="2D 55 5A"><unientity>8386</unientity><desc>East Asian ideograph</desc></character>
-<character hex="2D 55 5B"><unientity>8385</unientity><desc>East Asian ideograph</desc></character>
-<character hex="2D 55 61"><unientity>76D6</unientity><desc>East Asian ideograph</desc></character>
-<character hex="2D 55 73"><unientity>83D4</unientity><desc>East Asian ideograph</desc></character>
-<character hex="2D 56 2E"><unientity>8024</unientity><desc>East Asian ideograph</desc></character>
-<character hex="2D 56 35"><unientity>846F</unientity><desc>East Asian ideograph</desc></character>
-<character hex="2D 56 3C"><unientity>8613</unientity><desc>East Asian ideograph</desc></character>
-<character hex="2D 56 3F"><unientity>6A97</unientity><desc>East Asian ideograph</desc></character>
-<character hex="2D 56 64"><unientity>9F04</unientity><desc>East Asian ideograph</desc></character>
-<character hex="2D 56 75"><unientity>9F05</unientity><desc>East Asian ideograph</desc></character>
-<character hex="2D 56 7B"><unientity>8717</unientity><desc>East Asian ideograph</desc></character>
-<character hex="2D 57 2B"><unientity>8797</unientity><desc>East Asian ideograph</desc></character>
-<character hex="2D 57 2D"><unientity>8748</unientity><desc>East Asian ideograph</desc></character>
-<character hex="2D 57 30"><unientity>87C7</unientity><desc>East Asian ideograph</desc></character>
-<character hex="2D 57 3B"><unientity>60F7</unientity><desc>East Asian ideograph</desc></character>
-<character hex="2D 57 49"><unientity>885E</unientity><desc>East Asian ideograph</desc></character>
-<character hex="2D 57 58"><unientity>890E</unientity><desc>East Asian ideograph</desc></character>
-<character hex="2D 57 5B"><unientity>886E</unientity><desc>East Asian ideograph</desc></character>
-<character hex="2D 57 60"><unientity>5E2C</unientity><desc>East Asian ideograph</desc></character>
-<character hex="2D 57 63"><unientity>88E1</unientity><desc>East Asian ideograph</desc></character>
-<character hex="2D 57 73"><unientity>7D5D</unientity><desc>East Asian ideograph</desc></character>
-<character hex="2D 58 31"><unientity>89A7</unientity><desc>East Asian ideograph</desc></character>
-<character hex="2D 58 33"><unientity>752A</unientity><desc>East Asian ideograph</desc></character>
-<character hex="2D 58 36"><unientity>89E6</unientity><desc>East Asian ideograph</desc></character>
-<character hex="2D 58 4D"><unientity>548F</unientity><desc>East Asian ideograph</desc></character>
-<character hex="2D 58 56"><unientity>612C</unientity><desc>East Asian ideograph</desc></character>
-<character hex="2D 59 27"><unientity>8ACC</unientity><desc>East Asian ideograph</desc></character>
-<character hex="2D 59 2C"><unientity>8B01</unientity><desc>East Asian ideograph</desc></character>
-<character hex="2D 59 3D"><unientity>8AE9</unientity><desc>East Asian ideograph</desc></character>
-<character hex="2D 59 41"><unientity>5629</unientity><desc>East Asian ideograph</desc></character>
-<character hex="2D 59 4C"><unientity>8B72</unientity><desc>East Asian ideograph</desc></character>
-<character hex="2D 59 4F"><unientity>8B83</unientity><desc>East Asian ideograph</desc></character>
-<character hex="2D 59 57"><unientity>7AEA</unientity><desc>East Asian ideograph</desc></character>
-<character hex="2D 59 59"><unientity>8277</unientity><desc>East Asian ideograph</desc></character>
-<character hex="2D 59 5F"><unientity>732A</unientity><desc>East Asian ideograph</desc></character>
-<character hex="2D 59 60"><unientity>72B2</unientity><desc>East Asian ideograph</desc></character>
-<character hex="2D 59 63"><unientity>8C98</unientity><desc>East Asian ideograph</desc></character>
-<character hex="2D 59 65"><unientity>72F8</unientity><desc>East Asian ideograph</desc></character>
-<character hex="2D 5A 34"><unientity>8CAD</unientity><desc>East Asian ideograph</desc></character>
-<character hex="2D 5A 3D"><unientity>8CDB</unientity><desc>East Asian ideograph</desc></character>
-<character hex="2D 5A 48"><unientity>8D71</unientity><desc>East Asian ideograph</desc></character>
-<character hex="2D 5A 4E"><unientity>8D82</unientity><desc>East Asian ideograph</desc></character>
-<character hex="2D 5A 5F"><unientity>8E5F</unientity><desc>East Asian ideograph</desc></character>
-<character hex="2D 5A 63"><unientity>8DE5</unientity><desc>East Asian ideograph</desc></character>
-<character hex="2D 5A 7E"><unientity>8E7B</unientity><desc>East Asian ideograph</desc></character>
-<character hex="2D 5B 2F"><unientity>8EB1</unientity><desc>East Asian ideograph</desc></character>
-<character hex="2D 5B 42"><unientity>8F19</unientity><desc>East Asian ideograph</desc></character>
-<character hex="2D 5B 43"><unientity>8EFD</unientity><desc>East Asian ideograph</desc></character>
-<character hex="2D 5B 5D"><unientity>8FA2</unientity><desc>East Asian ideograph</desc></character>
-<character hex="2D 5B 5E"><unientity>8FA7</unientity><desc>East Asian ideograph</desc></character>
-<character hex="2D 5B 69"><unientity>5EF5</unientity><desc>East Asian ideograph</desc></character>
-<character hex="2D 5B 7A"><unientity>8FEF</unientity><desc>East Asian ideograph</desc></character>
-<character hex="2D 5C 2F"><unientity>8FE8</unientity><desc>East Asian ideograph</desc></character>
-<character hex="2D 5C 3F"><unientity>5FA7</unientity><desc>East Asian ideograph</desc></character>
-<character hex="2D 5C 40"><unientity>5FA8</unientity><desc>East Asian ideograph</desc></character>
-<character hex="2D 5C 48"><unientity>9013</unientity><desc>East Asian ideograph</desc></character>
-<character hex="2D 5C 5A"><unientity>8FE9</unientity><desc>East Asian ideograph</desc></character>
-<character hex="2D 5C 5B"><unientity>9089</unientity><desc>East Asian ideograph</desc></character>
-<character hex="2D 5C 74"><unientity>96A3</unientity><desc>East Asian ideograph</desc></character>
-<character hex="2D 5D 23"><unientity>9167</unientity><desc>East Asian ideograph</desc></character>
-<character hex="2D 5D 2F"><unientity>9196</unientity><desc>East Asian ideograph</desc></character>
-<character hex="2D 5D 56"><unientity>920E</unientity><desc>East Asian ideograph</desc></character>
-<character hex="2D 5D 65"><unientity>8216</unientity><desc>East Asian ideograph</desc></character>
-<character hex="2D 5D 68"><unientity>8021</unientity><desc>East Asian ideograph</desc></character>
-<character hex="2D 5E 21"><unientity>9418</unientity><desc>East Asian ideograph</desc></character>
-<character hex="2D 5E 24"><unientity>7145</unientity><desc>East Asian ideograph</desc></character>
-<character hex="2D 5E 26"><unientity>7194</unientity><desc>East Asian ideograph</desc></character>
-<character hex="2D 5E 28"><unientity>93C1</unientity><desc>East Asian ideograph</desc></character>
-<character hex="2D 5E 3B"><unientity>92B9</unientity><desc>East Asian ideograph</desc></character>
-<character hex="2D 5E 43"><unientity>92F3</unientity><desc>East Asian ideograph</desc></character>
-<character hex="2D 5E 4A"><unientity>945A</unientity><desc>East Asian ideograph</desc></character>
-<character hex="2D 5E 50"><unientity>9587</unientity><desc>East Asian ideograph</desc></character>
-<character hex="2D 5E 61"><unientity>6FF6</unientity><desc>East Asian ideograph</desc></character>
-<character hex="2D 5F 28"><unientity>9665</unientity><desc>East Asian ideograph</desc></character>
-<character hex="2D 5F 2C"><unientity>5826</unientity><desc>East Asian ideograph</desc></character>
-<character hex="2D 5F 2D"><unientity>964F</unientity><desc>East Asian ideograph</desc></character>
-<character hex="2D 5F 2E"><unientity>661C</unientity><desc>East Asian ideograph</desc></character>
-<character hex="2D 5F 35"><unientity>78D2</unientity><desc>East Asian ideograph</desc></character>
-<character hex="2D 5F 3B"><unientity>96A0</unientity><desc>East Asian ideograph</desc></character>
-<character hex="2D 5F 43"><unientity>9CEB</unientity><desc>East Asian ideograph</desc></character>
-<character hex="2D 5F 46"><unientity>96BD</unientity><desc>East Asian ideograph</desc></character>
-<character hex="2D 5F 4B"><unientity>96D1</unientity><desc>East Asian ideograph</desc></character>
-<character hex="2D 5F 4C"><unientity>9DC4</unientity><desc>East Asian ideograph</desc></character>
-<character hex="2D 5F 63"><unientity>873A</unientity><desc>East Asian ideograph</desc></character>
-<character hex="2D 5F 73"><unientity>E9D2</unientity><unientityalt>975A</unientityalt><desc>Unrelated variant of EACC 234C76 which maps to 975A</desc></character>
-<character hex="2D 60 21"><unientity>978C</unientity><desc>East Asian ideograph</desc></character>
-<character hex="2D 60 2D"><unientity>976D</unientity><desc>East Asian ideograph</desc></character>
-<character hex="2D 60 30"><unientity>97EE</unientity><desc>East Asian ideograph</desc></character>
-<character hex="2D 60 56"><unientity>980B</unientity><desc>East Asian ideograph</desc></character>
-<character hex="2D 60 78"><unientity>9920</unientity><desc>East Asian ideograph</desc></character>
-<character hex="2D 60 79"><unientity>8218</unientity><desc>East Asian ideograph</desc></character>
-<character hex="2D 61 32"><unientity>99EE</unientity><desc>East Asian ideograph</desc></character>
-<character hex="2D 61 34"><unientity>99DE</unientity><desc>East Asian ideograph</desc></character>
-<character hex="2D 61 47"><unientity>99C8</unientity><desc>East Asian ideograph</desc></character>
-<character hex="2D 61 59"><unientity>9AC4</unientity><desc>East Asian ideograph</desc></character>
-<character hex="2D 61 5A"><unientity>8EC6</unientity><desc>East Asian ideograph</desc></character>
-<character hex="2D 61 62"><unientity>9A0C</unientity><desc>East Asian ideograph</desc></character>
-<character hex="2D 61 6A"><unientity>6B1D</unientity><desc>East Asian ideograph</desc></character>
-<character hex="2D 62 22"><unientity>9C0C</unientity><desc>East Asian ideograph</desc></character>
-<character hex="2D 62 29"><unientity>9C53</unientity><desc>East Asian ideograph</desc></character>
-<character hex="2D 62 2C"><unientity>9F08</unientity><desc>East Asian ideograph</desc></character>
-<character hex="2D 62 35"><unientity>9D76</unientity><desc>East Asian ideograph</desc></character>
-<character hex="2D 62 41"><unientity>9D5E</unientity><desc>East Asian ideograph</desc></character>
-<character hex="2D 62 51"><unientity>5869</unientity><desc>East Asian ideograph</desc></character>
-<character hex="2D 62 52"><unientity>78B1</unientity><desc>East Asian ideograph</desc></character>
-<character hex="2D 62 5F"><unientity>83FB</unientity><desc>East Asian ideograph</desc></character>
-<character hex="2D 62 60"><unientity>5E85</unientity><desc>East Asian ideograph</desc></character>
-<character hex="2D 62 62"><unientity>9EC4</unientity><desc>East Asian ideograph</desc></character>
-<character hex="2D 62 75"><unientity>76B7</unientity><desc>East Asian ideograph</desc></character>
-<character hex="2D 62 7E"><unientity>658B</unientity><desc>East Asian ideograph</desc></character>
-<character hex="2D 63 2B"><unientity>5C28</unientity><desc>East Asian ideograph</desc></character>
-<character hex="2D 63 2D"><unientity>4E80</unientity><desc>East Asian ideograph</desc></character>
-<character hex="2D 6B 33"><unientity>E9F6</unientity><desc>East Asian ideograph not in Unicode</desc></character>
-<character hex="2D 6B 5F"><unientity>5273</unientity><desc>East Asian ideograph</desc></character>
-<character hex="2D 6F 7D"><unientity>8123</unientity><desc>East Asian ideograph</desc></character>
-<character hex="2D 71 43"><unientity>55E2</unientity><desc>East Asian ideograph</desc></character>
-<character hex="2D 71 64"><unientity>E97C</unientity><unientityalt>55D4</unientityalt><desc>Variant of 217164 which maps to 55D4</desc></character>
-<character hex="2D 73 45"><unientity>56D3</unientity><desc>East Asian ideograph</desc></character>
-<character hex="2D 75 3A"><unientity>9654</unientity><desc>East Asian ideograph</desc></character>
-<character hex="2D 75 52"><unientity>579B</unientity><desc>East Asian ideograph</desc></character>
-<character hex="2D 7A 44"><unientity>598D</unientity><desc>East Asian ideograph</desc></character>
-<character hex="2D 7E 6A"><unientity>51A4</unientity><desc>East Asian ideograph</desc></character>
-<character hex="2E 25 7B"><unientity>5D1F</unientity><desc>East Asian ideograph</desc></character>
-<character hex="2E 28 4C"><unientity>5ECF</unientity><desc>East Asian ideograph</desc></character>
-<character hex="2E 29 68"><unientity>5F51</unientity><desc>East Asian ideograph</desc></character>
-<character hex="2E 2B 5B"><unientity>605A</unientity><desc>East Asian ideograph</desc></character>
-<character hex="2E 2B 74"><unientity>609B</unientity><desc>East Asian ideograph</desc></character>
-<character hex="2E 2D 79"><unientity>6128</unientity><desc>East Asian ideograph</desc></character>
-<character hex="2E 2F 7A"><unientity>6738</unientity><desc>East Asian ideograph</desc></character>
-<character hex="2E 2F 7C"><unientity>634D</unientity><desc>East Asian ideograph</desc></character>
-<character hex="2E 30 28"><unientity>640B</unientity><desc>East Asian ideograph</desc></character>
-<character hex="2E 31 3A"><unientity>6332</unientity><desc>East Asian ideograph</desc></character>
-<character hex="2E 31 44"><unientity>651F</unientity><desc>East Asian ideograph</desc></character>
-<character hex="2E 31 72"><unientity>5261</unientity><desc>East Asian ideograph</desc></character>
-<character hex="2E 33 28"><unientity>6528</unientity><desc>East Asian ideograph</desc></character>
-<character hex="2E 33 7B"><unientity>630E</unientity><desc>East Asian ideograph</desc></character>
-<character hex="2E 36 3F"><unientity>52C5</unientity><desc>East Asian ideograph</desc></character>
-<character hex="2E 36 45"><unientity>69E3</unientity><desc>East Asian ideograph</desc></character>
-<character hex="2E 36 54"><unientity>657F</unientity><desc>East Asian ideograph</desc></character>
-<character hex="2E 37 29"><unientity>65B5</unientity><desc>East Asian ideograph</desc></character>
-<character hex="2E 38 70"><unientity>714A</unientity><desc>East Asian ideograph</desc></character>
-<character hex="2E 39 36"><unientity>66CD</unientity><desc>East Asian ideograph</desc></character>
-<character hex="2E 3A 26"><unientity>661D</unientity><desc>East Asian ideograph</desc></character>
-<character hex="2E 3A 33"><unientity>80AD</unientity><desc>East Asian ideograph</desc></character>
-<character hex="2E 3B 22"><unientity>690F</unientity><desc>East Asian ideograph</desc></character>
-<character hex="2E 3D 62"><unientity>684A</unientity><desc>East Asian ideograph</desc></character>
-<character hex="2E 3D 73"><unientity>7A1C</unientity><desc>East Asian ideograph</desc></character>
-<character hex="2E 3E 3F"><unientity>7BA0</unientity><desc>East Asian ideograph</desc></character>
-<character hex="2E 3F 2D"><unientity>69B2</unientity><desc>East Asian ideograph</desc></character>
-<character hex="2E 40 3D"><unientity>6AC1</unientity><desc>East Asian ideograph</desc></character>
-<character hex="2E 41 74"><unientity>6AA9</unientity><desc>East Asian ideograph</desc></character>
-<character hex="2E 46 70"><unientity>6CD0</unientity><desc>East Asian ideograph</desc></character>
-<character hex="2E 47 31"><unientity>6C73</unientity><desc>East Asian ideograph</desc></character>
-<character hex="2E 47 39"><unientity>E97D</unientity><unientityalt>6C67</unientityalt><desc>Variant of 224739 which maps to 6C67</desc></character>
-<character hex="2E 47 47"><unientity>6D64</unientity><desc>East Asian ideograph</desc></character>
-<character hex="2E 48 73"><unientity>6FA3</unientity><desc>East Asian ideograph</desc></character>
-<character hex="2E 49 2F"><unientity>6CD9</unientity><desc>East Asian ideograph</desc></character>
-<character hex="2E 49 3B"><unientity>6E7C</unientity><desc>East Asian ideograph</desc></character>
-<character hex="2E 4A 6B"><unientity>6EA6</unientity><desc>East Asian ideograph</desc></character>
-<character hex="2E 4C 35"><unientity>6DE5</unientity><desc>East Asian ideograph</desc></character>
-<character hex="2E 4C 7B"><unientity>6E86</unientity><desc>East Asian ideograph</desc></character>
-<character hex="2E 4D 3D"><unientity>6D38</unientity><desc>East Asian ideograph</desc></character>
-<character hex="2E 4E 41"><unientity>7032</unientity><desc>East Asian ideograph</desc></character>
-<character hex="2E 4E 56"><unientity>9800</unientity><desc>East Asian ideograph</desc></character>
-<character hex="2E 4E 5D"><unientity>6DE0</unientity><desc>East Asian ideograph</desc></character>
-<character hex="2E 4E 72"><unientity>6F74</unientity><desc>East Asian ideograph</desc></character>
-<character hex="2E 50 6D"><unientity>70B1</unientity><desc>East Asian ideograph</desc></character>
-<character hex="2E 52 5D"><unientity>715B</unientity><desc>East Asian ideograph</desc></character>
-<character hex="2E 54 52"><unientity>71FE</unientity><desc>East Asian ideograph</desc></character>
-<character hex="2E 5A 40"><unientity>73B3</unientity><desc>East Asian ideograph</desc></character>
-<character hex="2E 5A 78"><unientity>74A2</unientity><desc>East Asian ideograph</desc></character>
-<character hex="2E 5F 6F"><unientity>75B8</unientity><desc>East Asian ideograph</desc></character>
-<character hex="2E 60 4A"><unientity>7690</unientity><desc>East Asian ideograph</desc></character>
-<character hex="2E 60 60"><unientity>76A1</unientity><desc>East Asian ideograph</desc></character>
-<character hex="2E 62 4F"><unientity>772D</unientity><desc>East Asian ideograph</desc></character>
-<character hex="2E 62 5F"><unientity>77C1</unientity><desc>East Asian ideograph</desc></character>
-<character hex="2E 68 4E"><unientity>8020</unientity><desc>East Asian ideograph</desc></character>
-<character hex="2E 68 6F"><unientity>7A19</unientity><desc>East Asian ideograph</desc></character>
-<character hex="2E 6B 54"><unientity>7B04</unientity><desc>East Asian ideograph</desc></character>
-<character hex="2E 6C 26"><unientity>7BE0</unientity><desc>East Asian ideograph</desc></character>
-<character hex="2E 6C 27"><unientity>7B2E</unientity><desc>East Asian ideograph</desc></character>
-<character hex="2E 6C 3E"><unientity>7B59</unientity><desc>East Asian ideograph</desc></character>
-<character hex="2E 6C 46"><unientity>7BE6</unientity><desc>East Asian ideograph</desc></character>
-<character hex="2E 6F 35"><unientity>6CD4</unientity><desc>East Asian ideograph</desc></character>
-<character hex="2E 6F 43"><unientity>9908</unientity><desc>East Asian ideograph</desc></character>
-<character hex="2E 70 62"><unientity>7D4F</unientity><desc>East Asian ideograph</desc></character>
-<character hex="2E 71 5A"><unientity>7E27</unientity><desc>East Asian ideograph</desc></character>
-<character hex="2E 71 7C"><unientity>7D63</unientity><desc>East Asian ideograph</desc></character>
-<character hex="2E 73 28"><unientity>5FAD</unientity><desc>East Asian ideograph</desc></character>
-<character hex="2E 73 5D"><unientity>7D56</unientity><desc>East Asian ideograph</desc></character>
-<character hex="2E 73 74"><unientity>7E89</unientity><desc>East Asian ideograph</desc></character>
-<character hex="2E 74 2E"><unientity>7516</unientity><desc>East Asian ideograph</desc></character>
-<character hex="2E 74 31"><unientity>7F48</unientity><desc>East Asian ideograph</desc></character>
-<character hex="2E 74 50"><unientity>7F82</unientity><desc>East Asian ideograph</desc></character>
-<character hex="2E 74 51"><unientity>7F58</unientity><desc>East Asian ideograph</desc></character>
-<character hex="2E 76 5F"><unientity>8037</unientity><desc>East Asian ideograph</desc></character>
-<character hex="2E 7C 2E"><unientity>831C</unientity><desc>East Asian ideograph</desc></character>
-<character hex="2E 7D 24"><unientity>83F0</unientity><desc>East Asian ideograph</desc></character>
-<character hex="2F 25 2D"><unientity>6A22</unientity><desc>East Asian ideograph</desc></character>
-<character hex="2F 25 2E"><unientity>8507</unientity><desc>East Asian ideograph</desc></character>
-<character hex="2F 2A 5A"><unientity>E9D3</unientity><unientityalt>868B</unientityalt><desc>Unrelated variant of EACC 23293D which maps to 868B</desc></character>
-<character hex="2F 2A 64"><unientity>87B5</unientity><desc>East Asian ideograph</desc></character>
-<character hex="2F 2A 73"><unientity>87CA</unientity><desc>East Asian ideograph</desc></character>
-<character hex="2F 2D 79"><unientity>88B5</unientity><desc>East Asian ideograph</desc></character>
-<character hex="2F 2F 5D"><unientity>7E48</unientity><desc>East Asian ideograph</desc></character>
-<character hex="2F 31 2B"><unientity>89BB</unientity><desc>East Asian ideograph</desc></character>
-<character hex="2F 31 43"><unientity>E9D4</unientity><unientityalt>89F5</unientityalt><desc>Unrelated variant of EACC 23315E which maps to 89F5</desc></character>
-<character hex="2F 31 7D"><unientity>8A7E</unientity><desc>East Asian ideograph</desc></character>
-<character hex="2F 33 63"><unientity>8B1A</unientity><desc>East Asian ideograph</desc></character>
-<character hex="2F 36 39"><unientity>8C7C</unientity><desc>East Asian ideograph</desc></character>
-<character hex="2F 38 33"><unientity>8D91</unientity><desc>East Asian ideograph</desc></character>
-<character hex="2F 38 6F"><unientity>8DD7</unientity><desc>East Asian ideograph</desc></character>
-<character hex="2F 3A 5E"><unientity>8E6E</unientity><desc>East Asian ideograph</desc></character>
-<character hex="2F 3B 63"><unientity>E9F7</unientity><desc>East Asian ideograph not in Unicode</desc></character>
-<character hex="2F 3C 2D"><unientity>8F3C</unientity><desc>East Asian ideograph</desc></character>
-<character hex="2F 3D 5D"><unientity>900E</unientity><desc>East Asian ideograph</desc></character>
-<character hex="2F 40 53"><unientity>914F</unientity><desc>East Asian ideograph</desc></character>
-<character hex="2F 42 31"><unientity>E9D5</unientity><unientityalt>8019</unientityalt><desc>Unrelated variant of EACC 215266 which maps to 8019</desc></character>
-<character hex="2F 44 5F"><unientity>941A</unientity><desc>East Asian ideograph</desc></character>
-<character hex="2F 4A 2E"><unientity>90B4</unientity><desc>East Asian ideograph</desc></character>
-<character hex="2F 4A 4A"><unientity>5F8F</unientity><desc>East Asian ideograph</desc></character>
-<character hex="2F 51 58"><unientity>7CC7</unientity><desc>East Asian ideograph</desc></character>
-<character hex="2F 54 76"><unientity>9AE1</unientity><desc>East Asian ideograph</desc></character>
-<character hex="2F 57 5F"><unientity>9ABE</unientity><desc>East Asian ideograph</desc></character>
-<character hex="2F 58 5C"><unientity>E9D6</unientity><unientityalt>9C51</unientityalt><desc>Unrelated variant of EACC 235945 which maps to 9C51</desc></character>
-<character hex="2F 58 70"><unientity>9C1B</unientity><desc>East Asian ideograph</desc></character>
-<character hex="2F 59 73"><unientity>9CEC</unientity><desc>East Asian ideograph</desc></character>
-<character hex="2F 5A 48"><unientity>9D44</unientity><desc>East Asian ideograph</desc></character>
-<character hex="2F 5D 3C"><unientity>6EF7</unientity><desc>East Asian ideograph</desc></character>
-<character hex="2F 5D 49"><unientity>9EA4</unientity><desc>East Asian ideograph</desc></character>
-<character hex="2F 5D 5C"><unientity>730A</unientity><desc>East Asian ideograph</desc></character>
-<character hex="2F 5E 42"><unientity>9EC9</unientity><desc>East Asian ideograph</desc></character>
-<character hex="2F 5E 66"><unientity>9B12</unientity><desc>East Asian ideograph</desc></character>
-<character hex="2F 5E 7D"><unientity>6641</unientity><desc>East Asian ideograph</desc></character>
-<character hex="2F 5F 45"><unientity>86A1</unientity><desc>East Asian ideograph</desc></character>
-<character hex="33 30 21"><unientity>58F9</unientity><desc>East Asian ideograph</desc></character>
-<character hex="33 30 3A"><unientity>8FFA</unientity><desc>East Asian ideograph</desc></character>
-<character hex="33 30 4C"><unientity>4E79</unientity><desc>East Asian ideograph</desc></character>
-<character hex="33 30 51"><unientity>8CB3</unientity><desc>East Asian ideograph</desc></character>
-<character hex="33 30 60"><unientity>4EAF</unientity><desc>East Asian ideograph</desc></character>
-<character hex="33 30 66"><unientity>5FC8</unientity><desc>East Asian ideograph</desc></character>
-<character hex="33 30 6C"><unientity>8B90</unientity><desc>East Asian ideograph</desc></character>
-<character hex="33 30 78"><unientity>5F77</unientity><desc>East Asian ideograph</desc></character>
-<character hex="33 31 4C"><unientity>5FA0</unientity><desc>East Asian ideograph</desc></character>
-<character hex="33 32 40"><unientity>4FFB</unientity><desc>East Asian ideograph</desc></character>
-<character hex="33 32 51"><unientity>5FBA</unientity><desc>East Asian ideograph</desc></character>
-<character hex="33 32 5D"><unientity>4FA1</unientity><desc>East Asian ideograph</desc></character>
-<character hex="33 32 7A"><unientity>5150</unientity><desc>East Asian ideograph</desc></character>
-<character hex="33 33 23"><unientity>4E21</unientity><desc>East Asian ideograph</desc></character>
-<character hex="33 33 2A"><unientity>4E93</unientity><desc>East Asian ideograph</desc></character>
-<character hex="33 33 30"><unientity>518A</unientity><desc>East Asian ideograph</desc></character>
-<character hex="33 33 3C"><unientity>6C37</unientity><desc>East Asian ideograph</desc></character>
-<character hex="33 33 44"><unientity>51DB</unientity><desc>East Asian ideograph</desc></character>
-<character hex="33 33 4E"><unientity>51FE</unientity><desc>East Asian ideograph</desc></character>
-<character hex="33 33 77"><unientity>5270</unientity><desc>East Asian ideograph</desc></character>
-<character hex="33 33 7B"><unientity>52E6</unientity><desc>East Asian ideograph</desc></character>
-<character hex="33 34 21"><unientity>91FC</unientity><desc>East Asian ideograph</desc></character>
-<character hex="33 34 23"><unientity>5264</unientity><desc>East Asian ideograph</desc></character>
-<character hex="33 34 28"><unientity>523C</unientity><desc>East Asian ideograph</desc></character>
-<character hex="33 34 75"><unientity>9628</unientity><desc>East Asian ideograph</desc></character>
-<character hex="33 34 7D"><unientity>53C1</unientity><desc>East Asian ideograph</desc></character>
-<character hex="33 35 29"><unientity>53DC</unientity><desc>East Asian ideograph</desc></character>
-<character hex="33 35 4E"><unientity>608B</unientity><desc>East Asian ideograph</desc></character>
-<character hex="33 35 56"><unientity>9A03</unientity><desc>East Asian ideograph</desc></character>
-<character hex="33 35 5C"><unientity>5449</unientity><desc>East Asian ideograph</desc></character>
-<character hex="33 35 64"><unientity>5415</unientity><desc>East Asian ideograph</desc></character>
-<character hex="33 35 73"><unientity>8656</unientity><desc>East Asian ideograph</desc></character>
-<character hex="33 36 23"><unientity>9F69</unientity><desc>East Asian ideograph</desc></character>
-<character hex="33 36 2A"><unientity>9B28</unientity><desc>East Asian ideograph</desc></character>
-<character hex="33 36 42"><unientity>8A92</unientity><desc>East Asian ideograph</desc></character>
-<character hex="33 36 5A"><unientity>5405</unientity><desc>East Asian ideograph</desc></character>
-<character hex="33 37 68"><unientity>8FF4</unientity><desc>East Asian ideograph</desc></character>
-<character hex="33 38 6E"><unientity>576F</unientity><desc>East Asian ideograph</desc></character>
-<character hex="33 39 2F"><unientity>9029</unientity><desc>East Asian ideograph</desc></character>
-<character hex="33 39 44"><unientity>5B2D</unientity><desc>East Asian ideograph</desc></character>
-<character hex="33 39 63"><unientity>59C9</unientity><desc>East Asian ideograph</desc></character>
-<character hex="33 3C 21"><unientity>7895</unientity><desc>East Asian ideograph</desc></character>
-<character hex="33 3C 52"><unientity>8CEC</unientity><desc>East Asian ideograph</desc></character>
-<character hex="33 3D 28"><unientity>53A8</unientity><desc>East Asian ideograph</desc></character>
-<character hex="33 3D 2A"><unientity>5E83</unientity><desc>East Asian ideograph</desc></character>
-<character hex="33 3D 2F"><unientity>5E81</unientity><desc>East Asian ideograph</desc></character>
-<character hex="33 3D 42"><unientity>7D43</unientity><desc>East Asian ideograph</desc></character>
-<character hex="33 3D 48"><unientity>5F3A</unientity><desc>East Asian ideograph</desc></character>
-<character hex="33 3D 4C"><unientity>7030</unientity><desc>East Asian ideograph</desc></character>
-<character hex="33 3D 54"><unientity>4EFD</unientity><desc>East Asian ideograph</desc></character>
-<character hex="33 3D 75"><unientity>5FB3</unientity><desc>East Asian ideograph</desc></character>
-<character hex="33 3E 7D"><unientity>7652</unientity><desc>East Asian ideograph</desc></character>
-<character hex="33 3F 22"><unientity>E97E</unientity><unientityalt>6168</unientityalt><desc>Variant of 213F22 which maps to 6168</desc></character>
-<character hex="33 3F 24"><unientity>7718</unientity><desc>East Asian ideograph</desc></character>
-<character hex="33 3F 3F"><unientity>51F4</unientity><desc>East Asian ideograph</desc></character>
-<character hex="33 3F 55"><unientity>5B3E</unientity><desc>East Asian ideograph</desc></character>
-<character hex="33 3F 58"><unientity>61F4</unientity><desc>East Asian ideograph</desc></character>
-<character hex="33 3F 5B"><unientity>6133</unientity><desc>East Asian ideograph</desc></character>
-<character hex="33 40 45"><unientity>629B</unientity><desc>East Asian ideograph</desc></character>
-<character hex="33 40 50"><unientity>62D5</unientity><desc>East Asian ideograph</desc></character>
-<character hex="33 41 31"><unientity>6425</unientity><desc>East Asian ideograph</desc></character>
-<character hex="33 41 7E"><unientity>629E</unientity><desc>East Asian ideograph</desc></character>
-<character hex="33 42 2A"><unientity>62E1</unientity><desc>East Asian ideograph</desc></character>
-<character hex="33 42 3D"><unientity>53CE</unientity><desc>East Asian ideograph</desc></character>
-<character hex="33 42 43"><unientity>52B9</unientity><desc>East Asian ideograph</desc></character>
-<character hex="33 42 44"><unientity>6559</unientity><desc>East Asian ideograph</desc></character>
-<character hex="33 42 56"><unientity>6B5B</unientity><desc>East Asian ideograph</desc></character>
-<character hex="33 42 60"><unientity>89D4</unientity><desc>East Asian ideograph</desc></character>
-<character hex="33 42 77"><unientity>65EF</unientity><desc>East Asian ideograph</desc></character>
-<character hex="33 43 2F"><unientity>664B</unientity><desc>East Asian ideograph</desc></character>
-<character hex="33 43 3E"><unientity>95C7</unientity><desc>East Asian ideograph</desc></character>
-<character hex="33 43 42"><unientity>7156</unientity><desc>East Asian ideograph</desc></character>
-<character hex="33 43 57"><unientity>6702</unientity><desc>East Asian ideograph</desc></character>
-<character hex="33 43 69"><unientity>5932</unientity><desc>East Asian ideograph</desc></character>
-<character hex="33 44 25"><unientity>76C3</unientity><desc>East Asian ideograph</desc></character>
-<character hex="33 44 49"><unientity>6144</unientity><desc>East Asian ideograph</desc></character>
-<character hex="33 45 27"><unientity>6918</unientity><desc>East Asian ideograph</desc></character>
-<character hex="33 45 50"><unientity>7F47</unientity><desc>East Asian ideograph</desc></character>
-<character hex="33 45 6D"><unientity>826A</unientity><desc>East Asian ideograph</desc></character>
-<character hex="33 46 21"><unientity>8B99</unientity><desc>East Asian ideograph</desc></character>
-<character hex="33 46 33"><unientity>E97F</unientity><unientityalt>6B8B</unientityalt><desc>Variant of 274633 which maps to 6B8B</desc></character>
-<character hex="33 46 3C"><unientity>6BBB</unientity><desc>East Asian ideograph</desc></character>
-<character hex="33 46 65"><unientity>6C61</unientity><desc>East Asian ideograph</desc></character>
-<character hex="33 46 74"><unientity>76C5</unientity><desc>East Asian ideograph</desc></character>
-<character hex="33 46 7A"><unientity>6CA1</unientity><desc>East Asian ideograph</desc></character>
-<character hex="33 47 29"><unientity>6E2B</unientity><desc>East Asian ideograph</desc></character>
-<character hex="33 47 30"><unientity>6E5F</unientity><desc>East Asian ideograph</desc></character>
-<character hex="33 47 40"><unientity>6D1A</unientity><desc>East Asian ideograph</desc></character>
-<character hex="33 47 4A"><unientity>6D1F</unientity><desc>East Asian ideograph</desc></character>
-<character hex="33 47 55"><unientity>6FEC</unientity><desc>East Asian ideograph</desc></character>
-<character hex="33 47 5E"><unientity>6FB9</unientity><desc>East Asian ideograph</desc></character>
-<character hex="33 47 5F"><unientity>60BD</unientity><desc>East Asian ideograph</desc></character>
-<character hex="33 47 6F"><unientity>6D44</unientity><desc>East Asian ideograph</desc></character>
-<character hex="33 47 70"><unientity>5A6C</unientity><desc>East Asian ideograph</desc></character>
-<character hex="33 47 7B"><unientity>904A</unientity><desc>East Asian ideograph</desc></character>
-<character hex="33 48 3B"><unientity>6CDD</unientity><desc>East Asian ideograph</desc></character>
-<character hex="33 48 5E"><unientity>67D2</unientity><desc>East Asian ideograph</desc></character>
-<character hex="33 49 2E"><unientity>6F81</unientity><desc>East Asian ideograph</desc></character>
-<character hex="33 49 4A"><unientity>70D6</unientity><desc>East Asian ideograph</desc></character>
-<character hex="33 49 68"><unientity>7133</unientity><desc>East Asian ideograph</desc></character>
-<character hex="33 49 6A"><unientity>934A</unientity><desc>East Asian ideograph</desc></character>
-<character hex="33 4A 28"><unientity>91BC</unientity><desc>East Asian ideograph</desc></character>
-<character hex="33 4A 58"><unientity>89DD</unientity><desc>East Asian ideograph</desc></character>
-<character hex="33 4C 2C"><unientity>754D</unientity><desc>East Asian ideograph</desc></character>
-<character hex="33 4C 36"><unientity>E980</unientity><unientityalt>753B</unientityalt><desc>Variant of 274C36 which maps to 753B</desc></character>
-<character hex="33 4C 37"><unientity>8E6F</unientity><desc>East Asian ideograph</desc></character>
-<character hex="33 4C 3E"><unientity>8E08</unientity><desc>East Asian ideograph</desc></character>
-<character hex="33 4C 7B"><unientity>767A</unientity><desc>East Asian ideograph</desc></character>
-<character hex="33 4E 37"><unientity>784E</unientity><desc>East Asian ideograph</desc></character>
-<character hex="33 4E 73"><unientity>79A5</unientity><desc>East Asian ideograph</desc></character>
-<character hex="33 4F 37"><unientity>5EE9</unientity><desc>East Asian ideograph</desc></character>
-<character hex="33 4F 3A"><unientity>7A49</unientity><desc>East Asian ideograph</desc></character>
-<character hex="33 4F 59"><unientity>7A93</unientity><desc>East Asian ideograph</desc></character>
-<character hex="33 4F 5E"><unientity>7A91</unientity><desc>East Asian ideograph</desc></character>
-<character hex="33 4F 71"><unientity>54B2</unientity><desc>East Asian ideograph</desc></character>
-<character hex="33 50 2A"><unientity>9257</unientity><desc>East Asian ideograph</desc></character>
-<character hex="33 50 2B"><unientity>724B</unientity><desc>East Asian ideograph</desc></character>
-<character hex="33 50 65"><unientity>7A45</unientity><desc>East Asian ideograph</desc></character>
-<character hex="33 51 2E"><unientity>7E8D</unientity><desc>East Asian ideograph</desc></character>
-<character hex="33 51 3C"><unientity>7D4C</unientity><desc>East Asian ideograph</desc></character>
-<character hex="33 51 47"><unientity>7EEE</unientity><desc>East Asian ideograph</desc></character>
-<character hex="33 51 4C"><unientity>7DD1</unientity><desc>East Asian ideograph</desc></character>
-<character hex="33 51 5C"><unientity>7DAB</unientity><desc>East Asian ideograph</desc></character>
-<character hex="33 51 6B"><unientity>7DD0</unientity><desc>East Asian ideograph</desc></character>
-<character hex="33 51 6D"><unientity>6374</unientity><desc>East Asian ideograph</desc></character>
-<character hex="33 51 72"><unientity>7D89</unientity><desc>East Asian ideograph</desc></character>
-<character hex="33 52 23"><unientity>7E8E</unientity><desc>East Asian ideograph</desc></character>
-<character hex="33 52 28"><unientity>94B5</unientity><desc>East Asian ideograph</desc></character>
-<character hex="33 52 30"><unientity>E981</unientity><unientityalt>7F6E</unientityalt><desc>Variant of 215230 which maps to 7F6E</desc></character>
-<character hex="33 52 34"><unientity>99E1</unientity><desc>East Asian ideograph</desc></character>
-<character hex="33 52 38"><unientity>8989</unientity><desc>East Asian ideograph</desc></character>
-<character hex="33 52 3F"><unientity>8B71</unientity><desc>East Asian ideograph</desc></character>
-<character hex="33 52 59"><unientity>7E59</unientity><desc>East Asian ideograph</desc></character>
-<character hex="33 52 5B"><unientity>71FF</unientity><desc>East Asian ideograph</desc></character>
-<character hex="33 52 76"><unientity>8061</unientity><desc>East Asian ideograph</desc></character>
-<character hex="33 53 33"><unientity>80BB</unientity><desc>East Asian ideograph</desc></character>
-<character hex="33 53 47"><unientity>81D9</unientity><desc>East Asian ideograph</desc></character>
-<character hex="33 53 7D"><unientity>9AD5</unientity><desc>East Asian ideograph</desc></character>
-<character hex="33 54 45"><unientity>67C1</unientity><desc>East Asian ideograph</desc></character>
-<character hex="33 54 46"><unientity>8221</unientity><desc>East Asian ideograph</desc></character>
-<character hex="33 54 61"><unientity>6CD6</unientity><desc>East Asian ideograph</desc></character>
-<character hex="33 55 61"><unientity>8462</unientity><desc>East Asian ideograph</desc></character>
-<character hex="33 55 68"><unientity>8406</unientity><desc>East Asian ideograph</desc></character>
-<character hex="33 55 77"><unientity>8602</unientity><desc>East Asian ideograph</desc></character>
-<character hex="33 56 35"><unientity>85AC</unientity><desc>East Asian ideograph</desc></character>
-<character hex="33 56 52"><unientity>87C1</unientity><desc>East Asian ideograph</desc></character>
-<character hex="33 56 7C"><unientity>8671</unientity><desc>East Asian ideograph</desc></character>
-<character hex="33 57 2E"><unientity>880E</unientity><desc>East Asian ideograph</desc></character>
-<character hex="33 57 38"><unientity>880F</unientity><desc>East Asian ideograph</desc></character>
-<character hex="33 57 60"><unientity>88E0</unientity><desc>East Asian ideograph</desc></character>
-<character hex="33 57 72"><unientity>8943</unientity><desc>East Asian ideograph</desc></character>
-<character hex="33 57 73"><unientity>88B4</unientity><desc>East Asian ideograph</desc></character>
-<character hex="33 58 21"><unientity>97C8</unientity><desc>East Asian ideograph</desc></character>
-<character hex="33 58 30"><unientity>658D</unientity><desc>East Asian ideograph</desc></character>
-<character hex="33 58 34"><unientity>89E7</unientity><desc>East Asian ideograph</desc></character>
-<character hex="33 59 41"><unientity>54D7</unientity><desc>East Asian ideograph</desc></character>
-<character hex="33 59 58"><unientity>8C4A</unientity><desc>East Asian ideograph</desc></character>
-<character hex="33 5A 7B"><unientity>8E28</unientity><desc>East Asian ideograph</desc></character>
-<character hex="33 5B 70"><unientity>5EF8</unientity><desc>East Asian ideograph</desc></character>
-<character hex="33 5D 23"><unientity>8A76</unientity><desc>East Asian ideograph</desc></character>
-<character hex="33 5D 3B"><unientity>57DC</unientity><desc>East Asian ideograph</desc></character>
-<character hex="33 5E 21"><unientity>9221</unientity><desc>East Asian ideograph</desc></character>
-<character hex="33 5E 2F"><unientity>5257</unientity><desc>East Asian ideograph</desc></character>
-<character hex="33 5E 3D"><unientity>9244</unientity><desc>East Asian ideograph</desc></character>
-<character hex="33 5E 42"><unientity>9452</unientity><desc>East Asian ideograph</desc></character>
-<character hex="33 5F 34"><unientity>90C4</unientity><desc>East Asian ideograph</desc></character>
-<character hex="33 5F 3D"><unientity>96B7</unientity><desc>East Asian ideograph</desc></character>
-<character hex="33 5F 43"><unientity>9D08</unientity><desc>East Asian ideograph</desc></character>
-<character hex="33 5F 49"><unientity>9D70</unientity><desc>East Asian ideograph</desc></character>
-<character hex="33 5F 73"><unientity>9759</unientity><desc>East Asian ideograph</desc></character>
-<character hex="33 60 54"><unientity>985B</unientity><desc>East Asian ideograph</desc></character>
-<character hex="33 60 58"><unientity>9855</unientity><desc>East Asian ideograph</desc></character>
-<character hex="33 60 62"><unientity>98C3</unientity><desc>East Asian ideograph</desc></character>
-<character hex="33 61 5A"><unientity>8EB0</unientity><desc>East Asian ideograph</desc></character>
-<character hex="33 61 62"><unientity>9A23</unientity><desc>East Asian ideograph</desc></character>
-<character hex="33 61 79"><unientity>9C7B</unientity><desc>East Asian ideograph</desc></character>
-<character hex="33 62 5E"><unientity>9EAA</unientity><desc>East Asian ideograph</desc></character>
-<character hex="33 62 5F"><unientity>8534</unientity><desc>East Asian ideograph</desc></character>
-<character hex="33 62 75"><unientity>76BC</unientity><desc>East Asian ideograph</desc></character>
-<character hex="33 62 7D"><unientity>6589</unientity><desc>East Asian ideograph</desc></character>
-<character hex="33 63 21"><unientity>6B6F</unientity><desc>East Asian ideograph</desc></character>
-<character hex="33 63 2B"><unientity>7ADC</unientity><desc>East Asian ideograph</desc></character>
-<character hex="33 6B 33"><unientity>524F</unientity><desc>East Asian ideograph</desc></character>
-<character hex="33 6C 6B"><unientity>6031</unientity><desc>East Asian ideograph</desc></character>
-<character hex="33 73 45"><unientity>9F67</unientity><desc>East Asian ideograph</desc></character>
-<character hex="34 24 53"><unientity>5CBD</unientity><desc>East Asian ideograph</desc></character>
-<character hex="34 38 75"><unientity>5FDE</unientity><desc>East Asian ideograph</desc></character>
-<character hex="34 3A 5B"><unientity>572C</unientity><desc>East Asian ideograph</desc></character>
-<character hex="34 3E 38"><unientity>7BDA</unientity><desc>East Asian ideograph</desc></character>
-<character hex="34 41 38"><unientity>8022</unientity><desc>East Asian ideograph</desc></character>
-<character hex="34 41 77"><unientity>8264</unientity><desc>East Asian ideograph</desc></character>
-<character hex="34 49 2F"><unientity>6D34</unientity><desc>East Asian ideograph</desc></character>
-<character hex="34 51 75"><unientity>7162</unientity><desc>East Asian ideograph</desc></character>
-<character hex="34 54 52"><unientity>7118</unientity><desc>East Asian ideograph</desc></character>
-<character hex="34 5D 6B"><unientity>756D</unientity><desc>East Asian ideograph</desc></character>
-<character hex="34 5E 3B"><unientity>80AC</unientity><desc>East Asian ideograph</desc></character>
-<character hex="34 5E 47"><unientity>75FE</unientity><desc>East Asian ideograph</desc></character>
-<character hex="34 61 26"><unientity>6900</unientity><desc>East Asian ideograph</desc></character>
-<character hex="34 66 22"><unientity>589D</unientity><desc>East Asian ideograph</desc></character>
-<character hex="34 68 2A"><unientity>7C7C</unientity><desc>East Asian ideograph</desc></character>
-<character hex="34 71 5A"><unientity>7E1A</unientity><desc>East Asian ideograph</desc></character>
-<character hex="34 74 31"><unientity>58DC</unientity><desc>East Asian ideograph</desc></character>
-<character hex="34 78 2A"><unientity>90C5</unientity><desc>East Asian ideograph</desc></character>
-<character hex="34 7D 24"><unientity>83C7</unientity><desc>East Asian ideograph</desc></character>
-<character hex="35 34 4D"><unientity>8B5B</unientity><desc>East Asian ideograph</desc></character>
-<character hex="35 34 7B"><unientity>8B2D</unientity><desc>East Asian ideograph</desc></character>
-<character hex="35 41 56"><unientity>91BE</unientity><desc>East Asian ideograph</desc></character>
-<character hex="35 50 53"><unientity>98C8</unientity><desc>East Asian ideograph</desc></character>
-<character hex="35 57 39"><unientity>9C76</unientity><desc>East Asian ideograph</desc></character>
-<character hex="35 5D 5C"><unientity>8C8E</unientity><desc>East Asian ideograph</desc></character>
-<character hex="35 5E 76"><unientity>82BE</unientity><desc>East Asian ideograph</desc></character>
-<character hex="39 30 2D"><unientity>534B</unientity><desc>East Asian ideograph</desc></character>
-<character hex="39 30 3A"><unientity>5EFC</unientity><desc>East Asian ideograph</desc></character>
-<character hex="39 30 4C"><unientity>4E81</unientity><desc>East Asian ideograph</desc></character>
-<character hex="39 30 52"><unientity>65BC</unientity><desc>East Asian ideograph</desc></character>
-<character hex="39 30 54"><unientity>4F0D</unientity><desc>East Asian ideograph</desc></character>
-<character hex="39 30 78"><unientity>9AE3</unientity><desc>East Asian ideograph</desc></character>
-<character hex="39 32 46"><unientity>4F1D</unientity><desc>East Asian ideograph</desc></character>
-<character hex="39 34 28"><unientity>5227</unientity><desc>East Asian ideograph</desc></character>
-<character hex="39 34 39"><unientity>61C3</unientity><desc>East Asian ideograph</desc></character>
-<character hex="39 34 5B"><unientity>965E</unientity><desc>East Asian ideograph</desc></character>
-<character hex="39 34 60"><unientity>604A</unientity><desc>East Asian ideograph</desc></character>
-<character hex="39 35 73"><unientity>5611</unientity><desc>East Asian ideograph</desc></character>
-<character hex="39 35 77"><unientity>9FA2</unientity><desc>East Asian ideograph</desc></character>
-<character hex="39 36 5A"><unientity>8AE0</unientity><desc>East Asian ideograph</desc></character>
-<character hex="39 36 5E"><unientity>559E</unientity><desc>East Asian ideograph</desc></character>
-<character hex="39 37 70"><unientity>56F2</unientity><desc>East Asian ideograph</desc></character>
-<character hex="39 39 44"><unientity>59B3</unientity><desc>East Asian ideograph</desc></character>
-<character hex="39 3B 39"><unientity>5BF3</unientity><desc>East Asian ideograph</desc></character>
-<character hex="39 3B 6E"><unientity>5C97</unientity><desc>East Asian ideograph</desc></character>
-<character hex="39 3B 78"><unientity>E922</unientity><desc>Duplicate simplified ideograph</desc></character>
-<character hex="39 3C 52"><unientity>8D26</unientity><desc>East Asian ideograph</desc></character>
-<character hex="39 3D 6F"><unientity>8907</unientity><desc>East Asian ideograph</desc></character>
-<character hex="39 3E 47"><unientity>8CC9</unientity><desc>East Asian ideograph</desc></character>
-<character hex="39 3E 4C"><unientity>6142</unientity><desc>East Asian ideograph</desc></character>
-<character hex="39 3E 61"><unientity>60AA</unientity><desc>East Asian ideograph</desc></character>
-<character hex="39 3E 7D"><unientity>7609</unientity><desc>East Asian ideograph</desc></character>
-<character hex="39 40 22"><unientity>6443</unientity><desc>East Asian ideograph</desc></character>
-<character hex="39 40 42"><unientity>646D</unientity><desc>East Asian ideograph</desc></character>
-<character hex="39 41 7C"><unientity>62E0</unientity><desc>East Asian ideograph</desc></character>
-<character hex="39 42 43"><unientity>4FF2</unientity><desc>East Asian ideograph</desc></character>
-<character hex="39 42 4F"><unientity>5554</unientity><desc>East Asian ideograph</desc></character>
-<character hex="39 43 30"><unientity>6644</unientity><desc>East Asian ideograph</desc></character>
-<character hex="39 44 44"><unientity>8988</unientity><desc>East Asian ideograph</desc></character>
-<character hex="39 44 7D"><unientity>6AC2</unientity><desc>East Asian ideograph</desc></character>
-<character hex="39 45 6D"><unientity>826B</unientity><desc>East Asian ideograph</desc></character>
-<character hex="39 46 34"><unientity>E982</unientity><unientityalt>6B96</unientityalt><desc>Variant of 214634 which maps to 6B96</desc></character>
-<character hex="39 47 35"><unientity>6C3E</unientity><desc>East Asian ideograph</desc></character>
-<character hex="39 47 6F"><unientity>51C0</unientity><desc>East Asian ideograph</desc></character>
-<character hex="39 48 3B"><unientity>9061</unientity><desc>East Asian ideograph</desc></character>
-<character hex="39 49 28"><unientity>6D5C</unientity><desc>East Asian ideograph</desc></character>
-<character hex="39 49 44"><unientity>6B12</unientity><desc>East Asian ideograph</desc></character>
-<character hex="39 49 56"><unientity>792E</unientity><desc>East Asian ideograph</desc></character>
-<character hex="39 4A 60"><unientity>9AE6</unientity><desc>East Asian ideograph</desc></character>
-<character hex="39 4C 2D"><unientity>7546</unientity><desc>East Asian ideograph</desc></character>
-<character hex="39 50 50"><unientity>7BED</unientity><desc>East Asian ideograph</desc></character>
-<character hex="39 50 5B"><unientity>9B3B</unientity><desc>East Asian ideograph</desc></character>
-<character hex="39 50 63"><unientity>9939</unientity><desc>East Asian ideograph</desc></character>
-<character hex="39 51 79"><unientity>7D75</unientity><desc>East Asian ideograph</desc></character>
-<character hex="39 52 30"><unientity>5BD8</unientity><desc>East Asian ideograph</desc></character>
-<character hex="39 52 5B"><unientity>66DC</unientity><desc>East Asian ideograph</desc></character>
-<character hex="39 52 6B"><unientity>7094</unientity><desc>East Asian ideograph</desc></character>
-<character hex="39 54 77"><unientity>85A6</unientity><desc>East Asian ideograph</desc></character>
-<character hex="39 55 3C"><unientity>5D0B</unientity><desc>East Asian ideograph</desc></character>
-<character hex="39 55 64"><unientity>6726</unientity><desc>East Asian ideograph</desc></character>
-<character hex="39 55 68"><unientity>83DD</unientity><desc>East Asian ideograph</desc></character>
-<character hex="39 55 77"><unientity>854B</unientity><desc>East Asian ideograph</desc></character>
-<character hex="39 56 3C"><unientity>56CC</unientity><desc>East Asian ideograph</desc></character>
-<character hex="39 56 43"><unientity>4E55</unientity><desc>East Asian ideograph</desc></character>
-<character hex="39 56 52"><unientity>87A1</unientity><desc>East Asian ideograph</desc></character>
-<character hex="39 57 73"><unientity>7DAF</unientity><desc>East Asian ideograph</desc></character>
-<character hex="39 58 21"><unientity>97E4</unientity><desc>East Asian ideograph</desc></character>
-<character hex="39 58 29"><unientity>69FB</unientity><desc>East Asian ideograph</desc></character>
-<character hex="39 59 3F"><unientity>8A3C</unientity><desc>East Asian ideograph</desc></character>
-<character hex="39 5A 2F"><unientity>58F2</unientity><desc>East Asian ideograph</desc></character>
-<character hex="39 5A 36"><unientity>983C</unientity><desc>East Asian ideograph</desc></character>
-<character hex="39 5D 23"><unientity>91BB</unientity><desc>East Asian ideograph</desc></character>
-<character hex="39 5E 2F"><unientity>5277</unientity><desc>East Asian ideograph</desc></character>
-<character hex="39 5E 3D"><unientity>9295</unientity><desc>East Asian ideograph</desc></character>
-<character hex="39 5E 42"><unientity>9274</unientity><desc>East Asian ideograph</desc></character>
-<character hex="39 5E 6F"><unientity>7A7D</unientity><desc>East Asian ideograph</desc></character>
-<character hex="39 5E 71"><unientity>5742</unientity><desc>East Asian ideograph</desc></character>
-<character hex="39 5F 49"><unientity>5F6B</unientity><desc>East Asian ideograph</desc></character>
-<character hex="39 5F 68"><unientity>8987</unientity><desc>East Asian ideograph</desc></character>
-<character hex="39 60 74"><unientity>55B0</unientity><desc>East Asian ideograph</desc></character>
-<character hex="39 61 67"><unientity>9B2A</unientity><desc>East Asian ideograph</desc></character>
-<character hex="39 61 79"><unientity>5C20</unientity><desc>East Asian ideograph</desc></character>
-<character hex="39 62 23"><unientity>E983</unientity><unientityalt>9BFD</unientityalt><desc>Variant of 216223 which maps to 9BFD</desc></character>
-<character hex="39 6B 2F"><unientity>521F</unientity><desc>East Asian ideograph</desc></character>
-<character hex="39 6B 33"><unientity>E9F8</unientity><desc>East Asian ideograph not in Unicode</desc></character>
-<character hex="39 6C 6B"><unientity>60A4</unientity><desc>East Asian ideograph</desc></character>
-<character hex="3A 28 4C"><unientity>E984</unientity><unientityalt>53A9</unientityalt><desc>Variant of 4C284C which maps to 53A9</desc></character>
-<character hex="3A 2F 7C"><unientity>64C0</unientity><desc>East Asian ideograph</desc></character>
-<character hex="3A 3B 7D"><unientity>67B1</unientity><desc>East Asian ideograph</desc></character>
-<character hex="3A 40 34"><unientity>6855</unientity><desc>East Asian ideograph</desc></character>
-<character hex="3A 6A 7C"><unientity>7BEA</unientity><desc>East Asian ideograph</desc></character>
-<character hex="3A 78 7D"><unientity>80FC</unientity><desc>East Asian ideograph</desc></character>
-<character hex="3A 79 70"><unientity>81D5</unientity><desc>East Asian ideograph</desc></character>
-<character hex="3B 2D 44"><unientity>8842</unientity><desc>East Asian ideograph</desc></character>
-<character hex="3B 39 22"><unientity>8DB5</unientity><desc>East Asian ideograph</desc></character>
-<character hex="3F 30 4C"><unientity>5E79</unientity><desc>East Asian ideograph</desc></character>
-<character hex="3F 30 78"><unientity>5023</unientity><desc>East Asian ideograph</desc></character>
-<character hex="3F 34 7D"><unientity>84E1</unientity><desc>East Asian ideograph</desc></character>
-<character hex="3F 35 73"><unientity>8B3C</unientity><desc>East Asian ideograph</desc></character>
-<character hex="3F 3D 6F"><unientity>8986</unientity><desc>East Asian ideograph</desc></character>
-<character hex="3F 3E 47"><unientity>5379</unientity><desc>East Asian ideograph</desc></character>
-<character hex="3F 3F 24"><unientity>614E</unientity><desc>East Asian ideograph</desc></character>
-<character hex="3F 40 4F"><unientity>638A</unientity><desc>East Asian ideograph</desc></character>
-<character hex="3F 42 4F"><unientity>E985</unientity><unientityalt>542F</unientityalt><desc>Variant of 27424F which maps to 542F</desc></character>
-<character hex="3F 44 72"><unientity>7881</unientity><desc>East Asian ideograph</desc></character>
-<character hex="3F 45 6D"><unientity>8263</unientity><desc>East Asian ideograph</desc></character>
-<character hex="3F 46 21"><unientity>9A69</unientity><desc>East Asian ideograph</desc></character>
-<character hex="3F 46 29"><unientity>4E97</unientity><desc>East Asian ideograph</desc></character>
-<character hex="3F 46 2B"><unientity>5E30</unientity><desc>East Asian ideograph</desc></character>
-<character hex="3F 47 6F"><unientity>51C8</unientity><desc>East Asian ideograph</desc></character>
-<character hex="3F 49 26"><unientity>6E08</unientity><desc>East Asian ideograph</desc></character>
-<character hex="3F 49 56"><unientity>7832</unientity><desc>East Asian ideograph</desc></character>
-<character hex="3F 4A 28"><unientity>9DF0</unientity><desc>East Asian ideograph</desc></character>
-<character hex="3F 4A 60"><unientity>7266</unientity><desc>East Asian ideograph</desc></character>
-<character hex="3F 4C 3C"><unientity>7582</unientity><desc>East Asian ideograph</desc></character>
-<character hex="3F 51 6D"><unientity>6403</unientity><desc>East Asian ideograph</desc></character>
-<character hex="3F 55 64"><unientity>61DE</unientity><desc>East Asian ideograph</desc></character>
-<character hex="3F 56 31"><unientity>517F</unientity><desc>East Asian ideograph</desc></character>
-<character hex="3F 59 59"><unientity>8276</unientity><desc>East Asian ideograph</desc></character>
-<character hex="3F 5E 60"><unientity>9586</unientity><desc>East Asian ideograph</desc></character>
-<character hex="3F 5F 34"><unientity>E9F9</unientity><desc>East Asian ideograph not in Unicode</desc></character>
-<character hex="3F 5F 35"><unientity>6B9E</unientity><desc>East Asian ideograph</desc></character>
-<character hex="3F 5F 49"><unientity>7431</unientity><desc>East Asian ideograph</desc></character>
-<character hex="3F 61 4C"><unientity>99C5</unientity><desc>East Asian ideograph</desc></character>
-<character hex="3F 61 79"><unientity>5C1F</unientity><desc>East Asian ideograph</desc></character>
-<character hex="45 30 4C"><unientity>69A6</unientity><desc>East Asian ideograph</desc></character>
-<character hex="45 30 51"><unientity>8D30</unientity><desc>East Asian ideograph</desc></character>
-<character hex="45 33 36"><unientity>5B82</unientity><desc>East Asian ideograph</desc></character>
-<character hex="45 34 21"><unientity>5271</unientity><desc>East Asian ideograph</desc></character>
-<character hex="45 36 66"><unientity>5AD0</unientity><desc>East Asian ideograph</desc></character>
-<character hex="45 37 55"><unientity>56AE</unientity><desc>East Asian ideograph</desc></character>
-<character hex="45 37 68"><unientity>5EFB</unientity><desc>East Asian ideograph</desc></character>
-<character hex="45 3D 53"><unientity>5F66</unientity><desc>East Asian ideograph</desc></character>
-<character hex="45 3F 6D"><unientity>52E0</unientity><desc>East Asian ideograph</desc></character>
-<character hex="45 41 46"><unientity>63DB</unientity><desc>East Asian ideograph</desc></character>
-<character hex="45 45 6D"><unientity>6A10</unientity><desc>East Asian ideograph</desc></character>
-<character hex="45 46 2B"><unientity>7688</unientity><desc>East Asian ideograph</desc></character>
-<character hex="45 46 5B"><unientity>6C2F</unientity><desc>East Asian ideograph</desc></character>
-<character hex="45 47 38"><unientity>6CFA</unientity><desc>East Asian ideograph</desc></character>
-<character hex="45 47 74"><unientity>6E15</unientity><desc>East Asian ideograph</desc></character>
-<character hex="45 4B 7A"><unientity>7523</unientity><desc>East Asian ideograph</desc></character>
-<character hex="45 4C 3C"><unientity>7589</unientity><desc>East Asian ideograph</desc></character>
-<character hex="45 4E 43"><unientity>E986</unientity><unientityalt>788C</unientityalt><desc>Variant of 214E43 which maps to 788C</desc></character>
-<character hex="45 4E 75"><unientity>7984</unientity><desc>East Asian ideograph</desc></character>
-<character hex="45 4F 45"><unientity>9896</unientity><desc>East Asian ideograph</desc></character>
-<character hex="45 51 22"><unientity>7D0D</unientity><desc>East Asian ideograph</desc></character>
-<character hex="45 51 64"><unientity>53BF</unientity><desc>East Asian ideograph</desc></character>
-<character hex="45 56 4B"><unientity>E987</unientity><unientityalt>865E</unientityalt><desc>Variant of 21564B which maps to 865E</desc></character>
-<character hex="45 57 46"><unientity>672F</unientity><desc>East Asian ideograph</desc></character>
-<character hex="45 58 37"><unientity>8BA0</unientity><desc>East Asian ideograph</desc></character>
-<character hex="45 58 47"><unientity>E988</unientity><unientityalt>8A25</unientityalt><desc>Variant of 215847 which maps to 8A25</desc></character>
-<character hex="45 5D 3E"><unientity>9485</unientity><desc>East Asian ideograph</desc></character>
-<character hex="45 5E 21"><unientity>953A</unientity><desc>East Asian ideograph</desc></character>
-<character hex="45 60 36"><unientity>97FF</unientity><desc>East Asian ideograph</desc></character>
-<character hex="45 60 4E"><unientity>984F</unientity><desc>East Asian ideograph</desc></character>
-<character hex="45 60 64"><unientity>9963</unientity><desc>East Asian ideograph</desc></character>
-<character hex="45 60 6B"><unientity>98F0</unientity><desc>East Asian ideograph</desc></character>
-<character hex="45 60 76"><unientity>9980</unientity><desc>East Asian ideograph</desc></character>
-<character hex="45 62 60"><unientity>5E7A</unientity><desc>East Asian ideograph</desc></character>
-<character hex="45 63 24"><unientity>9F61</unientity><desc>East Asian ideograph</desc></character>
-<character hex="46 28 4C"><unientity>5ED0</unientity><desc>East Asian ideograph</desc></character>
-<character hex="46 60 74"><unientity>76B2</unientity><desc>East Asian ideograph</desc></character>
-<character hex="47 2C 4D"><unientity>E989</unientity><unientityalt>8801</unientityalt><desc>Variant of 232C4D which maps to 8801</desc></character>
-<character hex="47 34 22"><unientity>8C2A</unientity><desc>East Asian ideograph</desc></character>
-<character hex="47 34 7B"><unientity>8C2B</unientity><desc>East Asian ideograph</desc></character>
-<character hex="47 35 39"><unientity>8B9E</unientity><desc>East Asian ideograph</desc></character>
-<character hex="47 36 6F"><unientity>8D4D</unientity><desc>East Asian ideograph</desc></character>
-<character hex="47 42 36"><unientity>949A</unientity><desc>East Asian ideograph</desc></character>
-<character hex="47 42 70"><unientity>94BC</unientity><desc>East Asian ideograph</desc></character>
-<character hex="47 49 31"><unientity>95F6</unientity><desc>East Asian ideograph</desc></character>
-<character hex="47 4E 5C"><unientity>E98A</unientity><unientityalt>97DE</unientityalt><desc>Variant of 234E5C which maps to 97DE</desc></character>
-<character hex="47 52 22"><unientity>9957</unientity><desc>East Asian ideograph</desc></character>
-<character hex="47 57 7A"><unientity>E98B</unientity><unientityalt>9BD6</unientityalt><desc>Variant of 23577A which maps to 9BD6</desc></character>
-<character hex="47 59 4E"><unientity>9C3A</unientity><desc>East Asian ideograph</desc></character>
-<character hex="4B 30 21"><unientity>58F1</unientity><desc>East Asian ideograph</desc></character>
-<character hex="4B 30 50"><unientity>4E8A</unientity><desc>East Asian ideograph</desc></character>
-<character hex="4B 30 51"><unientity>5F10</unientity><desc>East Asian ideograph</desc></character>
-<character hex="4B 30 52"><unientity>6275</unientity><desc>East Asian ideograph</desc></character>
-<character hex="4B 30 57"><unientity>4E99</unientity><desc>East Asian ideograph</desc></character>
-<character hex="4B 30 6C"><unientity>96E0</unientity><desc>East Asian ideograph</desc></character>
-<character hex="4B 30 6E"><unientity>E98C</unientity><unientityalt>4EE4</unientityalt><desc>Variant of 21306E which maps to 4EE4</desc></character>
-<character hex="4B 30 72"><unientity>4EED</unientity><desc>East Asian ideograph</desc></character>
-<character hex="4B 31 2D"><unientity>4F2B</unientity><desc>East Asian ideograph</desc></character>
-<character hex="4B 31 30"><unientity>4FAB</unientity><desc>East Asian ideograph</desc></character>
-<character hex="4B 31 44"><unientity>E98D</unientity><unientityalt>4F36</unientityalt><desc>Variant of 213144 which maps to 4F36</desc></character>
-<character hex="4B 31 4C"><unientity>5F95</unientity><desc>East Asian ideograph</desc></character>
-<character hex="4B 31 6A"><unientity>723C</unientity><desc>East Asian ideograph</desc></character>
-<character hex="4B 31 78"><unientity>E98E</unientity><unientityalt>5029</unientityalt><desc>Variant of 213178 which maps to 5029</desc></character>
-<character hex="4B 31 7C"><unientity>5024</unientity><desc>East Asian ideograph</desc></character>
-<character hex="4B 32 31"><unientity>4EEE</unientity><desc>East Asian ideograph</desc></character>
-<character hex="4B 32 48"><unientity>E9FA</unientity><desc>East Asian ideograph not in Unicode</desc></character>
-<character hex="4B 32 4E"><unientity>E98F</unientity><unientityalt>50E7</unientityalt><desc>Variant of 21324E which maps to 50E7</desc></character>
-<character hex="4B 32 5F"><unientity>50BB</unientity><desc>East Asian ideograph</desc></character>
-<character hex="4B 33 21"><unientity>5185</unientity><desc>East Asian ideograph</desc></character>
-<character hex="4B 33 22"><unientity>E990</unientity><unientityalt>5168</unientityalt><desc>Variant of 213322 which maps to 5168</desc></character>
-<character hex="4B 33 24"><unientity>E991</unientity><unientityalt>634C</unientityalt><desc>Variant of 2D3324 which maps to 634C</desc></character>
-<character hex="4B 33 3E"><unientity>F92E</unientity><desc>East Asian ideograph</desc></character>
-<character hex="4B 33 51"><unientity>5204</unientity><desc>East Asian ideograph</desc></character>
-<character hex="4B 33 54"><unientity>82C5</unientity><desc>East Asian ideograph</desc></character>
-<character hex="4B 33 55"><unientity>520B</unientity><desc>East Asian ideograph</desc></character>
-<character hex="4B 33 5B"><unientity>522B</unientity><desc>East Asian ideograph</desc></character>
-<character hex="4B 34 21"><unientity>5263</unientity><desc>East Asian ideograph</desc></character>
-<character hex="4B 34 35"><unientity>52B4</unientity><desc>East Asian ideograph</desc></character>
-<character hex="4B 34 36"><unientity>52F2</unientity><desc>East Asian ideograph</desc></character>
-<character hex="4B 34 6B"><unientity>5DF5</unientity><desc>East Asian ideograph</desc></character>
-<character hex="4B 34 74"><unientity>E992</unientity><unientityalt>537F</unientityalt><desc>Variant of 213474 which maps to 537F</desc></character>
-<character hex="4B 35 6A"><unientity>55EC</unientity><desc>East Asian ideograph</desc></character>
-<character hex="4B 35 7B"><unientity>54CC</unientity><desc>East Asian ideograph</desc></character>
-<character hex="4B 36 22"><unientity>8C18</unientity><desc>East Asian ideograph</desc></character>
-<character hex="4B 36 42"><unientity>8BF6</unientity><desc>East Asian ideograph</desc></character>
-<character hex="4B 36 66"><unientity>5A1A</unientity><desc>East Asian ideograph</desc></character>
-<character hex="4B 36 68"><unientity>5358</unientity><desc>East Asian ideograph</desc></character>
-<character hex="4B 37 2C"><unientity>5606</unientity><desc>East Asian ideograph</desc></character>
-<character hex="4B 37 2F"><unientity>5C1C</unientity><desc>East Asian ideograph</desc></character>
-<character hex="4B 37 49"><unientity>E993</unientity><unientityalt>5668</unientityalt><desc>Variant of 213749 which maps to 5668</desc></character>
-<character hex="4B 37 4C"><unientity>5662</unientity><desc>East Asian ideograph</desc></character>
-<character hex="4B 37 58"><unientity>E994</unientity><unientityalt>56A5</unientityalt><desc>Variant of 213758 which maps to 56A5</desc></character>
-<character hex="4B 37 5A"><unientity>53B3</unientity><desc>East Asian ideograph</desc></character>
-<character hex="4B 37 68"><unientity>56D8</unientity><desc>East Asian ideograph</desc></character>
-<character hex="4B 37 6F"><unientity>56FD</unientity><desc>East Asian ideograph</desc></character>
-<character hex="4B 37 72"><unientity>5186</unientity><desc>East Asian ideograph</desc></character>
-<character hex="4B 37 73"><unientity>56E3</unientity><desc>East Asian ideograph</desc></character>
-<character hex="4B 37 74"><unientity>56F3</unientity><desc>East Asian ideograph</desc></character>
-<character hex="4B 38 2E"><unientity>57C0</unientity><desc>East Asian ideograph</desc></character>
-<character hex="4B 38 50"><unientity>E995</unientity><unientityalt>586B</unientityalt><desc>Variant of 213850 which maps to 586B</desc></character>
-<character hex="4B 38 53"><unientity>E9FB</unientity><desc>East Asian ideograph not in Unicode</desc></character>
-<character hex="4B 38 5E"><unientity>5897</unientity><desc>East Asian ideograph</desc></character>
-<character hex="4B 38 64"><unientity>58C7</unientity><desc>East Asian ideograph</desc></character>
-<character hex="4B 38 69"><unientity>5727</unientity><desc>East Asian ideograph</desc></character>
-<character hex="4B 38 6C"><unientity>5841</unientity><desc>East Asian ideograph</desc></character>
-<character hex="4B 38 70"><unientity>58CC</unientity><desc>East Asian ideograph</desc></character>
-<character hex="4B 38 71"><unientity>57BB</unientity><desc>East Asian ideograph</desc></character>
-<character hex="4B 38 7D"><unientity>591B</unientity><desc>East Asian ideograph</desc></character>
-<character hex="4B 39 38"><unientity>5942</unientity><desc>East Asian ideograph</desc></character>
-<character hex="4B 39 3A"><unientity>5F09</unientity><desc>East Asian ideograph</desc></character>
-<character hex="4B 39 3E"><unientity>5965</unientity><desc>East Asian ideograph</desc></character>
-<character hex="4B 39 3F"><unientity>5333</unientity><desc>East Asian ideograph</desc></character>
-<character hex="4B 39 74"><unientity>5B22</unientity><desc>East Asian ideograph</desc></character>
-<character hex="4B 39 7B"><unientity>5A2F</unientity><desc>East Asian ideograph</desc></character>
-<character hex="4B 3A 2F"><unientity>805F</unientity><desc>East Asian ideograph</desc></character>
-<character hex="4B 3A 47"><unientity>88CA</unientity><desc>East Asian ideograph</desc></character>
-<character hex="4B 3A 49"><unientity>5B37</unientity><desc>East Asian ideograph</desc></character>
-<character hex="4B 3B 22"><unientity>51A6</unientity><desc>East Asian ideograph</desc></character>
-<character hex="4B 3B 31"><unientity>5B9F</unientity><desc>East Asian ideograph</desc></character>
-<character hex="4B 3B 37"><unientity>51A9</unientity><desc>East Asian ideograph</desc></character>
-<character hex="4B 3B 43"><unientity>5BFE</unientity><desc>East Asian ideograph</desc></character>
-<character hex="4B 3B 52"><unientity>8132</unientity><desc>East Asian ideograph</desc></character>
-<character hex="4B 3B 61"><unientity>5C64</unientity><desc>East Asian ideograph</desc></character>
-<character hex="4B 3B 67"><unientity>6B67</unientity><desc>East Asian ideograph</desc></character>
-<character hex="4B 3B 79"><unientity>5D8C</unientity><desc>East Asian ideograph</desc></character>
-<character hex="4B 3B 7E"><unientity>5D15</unientity><desc>East Asian ideograph</desc></character>
-<character hex="4B 3C 21"><unientity>5D5C</unientity><desc>East Asian ideograph</desc></character>
-<character hex="4B 3C 23"><unientity>5CE5</unientity><desc>East Asian ideograph</desc></character>
-<character hex="4B 3C 2F"><unientity>5DBA</unientity><desc>East Asian ideograph</desc></character>
-<character hex="4B 3C 32"><unientity>5DD3</unientity><desc>East Asian ideograph</desc></character>
-<character hex="4B 3C 33"><unientity>5DCC</unientity><desc>East Asian ideograph</desc></character>
-<character hex="4B 3C 38"><unientity>949C</unientity><desc>East Asian ideograph</desc></character>
-<character hex="4B 3C 53"><unientity>5E2F</unientity><desc>East Asian ideograph</desc></character>
-<character hex="4B 3C 5E"><unientity>5E64</unientity><desc>East Asian ideograph</desc></character>
-<character hex="4B 3D 24"><unientity>53A6</unientity><desc>East Asian ideograph</desc></character>
-<character hex="4B 3D 27"><unientity>5EC3</unientity><desc>East Asian ideograph</desc></character>
-<character hex="4B 3D 2A"><unientity>5EE3</unientity><desc>East Asian ideograph</desc></character>
-<character hex="4B 3D 2C"><unientity>53B0</unientity><desc>East Asian ideograph</desc></character>
-<character hex="4B 3D 2F"><unientity>5EF0</unientity><desc>East Asian ideograph</desc></character>
-<character hex="4B 3D 4B"><unientity>5F3E</unientity><desc>East Asian ideograph</desc></character>
-<character hex="4B 3D 4C"><unientity>E996</unientity><unientityalt>5F25</unientityalt><desc>Variant of 273D4C which maps to 5F25</desc></character>
-<character hex="4B 3D 5C"><unientity>5F83</unientity><desc>East Asian ideograph</desc></character>
-<character hex="4B 3D 67"><unientity>E997</unientity><unientityalt>5F84</unientityalt><desc>Variant of 273D67 which maps to 5F84</desc></character>
-<character hex="4B 3E 2A"><unientity>6035</unientity><desc>East Asian ideograph</desc></character>
-<character hex="4B 3E 40"><unientity>6046</unientity><desc>East Asian ideograph</desc></character>
-<character hex="4B 3E 5B"><unientity>60C5</unientity><desc>East Asian ideograph</desc></character>
-<character hex="4B 3E 7E"><unientity>60A9</unientity><desc>East Asian ideograph</desc></character>
-<character hex="4B 3F 40"><unientity>E998</unientity><unientityalt>618E</unientityalt><desc>Variant of 213F40 which maps to 618E</desc></character>
-<character hex="4B 3F 4A"><unientity>5FDC</unientity><desc>East Asian ideograph</desc></character>
-<character hex="4B 3F 4B"><unientity>E999</unientity><unientityalt>601C</unientityalt><desc>Variant of 273F4B which maps to 601C</desc></character>
-<character hex="4B 3F 50"><unientity>E99A</unientity><unientityalt>61CA</unientityalt><desc>Variant of 213F50 which maps to 61CA</desc></character>
-<character hex="4B 3F 51"><unientity>61D1</unientity><desc>East Asian ideograph</desc></character>
-<character hex="4B 3F 53"><unientity>61F2</unientity><desc>East Asian ideograph</desc></character>
-<character hex="4B 3F 74"><unientity>623B</unientity><desc>East Asian ideograph</desc></character>
-<character hex="4B 40 3D"><unientity>62DD</unientity><desc>East Asian ideograph</desc></character>
-<character hex="4B 40 46"><unientity>629C</unientity><desc>East Asian ideograph</desc></character>
-<character hex="4B 40 49"><unientity>62D0</unientity><desc>East Asian ideograph</desc></character>
-<character hex="4B 40 53"><unientity>627A</unientity><desc>East Asian ideograph</desc></character>
-<character hex="4B 40 66"><unientity>62F4</unientity><desc>East Asian ideograph</desc></character>
-<character hex="4B 41 2A"><unientity>6323</unientity><desc>East Asian ideograph</desc></character>
-<character hex="4B 41 35"><unientity>6368</unientity><desc>East Asian ideograph</desc></character>
-<character hex="4B 41 46"><unientity>6362</unientity><desc>East Asian ideograph</desc></character>
-<character hex="4B 41 47"><unientity>633F</unientity><desc>East Asian ideograph</desc></character>
-<character hex="4B 42 35"><unientity>6442</unientity><desc>East Asian ideograph</desc></character>
-<character hex="4B 42 36"><unientity>643A</unientity><desc>East Asian ideograph</desc></character>
-<character hex="4B 42 3A"><unientity>64B9</unientity><desc>East Asian ideograph</desc></character>
-<character hex="4B 43 39"><unientity>6674</unientity><desc>East Asian ideograph</desc></character>
-<character hex="4B 43 47"><unientity>66A8</unientity><desc>East Asian ideograph</desc></character>
-<character hex="4B 43 4D"><unientity>663F</unientity><desc>East Asian ideograph</desc></character>
-<character hex="4B 43 52"><unientity>66F5</unientity><desc>East Asian ideograph</desc></character>
-<character hex="4B 43 58"><unientity>66FD</unientity><desc>East Asian ideograph</desc></character>
-<character hex="4B 44 2D"><unientity>67A9</unientity><desc>East Asian ideograph</desc></character>
-<character hex="4B 44 56"><unientity>6813</unientity><desc>East Asian ideograph</desc></character>
-<character hex="4B 44 76"><unientity>685F</unientity><desc>East Asian ideograph</desc></character>
-<character hex="4B 45 34"><unientity>E99B</unientity><unientityalt>6994</unientityalt><desc>Variant of 214534 which maps to 6994</desc></character>
-<character hex="4B 45 37"><unientity>6804</unientity><desc>East Asian ideograph</desc></character>
-<character hex="4B 45 44"><unientity>69D8</unientity><desc>East Asian ideograph</desc></character>
-<character hex="4B 45 45"><unientity>6982</unientity><desc>East Asian ideograph</desc></character>
-<character hex="4B 45 53"><unientity>6955</unientity><desc>East Asian ideograph</desc></character>
-<character hex="4B 45 56"><unientity>6A2A</unientity><desc>East Asian ideograph</desc></character>
-<character hex="4B 45 59"><unientity>9792</unientity><desc>East Asian ideograph</desc></character>
-<character hex="4B 45 61"><unientity>691C</unientity><desc>East Asian ideograph</desc></character>
-<character hex="4B 45 69"><unientity>6A71</unientity><desc>East Asian ideograph</desc></character>
-<character hex="4B 45 6C"><unientity>E99C</unientity><unientityalt>6ADB</unientityalt><desc>Variant of 21456C which maps to 6ADB</desc></character>
-<character hex="4B 45 6D"><unientity>823B</unientity><desc>East Asian ideograph</desc></character>
-<character hex="4B 45 6F"><unientity>685C</unientity><desc>East Asian ideograph</desc></character>
-<character hex="4B 45 70"><unientity>6A29</unientity><desc>East Asian ideograph</desc></character>
-<character hex="4B 46 21"><unientity>6B53</unientity><desc>East Asian ideograph</desc></character>
-<character hex="4B 46 2A"><unientity>6B74</unientity><desc>East Asian ideograph</desc></character>
-<character hex="4B 46 2E"><unientity>6B81</unientity><desc>East Asian ideograph</desc></character>
-<character hex="4B 46 38"><unientity>6BB1</unientity><desc>East Asian ideograph</desc></character>
-<character hex="4B 46 55"><unientity>6C17</unientity><desc>East Asian ideograph</desc></character>
-<character hex="4B 46 5A"><unientity>6C32</unientity><desc>East Asian ideograph</desc></character>
-<character hex="4B 46 76"><unientity>6C89</unientity><desc>East Asian ideograph</desc></character>
-<character hex="4B 47 41"><unientity>51BD</unientity><desc>East Asian ideograph</desc></character>
-<character hex="4B 47 59"><unientity>6D99</unientity><desc>East Asian ideograph</desc></character>
-<character hex="4B 47 61"><unientity>6E05</unientity><desc>East Asian ideograph</desc></character>
-<character hex="4B 47 67"><unientity>E99D</unientity><unientityalt>6DB5</unientityalt><desc>Variant of 214767 which maps to 6DB5</desc></character>
-<character hex="4B 47 6C"><unientity>51C5</unientity><desc>East Asian ideograph</desc></character>
-<character hex="4B 48 35"><unientity>6DA3</unientity><desc>East Asian ideograph</desc></character>
-<character hex="4B 48 46"><unientity>78C6</unientity><desc>East Asian ideograph</desc></character>
-<character hex="4B 48 4A"><unientity>6E13</unientity><desc>East Asian ideograph</desc></character>
-<character hex="4B 48 4B"><unientity>51D6</unientity><desc>East Asian ideograph</desc></character>
-<character hex="4B 48 4C"><unientity>6F91</unientity><desc>East Asian ideograph</desc></character>
-<character hex="4B 48 57"><unientity>6F22</unientity><desc>East Asian ideograph</desc></character>
-<character hex="4B 48 58"><unientity>6E80</unientity><desc>East Asian ideograph</desc></character>
-<character hex="4B 48 5F"><unientity>E99E</unientity><unientityalt>6EDE</unientityalt><desc>Variant of 27485F which maps to 6EDE</desc></character>
-<character hex="4B 48 66"><unientity>6E89</unientity><desc>East Asian ideograph</desc></character>
-<character hex="4B 48 74"><unientity>6FF3</unientity><desc>East Asian ideograph</desc></character>
-<character hex="4B 49 21"><unientity>6CA2</unientity><desc>East Asian ideograph</desc></character>
-<character hex="4B 49 25"><unientity>E99F</unientity><unientityalt>6FB3</unientityalt><desc>Variant of 214925 which maps to 6FB3</desc></character>
-<character hex="4B 49 2B"><unientity>6FEB</unientity><desc>East Asian ideograph</desc></character>
-<character hex="4B 49 2E"><unientity>6E0B</unientity><desc>East Asian ideograph</desc></character>
-<character hex="4B 49 31"><unientity>6E16</unientity><desc>East Asian ideograph</desc></character>
-<character hex="4B 49 37"><unientity>56A0</unientity><desc>East Asian ideograph</desc></character>
-<character hex="4B 49 40"><unientity>6F45</unientity><desc>East Asian ideograph</desc></character>
-<character hex="4B 49 47"><unientity>7AC3</unientity><desc>East Asian ideograph</desc></character>
-<character hex="4B 49 6A"><unientity>932C</unientity><desc>East Asian ideograph</desc></character>
-<character hex="4B 49 6B"><unientity>83F8</unientity><desc>East Asian ideograph</desc></character>
-<character hex="4B 49 73"><unientity>7115</unientity><desc>East Asian ideograph</desc></character>
-<character hex="4B 49 75"><unientity>6427</unientity><desc>East Asian ideograph</desc></character>
-<character hex="4B 49 77"><unientity>7188</unientity><desc>East Asian ideograph</desc></character>
-<character hex="4B 4A 2E"><unientity>55B6</unientity><desc>East Asian ideograph</desc></character>
-<character hex="4B 4A 38"><unientity>71D7</unientity><desc>East Asian ideograph</desc></character>
-<character hex="4B 4A 3E"><unientity>7235</unientity><desc>East Asian ideograph</desc></character>
-<character hex="4B 4A 45"><unientity>5C13</unientity><desc>East Asian ideograph</desc></character>
-<character hex="4B 4A 62"><unientity>72A0</unientity><desc>East Asian ideograph</desc></character>
-<character hex="4B 4A 74"><unientity>E9A0</unientity><unientityalt>731C</unientityalt><desc>Variant of 214A74 which maps to 731C</desc></character>
-<character hex="4B 4A 78"><unientity>72F0</unientity><desc>East Asian ideograph</desc></character>
-<character hex="4B 4B 2B"><unientity>7363</unientity><desc>East Asian ideograph</desc></character>
-<character hex="4B 4B 2C"><unientity>731F</unientity><desc>East Asian ideograph</desc></character>
-<character hex="4B 4B 3E"><unientity>F9AD</unientity><desc>East Asian ideograph</desc></character>
-<character hex="4B 4B 63"><unientity>749C</unientity><desc>East Asian ideograph</desc></character>
-<character hex="4B 4B 71"><unientity>E9A1</unientity><unientityalt>7F3E</unientityalt><desc>Variant of 2D4B71 which maps to 7F3E</desc></character>
-<character hex="4B 4B 77"><unientity>4EC0</unientity><desc>East Asian ideograph</desc></character>
-<character hex="4B 4C 36"><unientity>7575</unientity><desc>East Asian ideograph</desc></character>
-<character hex="4B 4C 3C"><unientity>7573</unientity><desc>East Asian ideograph</desc></character>
-<character hex="4B 4C 51"><unientity>75CA</unientity><desc>East Asian ideograph</desc></character>
-<character hex="4B 4C 5B"><unientity>75F3</unientity><desc>East Asian ideograph</desc></character>
-<character hex="4B 4C 67"><unientity>E9A2</unientity><unientityalt>761F</unientityalt><desc>Variant of 214C67 which maps to 761F</desc></character>
-<character hex="4B 4C 79"><unientity>7672</unientity><desc>East Asian ideograph</desc></character>
-<character hex="4B 4D 41"><unientity>862F</unientity><desc>East Asian ideograph</desc></character>
-<character hex="4B 4D 45"><unientity>E9A3</unientity><unientityalt>76F4</unientityalt><desc>Variant of 214D45 which maps to 76F4</desc></character>
-<character hex="4B 4D 56"><unientity>8846</unientity><desc>East Asian ideograph</desc></character>
-<character hex="4B 4D 59"><unientity>E9A4</unientity><unientityalt>775B</unientityalt><desc>Variant of 214D59 which maps to 775B</desc></character>
-<character hex="4B 4D 73"><unientity>66B8</unientity><desc>East Asian ideograph</desc></character>
-<character hex="4B 4D 7B"><unientity>E9A5</unientity><unientityalt>77D7</unientityalt><desc>Variant of 214D7B which maps to 77D7</desc></character>
-<character hex="4B 4E 21"><unientity>7B36</unientity><desc>East Asian ideograph</desc></character>
-<character hex="4B 4E 37"><unientity>7814</unientity><desc>East Asian ideograph</desc></character>
-<character hex="4B 4E 39"><unientity>5CFA</unientity><desc>East Asian ideograph</desc></character>
-<character hex="4B 4E 56"><unientity>78FA</unientity><desc>East Asian ideograph</desc></character>
-<character hex="4B 4E 5B"><unientity>783F</unientity><desc>East Asian ideograph</desc></character>
-<character hex="4B 4E 67"><unientity>79D8</unientity><desc>East Asian ideograph</desc></character>
-<character hex="4B 4E 7B"><unientity>E9A6</unientity><unientityalt>7985</unientityalt><desc>Variant of 274E7B which maps to 7985</desc></character>
-<character hex="4B 4F 29"><unientity>7A50</unientity><desc>East Asian ideograph</desc></character>
-<character hex="4B 4F 3C"><unientity>E9A7</unientity><unientityalt>79F0</unientityalt><desc>Variant of 274F3C which maps to 79F0</desc></character>
-<character hex="4B 4F 43"><unientity>7A32</unientity><desc>East Asian ideograph</desc></character>
-<character hex="4B 4F 4C"><unientity>7A4F</unientity><desc>East Asian ideograph</desc></character>
-<character hex="4B 4F 7B"><unientity>7B7A</unientity><desc>East Asian ideograph</desc></character>
-<character hex="4B 50 36"><unientity>7C14</unientity><desc>East Asian ideograph</desc></character>
-<character hex="4B 50 3B"><unientity>7C12</unientity><desc>East Asian ideograph</desc></character>
-<character hex="4B 50 44"><unientity>E9A8</unientity><unientityalt>7C27</unientityalt><desc>Variant of 215044 which maps to 7C27</desc></character>
-<character hex="4B 50 52"><unientity>7C56</unientity><desc>East Asian ideograph</desc></character>
-<character hex="4B 50 61"><unientity>7CBE</unientity><desc>East Asian ideograph</desc></character>
-<character hex="4B 50 6C"><unientity>7CAB</unientity><desc>East Asian ideograph</desc></character>
-<character hex="4B 51 3B"><unientity>7CF8</unientity><desc>East Asian ideograph</desc></character>
-<character hex="4B 51 54"><unientity>7DF4</unientity><desc>East Asian ideograph</desc></character>
-<character hex="4B 51 5A"><unientity>7E01</unientity><desc>East Asian ideograph</desc></character>
-<character hex="4B 51 64"><unientity>770C</unientity><desc>East Asian ideograph</desc></character>
-<character hex="4B 51 6A"><unientity>7EF7</unientity><desc>East Asian ideograph</desc></character>
-<character hex="4B 51 6D"><unientity>7DCF</unientity><desc>East Asian ideograph</desc></character>
-<character hex="4B 51 6E"><unientity>7E26</unientity><desc>East Asian ideograph</desc></character>
-<character hex="4B 51 76"><unientity>7E04</unientity><desc>East Asian ideograph</desc></character>
-<character hex="4B 51 79"><unientity>7F0B</unientity><desc>East Asian ideograph</desc></character>
-<character hex="4B 51 7E"><unientity>7E92</unientity><desc>East Asian ideograph</desc></character>
-<character hex="4B 52 21"><unientity>7D9A</unientity><desc>East Asian ideograph</desc></character>
-<character hex="4B 52 23"><unientity>7E4A</unientity><desc>East Asian ideograph</desc></character>
-<character hex="4B 52 27"><unientity>6B20</unientity><desc>East Asian ideograph</desc></character>
-<character hex="4B 52 2B"><unientity>7F36</unientity><desc>East Asian ideograph</desc></character>
-<character hex="4B 52 38"><unientity>7F87</unientity><desc>East Asian ideograph</desc></character>
-<character hex="4B 52 3E"><unientity>E9A9</unientity><unientityalt>7F9A</unientityalt><desc>Variant of 21523E which maps to 7F9A</desc></character>
-<character hex="4B 52 47"><unientity>7FAE</unientity><desc>East Asian ideograph</desc></character>
-<character hex="4B 52 4E"><unientity>7FCE</unientity><desc>East Asian ideograph</desc></character>
-<character hex="4B 52 5A"><unientity>7FFA</unientity><desc>East Asian ideograph</desc></character>
-<character hex="4B 52 5B"><unientity>E9AA</unientity><unientityalt>66DC</unientityalt><desc>Variant of 39525B which maps to 66DC</desc></character>
-<character hex="4B 52 5C"><unientity>8002</unientity><desc>East Asian ideograph</desc></character>
-<character hex="4B 52 6E"><unientity>E9AB</unientity><unientityalt>8046</unientityalt><desc>Variant of 21526E which maps to 8046</desc></character>
-<character hex="4B 52 77"><unientity>8068</unientity><desc>East Asian ideograph</desc></character>
-<character hex="4B 52 7C"><unientity>8080</unientity><desc>East Asian ideograph</desc></character>
-<character hex="4B 53 3B"><unientity>695C</unientity><desc>East Asian ideograph</desc></character>
-<character hex="4B 53 61"><unientity>E923</unientity><desc>Duplicate simplified ideograph</desc></character>
-<character hex="4B 53 65"><unientity>8133</unientity><desc>East Asian ideograph</desc></character>
-<character hex="4B 53 7D"><unientity>9ACC</unientity><desc>East Asian ideograph</desc></character>
-<character hex="4B 54 22"><unientity>81D3</unientity><desc>East Asian ideograph</desc></character>
-<character hex="4B 54 28"><unientity>E9AC</unientity><unientityalt>81ED</unientityalt><desc>Variant of 215428 which maps to 81ED</desc></character>
-<character hex="4B 54 34"><unientity>6319</unientity><desc>East Asian ideograph</desc></character>
-<character hex="4B 54 37"><unientity>820E</unientity><desc>East Asian ideograph</desc></character>
-<character hex="4B 54 6D"><unientity>E9AD</unientity><unientityalt>82D3</unientityalt><desc>Variant of 21546D which maps to 82D3</desc></character>
-<character hex="4B 55 21"><unientity>8332</unientity><desc>East Asian ideograph</desc></character>
-<character hex="4B 55 2C"><unientity>8392</unientity><desc>East Asian ideograph</desc></character>
-<character hex="4B 55 3A"><unientity>E9AE</unientity><unientityalt>83C1</unientityalt><desc>Variant of 21553A which maps to 83C1</desc></character>
-<character hex="4B 55 3F"><unientity>E9AF</unientity><unientityalt>83BD</unientityalt><desc>Variant of 21553F which maps to 83BD</desc></character>
-<character hex="4B 55 42"><unientity>8420</unientity><desc>East Asian ideograph</desc></character>
-<character hex="4B 55 64"><unientity>77C7</unientity><desc>East Asian ideograph</desc></character>
-<character hex="4B 56 29"><unientity>85CD</unientity><desc>East Asian ideograph</desc></character>
-<character hex="4B 56 2B"><unientity>8535</unientity><desc>East Asian ideograph</desc></character>
-<character hex="4B 56 31"><unientity>82B8</unientity><desc>East Asian ideograph</desc></character>
-<character hex="4B 56 32"><unientity>7C54</unientity><desc>East Asian ideograph</desc></character>
-<character hex="4B 56 3A"><unientity>E9B0</unientity><unientityalt>82A6</unientityalt><desc>Variant of 27563A which maps to 82A6</desc></character>
-<character hex="4B 56 3F"><unientity>6A98</unientity><desc>East Asian ideograph</desc></character>
-<character hex="4B 56 47"><unientity>51E6</unientity><desc>East Asian ideograph</desc></character>
-<character hex="4B 56 6A"><unientity>E9B1</unientity><unientityalt>8708</unientityalt><desc>Variant of 21566A which maps to 8708</desc></character>
-<character hex="4B 56 71"><unientity>E9B2</unientity><unientityalt>873B</unientityalt><desc>Variant of 215671 which maps to 873B</desc></character>
-<character hex="4B 57 24"><unientity>86CD</unientity><desc>East Asian ideograph</desc></character>
-<character hex="4B 57 36"><unientity>877F</unientity><desc>East Asian ideograph</desc></character>
-<character hex="4B 57 40"><unientity>8827</unientity><desc>East Asian ideograph</desc></character>
-<character hex="4B 57 46"><unientity>8853</unientity><desc>East Asian ideograph</desc></character>
-<character hex="4B 57 6C"><unientity>523E</unientity><desc>East Asian ideograph</desc></character>
-<character hex="4B 57 6F"><unientity>E9B3</unientity><unientityalt>8910</unientityalt><desc>Variant of 21576F which maps to 8910</desc></character>
-<character hex="4B 57 73"><unientity>7ED4</unientity><desc>East Asian ideograph</desc></character>
-<character hex="4B 57 7E"><unientity>7E7F</unientity><desc>East Asian ideograph</desc></character>
-<character hex="4B 58 24"><unientity>897E</unientity><desc>East Asian ideograph</desc></character>
-<character hex="4B 58 26"><unientity>E9B4</unientity><unientityalt>8983</unientityalt><desc>Variant of 215826 which maps to 8983</desc></character>
-<character hex="4B 58 30"><unientity>899A</unientity><desc>East Asian ideograph</desc></character>
-<character hex="4B 58 32"><unientity>89B3</unientity><desc>East Asian ideograph</desc></character>
-<character hex="4B 58 61"><unientity>4F89</unientity><desc>East Asian ideograph</desc></character>
-<character hex="4B 58 71"><unientity>8AA4</unientity><desc>East Asian ideograph</desc></character>
-<character hex="4B 58 7A"><unientity>8ACB</unientity><desc>East Asian ideograph</desc></character>
-<character hex="4B 59 36"><unientity>8B20</unientity><desc>East Asian ideograph</desc></character>
-<character hex="4B 59 46"><unientity>8A33</unientity><desc>East Asian ideograph</desc></character>
-<character hex="4B 59 4A"><unientity>8AAD</unientity><desc>East Asian ideograph</desc></character>
-<character hex="4B 59 4B"><unientity>5909</unientity><desc>East Asian ideograph</desc></character>
-<character hex="4B 59 59"><unientity>8273</unientity><desc>East Asian ideograph</desc></character>
-<character hex="4B 59 63"><unientity>734F</unientity><desc>East Asian ideograph</desc></character>
-<character hex="4B 59 64"><unientity>72E2</unientity><desc>East Asian ideograph</desc></character>
-<character hex="4B 59 73"><unientity>8D2E</unientity><desc>East Asian ideograph</desc></character>
-<character hex="4B 5A 23"><unientity>621D</unientity><desc>East Asian ideograph</desc></character>
-<character hex="4B 5A 31"><unientity>8CCE</unientity><desc>East Asian ideograph</desc></character>
-<character hex="4B 5A 3B"><unientity>8D08</unientity><desc>East Asian ideograph</desc></character>
-<character hex="4B 5A 68"><unientity>E9B5</unientity><unientityalt>8DF5</unientityalt><desc>Variant of 275A68 which maps to 8DF5</desc></character>
-<character hex="4B 5A 7E"><unientity>5C69</unientity><desc>East Asian ideograph</desc></character>
-<character hex="4B 5B 29"><unientity>8E8D</unientity><desc>East Asian ideograph</desc></character>
-<character hex="4B 5B 46"><unientity>8F0C</unientity><desc>East Asian ideograph</desc></character>
-<character hex="4B 5B 52"><unientity>8F42</unientity><desc>East Asian ideograph</desc></character>
-<character hex="4B 5B 55"><unientity>8EE2</unientity><desc>East Asian ideograph</desc></character>
-<character hex="4B 5B 58"><unientity>8EE3</unientity><desc>East Asian ideograph</desc></character>
-<character hex="4B 5B 5E"><unientity>5F01</unientity><desc>East Asian ideograph</desc></character>
-<character hex="4B 5C 32"><unientity>9038</unientity><desc>East Asian ideograph</desc></character>
-<character hex="4B 5C 39"><unientity>9039</unientity><desc>East Asian ideograph</desc></character>
-<character hex="4B 5C 47"><unientity>9059</unientity><desc>East Asian ideograph</desc></character>
-<character hex="4B 5C 50"><unientity>9045</unientity><desc>East Asian ideograph</desc></character>
-<character hex="4B 5C 54"><unientity>E924</unientity><desc>Duplicate simplified ideograph</desc></character>
-<character hex="4B 5C 5B"><unientity>8FBA</unientity><desc>East Asian ideograph</desc></character>
-<character hex="4B 5C 5E"><unientity>961D</unientity><desc>East Asian ideograph</desc></character>
-<character hex="4B 5C 72"><unientity>E9B6</unientity><unientityalt>9119</unientityalt><desc>Variant of 215C72 which maps to 9119</desc></character>
-<character hex="4B 5C 77"><unientity>9139</unientity><desc>East Asian ideograph</desc></character>
-<character hex="4B 5D 2B"><unientity>9162</unientity><desc>East Asian ideograph</desc></character>
-<character hex="4B 5D 34"><unientity>91B8</unientity><desc>East Asian ideograph</desc></character>
-<character hex="4B 5D 36"><unientity>91C6</unientity><desc>East Asian ideograph</desc></character>
-<character hex="4B 5D 38"><unientity>91C8</unientity><desc>East Asian ideograph</desc></character>
-<character hex="4B 5D 42"><unientity>91E1</unientity><desc>East Asian ideograph</desc></character>
-<character hex="4B 5D 58"><unientity>9234</unientity><desc>East Asian ideograph</desc></character>
-<character hex="4B 5D 65"><unientity>8217</unientity><desc>East Asian ideograph</desc></character>
-<character hex="4B 5D 70"><unientity>92AD</unientity><desc>East Asian ideograph</desc></character>
-<character hex="4B 5E 27"><unientity>93AD</unientity><desc>East Asian ideograph</desc></character>
-<character hex="4B 5E 3D"><unientity>9421</unientity><desc>East Asian ideograph</desc></character>
-<character hex="4B 5E 3F"><unientity>922C</unientity><desc>East Asian ideograph</desc></character>
-<character hex="4B 5E 5D"><unientity>95D4</unientity><desc>East Asian ideograph</desc></character>
-<character hex="4B 5E 69"><unientity>95A2</unientity><desc>East Asian ideograph</desc></character>
-<character hex="4B 5E 6C"><unientity>E925</unientity><desc>Duplicate simplified ideograph</desc></character>
-<character hex="4B 5F 30"><unientity>E9B7</unientity><unientityalt>9686</unientityalt><desc>Variant of 215F30 which maps to 9686</desc></character>
-<character hex="4B 5F 35"><unientity>6B92</unientity><desc>East Asian ideograph</desc></character>
-<character hex="4B 5F 3A"><unientity>967A</unientity><desc>East Asian ideograph</desc></character>
-<character hex="4B 5F 49"><unientity>51CB</unientity><desc>East Asian ideograph</desc></character>
-<character hex="4B 5F 4C"><unientity>9D8F</unientity><desc>East Asian ideograph</desc></character>
-<character hex="4B 5F 50"><unientity>96E3</unientity><desc>East Asian ideograph</desc></character>
-<character hex="4B 5F 58"><unientity>F9B2</unientity><desc>East Asian ideograph</desc></character>
-<character hex="4B 5F 62"><unientity>7668</unientity><desc>East Asian ideograph</desc></character>
-<character hex="4B 5F 6F"><unientity>970A</unientity><desc>East Asian ideograph</desc></character>
-<character hex="4B 5F 70"><unientity>9752</unientity><desc>East Asian ideograph</desc></character>
-<character hex="4B 5F 71"><unientity>9756</unientity><desc>East Asian ideograph</desc></character>
-<character hex="4B 5F 72"><unientity>975B</unientity><desc>East Asian ideograph</desc></character>
-<character hex="4B 5F 73"><unientity>E9B8</unientity><unientityalt>975C</unientityalt><desc>Variant of 215F73 which maps to 975C</desc></character>
-<character hex="4B 60 2D"><unientity>9771</unientity><desc>East Asian ideograph</desc></character>
-<character hex="4B 60 44"><unientity>9818</unientity><desc>East Asian ideograph</desc></character>
-<character hex="4B 60 48"><unientity>981A</unientity><desc>East Asian ideograph</desc></character>
-<character hex="4B 60 53"><unientity>985E</unientity><desc>East Asian ideograph</desc></character>
-<character hex="4B 60 6F"><unientity>991D</unientity><desc>East Asian ideograph</desc></character>
-<character hex="4B 61 22"><unientity>994B</unientity><desc>East Asian ideograph</desc></character>
-<character hex="4B 61 30"><unientity>99C4</unientity><desc>East Asian ideograph</desc></character>
-<character hex="4B 61 3F"><unientity>9A08</unientity><desc>East Asian ideograph</desc></character>
-<character hex="4B 61 45"><unientity>9A12</unientity><desc>East Asian ideograph</desc></character>
-<character hex="4B 61 47"><unientity>99C6</unientity><desc>East Asian ideograph</desc></character>
-<character hex="4B 61 4D"><unientity>9A13</unientity><desc>East Asian ideograph</desc></character>
-<character hex="4B 61 59"><unientity>81B8</unientity><desc>East Asian ideograph</desc></character>
-<character hex="4B 61 5F"><unientity>9AEA</unientity><desc>East Asian ideograph</desc></character>
-<character hex="4B 61 67"><unientity>95D8</unientity><desc>East Asian ideograph</desc></character>
-<character hex="4B 61 68"><unientity>9599</unientity><desc>East Asian ideograph</desc></character>
-<character hex="4B 62 3B"><unientity>9D12</unientity><desc>East Asian ideograph</desc></character>
-<character hex="4B 62 47"><unientity>9D2C</unientity><desc>East Asian ideograph</desc></character>
-<character hex="4B 62 4F"><unientity>9D49</unientity><desc>East Asian ideograph</desc></character>
-<character hex="4B 62 58"><unientity>68BA</unientity><desc>East Asian ideograph</desc></character>
-<character hex="4B 62 5C"><unientity>E9B9</unientity><unientityalt>9EB8</unientityalt><desc>Variant of 27625C which maps to 9EB8</desc></character>
-<character hex="4B 62 60"><unientity>9EBD</unientity><desc>East Asian ideograph</desc></character>
-<character hex="4B 62 66"><unientity>9ED2</unientity><desc>East Asian ideograph</desc></character>
-<character hex="4B 62 68"><unientity>9ED9</unientity><desc>East Asian ideograph</desc></character>
-<character hex="4B 62 78"><unientity>9F21</unientity><desc>East Asian ideograph</desc></character>
-<character hex="4B 63 24"><unientity>9F62</unientity><desc>East Asian ideograph</desc></character>
-<character hex="4B 64 55"><unientity>4EB6</unientity><desc>East Asian ideography</desc></character>
-<character hex="4B 66 37"><unientity>4FE3</unientity><desc>East Asian ideograph</desc></character>
-<character hex="4B 68 2E"><unientity>4EC2</unientity><desc>East Asian ideograph</desc></character>
-<character hex="4B 6A 22"><unientity>7F83</unientity><desc>East Asian ideograph</desc></character>
-<character hex="4B 6A 26"><unientity>6C8D</unientity><desc>East Asian ideograph</desc></character>
-<character hex="4B 74 21"><unientity>F9A9</unientity><desc>East Asian ideograph</desc></character>
-<character hex="4B 75 77"><unientity>57D3</unientity><desc>East Asian ideograph</desc></character>
-<character hex="4B 76 3D"><unientity>E9BA</unientity><unientityalt>57F4</unientityalt><desc>Variant of 21763D which maps to 57F4</desc></character>
-<character hex="4B 78 74"><unientity>590A</unientity><desc>East Asian ideograph</desc></character>
-<character hex="4B 79 54"><unientity>5968</unientity><desc>East Asian ideograph</desc></character>
-<character hex="4B 7E 6A"><unientity>E9BB</unientity><unientityalt>5BC3</unientityalt><desc>Variant of 217E6A which maps to 5BC3</desc></character>
-<character hex="4C 23 30"><unientity>5C53</unientity><desc>East Asian ideograph</desc></character>
-<character hex="4C 23 3F"><unientity>5C76</unientity><desc>East Asian ideograph</desc></character>
-<character hex="4C 25 32"><unientity>5D5B</unientity><desc>East Asian ideograph</desc></character>
-<character hex="4C 25 39"><unientity>5D73</unientity><desc>East Asian ideograph</desc></character>
-<character hex="4C 28 4C"><unientity>53A9</unientity><desc>East Asian ideograph</desc></character>
-<character hex="4C 28 67"><unientity>5EDB</unientity><desc>East Asian ideograph</desc></character>
-<character hex="4C 29 62"><unientity>E9BC</unientity><unientityalt>5F4D</unientityalt><desc>Variant of 222962 which maps to 5F4D</desc></character>
-<character hex="4C 2F 61"><unientity>622C</unientity><desc>East Asian ideograph</desc></character>
-<character hex="4C 34 74"><unientity>631D</unientity><desc>East Asian ideograph</desc></character>
-<character hex="4C 35 4A"><unientity>64B8</unientity><desc>East Asian ideograph</desc></character>
-<character hex="4C 37 44"><unientity>65D9</unientity><desc>East Asian ideograph</desc></character>
-<character hex="4C 3A 33"><unientity>E9BD</unientity><unientityalt>80AD</unientityalt><desc>Variant of 2E3A33 which maps to 80AD</desc></character>
-<character hex="4C 3A 55"><unientity>6741</unientity><desc>East Asian ideograph</desc></character>
-<character hex="4C 3A 5B"><unientity>6859</unientity><desc>East Asian ideograph</desc></character>
-<character hex="4C 3B 22"><unientity>6860</unientity><desc>East Asian ideograph</desc></character>
-<character hex="4C 3B 31"><unientity>6798</unientity><desc>East Asian ideograph</desc></character>
-<character hex="4C 3B 60"><unientity>6764</unientity><desc>East Asian ideograph</desc></character>
-<character hex="4C 3F 68"><unientity>69C7</unientity><desc>East Asian ideograph</desc></character>
-<character hex="4C 3F 7A"><unientity>6922</unientity><desc>East Asian ideograph</desc></character>
-<character hex="4C 41 46"><unientity>8538</unientity><desc>East Asian ideograph</desc></character>
-<character hex="4C 41 77"><unientity>8223</unientity><desc>East Asian ideograph</desc></character>
-<character hex="4C 43 33"><unientity>6AAA</unientity><desc>East Asian ideograph</desc></character>
-<character hex="4C 43 39"><unientity>69DE</unientity><desc>East Asian ideograph</desc></character>
-<character hex="4C 43 3F"><unientity>6A65</unientity><desc>East Asian ideograph</desc></character>
-<character hex="4C 43 45"><unientity>67A6</unientity><desc>East Asian ideograph</desc></character>
-<character hex="4C 43 59"><unientity>6B05</unientity><desc>East Asian ideograph</desc></character>
-<character hex="4C 44 46"><unientity>6B4E</unientity><desc>East Asian ideograph</desc></character>
-<character hex="4C 47 6E"><unientity>6CAD</unientity><desc>East Asian ideograph</desc></character>
-<character hex="4C 4C 35"><unientity>6E0C</unientity><desc>East Asian ideograph</desc></character>
-<character hex="4C 4D 3D"><unientity>6F62</unientity><desc>East Asian ideograph</desc></character>
-<character hex="4C 4D 63"><unientity>6F99</unientity><desc>East Asian ideograph</desc></character>
-<character hex="4C 4F 24"><unientity>6F46</unientity><desc>East Asian ideograph</desc></character>
-<character hex="4C 4F 26"><unientity>6EDD</unientity><desc>East Asian ideograph</desc></character>
-<character hex="4C 4F 2B"><unientity>701E</unientity><desc>East Asian ideograph</desc></character>
-<character hex="4C 51 75"><unientity>8315</unientity><desc>East Asian ideograph</desc></character>
-<character hex="4C 52 3A"><unientity>717A</unientity><desc>East Asian ideograph</desc></character>
-<character hex="4C 54 47"><unientity>E9BE</unientity><unientityalt>71E0</unientityalt><desc>Variant of 225447 which maps to 71E0</desc></character>
-<character hex="4C 55 41"><unientity>4E2C</unientity><desc>East Asian ideograph</desc></character>
-<character hex="4C 56 38"><unientity>729F</unientity><desc>East Asian ideograph</desc></character>
-<character hex="4C 5C 3A"><unientity>73F1</unientity><desc>East Asian ideograph</desc></character>
-<character hex="4C 5C 61"><unientity>E9BF</unientity><unientityalt>74F4</unientityalt><desc>Variant of 225C61 which maps to 74F4</desc></character>
-<character hex="4C 5F 58"><unientity>7640</unientity><desc>East Asian ideograph</desc></character>
-<character hex="4C 5F 69"><unientity>75EB</unientity><desc>East Asian ideograph</desc></character>
-<character hex="4C 60 22"><unientity>7596</unientity><desc>East Asian ideograph</desc></character>
-<character hex="4C 60 74"><unientity>76B9</unientity><desc>East Asian ideograph</desc></character>
-<character hex="4C 62 66"><unientity>778B</unientity><desc>East Asian ideograph</desc></character>
-<character hex="4C 63 76"><unientity>7839</unientity><desc>East Asian ideograph</desc></character>
-<character hex="4C 65 64"><unientity>78D9</unientity><desc>East Asian ideograph</desc></character>
-<character hex="4C 65 65"><unientity>78B9</unientity><desc>East Asian ideograph</desc></character>
-<character hex="4C 67 75"><unientity>E9D7</unientity><unientityalt>7962</unientityalt><desc>Unrelated variant of EACC 293032 which maps to 7962</desc></character>
-<character hex="4C 68 3E"><unientity>79EB</unientity><desc>East Asian ideograph</desc></character>
-<character hex="4C 69 5C"><unientity>7A06</unientity><desc>East Asian ideograph</desc></character>
-<character hex="4C 69 5F"><unientity>7A63</unientity><desc>East Asian ideograph</desc></character>
-<character hex="4C 6B 62"><unientity>E9C0</unientity><unientityalt>7B4C</unientityalt><desc>Variant of 226B62 which maps to 7B4C</desc></character>
-<character hex="4C 6C 46"><unientity>7B9F</unientity><desc>East Asian ideograph</desc></character>
-<character hex="4C 6E 42"><unientity>7C31</unientity><desc>East Asian ideograph</desc></character>
-<character hex="4C 6F 43"><unientity>7CCD</unientity><desc>East Asian ideograph</desc></character>
-<character hex="4C 6F 7B"><unientity>7CE8</unientity><desc>East Asian ideograph</desc></character>
-<character hex="4C 71 5A"><unientity>7EE6</unientity><desc>East Asian ideograph</desc></character>
-<character hex="4C 72 5D"><unientity>7A39</unientity><desc>East Asian ideograph</desc></character>
-<character hex="4C 72 65"><unientity>7DFC</unientity><desc>East Asian ideograph</desc></character>
-<character hex="4C 73 28"><unientity>E9C1</unientity><unientityalt>5FAD</unientityalt><desc>Variant of 2E7328 which maps to 5FAD</desc></character>
-<character hex="4C 73 5D"><unientity>7D4B</unientity><desc>East Asian ideograph</desc></character>
-<character hex="4C 79 4E"><unientity>80B7</unientity><desc>East Asian ideograph</desc></character>
-<character hex="4C 79 59"><unientity>817D</unientity><desc>East Asian ideograph</desc></character>
-<character hex="4C 79 6B"><unientity>815F</unientity><desc>East Asian ideograph</desc></character>
-<character hex="4C 7C 45"><unientity>82AE</unientity><desc>East Asian ideograph</desc></character>
-<character hex="4C 7D 4D"><unientity>8343</unientity><desc>East Asian ideograph</desc></character>
-<character hex="4C 7D 6A"><unientity>8323</unientity><desc>East Asian ideograph</desc></character>
-<character hex="4D 22 2A"><unientity>83B5</unientity><desc>East Asian ideograph</desc></character>
-<character hex="4D 29 25"><unientity>8770</unientity><desc>East Asian ideograph</desc></character>
-<character hex="4D 29 62"><unientity>E9C2</unientity><unientityalt>86C9</unientityalt><desc>Variant of 232962 which maps to 86C9</desc></character>
-<character hex="4D 2C 3C"><unientity>87E5</unientity><desc>East Asian ideograph</desc></character>
-<character hex="4D 2D 75"><unientity>E9C3</unientity><unientityalt>8872</unientityalt><desc>Variant of 232D75 which maps to 8872</desc></character>
-<character hex="4D 2F 5D"><unientity>E9C4</unientity><unientityalt>8941</unientityalt><desc>Variant of 232F5D which maps to 8941</desc></character>
-<character hex="4D 2F 73"><unientity>7E5D</unientity><desc>East Asian ideograph</desc></character>
-<character hex="4D 2F 7A"><unientity>891D</unientity><desc>East Asian ideograph</desc></character>
-<character hex="4D 30 32"><unientity>88AE</unientity><desc>East Asian ideograph</desc></character>
-<character hex="4D 33 59"><unientity>56AF</unientity><desc>East Asian ideograph</desc></character>
-<character hex="4D 33 63"><unientity>8C25</unientity><desc>East Asian ideograph</desc></character>
-<character hex="4D 38 6F"><unientity>544B</unientity><desc>East Asian ideograph</desc></character>
-<character hex="4D 3C 6C"><unientity>8FB6</unientity><desc>East Asian ideograph</desc></character>
-<character hex="4D 41 34"><unientity>919B</unientity><desc>East Asian ideograph</desc></character>
-<character hex="4D 41 76"><unientity>91DB</unientity><desc>East Asian ideograph</desc></character>
-<character hex="4D 44 5B"><unientity>E9C5</unientity><unientityalt>9306</unientityalt><desc>Variant of 23445B which maps to 9306</desc></character>
-<character hex="4D 44 6B"><unientity>954E</unientity><desc>East Asian ideograph</desc></character>
-<character hex="4D 47 2C"><unientity>952A</unientity><desc>East Asian ideograph</desc></character>
-<character hex="4D 47 54"><unientity>9544</unientity><desc>East Asian ideograph</desc></character>
-<character hex="4D 47 7B"><unientity>943E</unientity><desc>East Asian ideograph</desc></character>
-<character hex="4D 48 32"><unientity>953F</unientity><desc>East Asian ideograph</desc></character>
-<character hex="4D 48 35"><unientity>954C</unientity><desc>East Asian ideograph</desc></character>
-<character hex="4D 48 62"><unientity>9229</unientity><desc>East Asian ideograph</desc></character>
-<character hex="4D 4A 6C"><unientity>9667</unientity><desc>East Asian ideograph</desc></character>
-<character hex="4D 4D 61"><unientity>7EF1</unientity><desc>East Asian ideograph</desc></character>
-<character hex="4D 4F 39"><unientity>988C</unientity><desc>East Asian ideograph</desc></character>
-<character hex="4D 50 3A"><unientity>98D1</unientity><desc>East Asian ideograph</desc></character>
-<character hex="4D 50 53"><unientity>98DA</unientity><desc>East Asian ideograph</desc></character>
-<character hex="4D 51 54"><unientity>9942</unientity><desc>East Asian ideograph</desc></character>
-<character hex="4D 55 74"><unientity>9B2E</unientity><desc>East Asian ideograph</desc></character>
-<character hex="4D 58 58"><unientity>9BE3</unientity><desc>East Asian ideograph</desc></character>
-<character hex="4D 58 75"><unientity>9CD0</unientity><desc>East Asian ideograph</desc></character>
-<character hex="4D 59 34"><unientity>9CA6</unientity><desc>East Asian ideograph</desc></character>
-<character hex="4D 59 4E"><unientity>9BF5</unientity><desc>East Asian ideograph</desc></character>
-<character hex="4D 59 73"><unientity>51EB</unientity><desc>East Asian ideograph</desc></character>
-<character hex="4D 5A 6C"><unientity>9D46</unientity><desc>East Asian ideograph</desc></character>
-<character hex="4D 5B 35"><unientity>9DAB</unientity><desc>East Asian ideograph</desc></character>
-<character hex="4D 5B 7E"><unientity>9DC6</unientity><desc>East Asian ideograph</desc></character>
-<character hex="4D 5C 6B"><unientity>9D50</unientity><desc>East Asian ideograph</desc></character>
-<character hex="4D 5D 49"><unientity>9E81</unientity><desc>East Asian ideograph</desc></character>
-<character hex="4D 5F 70"><unientity>9F44</unientity><desc>East Asian ideograph</desc></character>
-<character hex="4D 5F 7B"><unientity>97F2</unientity><desc>East Asian ideograph</desc></character>
-<character hex="4D 60 47"><unientity>816D</unientity><desc>East Asian ideograph</desc></character>
-<character hex="51 30 51"><unientity>8CAE</unientity><desc>East Asian ideograph</desc></character>
-<character hex="51 30 57"><unientity>4E98</unientity><desc>East Asian ideograph</desc></character>
-<character hex="51 34 21"><unientity>91D6</unientity><desc>East Asian ideograph</desc></character>
-<character hex="51 35 6A"><unientity>8BC3</unientity><desc>East Asian ideograph</desc></character>
-<character hex="51 38 4D"><unientity>51C3</unientity><desc>East Asian ideograph</desc></character>
-<character hex="51 3A 47"><unientity>8885</unientity><desc>East Asian ideograph</desc></character>
-<character hex="51 3B 52"><unientity>6C3D</unientity><desc>East Asian ideograph</desc></character>
-<character hex="51 3D 67"><unientity>8FF3</unientity><desc>East Asian ideograph</desc></character>
-<character hex="51 45 6D"><unientity>822E</unientity><desc>East Asian ideograph</desc></character>
-<character hex="51 49 6B"><unientity>852B</unientity><desc>East Asian ideograph</desc></character>
-<character hex="51 4E 5B"><unientity>9271</unientity><desc>East Asian ideograph</desc></character>
-<character hex="51 51 3B"><unientity>7E9F</unientity><desc>East Asian ideograph</desc></character>
-<character hex="51 56 3F"><unientity>8616</unientity><desc>East Asian ideograph</desc></character>
-<character hex="51 5E 5D"><unientity>9616</unientity><desc>East Asian ideograph</desc></character>
-<character hex="51 61 22"><unientity>9988</unientity><desc>East Asian ideograph</desc></character>
-<character hex="51 6A 26"><unientity>51B4</unientity><desc>East Asian ideograph</desc></character>
-<character hex="51 79 54"><unientity>734E</unientity><desc>East Asian ideograph</desc></character>
-<character hex="52 73 5D"><unientity>E9C6</unientity><unientityalt>7E8A</unientityalt><desc>Variant of 22735D which maps to 7E8A</desc></character>
-<character hex="69 21 26"><unientity>30FB</unientity><desc>Ideographic centered point</desc></character>
-<character hex="69 21 39"><unientity>3005</unientity><desc>Ideographic iteration mark</desc></character>
-<character hex="69 21 3C"><unientity>30FC</unientity><desc>Vowel elongation mark for kana</desc></character>
-<character hex="69 21 52"><unientity>3008</unientity><desc>Ideographic less than sign</desc></character>
-<character hex="69 21 53"><unientity>3009</unientity><desc>Ideographic greater than sign</desc></character>
-<character hex="69 21 54"><unientity>300A</unientity><desc>Ideographic left double angle bracket</desc></character>
-<character hex="69 21 55"><unientity>300B</unientity><desc>Ideographic right double angle bracket</desc></character>
-<character hex="69 24 21"><unientity>3041</unientity><desc>Hiragana letter small A</desc></character>
-<character hex="69 24 22"><unientity>3042</unientity><desc>Hiragana letter A</desc></character>
-<character hex="69 24 23"><unientity>3043</unientity><desc>Hiragana letter small I</desc></character>
-<character hex="69 24 24"><unientity>3044</unientity><desc>Hiragana letter I</desc></character>
-<character hex="69 24 25"><unientity>3045</unientity><desc>Hiragana letter small U</desc></character>
-<character hex="69 24 26"><unientity>3046</unientity><desc>Hiragana letter U</desc></character>
-<character hex="69 24 27"><unientity>3047</unientity><desc>Hiragana letter small E</desc></character>
-<character hex="69 24 28"><unientity>3048</unientity><desc>Hiragana letter E</desc></character>
-<character hex="69 24 29"><unientity>3049</unientity><desc>Hiragana letter small O</desc></character>
-<character hex="69 24 2A"><unientity>304A</unientity><desc>Hiragana letter O</desc></character>
-<character hex="69 24 2B"><unientity>304B</unientity><desc>Hiragana letter KA</desc></character>
-<character hex="69 24 2C"><unientity>304C</unientity><desc>Hiragana letter GA</desc></character>
-<character hex="69 24 2D"><unientity>304D</unientity><desc>Hiragana letter KI</desc></character>
-<character hex="69 24 2E"><unientity>304E</unientity><desc>Hiragana letter GI</desc></character>
-<character hex="69 24 2F"><unientity>304F</unientity><desc>Hiragana letter KU</desc></character>
-<character hex="69 24 30"><unientity>3050</unientity><desc>Hiragana letter GU</desc></character>
-<character hex="69 24 31"><unientity>3051</unientity><desc>Hiragana letter KE</desc></character>
-<character hex="69 24 32"><unientity>3052</unientity><desc>Hiragana letter GE</desc></character>
-<character hex="69 24 33"><unientity>3053</unientity><desc>Hiragana letter KO</desc></character>
-<character hex="69 24 34"><unientity>3054</unientity><desc>Hiragana letter GO</desc></character>
-<character hex="69 24 35"><unientity>3055</unientity><desc>Hiragana letter SA</desc></character>
-<character hex="69 24 36"><unientity>3056</unientity><desc>Hiragana letter ZA</desc></character>
-<character hex="69 24 37"><unientity>3057</unientity><desc>Hiragana letter SI</desc></character>
-<character hex="69 24 38"><unientity>3058</unientity><desc>Hiragana letter ZI</desc></character>
-<character hex="69 24 39"><unientity>3059</unientity><desc>Hiragana letter SU</desc></character>
-<character hex="69 24 3A"><unientity>305A</unientity><desc>Hiragana letter ZU</desc></character>
-<character hex="69 24 3B"><unientity>305B</unientity><desc>Hiragana letter SE</desc></character>
-<character hex="69 24 3C"><unientity>305C</unientity><desc>Hiragana letter ZE</desc></character>
-<character hex="69 24 3D"><unientity>305D</unientity><desc>Hiragana letter SO</desc></character>
-<character hex="69 24 3E"><unientity>305E</unientity><desc>Hiragana letter ZO</desc></character>
-<character hex="69 24 3F"><unientity>305F</unientity><desc>Hiragana letter TA</desc></character>
-<character hex="69 24 40"><unientity>3060</unientity><desc>Hiragana letter DA</desc></character>
-<character hex="69 24 41"><unientity>3061</unientity><desc>Hiragana letter TI</desc></character>
-<character hex="69 24 42"><unientity>3062</unientity><desc>Hiragana letter DI</desc></character>
-<character hex="69 24 43"><unientity>3063</unientity><desc>Hiragana letter small TU</desc></character>
-<character hex="69 24 44"><unientity>3064</unientity><desc>Hiragana letter TU</desc></character>
-<character hex="69 24 45"><unientity>3065</unientity><desc>Hiragana letter DU</desc></character>
-<character hex="69 24 46"><unientity>3066</unientity><desc>Hiragana letter TE</desc></character>
-<character hex="69 24 47"><unientity>3067</unientity><desc>Hiragana letter DE</desc></character>
-<character hex="69 24 48"><unientity>3068</unientity><desc>Hiragana letter TO</desc></character>
-<character hex="69 24 49"><unientity>3069</unientity><desc>Hiragana letter DO</desc></character>
-<character hex="69 24 4A"><unientity>306A</unientity><desc>Hiragana letter NA</desc></character>
-<character hex="69 24 4B"><unientity>306B</unientity><desc>Hiragana letter NI</desc></character>
-<character hex="69 24 4C"><unientity>306C</unientity><desc>Hiragana letter NU</desc></character>
-<character hex="69 24 4D"><unientity>306D</unientity><desc>Hiragana letter NE</desc></character>
-<character hex="69 24 4E"><unientity>306E</unientity><desc>Hiragana letter NO</desc></character>
-<character hex="69 24 4F"><unientity>306F</unientity><desc>Hiragana letter HA</desc></character>
-<character hex="69 24 50"><unientity>3070</unientity><desc>Hiragana letter BA</desc></character>
-<character hex="69 24 51"><unientity>3071</unientity><desc>Hiragana letter PA</desc></character>
-<character hex="69 24 52"><unientity>3072</unientity><desc>Hiragana letter HI</desc></character>
-<character hex="69 24 53"><unientity>3073</unientity><desc>Hiragana letter BI</desc></character>
-<character hex="69 24 54"><unientity>3074</unientity><desc>Hiragana letter PI</desc></character>
-<character hex="69 24 55"><unientity>3075</unientity><desc>Hiragana letter HU</desc></character>
-<character hex="69 24 56"><unientity>3076</unientity><desc>Hiragana letter BU</desc></character>
-<character hex="69 24 57"><unientity>3077</unientity><desc>Hiragana letter PU</desc></character>
-<character hex="69 24 58"><unientity>3078</unientity><desc>Hiragana letter HE</desc></character>
-<character hex="69 24 59"><unientity>3079</unientity><desc>Hiragana letter BE</desc></character>
-<character hex="69 24 5A"><unientity>307A</unientity><desc>Hiragana letter PE</desc></character>
-<character hex="69 24 5B"><unientity>307B</unientity><desc>Hiragana letter HO</desc></character>
-<character hex="69 24 5C"><unientity>307C</unientity><desc>Hiragana letter BO</desc></character>
-<character hex="69 24 5D"><unientity>307D</unientity><desc>Hiragana letter PO</desc></character>
-<character hex="69 24 5E"><unientity>307E</unientity><desc>Hiragana letter MA</desc></character>
-<character hex="69 24 5F"><unientity>307F</unientity><desc>Hiragana letter MI</desc></character>
-<character hex="69 24 60"><unientity>3080</unientity><desc>Hiragana letter MU</desc></character>
-<character hex="69 24 61"><unientity>3081</unientity><desc>Hiragana letter ME</desc></character>
-<character hex="69 24 62"><unientity>3082</unientity><desc>Hiragana letter MO</desc></character>
-<character hex="69 24 63"><unientity>3083</unientity><desc>Hiragana letter small YA</desc></character>
-<character hex="69 24 64"><unientity>3084</unientity><desc>Hiragana letter YA</desc></character>
-<character hex="69 24 65"><unientity>3085</unientity><desc>Hiragana letter small YU</desc></character>
-<character hex="69 24 66"><unientity>3086</unientity><desc>Hiragana letter YU</desc></character>
-<character hex="69 24 67"><unientity>3087</unientity><desc>Hiragana letter small YO</desc></character>
-<character hex="69 24 68"><unientity>3088</unientity><desc>Hiragana letter YO</desc></character>
-<character hex="69 24 69"><unientity>3089</unientity><desc>Hiragana letter RA</desc></character>
-<character hex="69 24 6A"><unientity>308A</unientity><desc>Hiragana letter RI</desc></character>
-<character hex="69 24 6B"><unientity>308B</unientity><desc>Hiragana letter RU</desc></character>
-<character hex="69 24 6C"><unientity>308C</unientity><desc>Hiragana letter RE</desc></character>
-<character hex="69 24 6D"><unientity>308D</unientity><desc>Hiragana letter RO</desc></character>
-<character hex="69 24 6E"><unientity>308E</unientity><desc>Hiragana letter small WA</desc></character>
-<character hex="69 24 6F"><unientity>308F</unientity><desc>Hiragana letter WA</desc></character>
-<character hex="69 24 70"><unientity>3090</unientity><desc>Hiragana letter WI</desc></character>
-<character hex="69 24 71"><unientity>3091</unientity><desc>Hiragana letter WE</desc></character>
-<character hex="69 24 72"><unientity>3092</unientity><desc>Hiragana letter WO</desc></character>
-<character hex="69 24 73"><unientity>3093</unientity><desc>Hiragana letter N</desc></character>
-<character hex="69 25 21"><unientity>30A1</unientity><desc>Katakana letter small A</desc></character>
-<character hex="69 25 22"><unientity>30A2</unientity><desc>Katakana letter A</desc></character>
-<character hex="69 25 23"><unientity>30A3</unientity><desc>Katakana letter small I</desc></character>
-<character hex="69 25 24"><unientity>30A4</unientity><desc>Katakana letter I</desc></character>
-<character hex="69 25 25"><unientity>30A5</unientity><desc>Katakana letter small U</desc></character>
-<character hex="69 25 26"><unientity>30A6</unientity><desc>Katakana letter U</desc></character>
-<character hex="69 25 27"><unientity>30A7</unientity><desc>Katakana letter small E</desc></character>
-<character hex="69 25 28"><unientity>30A8</unientity><desc>Katakana letter E</desc></character>
-<character hex="69 25 29"><unientity>30A9</unientity><desc>Katakana letter small O</desc></character>
-<character hex="69 25 2A"><unientity>30AA</unientity><desc>Katakana letter O</desc></character>
-<character hex="69 25 2B"><unientity>30AB</unientity><desc>Katakana letter KA</desc></character>
-<character hex="69 25 2C"><unientity>30AC</unientity><desc>Katakana letter GA</desc></character>
-<character hex="69 25 2D"><unientity>30AD</unientity><desc>Katakana letter KI</desc></character>
-<character hex="69 25 2E"><unientity>30AE</unientity><desc>Katakana letter GI</desc></character>
-<character hex="69 25 2F"><unientity>30AF</unientity><desc>Katakana letter KU</desc></character>
-<character hex="69 25 30"><unientity>30B0</unientity><desc>Katakana letter GU</desc></character>
-<character hex="69 25 31"><unientity>30B1</unientity><desc>Katakana letter KE</desc></character>
-<character hex="69 25 32"><unientity>30B2</unientity><desc>Katakana letter GE</desc></character>
-<character hex="69 25 33"><unientity>30B3</unientity><desc>Katakana letter KO</desc></character>
-<character hex="69 25 34"><unientity>30B4</unientity><desc>Katakana letter GO</desc></character>
-<character hex="69 25 35"><unientity>30B5</unientity><desc>Katakana letter SA</desc></character>
-<character hex="69 25 36"><unientity>30B6</unientity><desc>Katakana letter ZA</desc></character>
-<character hex="69 25 37"><unientity>30B7</unientity><desc>Katakana letter SI</desc></character>
-<character hex="69 25 38"><unientity>30B8</unientity><desc>Katakana letter ZI</desc></character>
-<character hex="69 25 39"><unientity>30B9</unientity><desc>Katakana letter SU</desc></character>
-<character hex="69 25 3A"><unientity>30BA</unientity><desc>Katakana letter ZU</desc></character>
-<character hex="69 25 3B"><unientity>30BB</unientity><desc>Katakana letter SE</desc></character>
-<character hex="69 25 3C"><unientity>30BC</unientity><desc>Katakana letter ZE</desc></character>
-<character hex="69 25 3D"><unientity>30BD</unientity><desc>Katakana letter SO</desc></character>
-<character hex="69 25 3F"><unientity>30BF</unientity><desc>Katakana letter TA</desc></character>
-<character hex="69 25 40"><unientity>30C0</unientity><desc>Katakana letter DA</desc></character>
-<character hex="69 25 41"><unientity>30C1</unientity><desc>Katakana letter TI</desc></character>
-<character hex="69 25 42"><unientity>30C2</unientity><desc>Katakana letter DI</desc></character>
-<character hex="69 25 43"><unientity>30C3</unientity><desc>Katakana letter small TU</desc></character>
-<character hex="69 25 44"><unientity>30C4</unientity><desc>Katakana letter TU</desc></character>
-<character hex="69 25 45"><unientity>30C5</unientity><desc>Katakana letter DU</desc></character>
-<character hex="69 25 46"><unientity>30C6</unientity><desc>Katakana letter TE</desc></character>
-<character hex="69 25 47"><unientity>30C7</unientity><desc>Katakana letter DE</desc></character>
-<character hex="69 25 48"><unientity>30C8</unientity><desc>Katakana letter TO</desc></character>
-<character hex="69 25 49"><unientity>30C9</unientity><desc>Katakana letter DO</desc></character>
-<character hex="69 25 4A"><unientity>30CA</unientity><desc>Katakana letter NA</desc></character>
-<character hex="69 25 4B"><unientity>30CB</unientity><desc>Katakana letter NI</desc></character>
-<character hex="69 25 4C"><unientity>30CC</unientity><desc>Katakana letter NU</desc></character>
-<character hex="69 25 4D"><unientity>30CD</unientity><desc>Katakana letter NE</desc></character>
-<character hex="69 25 4E"><unientity>30CE</unientity><desc>Katakana letter NO</desc></character>
-<character hex="69 25 4F"><unientity>30CF</unientity><desc>Katakana letter HA</desc></character>
-<character hex="69 25 50"><unientity>30D0</unientity><desc>Katakana letter BA</desc></character>
-<character hex="69 25 51"><unientity>30D1</unientity><desc>Katakana letter PA</desc></character>
-<character hex="69 25 52"><unientity>30D2</unientity><desc>Katakana letter HI</desc></character>
-<character hex="69 25 53"><unientity>30D3</unientity><desc>Katakana letter BI</desc></character>
-<character hex="69 25 54"><unientity>30D4</unientity><desc>Katakana letter PI</desc></character>
-<character hex="69 25 55"><unientity>30D5</unientity><desc>Katakana letter HU</desc></character>
-<character hex="69 25 56"><unientity>30D6</unientity><desc>Katakana letter BU</desc></character>
-<character hex="69 25 57"><unientity>30D7</unientity><desc>Katakana letter PU</desc></character>
-<character hex="69 25 58"><unientity>30D8</unientity><desc>Katakana letter HE</desc></character>
-<character hex="69 25 59"><unientity>30D9</unientity><desc>Katakana letter BE</desc></character>
-<character hex="69 25 5A"><unientity>30DA</unientity><desc>Katakana letter PE</desc></character>
-<character hex="69 25 5B"><unientity>30DB</unientity><desc>Katakana letter HO</desc></character>
-<character hex="69 25 5C"><unientity>30DC</unientity><desc>Katakana letter BO</desc></character>
-<character hex="69 25 5D"><unientity>30DD</unientity><desc>Katakana letter PO</desc></character>
-<character hex="69 25 5E"><unientity>30DE</unientity><desc>Katakana letter MA</desc></character>
-<character hex="69 25 5F"><unientity>30DF</unientity><desc>Katakana letter MI</desc></character>
-<character hex="69 25 60"><unientity>30E0</unientity><desc>Katakana letter MU</desc></character>
-<character hex="69 25 61"><unientity>30E1</unientity><desc>Katakana letter ME</desc></character>
-<character hex="69 25 62"><unientity>30E2</unientity><desc>Katakana letter MO</desc></character>
-<character hex="69 25 63"><unientity>30E3</unientity><desc>Katakana letter small YA</desc></character>
-<character hex="69 25 64"><unientity>30E4</unientity><desc>Katakana letter YA</desc></character>
-<character hex="69 25 65"><unientity>30E5</unientity><desc>Katakana letter small YU</desc></character>
-<character hex="69 25 66"><unientity>30E6</unientity><desc>Katakana letter YU</desc></character>
-<character hex="69 25 67"><unientity>30E7</unientity><desc>Katakana letter small YO</desc></character>
-<character hex="69 25 68"><unientity>30E8</unientity><desc>Katakana letter YO</desc></character>
-<character hex="69 25 69"><unientity>30E9</unientity><desc>Katakana letter RA</desc></character>
-<character hex="69 25 6A"><unientity>30EA</unientity><desc>Katakana letter RI</desc></character>
-<character hex="69 25 6B"><unientity>30EB</unientity><desc>Katakana letter RU</desc></character>
-<character hex="69 25 6C"><unientity>30EC</unientity><desc>Katakana letter RE</desc></character>
-<character hex="69 25 6D"><unientity>30ED</unientity><desc>Katakana letter RO</desc></character>
-<character hex="69 25 6E"><unientity>30EE</unientity><desc>Katakana letter small WA</desc></character>
-<character hex="69 25 6F"><unientity>30EF</unientity><desc>Katakana letter WA</desc></character>
-<character hex="69 25 70"><unientity>30F0</unientity><desc>Katakana letter WI</desc></character>
-<character hex="69 25 71"><unientity>30F1</unientity><desc>Katakana letter WE</desc></character>
-<character hex="69 25 72"><unientity>30F2</unientity><desc>Katakana letter WO</desc></character>
-<character hex="69 25 73"><unientity>30F3</unientity><desc>Katakana letter N</desc></character>
-<character hex="69 25 74"><unientity>30F4</unientity><desc>Katakana letter VU</desc></character>
-<character hex="69 25 75"><unientity>30F5</unientity><desc>Katakana letter small KA</desc></character>
-<character hex="69 25 76"><unientity>30F6</unientity><desc>Katakana letter small KE</desc></character>
-<character hex="69 25 77"><unientity>309B</unientity><desc>Katakana-hiragana voiced sound mark</desc></character>
-<character hex="69 25 78"><unientity>309C</unientity><desc>Katakana-hiragana semi-voiced sound mark</desc></character>
-<character hex="69 37 29"><unientity>7C82</unientity><desc>East Asian ideograph</desc></character>
-<character hex="69 3C 32"><unientity>9D2B</unientity><desc>East Asian ideograph</desc></character>
-<character hex="69 3C 36"><unientity>96EB</unientity><desc>East Asian ideograph</desc></character>
-<character hex="69 46 64"><unientity>51EA</unientity><desc>East Asian ideograph</desc></character>
-<character hex="69 46 77"><unientity>5302</unientity><desc>East Asian ideograph</desc></character>
-<character hex="69 48 23"><unientity>7872</unientity><desc>East Asian ideograph</desc></character>
-<character hex="69 48 2B"><unientity>7560</unientity><desc>East Asian ideograph</desc></character>
-<character hex="69 48 38"><unientity>567A</unientity><desc>East Asian ideograph</desc></character>
-<character hex="69 4B 7B"><unientity>9EBF</unientity><desc>East Asian ideograph</desc></character>
-<character hex="69 4C 5D"><unientity>6762</unientity><desc>East Asian ideograph</desc></character>
-<character hex="69 4C 68"><unientity>5301</unientity><desc>East Asian ideograph</desc></character>
-<character hex="69 4C 7A"><unientity>9453</unientity><desc>East Asian ideograph</desc></character>
-<character hex="69 51 30"><unientity>5116</unientity><desc>East Asian ideograph</desc></character>
-<character hex="69 51 5E"><unientity>51E9</unientity><desc>East Asian ideograph</desc></character>
-<character hex="69 52 5D"><unientity>53FA</unientity><desc>East Asian ideograph</desc></character>
-<character hex="69 53 26"><unientity>54D8</unientity><desc>East Asian ideograph</desc></character>
-<character hex="69 53 3B"><unientity>555D</unientity><desc>East Asian ideograph</desc></character>
-<character hex="69 53 75"><unientity>56CE</unientity><desc>East Asian ideograph</desc></character>
-<character hex="69 54 29"><unientity>5726</unientity><desc>East Asian ideograph</desc></character>
-<character hex="69 54 2A"><unientity>5737</unientity><desc>East Asian ideograph</desc></character>
-<character hex="69 54 38"><unientity>57B3</unientity><desc>East Asian ideograph</desc></character>
-<character hex="69 54 3A"><unientity>57AA</unientity><desc>East Asian ideograph</desc></character>
-<character hex="69 54 3B"><unientity>57B0</unientity><desc>East Asian ideograph</desc></character>
-<character hex="69 54 42"><unientity>57D6</unientity><desc>East Asian ideograph</desc></character>
-<character hex="69 54 4B"><unientity>5870</unientity><desc>East Asian ideograph</desc></character>
-<character hex="69 54 51"><unientity>58B9</unientity><desc>East Asian ideograph</desc></character>
-<character hex="69 54 57"><unientity>58B8</unientity><desc>East Asian ideograph</desc></character>
-<character hex="69 54 5C"><unientity>58D7</unientity><desc>East Asian ideograph</desc></character>
-<character hex="69 54 5F"><unientity>58E5</unientity><desc>East Asian ideograph</desc></character>
-<character hex="69 55 4E"><unientity>5B36</unientity><desc>East Asian ideograph</desc></character>
-<character hex="69 56 26"><unientity>4E62</unientity><desc>East Asian ideograph</desc></character>
-<character hex="69 56 2C"><unientity>599B</unientity><desc>East Asian ideograph</desc></character>
-<character hex="69 56 2E"><unientity>5CBB</unientity><desc>East Asian ideograph</desc></character>
-<character hex="69 56 30"><unientity>5CBC</unientity><desc>East Asian ideograph</desc></character>
-<character hex="69 56 32"><unientity>5CC5</unientity><desc>East Asian ideograph</desc></character>
-<character hex="69 56 33"><unientity>5CBE</unientity><desc>East Asian ideograph</desc></character>
-<character hex="69 56 4E"><unientity>5D76</unientity><desc>East Asian ideograph</desc></character>
-<character hex="69 56 57"><unientity>5D90</unientity><desc>East Asian ideograph</desc></character>
-<character hex="69 57 37"><unientity>5F16</unientity><desc>East Asian ideograph</desc></character>
-<character hex="69 57 3B"><unientity>5F41</unientity><desc>East Asian ideograph</desc></character>
-<character hex="69 57 6A"><unientity>603A</unientity><desc>East Asian ideograph</desc></character>
-<character hex="69 59 4B"><unientity>6327</unientity><desc>East Asian ideograph</desc></character>
-<character hex="69 59 5E"><unientity>63B5</unientity><desc>East Asian ideograph</desc></character>
-<character hex="69 5A 31"><unientity>64F6</unientity><desc>East Asian ideograph</desc></character>
-<character hex="69 5A 73"><unientity>6683</unientity><desc>East Asian ideograph</desc></character>
-<character hex="69 5A 7E"><unientity>66BC</unientity><desc>East Asian ideograph</desc></character>
-<character hex="69 5B 37"><unientity>6737</unientity><desc>East Asian ideograph</desc></character>
-<character hex="69 5B 7B"><unientity>6926</unientity><desc>East Asian ideograph</desc></character>
-<character hex="69 5C 29"><unientity>6925</unientity><desc>East Asian ideograph</desc></character>
-<character hex="69 5C 2D"><unientity>6928</unientity><desc>East Asian ideograph</desc></character>
-<character hex="69 5C 30"><unientity>6923</unientity><desc>East Asian ideograph</desc></character>
-<character hex="69 5C 31"><unientity>6921</unientity><desc>East Asian ideograph</desc></character>
-<character hex="69 5C 39"><unientity>697E</unientity><desc>East Asian ideograph</desc></character>
-<character hex="69 5C 43"><unientity>6981</unientity><desc>East Asian ideograph</desc></character>
-<character hex="69 5C 4F"><unientity>69DD</unientity><desc>East Asian ideograph</desc></character>
-<character hex="69 5C 53"><unientity>6A2E</unientity><desc>East Asian ideograph</desc></character>
-<character hex="69 5C 71"><unientity>6A78</unientity><desc>East Asian ideograph</desc></character>
-<character hex="69 5D 36"><unientity>6B1F</unientity><desc>East Asian ideograph</desc></character>
-<character hex="69 5E 63"><unientity>6E82</unientity><desc>East Asian ideograph</desc></character>
-<character hex="69 5F 70"><unientity>7195</unientity><desc>East Asian ideograph</desc></character>
-<character hex="69 61 26"><unientity>74F2</unientity><desc>East Asian ideograph</desc></character>
-<character hex="69 61 36"><unientity>753C</unientity><desc>East Asian ideograph</desc></character>
-<character hex="69 61 3A"><unientity>7549</unientity><desc>East Asian ideograph</desc></character>
-<character hex="69 61 3E"><unientity>7569</unientity><desc>East Asian ideograph</desc></character>
-<character hex="69 62 6D"><unientity>7874</unientity><desc>East Asian ideograph</desc></character>
-<character hex="69 62 73"><unientity>78B5</unientity><desc>East Asian ideograph</desc></character>
-<character hex="69 63 25"><unientity>7907</unientity><desc>East Asian ideograph</desc></character>
-<character hex="69 63 4E"><unientity>7A43</unientity><desc>East Asian ideograph</desc></character>
-<character hex="69 63 73"><unientity>7B02</unientity><desc>East Asian ideograph</desc></character>
-<character hex="69 64 49"><unientity>7C13</unientity><desc>East Asian ideograph</desc></character>
-<character hex="69 64 4C"><unientity>7C17</unientity><desc>East Asian ideograph</desc></character>
-<character hex="69 64 4E"><unientity>7BF6</unientity><desc>East Asian ideograph</desc></character>
-<character hex="69 64 64"><unientity>7C90</unientity><desc>East Asian ideograph</desc></character>
-<character hex="69 64 66"><unientity>7CAD</unientity><desc>East Asian ideograph</desc></character>
-<character hex="69 64 71"><unientity>7CC0</unientity><desc>East Asian ideograph</desc></character>
-<character hex="69 64 74"><unientity>7CD8</unientity><desc>East Asian ideograph</desc></character>
-<character hex="69 65 4F"><unientity>7E05</unientity><desc>East Asian ideograph</desc></character>
-<character hex="69 65 6D"><unientity>7E83</unientity><desc>East Asian ideograph</desc></character>
-<character hex="69 65 6E"><unientity>7DD5</unientity><desc>East Asian ideograph</desc></character>
-<character hex="69 65 76"><unientity>7E90</unientity><desc>East Asian ideograph</desc></character>
-<character hex="69 67 33"><unientity>81A4</unientity><desc>East Asian ideograph</desc></character>
-<character hex="69 67 5C"><unientity>825D</unientity><desc>East Asian ideograph</desc></character>
-<character hex="69 68 4D"><unientity>8422</unientity><desc>East Asian ideograph</desc></character>
-<character hex="69 68 68"><unientity>84D9</unientity><desc>East Asian ideograph</desc></character>
-<character hex="69 69 46"><unientity>8630</unientity><desc>East Asian ideograph</desc></character>
-<character hex="69 69 5B"><unientity>86AB</unientity><desc>East Asian ideograph</desc></character>
-<character hex="69 69 62"><unientity>86EF</unientity><desc>East Asian ideograph</desc></character>
-<character hex="69 6A 2C"><unientity>87D0</unientity><desc>East Asian ideograph</desc></character>
-<character hex="69 6A 5E"><unientity>88B0</unientity><desc>East Asian ideograph</desc></character>
-<character hex="69 6A 61"><unientity>88C3</unientity><desc>East Asian ideograph</desc></character>
-<character hex="69 6A 6D"><unientity>8904</unientity><desc>East Asian ideograph</desc></character>
-<character hex="69 6B 27"><unientity>8977</unientity><desc>East Asian ideograph</desc></character>
-<character hex="69 6B 5C"><unientity>8ADA</unientity><desc>East Asian ideograph</desc></character>
-<character hex="69 6D 3F"><unientity>8EBE</unientity><desc>East Asian ideograph</desc></character>
-<character hex="69 6D 40"><unientity>8EC5</unientity><desc>East Asian ideograph</desc></character>
-<character hex="69 6D 41"><unientity>8EC8</unientity><desc>East Asian ideograph</desc></character>
-<character hex="69 6D 5A"><unientity>8F4C</unientity><desc>East Asian ideograph</desc></character>
-<character hex="69 6D 7A"><unientity>9027</unientity><desc>East Asian ideograph</desc></character>
-<character hex="69 6E 28"><unientity>9056</unientity><desc>East Asian ideograph</desc></character>
-<character hex="69 6E 5C"><unientity>91DF</unientity><desc>East Asian ideograph</desc></character>
-<character hex="69 6F 27"><unientity>933B</unientity><desc>East Asian ideograph</desc></character>
-<character hex="69 6F 5B"><unientity>958A</unientity><desc>East Asian ideograph</desc></character>
-<character hex="69 6F 5D"><unientity>9596</unientity><desc>East Asian ideograph</desc></character>
-<character hex="69 70 23"><unientity>9666</unientity><desc>East Asian ideograph</desc></character>
-<character hex="69 70 58"><unientity>9779</unientity><desc>East Asian ideograph</desc></character>
-<character hex="69 70 5D"><unientity>9786</unientity><desc>East Asian ideograph</desc></character>
-<character hex="69 70 60"><unientity>9790</unientity><desc>East Asian ideograph</desc></character>
-<character hex="69 71 24"><unientity>98AA</unientity><desc>East Asian ideograph</desc></character>
-<character hex="69 71 52"><unientity>99F2</unientity><desc>East Asian ideograph</desc></character>
-<character hex="69 71 74"><unientity>9ADE</unientity><desc>East Asian ideograph</desc></character>
-<character hex="69 71 7D"><unientity>9AF1</unientity><desc>East Asian ideograph</desc></character>
-<character hex="69 71 7E"><unientity>9AF7</unientity><desc>East Asian ideograph</desc></character>
-<character hex="69 72 3B"><unientity>9B96</unientity><desc>East Asian ideograph</desc></character>
-<character hex="69 72 40"><unientity>9BB4</unientity><desc>East Asian ideograph</desc></character>
-<character hex="69 72 45"><unientity>9BCF</unientity><desc>East Asian ideograph</desc></character>
-<character hex="69 72 46"><unientity>9BD1</unientity><desc>East Asian ideograph</desc></character>
-<character hex="69 72 4E"><unientity>9BF2</unientity><desc>East Asian ideograph</desc></character>
-<character hex="69 72 60"><unientity>9C30</unientity><desc>East Asian ideograph</desc></character>
-<character hex="69 72 65"><unientity>9C5A</unientity><desc>East Asian ideograph</desc></character>
-<character hex="69 72 7E"><unientity>9D48</unientity><desc>East Asian ideograph</desc></character>
-<character hex="69 73 23"><unientity>9D64</unientity><desc>East Asian ideograph</desc></character>
-<character hex="6F 24 57"><unientity>3131</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 24 58"><unientity>3134</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 24 59"><unientity>3137</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 24 5A"><unientity>3139</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 24 5B"><unientity>3141</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 24 5C"><unientity>3142</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 24 5D"><unientity>3145</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 24 5E"><unientity>3147</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 24 5F"><unientity>3148</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 24 60"><unientity>314A</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 24 61"><unientity>314B</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 24 62"><unientity>314C</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 24 63"><unientity>314D</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 24 64"><unientity>314E</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 24 65"><unientity>3132</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 24 69"><unientity>3138</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 24 6E"><unientity>3143</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 24 70"><unientity>3146</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 24 71"><unientity>3149</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 24 72"><unientity>314F</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 24 73"><unientity>3150</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 24 74"><unientity>3151</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 24 76"><unientity>3153</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 24 77"><unientity>3154</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 24 78"><unientity>3155</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 24 7A"><unientity>3157</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 24 7B"><unientity>3158</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 24 7E"><unientity>315B</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 25 21"><unientity>315C</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 25 25"><unientity>3160</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 25 26"><unientity>3161</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 25 27"><unientity>3162</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 25 28"><unientity>3163</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 48 5F"><unientity>AC00</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 48 60"><unientity>AC01</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 48 61"><unientity>AC02</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 48 62"><unientity>AC04</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 48 63"><unientity>AC07</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 48 64"><unientity>AC08</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 48 65"><unientity>AC09</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 48 66"><unientity>AC10</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 48 67"><unientity>AC11</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 48 68"><unientity>AC12</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 48 69"><unientity>AC13</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 48 6A"><unientity>AC14</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 48 6B"><unientity>AC15</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 48 6C"><unientity>AC16</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 48 6D"><unientity>AC17</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 48 6E"><unientity>AC19</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 48 6F"><unientity>AC1A</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 48 70"><unientity>AC1B</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 48 71"><unientity>AC1C</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 48 72"><unientity>AC1D</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 48 73"><unientity>AC20</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 48 75"><unientity>AC24</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 48 76"><unientity>AC2C</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 48 77"><unientity>AC2D</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 48 78"><unientity>AC2F</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 48 79"><unientity>AC30</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 48 7A"><unientity>AC31</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 48 7B"><unientity>AC38</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 48 7C"><unientity>AC39</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 48 7D"><unientity>AC40</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 48 7E"><unientity>AC54</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 49 21"><unientity>AC70</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 49 22"><unientity>AC71</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 49 24"><unientity>AC74</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 49 25"><unientity>AC77</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 49 26"><unientity>AC78</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 49 27"><unientity>AC79</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 49 29"><unientity>AC80</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 49 2A"><unientity>AC81</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 49 2B"><unientity>AC83</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 49 2C"><unientity>AC84</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 49 2D"><unientity>AC85</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 49 2E"><unientity>AC86</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 49 30"><unientity>AC89</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 49 31"><unientity>AC8A</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 49 32"><unientity>AC8B</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 49 33"><unientity>AC8C</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 49 34"><unientity>AC90</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 49 35"><unientity>AC94</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 49 36"><unientity>AC9C</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 49 37"><unientity>AC9F</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 49 38"><unientity>ACA0</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 49 39"><unientity>ACA1</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 49 3A"><unientity>ACA8</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 49 3B"><unientity>ACA9</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 49 3C"><unientity>ACAA</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 49 3D"><unientity>ACAC</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 49 3E"><unientity>ACAF</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 49 3F"><unientity>ACB0</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 49 40"><unientity>ACB8</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 49 41"><unientity>ACB9</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 49 43"><unientity>ACBC</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 49 44"><unientity>ACBD</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 49 45"><unientity>ACC1</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 49 47"><unientity>ACC4</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 49 49"><unientity>ACD7</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 49 4A"><unientity>ACE0</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 49 4B"><unientity>ACE1</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 49 4C"><unientity>ACE4</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 49 4D"><unientity>ACE7</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 49 4E"><unientity>ACE8</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 49 4F"><unientity>ACEA</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 49 50"><unientity>ACEC</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 49 51"><unientity>ACEF</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 49 52"><unientity>ACF0</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 49 53"><unientity>ACF1</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 49 54"><unientity>ACF3</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 49 55"><unientity>ACF5</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 49 56"><unientity>ACF6</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 49 57"><unientity>ACFA</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 49 58"><unientity>ACFC</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 49 59"><unientity>ACFD</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 49 5A"><unientity>AD00</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 49 5B"><unientity>AD04</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 49 5C"><unientity>AD0C</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 49 5D"><unientity>AD0D</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 49 5E"><unientity>AD0F</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 49 5F"><unientity>AD11</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 49 60"><unientity>AD18</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 49 61"><unientity>AD19</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 49 62"><unientity>AD1C</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 49 63"><unientity>AD20</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 49 64"><unientity>AD28</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 49 65"><unientity>AD29</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 49 66"><unientity>AD2D</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 49 67"><unientity>AD34</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 49 68"><unientity>AD38</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 49 69"><unientity>AD3C</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 49 6A"><unientity>AD44</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 49 6C"><unientity>AD49</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 49 6D"><unientity>AD50</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 49 6E"><unientity>AD6C</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 49 6F"><unientity>AD6D</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 49 70"><unientity>AD70</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 49 71"><unientity>AD73</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 49 72"><unientity>AD74</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 49 73"><unientity>AD75</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 49 74"><unientity>AD76</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 49 75"><unientity>AD7C</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 49 76"><unientity>AD7D</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 49 77"><unientity>AD7F</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 49 78"><unientity>AD81</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 49 79"><unientity>AD82</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 49 7A"><unientity>AD88</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 49 7B"><unientity>AD8C</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 49 7C"><unientity>AD90</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 49 7E"><unientity>ADA4</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 4A 22"><unientity>ADC0</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 4A 23"><unientity>ADC4</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 4A 24"><unientity>ADC8</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 4A 25"><unientity>ADD0</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 4A 26"><unientity>ADD1</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 4A 27"><unientity>ADD3</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 4A 28"><unientity>ADDC</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 4A 29"><unientity>ADE0</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 4A 2A"><unientity>ADE4</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 4A 2B"><unientity>ADEC</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 4A 2C"><unientity>ADF8</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 4A 2D"><unientity>ADF9</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 4A 2E"><unientity>ADFC</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 4A 2F"><unientity>ADFF</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 4A 30"><unientity>AE00</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 4A 31"><unientity>AE01</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 4A 32"><unientity>AE08</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 4A 33"><unientity>AE09</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 4A 34"><unientity>AE0B</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 4A 35"><unientity>AE0D</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 4A 36"><unientity>AE30</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 4A 37"><unientity>AE31</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 4A 38"><unientity>AE34</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 4A 39"><unientity>AE37</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 4A 3A"><unientity>AE38</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 4A 3B"><unientity>AE40</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 4A 3C"><unientity>AE41</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 4A 3D"><unientity>AE43</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 4A 3E"><unientity>AE44</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 4A 3F"><unientity>AE45</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 4A 40"><unientity>AE4A</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 4A 43"><unientity>AE4C</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 4A 44"><unientity>AE4D</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 4A 45"><unientity>AE4E</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 4A 46"><unientity>AE50</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 4A 47"><unientity>AE54</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 4A 48"><unientity>AE5C</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 4A 49"><unientity>AE5D</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 4A 4A"><unientity>AE60</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 4A 4B"><unientity>AE61</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 4A 4C"><unientity>AE62</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 4A 4D"><unientity>AE65</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 4A 4E"><unientity>AE68</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 4A 4F"><unientity>AE69</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 4A 50"><unientity>AE6C</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 4A 51"><unientity>AE70</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 4A 52"><unientity>AE78</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 4A 53"><unientity>AE79</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 4A 54"><unientity>AE7B</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 4A 55"><unientity>AE7C</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 4A 56"><unientity>AE7D</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 4A 57"><unientity>AE84</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 4A 58"><unientity>AE85</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 4A 59"><unientity>AEBC</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 4A 5A"><unientity>AEBD</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 4A 5B"><unientity>AEBE</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 4A 5C"><unientity>AEC0</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 4A 5D"><unientity>AEC4</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 4A 5E"><unientity>AECC</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 4A 5F"><unientity>AECD</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 4A 60"><unientity>AECF</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 4A 61"><unientity>AED0</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 4A 62"><unientity>AED1</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 4A 63"><unientity>AED8</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 4A 64"><unientity>AEDC</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 4A 65"><unientity>AEF4</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 4A 66"><unientity>AF0D</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 4A 67"><unientity>AF2C</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 4A 68"><unientity>AF2D</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 4A 69"><unientity>AF30</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 4A 6A"><unientity>AF34</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 4A 6B"><unientity>AF3C</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 4A 6C"><unientity>AF3D</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 4A 6D"><unientity>AF3F</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 4A 6E"><unientity>AF41</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 4A 6F"><unientity>AF42</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 4A 70"><unientity>AF43</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 4A 71"><unientity>AF48</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 4A 72"><unientity>AF49</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 4A 73"><unientity>AF4C</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 4A 74"><unientity>AF58</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 4A 75"><unientity>AF5C</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 4A 76"><unientity>AF5D</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 4A 77"><unientity>AF64</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 4A 78"><unientity>AF65</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 4A 79"><unientity>AF79</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 4A 7A"><unientity>AF80</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 4A 7B"><unientity>AF84</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 4A 7C"><unientity>AF88</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 4A 7D"><unientity>AF90</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 4A 7E"><unientity>AF95</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 4B 21"><unientity>AF9C</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 4B 22"><unientity>AFB8</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 4B 23"><unientity>AFB9</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 4B 24"><unientity>AFBC</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 4B 25"><unientity>AFC0</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 4B 26"><unientity>AFC7</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 4B 27"><unientity>AFC8</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 4B 28"><unientity>AFC9</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 4B 29"><unientity>AFCB</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 4B 2A"><unientity>AFCD</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 4B 2B"><unientity>AFCE</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 4B 2C"><unientity>AFD4</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 4B 2D"><unientity>AFD8</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 4B 2E"><unientity>AFE9</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 4B 2F"><unientity>AFF0</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 4B 30"><unientity>B000</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 4B 32"><unientity>B00C</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 4B 33"><unientity>B00D</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 4B 34"><unientity>B010</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 4B 35"><unientity>B014</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 4B 36"><unientity>B01C</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 4B 37"><unientity>B01D</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 4B 38"><unientity>B028</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 4B 39"><unientity>B044</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 4B 3A"><unientity>B045</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 4B 3B"><unientity>B048</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 4B 3C"><unientity>B04A</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 4B 3D"><unientity>B04C</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 4B 3E"><unientity>B053</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 4B 3F"><unientity>B054</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 4B 40"><unientity>B055</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 4B 41"><unientity>B057</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 4B 42"><unientity>B059</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 4B 43"><unientity>B05D</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 4B 44"><unientity>B07C</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 4B 45"><unientity>B07D</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 4B 46"><unientity>B080</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 4B 47"><unientity>B084</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 4B 48"><unientity>B08C</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 4B 49"><unientity>B08D</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 4B 4A"><unientity>B08F</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 4B 4B"><unientity>B090</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 4B 4C"><unientity>B091</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 4B 4F"><unientity>B098</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 4B 50"><unientity>B099</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 4B 51"><unientity>B09A</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 4B 52"><unientity>B09C</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 4B 53"><unientity>B09F</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 4B 54"><unientity>B0A0</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 4B 55"><unientity>B0A1</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 4B 56"><unientity>B0A8</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 4B 57"><unientity>B0A9</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 4B 58"><unientity>B0AB</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 4B 59"><unientity>B0AC</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 4B 5A"><unientity>B0AD</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 4B 5B"><unientity>B0AE</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 4B 5C"><unientity>B0AF</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 4B 5D"><unientity>B0B1</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 4B 5E"><unientity>B0B3</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 4B 5F"><unientity>B0B4</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 4B 60"><unientity>B0B5</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 4B 61"><unientity>B0B8</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 4B 62"><unientity>B0BB</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 4B 63"><unientity>B0BC</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 4B 64"><unientity>B0C4</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 4B 65"><unientity>B0C5</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 4B 66"><unientity>B0C7</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 4B 67"><unientity>B0C8</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 4B 68"><unientity>B0C9</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 4B 69"><unientity>B0D0</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 4B 6A"><unientity>B0D1</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 4B 6B"><unientity>B0E0</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 4B 6C"><unientity>B0E5</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 4B 6D"><unientity>B0EC</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 4B 6E"><unientity>B108</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 4B 6F"><unientity>B109</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 4B 71"><unientity>B10B</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 4B 72"><unientity>B10C</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 4B 73"><unientity>B10F</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 4B 74"><unientity>B110</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 4B 75"><unientity>B113</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 4B 76"><unientity>B118</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 4B 77"><unientity>B119</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 4B 78"><unientity>B11B</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 4B 79"><unientity>B11C</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 4B 7A"><unientity>B11D</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 4B 7B"><unientity>B11E</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 4B 7C"><unientity>B123</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 4B 7D"><unientity>B124</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 4B 7E"><unientity>B125</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 4C 21"><unientity>B128</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 4C 22"><unientity>B12C</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 4C 23"><unientity>B134</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 4C 24"><unientity>B135</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 4C 25"><unientity>B137</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 4C 26"><unientity>B140</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 4C 27"><unientity>B141</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 4C 28"><unientity>B144</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 4C 29"><unientity>B150</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 4C 2A"><unientity>B151</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 4C 2B"><unientity>B153</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 4C 2C"><unientity>B154</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 4C 2D"><unientity>B155</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 4C 2E"><unientity>B158</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 4C 2F"><unientity>B15C</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 4C 30"><unientity>B178</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 4C 31"><unientity>B179</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 4C 32"><unientity>B17A</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 4C 33"><unientity>B17C</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 4C 34"><unientity>B180</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 4C 35"><unientity>B188</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 4C 36"><unientity>B189</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 4C 37"><unientity>B18B</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 4C 38"><unientity>B18D</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 4C 39"><unientity>B192</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 4C 3A"><unientity>B193</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 4C 3B"><unientity>B194</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 4C 3C"><unientity>B1A8</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 4C 3D"><unientity>B1CC</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 4C 3E"><unientity>B1D0</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 4C 3F"><unientity>B1D4</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 4C 40"><unientity>B1DC</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 4C 41"><unientity>B1E8</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 4C 42"><unientity>B1FD</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 4C 43"><unientity>B204</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 4C 44"><unientity>B205</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 4C 45"><unientity>B208</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 4C 46"><unientity>B20B</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 4C 47"><unientity>B20C</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 4C 48"><unientity>B213</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 4C 49"><unientity>B214</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 4C 4A"><unientity>B215</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 4C 4B"><unientity>B217</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 4C 4C"><unientity>B220</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 4C 4D"><unientity>B233</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 4C 4E"><unientity>B234</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 4C 4F"><unientity>B258</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 4C 50"><unientity>B25C</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 4C 51"><unientity>B260</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 4C 52"><unientity>B268</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 4C 53"><unientity>B269</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 4C 54"><unientity>B274</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 4C 55"><unientity>B284</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 4C 56"><unientity>B289</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 4C 57"><unientity>B290</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 4C 58"><unientity>B291</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 4C 59"><unientity>B294</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 4C 5A"><unientity>B298</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 4C 5B"><unientity>B299</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 4C 5C"><unientity>B2A0</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 4C 5D"><unientity>B2A1</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 4C 5E"><unientity>B2A5</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 4C 5F"><unientity>B2A6</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 4C 60"><unientity>B2AA</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 4C 61"><unientity>B2AC</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 4C 62"><unientity>B2C8</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 4C 63"><unientity>B2C9</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 4C 64"><unientity>B2CC</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 4C 65"><unientity>B2D0</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 4C 66"><unientity>B2D8</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 4C 67"><unientity>B2D9</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 4C 68"><unientity>B2DB</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 4C 69"><unientity>B2DD</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 4C 6A"><unientity>B2E2</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 4C 6D"><unientity>B2E4</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 4C 6E"><unientity>B2E5</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 4C 6F"><unientity>B2E6</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 4C 70"><unientity>B2E8</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 4C 71"><unientity>B2EB</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 4C 72"><unientity>B2EC</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 4C 73"><unientity>B2ED</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 4C 74"><unientity>B2EE</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 4C 75"><unientity>B2F3</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 4C 76"><unientity>B2F4</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 4C 77"><unientity>B2F5</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 4C 78"><unientity>B2F7</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 4C 79"><unientity>B2F9</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 4C 7A"><unientity>B2FA</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 4C 7B"><unientity>B2FB</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 4C 7C"><unientity>B2FF</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 4C 7D"><unientity>B300</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 4C 7E"><unientity>B301</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 4D 21"><unientity>B304</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 4D 22"><unientity>B308</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 4D 23"><unientity>B310</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 4D 24"><unientity>B311</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 4D 25"><unientity>B313</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 4D 26"><unientity>B314</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 4D 27"><unientity>B315</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 4D 28"><unientity>B354</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 4D 29"><unientity>B355</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 4D 2A"><unientity>B358</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 4D 2B"><unientity>B35B</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 4D 2C"><unientity>B35C</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 4D 2D"><unientity>B35F</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 4D 2E"><unientity>B364</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 4D 2F"><unientity>B365</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 4D 30"><unientity>B367</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 4D 31"><unientity>B368</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 4D 32"><unientity>B369</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 4D 33"><unientity>B36A</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 4D 34"><unientity>B36B</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 4D 35"><unientity>B36E</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 4D 36"><unientity>B370</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 4D 37"><unientity>B371</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 4D 38"><unientity>B374</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 4D 39"><unientity>B378</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 4D 3A"><unientity>B380</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 4D 3B"><unientity>B383</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 4D 3C"><unientity>B385</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 4D 3D"><unientity>B38C</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 4D 3E"><unientity>B3C4</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 4D 3F"><unientity>B3C5</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 4D 40"><unientity>B3C8</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 4D 41"><unientity>B3CB</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 4D 42"><unientity>B3CC</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 4D 43"><unientity>B3D0</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 4D 44"><unientity>B3D4</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 4D 45"><unientity>B3D5</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 4D 46"><unientity>B3D7</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 4D 47"><unientity>B3D9</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 4D 48"><unientity>B3DB</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 4D 49"><unientity>B3FC</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 4D 4A"><unientity>B400</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 4D 4B"><unientity>B410</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 4D 4C"><unientity>B418</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 4D 4D"><unientity>B41C</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 4D 4E"><unientity>B420</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 4D 4F"><unientity>B428</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 4D 50"><unientity>B429</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 4D 51"><unientity>B42B</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 4D 52"><unientity>B42C</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 4D 53"><unientity>B450</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 4D 54"><unientity>B451</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 4D 55"><unientity>B454</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 4D 56"><unientity>B458</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 4D 57"><unientity>B460</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 4D 58"><unientity>B461</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 4D 59"><unientity>B463</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 4D 5A"><unientity>B465</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 4D 5B"><unientity>B46C</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 4D 5C"><unientity>B480</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 4D 5D"><unientity>B488</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 4D 5E"><unientity>B4A4</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 4D 5F"><unientity>B4B7</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 4D 60"><unientity>B4C0</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 4D 61"><unientity>B4D0</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 4D 62"><unientity>B4DC</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 4D 63"><unientity>B4DD</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 4D 64"><unientity>B4E0</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 4D 65"><unientity>B4E3</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 4D 66"><unientity>B4E4</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 4D 67"><unientity>B4EC</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 4D 68"><unientity>B4ED</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 4D 69"><unientity>B4EF</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 4D 6A"><unientity>B4F1</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 4D 6B"><unientity>B514</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 4D 6C"><unientity>B515</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 4D 6D"><unientity>B518</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 4D 6E"><unientity>B51B</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 4D 6F"><unientity>B51C</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 4D 70"><unientity>B524</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 4D 71"><unientity>B525</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 4D 72"><unientity>B527</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 4D 73"><unientity>B528</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 4D 74"><unientity>B529</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 4D 75"><unientity>B52A</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 4D 78"><unientity>B530</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 4D 79"><unientity>B531</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 4D 7A"><unientity>B532</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 4D 7B"><unientity>B534</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 4D 7C"><unientity>B537</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 4D 7D"><unientity>B538</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 4E 21"><unientity>B540</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 4E 22"><unientity>B541</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 4E 23"><unientity>B543</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 4E 24"><unientity>B544</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 4E 25"><unientity>B545</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 4E 26"><unientity>B54B</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 4E 27"><unientity>B54C</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 4E 28"><unientity>B54D</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 4E 29"><unientity>B550</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 4E 2A"><unientity>B554</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 4E 2B"><unientity>B55C</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 4E 2C"><unientity>B55D</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 4E 2D"><unientity>B55F</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 4E 2E"><unientity>B560</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 4E 2F"><unientity>B561</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 4E 30"><unientity>B5A0</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 4E 31"><unientity>B5A1</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 4E 32"><unientity>B5A4</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 4E 33"><unientity>B5A8</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 4E 34"><unientity>B5AB</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 4E 35"><unientity>B5B0</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 4E 36"><unientity>B5B1</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 4E 37"><unientity>B5B3</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 4E 38"><unientity>B5B4</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 4E 39"><unientity>B5B5</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 4E 3A"><unientity>B5BB</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 4E 3B"><unientity>B5BC</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 4E 3C"><unientity>B5C0</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 4E 3D"><unientity>B5C4</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 4E 3E"><unientity>B5CC</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 4E 3F"><unientity>B5CF</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 4E 40"><unientity>B5D1</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 4E 41"><unientity>B610</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 4E 42"><unientity>B611</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 4E 43"><unientity>B614</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 4E 44"><unientity>B618</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 4E 45"><unientity>B625</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 4E 46"><unientity>B664</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 4E 47"><unientity>B69C</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 4E 48"><unientity>B69D</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 4E 49"><unientity>B6A4</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 4E 4A"><unientity>B6AB</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 4E 4B"><unientity>B6AC</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 4E 4C"><unientity>B6B1</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 4E 4D"><unientity>B6F0</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 4E 4E"><unientity>B6F4</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 4E 4F"><unientity>B6F8</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 4E 50"><unientity>B700</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 4E 51"><unientity>B701</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 4E 52"><unientity>B728</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 4E 53"><unientity>B729</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 4E 54"><unientity>B72C</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 4E 55"><unientity>B72F</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 4E 56"><unientity>B730</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 4E 57"><unientity>B738</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 4E 58"><unientity>B739</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 4E 59"><unientity>B73B</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 4E 5A"><unientity>B744</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 4E 5B"><unientity>B748</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 4E 5C"><unientity>B760</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 4E 5D"><unientity>B764</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 4E 5E"><unientity>B768</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 4E 5F"><unientity>B770</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 4E 60"><unientity>B771</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 4E 61"><unientity>B775</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 4E 64"><unientity>B77C</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 4E 65"><unientity>B77D</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 4E 66"><unientity>B780</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 4E 67"><unientity>B784</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 4E 68"><unientity>B78C</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 4E 69"><unientity>B78D</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 4E 6A"><unientity>B78F</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 4E 6B"><unientity>B790</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 4E 6C"><unientity>B791</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 4E 6D"><unientity>B797</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 4E 6E"><unientity>B798</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 4E 6F"><unientity>B799</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 4E 70"><unientity>B79C</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 4E 71"><unientity>B7A0</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 4E 72"><unientity>B7A8</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 4E 73"><unientity>B7A9</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 4E 74"><unientity>B7AB</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 4E 75"><unientity>B7AC</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 4E 76"><unientity>B7AD</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 4E 77"><unientity>B7B4</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 4E 78"><unientity>B7B5</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 4E 79"><unientity>B7C9</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 4E 7A"><unientity>B7EC</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 4E 7B"><unientity>B7ED</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 4E 7C"><unientity>B7F0</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 4E 7D"><unientity>B7F4</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 4E 7E"><unientity>B7FC</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 4F 21"><unientity>B7FD</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 4F 22"><unientity>B7FF</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 4F 23"><unientity>B800</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 4F 24"><unientity>B801</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 4F 25"><unientity>B807</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 4F 26"><unientity>B808</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 4F 27"><unientity>B809</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 4F 28"><unientity>B80C</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 4F 29"><unientity>B810</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 4F 2A"><unientity>B818</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 4F 2B"><unientity>B819</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 4F 2C"><unientity>B81B</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 4F 2D"><unientity>B81D</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 4F 2E"><unientity>B824</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 4F 2F"><unientity>B825</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 4F 30"><unientity>B828</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 4F 31"><unientity>B82C</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 4F 32"><unientity>B834</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 4F 33"><unientity>B835</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 4F 34"><unientity>B837</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 4F 35"><unientity>B838</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 4F 36"><unientity>B839</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 4F 37"><unientity>B840</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 4F 38"><unientity>B85C</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 4F 39"><unientity>B85D</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 4F 3A"><unientity>B860</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 4F 3B"><unientity>B864</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 4F 3C"><unientity>B86C</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 4F 3D"><unientity>B86D</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 4F 3E"><unientity>B86F</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 4F 3F"><unientity>B871</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 4F 40"><unientity>B8B0</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 4F 41"><unientity>B8CC</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 4F 42"><unientity>B8E1</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 4F 43"><unientity>B8E8</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 4F 44"><unientity>B8E9</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 4F 45"><unientity>B8EC</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 4F 46"><unientity>B8F0</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 4F 47"><unientity>B8F8</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 4F 48"><unientity>B8F9</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 4F 49"><unientity>B8FB</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 4F 4A"><unientity>B8FD</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 4F 4B"><unientity>B904</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 4F 4C"><unientity>B93C</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 4F 4D"><unientity>B958</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 4F 4E"><unientity>B959</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 4F 4F"><unientity>B95C</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 4F 50"><unientity>B960</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 4F 51"><unientity>B968</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 4F 52"><unientity>B96D</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 4F 53"><unientity>B974</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 4F 54"><unientity>B975</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 4F 55"><unientity>B978</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 4F 56"><unientity>B97C</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 4F 57"><unientity>B984</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 4F 58"><unientity>B985</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 4F 59"><unientity>B987</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 4F 5A"><unientity>B989</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 4F 5B"><unientity>B98E</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 4F 5C"><unientity>B9AC</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 4F 5D"><unientity>B9AD</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 4F 5E"><unientity>B9B0</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 4F 5F"><unientity>B9B4</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 4F 60"><unientity>B9BC</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 4F 61"><unientity>B9BD</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 4F 62"><unientity>B9BF</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 4F 63"><unientity>B9C1</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 4F 66"><unientity>B9C8</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 4F 67"><unientity>B9C9</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 4F 68"><unientity>B9CC</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 4F 69"><unientity>B9CE</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 4F 6A"><unientity>B9CF</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 4F 6B"><unientity>B9D0</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 4F 6C"><unientity>B9D1</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 4F 6D"><unientity>B9D8</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 4F 6E"><unientity>B9D9</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 4F 6F"><unientity>B9DB</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 4F 70"><unientity>B9DD</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 4F 71"><unientity>B9DE</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 4F 72"><unientity>B9E1</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 4F 73"><unientity>B9E3</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 4F 74"><unientity>B9E4</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 4F 75"><unientity>B9E5</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 4F 76"><unientity>B9E8</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 4F 77"><unientity>B9EC</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 4F 78"><unientity>B9F4</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 4F 79"><unientity>B9F5</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 4F 7A"><unientity>B9F7</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 4F 7B"><unientity>B9F8</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 4F 7C"><unientity>B9F9</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 4F 7D"><unientity>B9FA</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 4F 7E"><unientity>BA00</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 50 21"><unientity>BA38</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 50 22"><unientity>BA39</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 50 23"><unientity>BA3C</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 50 24"><unientity>BA40</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 50 25"><unientity>BA48</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 50 26"><unientity>BA49</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 50 27"><unientity>BA4B</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 50 28"><unientity>BA4D</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 50 29"><unientity>BA4E</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 50 2A"><unientity>BA53</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 50 2B"><unientity>BA54</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 50 2C"><unientity>BA55</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 50 2D"><unientity>BA58</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 50 2E"><unientity>BA5C</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 50 2F"><unientity>BA64</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 50 30"><unientity>BA65</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 50 31"><unientity>BA67</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 50 32"><unientity>BA70</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 50 33"><unientity>BA71</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 50 34"><unientity>BA74</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 50 35"><unientity>BA78</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 50 36"><unientity>BA83</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 50 37"><unientity>BA84</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 50 38"><unientity>BA85</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 50 39"><unientity>BA87</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 50 3A"><unientity>BAA8</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 50 3B"><unientity>BAA9</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 50 3C"><unientity>BAAB</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 50 3D"><unientity>BAAC</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 50 3E"><unientity>BAB0</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 50 3F"><unientity>BAB8</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 50 40"><unientity>BAB9</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 50 41"><unientity>BABB</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 50 42"><unientity>BABD</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 50 43"><unientity>BAC3</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 50 44"><unientity>BAFC</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 50 45"><unientity>BB0F</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 50 46"><unientity>BB18</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 50 47"><unientity>BB34</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 50 48"><unientity>BB35</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 50 49"><unientity>BB36</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 50 4A"><unientity>BB38</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 50 4B"><unientity>BB3B</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 50 4C"><unientity>BB3C</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 50 4D"><unientity>BB3D</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 50 4E"><unientity>BB44</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 50 4F"><unientity>BB47</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 50 50"><unientity>BB49</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 50 51"><unientity>BB4D</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 50 52"><unientity>BB4F</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 50 53"><unientity>BB50</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 50 54"><unientity>BB54</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 50 55"><unientity>BB58</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 50 56"><unientity>BB61</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 50 57"><unientity>BB63</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 50 58"><unientity>BB88</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 50 59"><unientity>BB8C</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 50 5A"><unientity>BBA4</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 50 5B"><unientity>BBC0</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 50 5C"><unientity>BBC4</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 50 5D"><unientity>BBC8</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 50 5E"><unientity>BBD0</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 50 5F"><unientity>BBF8</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 50 60"><unientity>BBF9</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 50 61"><unientity>BBFC</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 50 62"><unientity>BBFF</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 50 63"><unientity>BC00</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 50 64"><unientity>BC08</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 50 65"><unientity>BC09</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 50 66"><unientity>BC0B</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 50 68"><unientity>BC0D</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 50 69"><unientity>BC0F</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 50 6A"><unientity>BC11</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 50 6B"><unientity>BBB4</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 50 6D"><unientity>BC14</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 50 6E"><unientity>BC15</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 50 6F"><unientity>BC16</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 50 70"><unientity>BC18</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 50 71"><unientity>BC1B</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 50 72"><unientity>BC1C</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 50 73"><unientity>BC1D</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 50 74"><unientity>BC1F</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 50 75"><unientity>BC24</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 50 76"><unientity>BC25</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 50 77"><unientity>BC27</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 50 78"><unientity>BC29</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 50 79"><unientity>BC2D</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 50 7A"><unientity>BC30</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 50 7B"><unientity>BC31</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 50 7C"><unientity>BC34</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 50 7D"><unientity>BC37</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 50 7E"><unientity>BC38</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 51 21"><unientity>BC40</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 51 22"><unientity>BC41</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 51 23"><unientity>BC43</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 51 24"><unientity>BC44</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 51 25"><unientity>BC45</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 51 26"><unientity>BC84</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 51 27"><unientity>BC85</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 51 28"><unientity>BC88</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 51 29"><unientity>BC8B</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 51 2A"><unientity>BC8C</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 51 2B"><unientity>BC94</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 51 2C"><unientity>BC95</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 51 2D"><unientity>BC97</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 51 2E"><unientity>BC98</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 51 2F"><unientity>BC99</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 51 30"><unientity>BC9A</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 51 31"><unientity>BCA0</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 51 32"><unientity>BCA1</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 51 33"><unientity>BCA4</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 51 34"><unientity>BCA7</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 51 35"><unientity>BCA8</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 51 36"><unientity>BCB0</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 51 37"><unientity>BCB1</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 51 38"><unientity>BCB3</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 51 39"><unientity>BCB5</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 51 3A"><unientity>BCBC</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 51 3B"><unientity>BCBD</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 51 3C"><unientity>BCC0</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 51 3D"><unientity>BCC4</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 51 3E"><unientity>BCCC</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 51 3F"><unientity>BCCD</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 51 40"><unientity>BCCF</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 51 41"><unientity>BCD0</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 51 42"><unientity>BCD1</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 51 43"><unientity>BCD2</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 51 44"><unientity>BCD5</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 51 45"><unientity>BCF4</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 51 46"><unientity>BCF5</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 51 47"><unientity>BCF6</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 51 48"><unientity>BCF8</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 51 49"><unientity>BCFC</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 51 4A"><unientity>BD04</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 51 4B"><unientity>BD05</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 51 4C"><unientity>BD07</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 51 4D"><unientity>BD09</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 51 4E"><unientity>BD10</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 51 4F"><unientity>BD14</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 51 50"><unientity>BD24</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 51 51"><unientity>BD48</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 51 52"><unientity>BD49</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 51 53"><unientity>BD4C</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 51 54"><unientity>BD50</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 51 55"><unientity>BD58</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 51 56"><unientity>BD59</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 51 57"><unientity>BD64</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 51 58"><unientity>BD80</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 51 59"><unientity>BD81</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 51 5A"><unientity>BD84</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 51 5B"><unientity>BD87</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 51 5C"><unientity>BD88</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 51 5D"><unientity>BD89</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 51 5E"><unientity>BD90</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 51 5F"><unientity>BD91</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 51 60"><unientity>BD93</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 51 61"><unientity>BD95</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 51 62"><unientity>BD99</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 51 63"><unientity>BD9C</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 51 64"><unientity>BDD4</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 51 65"><unientity>BDF0</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 51 66"><unientity>BE0C</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 51 67"><unientity>BE0D</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 51 68"><unientity>BE10</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 51 69"><unientity>BE14</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 51 6A"><unientity>BE1C</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 51 6B"><unientity>BE1D</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 51 6C"><unientity>BE1F</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 51 6D"><unientity>BE44</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 51 6E"><unientity>BE45</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 51 6F"><unientity>BE48</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 51 70"><unientity>BE4B</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 51 71"><unientity>BE4C</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 51 72"><unientity>BE4E</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 51 73"><unientity>BE54</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 51 74"><unientity>BE55</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 51 75"><unientity>BE57</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 51 76"><unientity>BE59</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 51 77"><unientity>BE5A</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 51 78"><unientity>BE5B</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 51 7B"><unientity>BE60</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 51 7C"><unientity>BE61</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 51 7D"><unientity>BE64</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 51 7E"><unientity>BE68</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 52 21"><unientity>BE70</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 52 22"><unientity>BE71</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 52 23"><unientity>BE73</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 52 24"><unientity>BE74</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 52 25"><unientity>BE75</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 52 26"><unientity>BE7B</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 52 27"><unientity>BE7C</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 52 28"><unientity>BE7D</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 52 29"><unientity>BE80</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 52 2A"><unientity>BE84</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 52 2B"><unientity>BE8C</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 52 2C"><unientity>BE8F</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 52 2D"><unientity>BE90</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 52 2E"><unientity>BE91</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 52 2F"><unientity>BE98</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 52 30"><unientity>BEA8</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 52 31"><unientity>BED0</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 52 32"><unientity>BED1</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 52 33"><unientity>BED4</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 52 34"><unientity>BED7</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 52 35"><unientity>BED8</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 52 36"><unientity>BEE0</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 52 37"><unientity>BEE3</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 52 38"><unientity>BEE4</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 52 39"><unientity>BEE5</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 52 3A"><unientity>BEEC</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 52 3B"><unientity>BF08</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 52 3C"><unientity>BF09</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 52 3D"><unientity>BF18</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 52 3E"><unientity>BF1D</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 52 3F"><unientity>BF40</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 52 40"><unientity>BF41</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 52 41"><unientity>BF44</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 52 42"><unientity>BF48</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 52 43"><unientity>BF50</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 52 44"><unientity>BF51</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 52 45"><unientity>BF55</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 52 46"><unientity>BFB0</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 52 47"><unientity>BFC0</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 52 48"><unientity>BFC5</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 52 49"><unientity>BFCC</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 52 4A"><unientity>BFCD</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 52 4B"><unientity>BFD0</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 52 4C"><unientity>BFD4</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 52 4D"><unientity>BFDC</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 52 4E"><unientity>BFDD</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 52 4F"><unientity>BFE1</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 52 50"><unientity>C058</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 52 51"><unientity>C059</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 52 52"><unientity>C05C</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 52 53"><unientity>C060</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 52 54"><unientity>C068</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 52 55"><unientity>C069</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 52 56"><unientity>C090</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 52 57"><unientity>C091</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 52 58"><unientity>C094</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 52 59"><unientity>C098</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 52 5A"><unientity>C0A0</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 52 5B"><unientity>C0A3</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 52 5C"><unientity>C0A5</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 52 5F"><unientity>C0AC</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 52 60"><unientity>C0AD</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 52 61"><unientity>C0AE</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 52 62"><unientity>C0AF</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 52 63"><unientity>C0B0</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 52 64"><unientity>C0B3</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 52 65"><unientity>C0B4</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 52 66"><unientity>C0B5</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 52 67"><unientity>C0B6</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 52 68"><unientity>C0BC</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 52 69"><unientity>C0BD</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 52 6A"><unientity>C0BF</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 52 6B"><unientity>C0C0</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 52 6C"><unientity>C0C1</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 52 6D"><unientity>C0C5</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 52 6E"><unientity>C0C8</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 52 6F"><unientity>C0C9</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 52 70"><unientity>C0CC</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 52 71"><unientity>C0CF</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 52 72"><unientity>C0D0</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 52 73"><unientity>C0D8</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 52 74"><unientity>C0D9</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 52 75"><unientity>C0DB</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 52 76"><unientity>C0DC</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 52 77"><unientity>C0DD</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 52 78"><unientity>C0E4</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 52 79"><unientity>C0E5</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 52 7A"><unientity>C0E8</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 52 7B"><unientity>C0EC</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 52 7C"><unientity>C0F4</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 52 7D"><unientity>C0F7</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 52 7E"><unientity>C0F9</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 53 21"><unientity>C11C</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 53 22"><unientity>C11D</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 53 23"><unientity>C11E</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 53 24"><unientity>C120</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 53 25"><unientity>C123</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 53 26"><unientity>C124</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 53 27"><unientity>C125</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 53 28"><unientity>C126</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 53 29"><unientity>C127</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 53 2A"><unientity>C12A</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 53 2B"><unientity>C12C</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 53 2C"><unientity>C12D</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 53 2D"><unientity>C12F</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 53 2E"><unientity>C130</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 53 2F"><unientity>C131</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 53 30"><unientity>C136</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 53 31"><unientity>C138</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 53 32"><unientity>C139</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 53 33"><unientity>C13C</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 53 34"><unientity>C140</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 53 35"><unientity>C148</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 53 36"><unientity>C149</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 53 37"><unientity>C14B</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 53 38"><unientity>C14D</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 53 39"><unientity>C151</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 53 3A"><unientity>C154</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 53 3B"><unientity>C158</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 53 3C"><unientity>C167</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 53 3D"><unientity>C168</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 53 3E"><unientity>C170</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 53 3F"><unientity>C18C</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 53 40"><unientity>C18D</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 53 41"><unientity>C18E</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 53 42"><unientity>C190</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 53 43"><unientity>C194</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 53 44"><unientity>C19C</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 53 45"><unientity>C19D</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 53 46"><unientity>C19F</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 53 47"><unientity>C1A1</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 53 48"><unientity>C1A5</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 53 49"><unientity>C1A8</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 53 4A"><unientity>C1A9</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 53 4B"><unientity>C1B0</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 53 4C"><unientity>C1C4</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 53 4D"><unientity>C1C8</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 53 4E"><unientity>C1D7</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 53 4F"><unientity>C1E0</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 53 50"><unientity>C1E4</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 53 51"><unientity>C1E8</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 53 52"><unientity>C1F0</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 53 53"><unientity>C1F1</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 53 54"><unientity>C1F3</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 53 55"><unientity>C1FC</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 53 56"><unientity>C1FD</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 53 57"><unientity>C200</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 53 58"><unientity>C204</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 53 59"><unientity>C20D</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 53 5B"><unientity>C218</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 53 5C"><unientity>C219</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 53 5D"><unientity>C21C</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 53 5E"><unientity>C21F</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 53 5F"><unientity>C220</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 53 60"><unientity>C228</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 53 61"><unientity>C229</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 53 62"><unientity>C22B</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 53 63"><unientity>C22D</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 53 64"><unientity>C22F</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 53 65"><unientity>C231</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 53 66"><unientity>C232</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 53 67"><unientity>C234</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 53 68"><unientity>C250</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 53 69"><unientity>C258</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 53 6A"><unientity>C26C</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 53 6B"><unientity>C270</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 53 6C"><unientity>C274</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 53 6D"><unientity>C27C</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 53 6E"><unientity>C27D</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 53 6F"><unientity>C27F</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 53 70"><unientity>C281</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 53 71"><unientity>C288</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 53 72"><unientity>C289</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 53 73"><unientity>C290</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 53 74"><unientity>C298</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 53 75"><unientity>C29B</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 53 76"><unientity>C29D</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 53 77"><unientity>C2A4</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 53 78"><unientity>C2A5</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 53 79"><unientity>C2A8</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 53 7A"><unientity>C2AC</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 53 7B"><unientity>C2AD</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 53 7D"><unientity>C2B4</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 53 7E"><unientity>C2B5</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 54 21"><unientity>C2B7</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 54 22"><unientity>C2B9</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 54 23"><unientity>C2DC</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 54 24"><unientity>C2DD</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 54 25"><unientity>C2E0</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 54 26"><unientity>C2E3</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 54 27"><unientity>C2E4</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 54 28"><unientity>C2EB</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 54 29"><unientity>C2EC</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 54 2A"><unientity>C2ED</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 54 2B"><unientity>C2EF</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 54 2C"><unientity>C2F1</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 54 2D"><unientity>C2F6</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 54 30"><unientity>C2F8</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 54 31"><unientity>C2F9</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 54 32"><unientity>C2FC</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 54 33"><unientity>C300</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 54 34"><unientity>C308</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 54 35"><unientity>C309</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 54 36"><unientity>C30B</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 54 37"><unientity>C30C</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 54 38"><unientity>C30D</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 54 39"><unientity>C313</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 54 3A"><unientity>C314</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 54 3B"><unientity>C315</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 54 3C"><unientity>C318</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 54 3D"><unientity>C31C</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 54 3E"><unientity>C324</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 54 3F"><unientity>C327</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 54 40"><unientity>C328</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 54 41"><unientity>C329</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 54 42"><unientity>C330</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 54 43"><unientity>C343</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 54 44"><unientity>C345</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 54 45"><unientity>C368</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 54 46"><unientity>C369</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 54 47"><unientity>C36C</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 54 48"><unientity>C370</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 54 49"><unientity>C372</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 54 4A"><unientity>C378</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 54 4B"><unientity>C379</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 54 4C"><unientity>C37C</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 54 4D"><unientity>C37D</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 54 4E"><unientity>C384</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 54 4F"><unientity>C388</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 54 50"><unientity>C399</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 54 51"><unientity>C3D8</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 54 52"><unientity>C3D9</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 54 53"><unientity>C3DC</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 54 54"><unientity>C3DF</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 54 55"><unientity>C3E0</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 54 56"><unientity>C3E8</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 54 57"><unientity>C3ED</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 54 58"><unientity>C3F4</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 54 59"><unientity>C3F5</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 54 5A"><unientity>C410</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 54 5B"><unientity>C42C</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 54 5C"><unientity>C430</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 54 5D"><unientity>C434</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 54 5E"><unientity>C43C</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 54 5F"><unientity>C43F</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 54 60"><unientity>C464</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 54 61"><unientity>C465</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 54 62"><unientity>C468</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 54 63"><unientity>C46C</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 54 64"><unientity>C474</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 54 65"><unientity>C479</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 54 66"><unientity>C480</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 54 67"><unientity>C494</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 54 68"><unientity>C4D4</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 54 69"><unientity>C4D5</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 54 6A"><unientity>C4F0</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 54 6B"><unientity>C4F1</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 54 6C"><unientity>C4F4</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 54 6D"><unientity>C4F8</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 54 6E"><unientity>C500</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 54 6F"><unientity>C501</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 54 70"><unientity>C50C</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 54 71"><unientity>C510</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 54 72"><unientity>C528</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 54 73"><unientity>C529</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 54 74"><unientity>C52C</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 54 75"><unientity>C530</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 54 76"><unientity>C538</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 54 77"><unientity>C539</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 54 78"><unientity>C53B</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 54 79"><unientity>C53D</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 54 7C"><unientity>C544</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 54 7D"><unientity>C545</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 54 7E"><unientity>C548</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 55 21"><unientity>C549</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 55 22"><unientity>C54A</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 55 23"><unientity>C54C</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 55 24"><unientity>C54E</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 55 25"><unientity>C553</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 55 26"><unientity>C554</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 55 27"><unientity>C555</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 55 28"><unientity>C557</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 55 29"><unientity>C558</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 55 2A"><unientity>C559</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 55 2B"><unientity>C55E</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 55 2C"><unientity>C55F</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 55 2D"><unientity>C560</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 55 2E"><unientity>C561</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 55 2F"><unientity>C564</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 55 30"><unientity>C568</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 55 31"><unientity>C570</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 55 32"><unientity>C571</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 55 33"><unientity>C573</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 55 34"><unientity>C574</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 55 35"><unientity>C575</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 55 36"><unientity>C57C</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 55 37"><unientity>C57D</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 55 38"><unientity>C580</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 55 39"><unientity>C584</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 55 3A"><unientity>C587</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 55 3B"><unientity>C58C</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 55 3C"><unientity>C58D</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 55 3D"><unientity>C58F</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 55 3E"><unientity>C590</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 55 3F"><unientity>C591</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 55 40"><unientity>C595</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 55 41"><unientity>C597</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 55 42"><unientity>C598</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 55 43"><unientity>C59C</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 55 44"><unientity>C5B4</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 55 45"><unientity>C5B5</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 55 46"><unientity>C5B6</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 55 47"><unientity>C5B8</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 55 48"><unientity>C5B9</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 55 49"><unientity>C5BA</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 55 4A"><unientity>C5BB</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 55 4B"><unientity>C5BC</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 55 4C"><unientity>C5BD</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 55 4D"><unientity>C5C4</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 55 4E"><unientity>C5C5</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 55 4F"><unientity>C5C6</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 55 50"><unientity>C5C7</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 55 51"><unientity>C5C8</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 55 52"><unientity>C5C9</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 55 53"><unientity>C5CA</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 55 54"><unientity>C5CC</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 55 55"><unientity>C5CE</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 55 56"><unientity>C5D0</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 55 57"><unientity>C5D1</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 55 58"><unientity>C5D4</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 55 59"><unientity>C5D8</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 55 5A"><unientity>C5E0</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 55 5B"><unientity>C5E1</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 55 5C"><unientity>C5E3</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 55 5D"><unientity>C5E5</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 55 5E"><unientity>C5EC</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 55 5F"><unientity>C5ED</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 55 60"><unientity>C5EE</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 55 61"><unientity>C5F0</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 55 62"><unientity>C5F4</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 55 63"><unientity>C5F6</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 55 64"><unientity>C5F7</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 55 65"><unientity>C5FC</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 55 66"><unientity>C5FD</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 55 67"><unientity>C5FE</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 55 68"><unientity>C5FF</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 55 69"><unientity>C600</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 55 6A"><unientity>C601</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 55 6B"><unientity>C606</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 55 6C"><unientity>C607</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 55 6D"><unientity>C608</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 55 6E"><unientity>C60C</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 55 6F"><unientity>C610</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 55 70"><unientity>C61B</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 55 71"><unientity>C624</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 55 72"><unientity>C625</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 55 73"><unientity>C628</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 55 74"><unientity>C62C</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 55 75"><unientity>C62D</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 55 76"><unientity>C62E</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 55 77"><unientity>C633</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 55 78"><unientity>C634</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 55 79"><unientity>C635</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 55 7A"><unientity>C637</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 55 7B"><unientity>C639</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 55 7C"><unientity>C63A</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 55 7D"><unientity>C63B</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 55 7E"><unientity>C640</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 56 21"><unientity>C641</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 56 22"><unientity>C644</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 56 23"><unientity>C648</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 56 24"><unientity>C650</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 56 25"><unientity>C651</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 56 26"><unientity>C653</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 56 27"><unientity>C654</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 56 29"><unientity>C65C</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 56 2A"><unientity>C65D</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 56 2B"><unientity>C660</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 56 2C"><unientity>C671</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 56 2D"><unientity>C678</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 56 2E"><unientity>C679</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 56 2F"><unientity>C67C</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 56 30"><unientity>C680</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 56 31"><unientity>C688</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 56 32"><unientity>C68B</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 56 33"><unientity>C68D</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 56 34"><unientity>C694</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 56 35"><unientity>C695</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 56 36"><unientity>C698</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 56 37"><unientity>C6A5</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 56 38"><unientity>C6A7</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 56 39"><unientity>C6A9</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 56 3A"><unientity>C6B0</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 56 3B"><unientity>C6B1</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 56 3C"><unientity>C6B4</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 56 3D"><unientity>C6B7</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 56 3E"><unientity>C6B8</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 56 3F"><unientity>C6B9</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 56 40"><unientity>C6BA</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 56 41"><unientity>C6C0</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 56 42"><unientity>C6C1</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 56 43"><unientity>C6C3</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 56 44"><unientity>C6C5</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 56 45"><unientity>C6CC</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 56 46"><unientity>C6CD</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 56 47"><unientity>C6D0</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 56 48"><unientity>C6D4</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 56 49"><unientity>C6DC</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 56 4A"><unientity>C6DD</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 56 4B"><unientity>C6DF</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 56 4C"><unientity>C6E0</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 56 4D"><unientity>C6E1</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 56 4E"><unientity>C6E8</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 56 4F"><unientity>C6E9</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 56 50"><unientity>C6EC</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 56 51"><unientity>C6F0</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 56 52"><unientity>C6F8</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 56 53"><unientity>C704</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 56 54"><unientity>C705</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 56 55"><unientity>C708</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 56 56"><unientity>C70C</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 56 57"><unientity>C714</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 56 58"><unientity>C717</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 56 59"><unientity>C719</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 56 5A"><unientity>C720</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 56 5B"><unientity>C721</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 56 5C"><unientity>C724</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 56 5D"><unientity>C728</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 56 5E"><unientity>C730</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 56 5F"><unientity>C735</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 56 60"><unientity>C737</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 56 61"><unientity>C73C</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 56 62"><unientity>C73D</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 56 63"><unientity>C740</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 56 64"><unientity>C744</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 56 65"><unientity>C74A</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 56 66"><unientity>C74C</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 56 67"><unientity>C74D</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 56 68"><unientity>C751</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 56 69"><unientity>C758</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 56 6A"><unientity>C774</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 56 6B"><unientity>C775</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 56 6C"><unientity>C778</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 56 6D"><unientity>C77C</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 56 6E"><unientity>C77D</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 56 6F"><unientity>C783</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 56 70"><unientity>C784</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 56 71"><unientity>C785</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 56 72"><unientity>C787</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 56 73"><unientity>C788</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 56 74"><unientity>C789</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 56 75"><unientity>C78A</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 56 76"><unientity>C78E</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 56 77"><unientity>C655</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 56 79"><unientity>C790</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 56 7A"><unientity>C791</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 56 7B"><unientity>C794</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 56 7C"><unientity>C796</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 56 7D"><unientity>C798</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 56 7E"><unientity>C7A0</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 57 21"><unientity>C7A1</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 57 22"><unientity>C7A3</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 57 23"><unientity>C7A4</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 57 24"><unientity>C7A5</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 57 25"><unientity>C7A6</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 57 26"><unientity>C7A7</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 57 27"><unientity>C7AC</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 57 28"><unientity>C7AD</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 57 29"><unientity>C7B0</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 57 2A"><unientity>C7B4</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 57 2B"><unientity>C7BC</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 57 2C"><unientity>C7BD</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 57 2D"><unientity>C7BF</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 57 2E"><unientity>C7C0</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 57 2F"><unientity>C7C1</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 57 30"><unientity>C7C8</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 57 31"><unientity>C7C9</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 57 32"><unientity>C7CC</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 57 33"><unientity>C7D8</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 57 34"><unientity>C800</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 57 35"><unientity>C801</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 57 36"><unientity>C804</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 57 37"><unientity>C808</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 57 38"><unientity>C80A</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 57 39"><unientity>C810</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 57 3A"><unientity>C811</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 57 3B"><unientity>C813</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 57 3C"><unientity>C814</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 57 3D"><unientity>C815</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 57 3E"><unientity>C816</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 57 3F"><unientity>C81C</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 57 40"><unientity>C81D</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 57 41"><unientity>C820</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 57 42"><unientity>C824</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 57 43"><unientity>C82C</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 57 44"><unientity>C82D</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 57 45"><unientity>C82F</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 57 46"><unientity>C838</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 57 47"><unientity>C83C</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 57 48"><unientity>C84C</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 57 49"><unientity>C870</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 57 4A"><unientity>C871</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 57 4B"><unientity>C874</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 57 4C"><unientity>C878</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 57 4D"><unientity>C87A</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 57 4E"><unientity>C880</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 57 4F"><unientity>C881</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 57 50"><unientity>C885</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 57 51"><unientity>C886</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 57 52"><unientity>C887</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 57 53"><unientity>C88B</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 57 54"><unientity>C88C</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 57 55"><unientity>C88D</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 57 56"><unientity>C890</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 57 57"><unientity>C894</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 57 58"><unientity>C89C</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 57 59"><unientity>C89D</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 57 5A"><unientity>C89F</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 57 5B"><unientity>C8A0</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 57 5D"><unientity>C8A8</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 57 5E"><unientity>C8AC</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 57 5F"><unientity>C8B0</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 57 60"><unientity>C8B8</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 57 61"><unientity>C8C4</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 57 62"><unientity>C8C8</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 57 63"><unientity>C8CC</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 57 64"><unientity>C8D4</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 57 65"><unientity>C8D5</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 57 66"><unientity>C8D7</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 57 67"><unientity>C8E0</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 57 68"><unientity>C8E4</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 57 69"><unientity>C8F0</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 57 6A"><unientity>C8F1</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 57 6B"><unientity>C8F5</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 57 6C"><unientity>C8FC</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 57 6D"><unientity>C8FD</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 57 6E"><unientity>C900</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 57 6F"><unientity>C904</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 57 70"><unientity>C906</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 57 71"><unientity>C90C</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 57 72"><unientity>C90D</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 57 73"><unientity>C90F</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 57 74"><unientity>C911</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 57 75"><unientity>C918</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 57 76"><unientity>C92C</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 57 77"><unientity>C950</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 57 79"><unientity>C954</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 57 7A"><unientity>C958</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 57 7B"><unientity>C960</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 57 7C"><unientity>C961</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 57 7D"><unientity>C96C</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 57 7E"><unientity>C970</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 58 21"><unientity>C974</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 58 22"><unientity>C988</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 58 23"><unientity>C989</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 58 24"><unientity>C98C</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 58 25"><unientity>C990</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 58 26"><unientity>C998</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 58 27"><unientity>C999</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 58 28"><unientity>C99D</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 58 29"><unientity>C9C0</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 58 2A"><unientity>C9C1</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 58 2B"><unientity>C9C4</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 58 2C"><unientity>C9C7</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 58 2D"><unientity>C9C8</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 58 2E"><unientity>C9CA</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 58 2F"><unientity>C9D0</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 58 30"><unientity>C9D1</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 58 31"><unientity>C9D3</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 58 32"><unientity>C9D5</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 58 33"><unientity>C9D6</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 58 34"><unientity>C9D9</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 58 35"><unientity>C9DA</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 58 38"><unientity>C9DC</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 58 39"><unientity>C9DD</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 58 3A"><unientity>C9E0</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 58 3B"><unientity>C9E2</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 58 3C"><unientity>C9E4</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 58 3E"><unientity>C9E7</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 58 3F"><unientity>C9EC</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 58 40"><unientity>C9ED</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 58 41"><unientity>C9EF</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 58 42"><unientity>C9F0</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 58 43"><unientity>C9F1</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 58 44"><unientity>C9F8</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 58 45"><unientity>C9F9</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 58 46"><unientity>C9FC</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 58 47"><unientity>CA00</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 58 48"><unientity>CA08</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 58 49"><unientity>CA09</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 58 4A"><unientity>CA0B</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 58 4B"><unientity>CA0C</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 58 4C"><unientity>CA0D</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 58 4D"><unientity>CA18</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 58 4E"><unientity>CA4C</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 58 4F"><unientity>CA4D</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 58 50"><unientity>CA50</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 58 51"><unientity>CA54</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 58 52"><unientity>CA5C</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 58 53"><unientity>CA5D</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 58 54"><unientity>CA61</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 58 55"><unientity>CA84</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 58 56"><unientity>CA98</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 58 57"><unientity>CABC</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 58 58"><unientity>CABD</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 58 59"><unientity>CAC0</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 58 5A"><unientity>CAC4</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 58 5B"><unientity>CACC</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 58 5C"><unientity>CACD</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 58 5D"><unientity>CAD1</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 58 5E"><unientity>CAD2</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 58 5F"><unientity>CAD3</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 58 60"><unientity>CAD8</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 58 61"><unientity>CAD9</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 58 62"><unientity>CB10</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 58 63"><unientity>CB14</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 58 64"><unientity>CB18</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 58 65"><unientity>CB20</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 58 66"><unientity>CB21</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 58 67"><unientity>CB41</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 58 68"><unientity>CB48</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 58 69"><unientity>CB49</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 58 6A"><unientity>CB50</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 58 6B"><unientity>CB58</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 58 6C"><unientity>CB59</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 58 6D"><unientity>CB5D</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 58 6E"><unientity>CB64</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 58 6F"><unientity>CBB8</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 58 70"><unientity>CBD4</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 58 71"><unientity>CBE4</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 58 72"><unientity>CBE7</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 58 73"><unientity>CC0C</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 58 74"><unientity>CC0D</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 58 75"><unientity>CC10</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 58 76"><unientity>CC14</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 58 77"><unientity>CC1C</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 58 78"><unientity>CC1D</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 58 79"><unientity>CC21</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 58 7A"><unientity>CC22</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 58 7B"><unientity>CC27</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 58 7E"><unientity>CC28</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 59 21"><unientity>CC29</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 59 22"><unientity>CC2C</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 59 23"><unientity>CC2E</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 59 24"><unientity>CC2F</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 59 25"><unientity>CC30</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 59 26"><unientity>CC38</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 59 27"><unientity>CC39</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 59 28"><unientity>CC3B</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 59 29"><unientity>CC3C</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 59 2A"><unientity>CC3D</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 59 2B"><unientity>CC3E</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 59 2C"><unientity>CC3F</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 59 2D"><unientity>CC44</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 59 2E"><unientity>CC45</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 59 2F"><unientity>CC48</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 59 30"><unientity>CC4C</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 59 31"><unientity>CC54</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 59 32"><unientity>CC55</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 59 33"><unientity>CC58</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 59 34"><unientity>CC59</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 59 35"><unientity>CC60</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 59 36"><unientity>CC64</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 59 37"><unientity>CC70</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 59 38"><unientity>CC71</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 59 39"><unientity>CC98</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 59 3A"><unientity>CC99</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 59 3B"><unientity>CC9C</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 59 3C"><unientity>CCA0</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 59 3D"><unientity>CCA8</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 59 3E"><unientity>CCA9</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 59 3F"><unientity>CCAB</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 59 40"><unientity>CCAD</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 59 41"><unientity>CCB4</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 59 42"><unientity>CCB5</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 59 43"><unientity>CCB8</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 59 44"><unientity>CCBC</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 59 45"><unientity>CCC7</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 59 46"><unientity>CCD0</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 59 47"><unientity>CCE4</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 59 48"><unientity>CD08</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 59 49"><unientity>CD09</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 59 4A"><unientity>CD0C</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 59 4B"><unientity>CD10</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 59 4C"><unientity>CD18</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 59 4D"><unientity>CD19</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 59 4E"><unientity>CD1B</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 59 4F"><unientity>CD1D</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 59 50"><unientity>CD2C</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 59 51"><unientity>CD5C</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 59 52"><unientity>CD78</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 59 53"><unientity>CD94</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 59 54"><unientity>CD95</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 59 55"><unientity>CD98</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 59 56"><unientity>CD9C</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 59 57"><unientity>CDA4</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 59 58"><unientity>CDA5</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 59 59"><unientity>CDA7</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 59 5A"><unientity>CDA9</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 59 5B"><unientity>CDB0</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 59 5C"><unientity>CDC4</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 59 5D"><unientity>CDCC</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 59 5E"><unientity>CDE8</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 59 5F"><unientity>CE04</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 59 60"><unientity>CE20</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 59 61"><unientity>CE21</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 59 62"><unientity>CE30</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 59 63"><unientity>CE35</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 59 64"><unientity>CE58</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 59 65"><unientity>CE59</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 59 66"><unientity>CE5C</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 59 67"><unientity>CE60</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 59 68"><unientity>CE61</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 59 69"><unientity>CE68</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 59 6A"><unientity>CE69</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 59 6B"><unientity>CE6B</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 59 6C"><unientity>CE6D</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 59 6F"><unientity>CE74</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 59 70"><unientity>CE75</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 59 71"><unientity>CE78</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 59 72"><unientity>CE7C</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 59 73"><unientity>CE84</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 59 74"><unientity>CE85</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 59 75"><unientity>CE87</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 59 76"><unientity>CE89</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 59 77"><unientity>CE90</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 59 78"><unientity>CE91</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 59 79"><unientity>CE94</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 59 7A"><unientity>CE98</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 59 7B"><unientity>CEA0</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 59 7C"><unientity>CEA1</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 59 7D"><unientity>CEA3</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 5A 21"><unientity>CEA5</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 5A 22"><unientity>CEAC</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 5A 23"><unientity>CEAD</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 5A 24"><unientity>CEE4</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 5A 26"><unientity>CEE8</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 5A 27"><unientity>CEEC</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 5A 28"><unientity>CEF4</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 5A 29"><unientity>CEF5</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 5A 2A"><unientity>CEF7</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 5A 2C"><unientity>CEF9</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 5A 2E"><unientity>CF00</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 5A 2F"><unientity>CF01</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 5A 30"><unientity>CF04</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 5A 31"><unientity>CF08</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 5A 32"><unientity>CF10</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 5A 33"><unientity>CF11</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 5A 34"><unientity>CF13</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 5A 35"><unientity>CF15</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 5A 36"><unientity>CF1C</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 5A 37"><unientity>CF20</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 5A 38"><unientity>CF24</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 5A 39"><unientity>CF2C</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 5A 3A"><unientity>CF2D</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 5A 3B"><unientity>CF2F</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 5A 3C"><unientity>CF30</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 5A 3D"><unientity>CF54</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 5A 3E"><unientity>CF55</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 5A 3F"><unientity>CF58</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 5A 40"><unientity>CF5C</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 5A 41"><unientity>CF64</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 5A 42"><unientity>CF65</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 5A 43"><unientity>CF67</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 5A 44"><unientity>CF69</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 5A 45"><unientity>CF70</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 5A 46"><unientity>CF71</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 5A 47"><unientity>CF74</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 5A 48"><unientity>CF78</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 5A 49"><unientity>CF80</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 5A 4A"><unientity>CF85</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 5A 4B"><unientity>CF8C</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 5A 4C"><unientity>CF8D</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 5A 4D"><unientity>CFA1</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 5A 4F"><unientity>CFB0</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 5A 50"><unientity>CFC4</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 5A 51"><unientity>CFE0</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 5A 52"><unientity>CFE1</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 5A 53"><unientity>CFE4</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 5A 54"><unientity>CFE8</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 5A 55"><unientity>CFF0</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 5A 56"><unientity>CFF3</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 5A 57"><unientity>CFF5</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 5A 58"><unientity>CFFC</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 5A 5A"><unientity>D018</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 5A 5B"><unientity>D02D</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 5A 5C"><unientity>D034</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 5A 5D"><unientity>D035</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 5A 5E"><unientity>D038</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 5A 5F"><unientity>D050</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 5A 60"><unientity>D06C</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 5A 61"><unientity>D070</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 5A 62"><unientity>D074</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 5A 63"><unientity>D07C</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 5A 64"><unientity>D07D</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 5A 65"><unientity>D081</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 5A 66"><unientity>D0A4</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 5A 67"><unientity>D0A5</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 5A 68"><unientity>D0A8</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 5A 69"><unientity>D0AC</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 5A 6A"><unientity>D0B4</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 5A 6B"><unientity>D0B5</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 5A 6C"><unientity>D0B7</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 5A 6D"><unientity>D0B9</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 5A 70"><unientity>D0C0</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 5A 71"><unientity>D0C1</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 5A 72"><unientity>D0C4</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 5A 73"><unientity>D0C8</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 5A 74"><unientity>D0C9</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 5A 75"><unientity>D0D0</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 5A 76"><unientity>D0D1</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 5A 77"><unientity>D0D3</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 5A 78"><unientity>D0D4</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 5A 79"><unientity>D0D5</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 5A 7A"><unientity>D0DC</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 5A 7B"><unientity>D0DD</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 5A 7C"><unientity>D0E0</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 5A 7D"><unientity>D0E4</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 5A 7E"><unientity>D0EC</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 5B 21"><unientity>D0ED</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 5B 22"><unientity>D0EF</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 5B 23"><unientity>D0F0</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 5B 24"><unientity>D0F1</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 5B 25"><unientity>D130</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 5B 26"><unientity>D131</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 5B 27"><unientity>D134</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 5B 28"><unientity>D138</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 5B 29"><unientity>D140</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 5B 2A"><unientity>D141</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 5B 2B"><unientity>D143</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 5B 2C"><unientity>D144</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 5B 2D"><unientity>D145</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 5B 2E"><unientity>D14C</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 5B 2F"><unientity>D14D</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 5B 30"><unientity>D150</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 5B 31"><unientity>D154</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 5B 32"><unientity>D15C</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 5B 33"><unientity>D15D</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 5B 34"><unientity>D15F</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 5B 35"><unientity>D160</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 5B 36"><unientity>D161</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 5B 37"><unientity>D168</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 5B 38"><unientity>D1A0</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 5B 39"><unientity>D1A1</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 5B 3A"><unientity>D1A4</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 5B 3B"><unientity>D1A8</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 5B 3C"><unientity>D1B0</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 5B 3D"><unientity>D1B1</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 5B 3E"><unientity>D1B3</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 5B 3F"><unientity>D1B5</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 5B 40"><unientity>D1D8</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 5B 41"><unientity>D1F4</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 5B 43"><unientity>D22C</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 5B 44"><unientity>D22D</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 5B 45"><unientity>D230</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 5B 46"><unientity>D234</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 5B 47"><unientity>D23C</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 5B 48"><unientity>D23D</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 5B 49"><unientity>D23F</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 5B 4A"><unientity>D241</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 5B 4B"><unientity>D264</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 5B 4C"><unientity>D277</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 5B 4D"><unientity>D280</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 5B 4E"><unientity>D284</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 5B 4F"><unientity>D288</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 5B 50"><unientity>D290</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 5B 51"><unientity>D291</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 5B 52"><unientity>D293</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 5B 53"><unientity>D295</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 5B 54"><unientity>D29C</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 5B 57"><unientity>D2AC</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 5B 59"><unientity>D2B8</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 5B 5A"><unientity>D2B9</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 5B 5B"><unientity>D2BC</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 5B 5C"><unientity>D2BF</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 5B 5D"><unientity>D2C0</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 5B 5E"><unientity>D2C8</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 5B 5F"><unientity>D2C9</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 5B 60"><unientity>D2CB</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 5B 61"><unientity>D2D4</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 5B 62"><unientity>D1F8</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 5B 63"><unientity>D2F0</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 5B 64"><unientity>D2F1</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 5B 65"><unientity>D2F4</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 5B 66"><unientity>D2F8</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 5B 67"><unientity>D300</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 5B 68"><unientity>D301</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 5B 69"><unientity>D305</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 5B 6C"><unientity>D30C</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 5B 6D"><unientity>D30D</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 5B 6E"><unientity>D30E</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 5B 6F"><unientity>D310</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 5B 70"><unientity>D314</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 5B 71"><unientity>D31C</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 5B 72"><unientity>D31D</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 5B 73"><unientity>D31F</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 5B 74"><unientity>D320</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 5B 75"><unientity>D321</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 5B 76"><unientity>D325</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 5B 77"><unientity>D328</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 5B 78"><unientity>D329</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 5B 79"><unientity>D32C</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 5B 7A"><unientity>D330</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 5B 7B"><unientity>D338</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 5B 7C"><unientity>D339</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 5B 7D"><unientity>D33B</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 5B 7E"><unientity>D33C</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 5C 21"><unientity>D33D</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 5C 23"><unientity>D37C</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 5C 24"><unientity>D37D</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 5C 25"><unientity>D380</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 5C 26"><unientity>D384</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 5C 27"><unientity>D38C</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 5C 28"><unientity>D38D</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 5C 29"><unientity>D38F</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 5C 2A"><unientity>D390</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 5C 2B"><unientity>D391</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 5C 2C"><unientity>D398</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 5C 2D"><unientity>D399</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 5C 2E"><unientity>D39C</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 5C 2F"><unientity>D3A0</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 5C 30"><unientity>D3A8</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 5C 31"><unientity>D3A9</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 5C 32"><unientity>D3AB</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 5C 33"><unientity>D3AD</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 5C 34"><unientity>D3B4</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 5C 35"><unientity>D3B5</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 5C 36"><unientity>D3B8</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 5C 37"><unientity>D3BC</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 5C 38"><unientity>D3C4</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 5C 39"><unientity>D3C5</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 5C 3A"><unientity>D3C8</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 5C 3B"><unientity>D3C9</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 5C 3C"><unientity>D3D0</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 5C 3D"><unientity>D3EC</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 5C 3E"><unientity>D3ED</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 5C 3F"><unientity>D3F0</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 5C 40"><unientity>D3F4</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 5C 41"><unientity>D3FC</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 5C 42"><unientity>D3FD</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 5C 43"><unientity>D3FF</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 5C 44"><unientity>D401</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 5C 45"><unientity>D440</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 5C 46"><unientity>D444</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 5C 47"><unientity>D45C</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 5C 48"><unientity>D46F</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 5C 49"><unientity>D478</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 5C 4A"><unientity>D479</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 5C 4B"><unientity>D47C</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 5C 4C"><unientity>D480</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 5C 4D"><unientity>D488</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 5C 4E"><unientity>D489</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 5C 4F"><unientity>D48B</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 5C 50"><unientity>D48D</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 5C 51"><unientity>D4CC</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 5C 52"><unientity>D4E8</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 5C 53"><unientity>D504</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 5C 55"><unientity>D508</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 5C 56"><unientity>D50C</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 5C 57"><unientity>D514</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 5C 58"><unientity>D515</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 5C 59"><unientity>D53C</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 5C 5A"><unientity>D53D</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 5C 5B"><unientity>D540</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 5C 5C"><unientity>D544</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 5C 5D"><unientity>D54C</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 5C 5E"><unientity>D54D</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 5C 5F"><unientity>D54F</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 5C 60"><unientity>D551</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 5C 63"><unientity>D558</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 5C 64"><unientity>D559</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 5C 65"><unientity>D55C</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 5C 66"><unientity>D560</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 5C 67"><unientity>D565</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 5C 68"><unientity>D568</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 5C 69"><unientity>D569</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 5C 6A"><unientity>D56B</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 5C 6B"><unientity>D56C</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 5C 6C"><unientity>D56D</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 5C 6D"><unientity>D571</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 5C 6E"><unientity>D574</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 5C 6F"><unientity>D575</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 5C 70"><unientity>D578</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 5C 71"><unientity>D57C</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 5C 72"><unientity>D584</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 5C 73"><unientity>D585</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 5C 74"><unientity>D587</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 5C 75"><unientity>D588</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 5C 76"><unientity>D589</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 5C 77"><unientity>D590</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 5C 78"><unientity>D5A5</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 5C 79"><unientity>D5C8</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 5C 7A"><unientity>D5C9</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 5C 7B"><unientity>D5CC</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 5C 7C"><unientity>D5D0</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 5C 7D"><unientity>D5D2</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 5C 7E"><unientity>D5D8</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 5D 21"><unientity>D5D9</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 5D 22"><unientity>D5DB</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 5D 23"><unientity>D5DD</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 5D 24"><unientity>D5E4</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 5D 25"><unientity>D5E5</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 5D 26"><unientity>D5E8</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 5D 27"><unientity>D5EC</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 5D 28"><unientity>D5F4</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 5D 29"><unientity>D5F5</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 5D 2A"><unientity>D5F7</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 5D 2B"><unientity>D5F9</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 5D 2C"><unientity>D600</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 5D 2D"><unientity>D601</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 5D 2E"><unientity>D604</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 5D 2F"><unientity>D608</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 5D 30"><unientity>D610</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 5D 31"><unientity>D611</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 5D 32"><unientity>D613</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 5D 33"><unientity>D614</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 5D 34"><unientity>D615</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 5D 35"><unientity>D61C</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 5D 36"><unientity>D638</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 5D 37"><unientity>D639</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 5D 38"><unientity>D63C</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 5D 39"><unientity>D640</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 5D 3A"><unientity>D648</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 5D 3B"><unientity>D649</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 5D 3C"><unientity>D64B</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 5D 3D"><unientity>D64D</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 5D 3F"><unientity>D654</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 5D 40"><unientity>D655</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 5D 41"><unientity>D658</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 5D 42"><unientity>D65C</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 5D 44"><unientity>D667</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 5D 45"><unientity>D669</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 5D 46"><unientity>D670</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 5D 47"><unientity>D671</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 5D 48"><unientity>D683</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 5D 4A"><unientity>D68C</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 5D 4B"><unientity>D68D</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 5D 4C"><unientity>D69F</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 5D 4D"><unientity>D6A1</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 5D 4E"><unientity>D6A8</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 5D 4F"><unientity>D6C4</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 5D 50"><unientity>D6C5</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 5D 51"><unientity>D6C8</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 5D 52"><unientity>D6CC</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 5D 53"><unientity>D6D1</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 5D 54"><unientity>D6D4</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 5D 55"><unientity>D6D7</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 5D 56"><unientity>D6E0</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 5D 57"><unientity>D6E4</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 5D 58"><unientity>D6E8</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 5D 59"><unientity>D6F0</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 5D 5A"><unientity>D6FC</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 5D 5C"><unientity>D700</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 5D 5D"><unientity>D711</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 5D 5E"><unientity>D718</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 5D 5F"><unientity>D719</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 5D 60"><unientity>D71C</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 5D 61"><unientity>D720</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 5D 62"><unientity>D728</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 5D 63"><unientity>D729</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 5D 65"><unientity>D72D</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 5D 66"><unientity>D734</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 5D 67"><unientity>D73C</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 5D 68"><unientity>D744</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 5D 69"><unientity>D749</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 5D 6A"><unientity>D750</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 5D 6B"><unientity>D751</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 5D 6C"><unientity>D754</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 5D 6D"><unientity>D757</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 5D 6E"><unientity>D758</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 5D 6F"><unientity>D759</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 5D 70"><unientity>D760</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 5D 71"><unientity>D761</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 5D 72"><unientity>D763</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 5D 73"><unientity>D765</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 5D 74"><unientity>D769</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 5D 75"><unientity>D76C</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 5D 76"><unientity>D770</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 5D 77"><unientity>D774</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 5D 78"><unientity>D788</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 5D 79"><unientity>D789</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 5D 7A"><unientity>D78C</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 5D 7B"><unientity>D790</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 5D 7C"><unientity>D798</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 5D 7D"><unientity>D799</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 5D 7E"><unientity>D79B</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 5E 21"><unientity>D79D</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 76 21"><unientity>3181</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 76 22"><unientity>3186</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 76 23"><unientity>317F</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 76 24"><unientity>E8B0</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 76 25"><unientity>E8B1</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 76 40"><unientity>E8B2</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 76 41"><unientity>E8B3</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 76 42"><unientity>E8B4</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 76 43"><unientity>E8B5</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 76 44"><unientity>E8B6</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 76 45"><unientity>E8B7</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 76 46"><unientity>E8B8</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 76 47"><unientity>E8B9</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 76 48"><unientity>E8BA</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 76 49"><unientity>E8BB</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 76 4A"><unientity>E8BC</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 76 4B"><unientity>E8BD</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 76 4C"><unientity>E8BE</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 76 4D"><unientity>E8BF</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 76 4E"><unientity>E8C0</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 76 4F"><unientity>E8C1</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 76 50"><unientity>E8C2</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 76 51"><unientity>E8C3</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 76 52"><unientity>E8C4</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 76 53"><unientity>E8C5</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 76 54"><unientity>E8C6</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 76 55"><unientity>E8C7</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 76 56"><unientity>E8C8</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 76 57"><unientity>E8C9</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 77 21"><unientity>AD35</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 77 22"><unientity>AD7B</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 77 23"><unientity>E8CA</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 77 24"><unientity>AD89</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 77 25"><unientity>AD9D</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 77 26"><unientity>ADB9</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 77 27"><unientity>ADD5</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 77 28"><unientity>AE07</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 77 29"><unientity>AE0E</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 77 2A"><unientity>AE0F</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 77 2B"><unientity>AE11</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 77 2C"><unientity>AE14</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 77 2D"><unientity>AE5F</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 77 2E"><unientity>AEED</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 77 2F"><unientity>AF09</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 77 30"><unientity>AF50</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 77 31"><unientity>AFBF</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 77 32"><unientity>B060</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 77 33"><unientity>B9C4</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 77 34"><unientity>C54D</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 77 35"><unientity>C54F</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 77 36"><unientity>C552</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 77 37"><unientity>C5AB</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 77 38"><unientity>C5B1</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 77 39"><unientity>C61C</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 77 3A"><unientity>C61D</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 77 3B"><unientity>C6FD</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 77 3C"><unientity>E8CB</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 77 3D"><unientity>C733</unientity><desc>Korean hangul</desc></character>
-<character hex="6F 77 3E"><unientity>CB4C</unientity><desc>Korean hangul</desc></character>
-<character hex="70 4C 2A"><unientity>915E</unientity><desc>East Asian ideograph</desc></character>
-<character hex="70 58 6F"><unientity>4EEB</unientity><desc>East Asian ideograph</desc></character>
-<character hex="70 5B 71"><unientity>57B4</unientity><desc>East Asian ideograph</desc></character>
-<character hex="70 5C 43"><unientity>82CA</unientity><desc>East Asian ideograph</desc></character>
-<character hex="70 5C 50"><unientity>82C4</unientity><desc>East Asian ideograph</desc></character>
-<character hex="70 5D 46"><unientity>841C</unientity><desc>East Asian ideograph</desc></character>
-<character hex="70 5D 5C"><unientity>8488</unientity><desc>East Asian ideograph</desc></character>
-<character hex="70 5F 30"><unientity>7519</unientity><desc>East Asian ideograph</desc></character>
-<character hex="70 5F 39"><unientity>5416</unientity><desc>East Asian ideograph</desc></character>
-<character hex="70 5F 50"><unientity>549D</unientity><desc>East Asian ideograph</desc></character>
-<character hex="70 5F 51"><unientity>54D0</unientity><desc>East Asian ideograph</desc></character>
-<character hex="70 5F 54"><unientity>54B4</unientity><desc>East Asian ideograph</desc></character>
-<character hex="70 5F 5B"><unientity>54A3</unientity><desc>East Asian ideograph</desc></character>
-<character hex="70 5F 61"><unientity>54DA</unientity><desc>East Asian ideograph</desc></character>
-<character hex="70 60 2D"><unientity>55B9</unientity><desc>East Asian ideograph</desc></character>
-<character hex="70 60 3A"><unientity>55EA</unientity><desc>East Asian ideograph</desc></character>
-<character hex="70 60 4C"><unientity>55F5</unientity><desc>East Asian ideograph</desc></character>
-<character hex="70 60 54"><unientity>5623</unientity><desc>East Asian ideograph</desc></character>
-<character hex="70 60 58"><unientity>562D</unientity><desc>East Asian ideograph</desc></character>
-<character hex="70 60 67"><unientity>567B</unientity><desc>East Asian ideograph</desc></character>
-<character hex="70 61 31"><unientity>5C9C</unientity><desc>East Asian ideograph</desc></character>
-<character hex="70 62 2A"><unientity>7339</unientity><desc>East Asian ideograph</desc></character>
-<character hex="70 62 47"><unientity>9987</unientity><desc>East Asian ideograph</desc></character>
-<character hex="70 62 4E"><unientity>9995</unientity><desc>East Asian ideograph</desc></character>
-<character hex="70 63 40"><unientity>61B7</unientity><desc>East Asian ideograph</desc></character>
-<character hex="70 66 40"><unientity>80EC</unientity><desc>East Asian ideograph</desc></character>
-<character hex="70 6B 42"><unientity>80BC</unientity><desc>East Asian ideograph</desc></character>
-<character hex="70 6B 44"><unientity>80BD</unientity><desc>East Asian ideograph</desc></character>
-<character hex="70 6B 4C"><unientity>80E9</unientity><desc>East Asian ideograph</desc></character>
-<character hex="70 6B 5B"><unientity>810E</unientity><desc>East Asian ideograph</desc></character>
-<character hex="70 6B 5F"><unientity>8112</unientity><desc>East Asian ideograph</desc></character>
-<character hex="70 6B 6A"><unientity>8159</unientity><desc>East Asian ideograph</desc></character>
-<character hex="70 6C 42"><unientity>70BB</unientity><desc>East Asian ideograph</desc></character>
-<character hex="70 6C 43"><unientity>70C0</unientity><desc>East Asian ideograph</desc></character>
-<character hex="70 6D 3B"><unientity>7818</unientity><desc>East Asian ideograph</desc></character>
-<character hex="70 6D 3F"><unientity>781C</unientity><desc>East Asian ideograph</desc></character>
-<character hex="70 6D 45"><unientity>783C</unientity><desc>East Asian ideograph</desc></character>
-<character hex="70 72 7D"><unientity>87A8</unientity><desc>East Asian ideograph</desc></character>
-<character hex="70 73 60"><unientity>7B7B</unientity><desc>East Asian ideograph</desc></character>
-<character hex="70 73 6E"><unientity>7BA2</unientity><desc>East Asian ideograph</desc></character>
-<character hex="70 74 38"><unientity>823E</unientity><desc>East Asian ideograph</desc></character>
-<character hex="70 75 23"><unientity>9170</unientity><desc>East Asian ideograph</desc></character>
-<character hex="70 75 5D"><unientity>8E3A</unientity><desc>East Asian ideograph</desc></character>
-<character hex="70 77 5D"><unientity>9B0F</unientity><desc>East Asian ideograph</desc></character>
-</entitymap>
\ No newline at end of file
diff --git a/util/cql2pqf.c b/util/cql2pqf.c
new file mode 100644 (file)
index 0000000..a63d30d
--- /dev/null
@@ -0,0 +1,60 @@
+/* $Id: cql2pqf.c,v 1.1 2003-10-27 12:21:39 adam Exp $
+   Copyright (C) 2002-2003
+   Index Data Aps
+
+This file is part of the YAZ toolkit.
+
+See the file LICENSE.
+*/
+
+#include <stdlib.h>
+#include <stdio.h>
+
+#include <yaz/cql.h>
+
+int main(int argc, char **argv)
+{
+    cql_transform_t ct;
+    int r;
+    int i, it = 1;
+    CQL_parser cp = cql_parser_create();
+
+    if (argc < 2)
+    {
+        fprintf (stderr, "usage\n cqltransform <properties> [<query>] [interations]\n");
+        exit (1);
+    }
+    ct = cql_transform_open_fname(argv[1]);
+    if (!ct)
+    {
+        fprintf (stderr, "failed to read properties %s\n", argv[1]);
+        exit (1);
+    }
+    if (argc >= 4)
+        it = atoi(argv[3]);
+
+    for (i = 0; i<it; i++)
+    {
+    if (argc >= 3)
+        r = cql_parser_string(cp, argv[2]);
+    else
+        r = cql_parser_stdio(cp, stdin);
+
+    if (r)
+        fprintf (stderr, "Syntax error\n");
+    else
+    {
+        r = cql_transform_FILE(ct, cql_parser_result(cp), stdout);
+       printf("\n");
+        if (r)
+        {
+            const char *addinfo;
+            cql_transform_error(ct, &addinfo);
+            printf ("Transform error %d %s\n", r, addinfo ? addinfo : "");
+        }
+    }
+    }
+    cql_transform_close(ct);
+    cql_parser_destroy(cp);
+    return 0;
+}
diff --git a/util/cql2xcql.c b/util/cql2xcql.c
new file mode 100644 (file)
index 0000000..e389069
--- /dev/null
@@ -0,0 +1,28 @@
+/* $Id: cql2xcql.c,v 1.1 2003-10-27 12:21:39 adam Exp $
+   Copyright (C) 2002-2003
+   Index Data Aps
+
+This file is part of the YAZ toolkit.
+
+See the file LICENSE.
+*/
+
+#include <stdio.h>
+
+#include <yaz/cql.h>
+
+int main(int argc, char **argv)
+{
+    int r;
+    CQL_parser cp = cql_parser_create();
+    if (argc == 2)
+        r = cql_parser_string(cp, argv[1]);
+    else
+        r = cql_parser_stdio(cp, stdin);
+    if (r)
+        fprintf (stderr, "Syntax error\n");
+    else
+        cql_to_xml_stdio(cql_parser_result(cp), stdout);
+    cql_parser_destroy(cp);
+    return 0;
+}
diff --git a/util/cvs-date.tcl b/util/cvs-date.tcl
deleted file mode 100755 (executable)
index 6950a4b..0000000
+++ /dev/null
@@ -1,35 +0,0 @@
-#!/bin/sh
-#  the next line restarts using tclsh \
-exec tclsh "$0" "$@"
-#
-# $Id: cvs-date.tcl,v 1.4 2001-09-11 12:44:22 adam Exp $
-set sec 0
-
-proc cvslog {} {
-       global sec
-
-       set f [open {|cvs log} r]
-       while {[gets $f line] >= 0} {
-               if {[regexp {^date: ([0-9]+)[ /]+([0-9]+)[ /]+([0-9]+)[ /]} $line dummy year month day]} {
-                       set this $year$month$day
-                       if {$this > $sec} {
-                               set sec $this
-                       }
-               }
-       }
-}
-
-cvslog 
-
-if {$sec} {
-       set fname [lindex $argv 0]
-       if {[string length $fname]} {
-               set f [open [lindex $argv 0] w]
-               puts $f  "#define YAZ_DATE ${sec}L"
-               puts $f  "#define YAZ_DATE_STR \"$sec\""
-               puts $f  ""
-               close $f
-       } else {
-               puts $sec
-       }
-}
diff --git a/util/log.c b/util/log.c
deleted file mode 100644 (file)
index 90a2c5b..0000000
+++ /dev/null
@@ -1,235 +0,0 @@
-/*
- * Copyright (c) 1995-2003, Index Data
- * See the file LICENSE for details.
- *
- * $Id: log.c,v 1.39 2003-10-09 15:51:36 adam Exp $
- */
-
-#if HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#ifdef WIN32
-#include <windows.h>
-#endif
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <ctype.h>
-#include <string.h>
-#include <stdarg.h>
-#include <errno.h>
-#include <time.h>
-#include <yaz/nmem.h>
-#include <yaz/log.h>
-
-#define HAS_STRERROR 1
-
-#if HAS_STRERROR
-
-#else
-char *strerror(int n)
-{
-        extern char *sys_errlist[];
-        return sys_errlist[n];
-}
-
-#endif
-
-static int l_level = LOG_DEFAULT_LEVEL;
-static FILE *l_file = NULL;
-static char l_prefix[512] = "";
-static char l_prefix2[512] = "";
-static char l_fname[512] = "";
-
-static struct {
-    int mask;
-    char *name;
-} mask_names[] =
-{
-    { LOG_FATAL, "fatal"},
-    { LOG_DEBUG, "debug"},
-    { LOG_WARN,  "warn" },
-    { LOG_LOG,   "log"  },
-    { LOG_ERRNO, ""},
-    { LOG_MALLOC, "malloc"},
-    { LOG_APP,   "app"  },
-    { LOG_NOTIME, "" },
-    { LOG_APP2  , "app2" },
-    { LOG_APP3  , "app3" },
-    { LOG_ALL,   "all"  },
-    { 0,         "none" },
-    { 0, NULL }
-};  
-
-FILE *yaz_log_file(void)
-{
-    if (!l_file)
-        l_file = stderr;
-    return l_file;
-}
-
-void yaz_log_init_file (const char *fname)
-{
-    if (fname)
-    {
-       strncpy(l_fname, fname, sizeof(l_fname)-1);
-       l_fname[sizeof(l_fname)-1] = '\0';
-    }
-    else
-       l_fname[0] = '\0';
-    yaz_log_reopen();
-}
-
-void yaz_log_reopen(void)
-{
-    FILE *new_file;
-    if (!l_file)
-        l_file = stderr;
-
-    if (!*l_fname)
-       new_file=stderr;
-    else if (!(new_file = fopen(l_fname, "a")))
-        return;
-    if (l_file != stderr)
-    {
-        fclose (l_file);
-    }
-    setvbuf(new_file, 0, _IONBF, 0);
-    l_file = new_file;
-}
-
-void yaz_log_init_level (int level)
-{
-    l_level = level;
-}
-
-void yaz_log_init_prefix (const char *prefix)
-{
-    if (prefix && *prefix)
-       sprintf(l_prefix, "%.511s ", prefix);
-    else
-        *l_prefix = 0;
-}
-
-void yaz_log_init_prefix2 (const char *prefix)
-{
-    if (prefix && *prefix)
-       sprintf(l_prefix2, "%.511s ", prefix);
-    else
-        *l_prefix2 = 0;
-}
-
-void yaz_log_init(int level, const char *prefix, const char *fname)
-{
-    yaz_log_init_level (level);
-    yaz_log_init_prefix (prefix);
-    if (fname && *fname)
-        yaz_log_init_file (fname);
-}
-
-static void (*start_hook_func)(int, const char *, void *) = NULL;
-static void *start_hook_info;
-static void (*end_hook_func)(int, const char *, void *) = NULL;
-static void *end_hook_info;
-
-void log_event_start (void (*func)(int, const char *, void *), void *info)
-{
-    start_hook_func = func;
-    start_hook_info = info;
-}
-
-void log_event_end (void (*func)(int, const char *, void *), void *info)
-{
-    end_hook_func = func;
-    end_hook_info = info;
-}
-
-void yaz_log(int level, const char *fmt, ...)
-{
-    va_list ap;
-    char buf[4096], flags[1024];
-    int i;
-    time_t ti;
-    struct tm *tim;
-    char tbuf[50]="";
-    int o_level = level;
-
-    if (!(level & l_level))
-       return;
-    if (!l_file)
-        l_file = stderr;
-    *flags = '\0';
-    for (i = 0; level && mask_names[i].name; i++)
-       if (mask_names[i].mask & level)
-       {
-           if (*mask_names[i].name)
-               sprintf(flags + strlen(flags), "[%s]", mask_names[i].name);
-           level -= mask_names[i].mask;
-       }
-    va_start(ap, fmt);
-#ifdef WIN32
-    _vsnprintf(buf, sizeof(buf)-1, fmt, ap);
-#else
-/* !WIN32 */
-#if HAVE_VSNPRINTF
-    vsnprintf(buf, sizeof(buf), fmt, ap);
-#else
-    vsprintf(buf, fmt, ap);
-#endif
-#endif
-/* WIN32 */
-    if (o_level & LOG_ERRNO)
-    {
-        strcat(buf, " [");
-        yaz_strerror(buf+strlen(buf), 2048);
-        strcat(buf, "]");
-    }
-    va_end (ap);
-    if (start_hook_func)
-        (*start_hook_func)(o_level, buf, start_hook_info);
-    ti = time(0);
-    tim = localtime(&ti);
-    if (l_level & LOG_NOTIME)
-      tbuf[0]='\0';
-    else
-      strftime(tbuf, 50, "%H:%M:%S-%d/%m: ", tim);
-    fprintf(l_file, "%s%s%s %s%s\n", tbuf, l_prefix, flags,
-            l_prefix2, buf);
-    fflush(l_file);
-    if (end_hook_func)
-       (*end_hook_func)(o_level, buf, end_hook_info);
-}
-
-int yaz_log_mask_str (const char *str)
-{
-    return yaz_log_mask_str_x (str, LOG_DEFAULT_LEVEL);
-}
-
-int yaz_log_mask_str_x (const char *str, int level)
-{
-    const char *p;
-    int i;
-
-    while (*str)
-    {
-        for (p = str; *p && *p != ','; p++)
-            ;
-        if (*str == '-' || isdigit(*str))
-            level = atoi (str);
-        else
-            for (i = 0; mask_names[i].name; i++)
-                if (strlen (mask_names[i].name) == (size_t) (p-str) &&
-                    memcmp (mask_names[i].name, str, p-str) == 0)
-                {
-                    if (mask_names[i].mask)
-                        level |= mask_names[i].mask;
-                    else
-                        level = 0;
-                }
-        if (*p == ',')
-            p++;
-        str = p;
-    }
-    return level;
-}
diff --git a/util/marcdisp.c b/util/marcdisp.c
deleted file mode 100644 (file)
index b728872..0000000
+++ /dev/null
@@ -1,467 +0,0 @@
-/*
- * Copyright (c) 1995-2003, Index Data
- * See the file LICENSE for details.
- *
- * $Id: marcdisp.c,v 1.30 2003-07-14 12:59:23 adam Exp $
- */
-
-#if HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#include <stdio.h>
-#include <string.h>
-#include <ctype.h>
-#include <yaz/marcdisp.h>
-#include <yaz/wrbuf.h>
-#include <yaz/yaz-util.h>
-
-struct yaz_marc_t_ {
-    WRBUF m_wr;
-    int xml;
-    int debug;
-};
-
-yaz_marc_t yaz_marc_create(void)
-{
-    yaz_marc_t mt = (yaz_marc_t) xmalloc(sizeof(*mt));
-    mt->xml = YAZ_MARC_LINE;
-    mt->debug = 0;
-    mt->m_wr = wrbuf_alloc();
-    return mt;
-}
-
-void yaz_marc_destroy(yaz_marc_t mt)
-{
-    if (!mt)
-        return ;
-    wrbuf_free (mt->m_wr, 1);
-    xfree (mt);
-}
-
-static void marc_cdata (yaz_marc_t mt, const char *buf, size_t len, WRBUF wr)
-{
-    size_t i;
-    for (i = 0; i<len; i++)
-    {
-        if (mt->xml)
-        {
-            switch (buf[i]) {
-            case '<':
-                wrbuf_puts(wr, "&lt;");
-                break;
-            case '>':
-                wrbuf_puts(wr, "&gt;");
-                break;
-            case '&':
-                wrbuf_puts(wr, "&amp;");
-                break;
-           case '"':
-               wrbuf_puts(wr, "&quot;");
-               break;
-           case '\'':
-               wrbuf_puts(wr, "&apos;");
-               break;
-            default:
-                wrbuf_putc(wr, buf[i]);
-            }
-        }
-        else
-            wrbuf_putc(wr, buf[i]);
-    }
-}
-
-#if 0
-static void marc_cdata (yaz_marc_t mt, const char *buf, size_t len)
-{
-    if (!mt->cd)
-        marc_cdata2 (mt, buf, len);
-    else
-    {
-        char outbuf[12];
-        size_t inbytesleft = len;
-        const char *inp = buf;
-        
-        while (inbytesleft)
-        {
-            size_t outbytesleft = sizeof(outbuf);
-            char *outp = outbuf;
-            size_t r = yaz_iconv (mt->cd, (char**) &inp, &inbytesleft, 
-                                  &outp, &outbytesleft);
-            if (r == (size_t) (-1))
-            {
-                int e = yaz_iconv_error(mt->cd);
-                if (e != YAZ_ICONV_E2BIG)
-                    break;
-            }
-            marc_cdata2 (mt, outbuf, outp - outbuf);
-        }
-    }
-}
-#endif
-
-int yaz_marc_decode_wrbuf (yaz_marc_t mt, const char *buf, int bsize, WRBUF wr)
-{
-    int entry_p;
-    int record_length;
-    int indicator_length;
-    int identifier_length;
-    int base_address;
-    int length_data_entry;
-    int length_starting;
-    int length_implementation;
-
-    wrbuf_rewind(wr);
-
-    record_length = atoi_n (buf, 5);
-    if (record_length < 25)
-    {
-       if (mt->debug)
-       {
-           char str[40];
-           
-           sprintf (str, "Record length %d - aborting\n", record_length);
-           wrbuf_puts (wr, str);
-       }
-        return -1;
-    }
-    /* ballout if bsize is known and record_length is than that */
-    if (bsize != -1 && record_length > bsize)
-       return -1;
-    if (isdigit(buf[10]))
-        indicator_length = atoi_n (buf+10, 1);
-    else
-        indicator_length = 2;
-    if (isdigit(buf[11]))
-       identifier_length = atoi_n (buf+11, 1);
-    else
-        identifier_length = 2;
-    base_address = atoi_n (buf+12, 5);
-
-    length_data_entry = atoi_n (buf+20, 1);
-    length_starting = atoi_n (buf+21, 1);
-    length_implementation = atoi_n (buf+22, 1);
-
-    if (mt->xml)
-    {
-        char str[80];
-        int i;
-        switch(mt->xml)
-        {
-        case YAZ_MARC_SIMPLEXML:
-            wrbuf_puts (wr, "<iso2709\n");
-            sprintf (str, " RecordStatus=\"%c\"\n", buf[5]);
-            wrbuf_puts (wr, str);
-            sprintf (str, " TypeOfRecord=\"%c\"\n", buf[6]);
-            wrbuf_puts (wr, str);
-            for (i = 1; i<=19; i++)
-            {
-                sprintf (str, " ImplDefined%d=\"%c\"\n", i, buf[6+i]);
-                wrbuf_puts (wr, str);
-            }
-            wrbuf_puts (wr, ">\n");
-            break;
-        case YAZ_MARC_OAIMARC:
-            wrbuf_puts(
-                wr,
-                "<oai_marc xmlns=\"http://www.openarchives.org/OIA/oai_marc\""
-                "\n"
-                " xmlns:xsi=\"http://www.w3.org/2000/10/XMLSchema-instance\""
-                "\n"
-                " xsi:schemaLocation=\"http://www.openarchives.org/OAI/oai_marc.xsd\""
-                "\n"
-                );
-            
-            sprintf (str, " status=\"%c\" type=\"%c\" catForm=\"%c\">\n",
-                     buf[5], buf[6], buf[7]);
-            wrbuf_puts (wr, str);
-            break;
-        case YAZ_MARC_MARCXML:
-            wrbuf_printf(
-                wr,
-                "<record xmlns=\"http://www.loc.gov/MARC21/slim\">\n"
-                "  <leader>%.24s</leader>\n", buf);
-            break;
-        }
-    }
-    if (mt->debug)
-    {
-       char str[40];
-
-        if (mt->xml)
-            wrbuf_puts (wr, "<!--\n");
-       sprintf (str, "Record length         %5d\n", record_length);
-       wrbuf_puts (wr, str);
-       sprintf (str, "Indicator length      %5d\n", indicator_length);
-       wrbuf_puts (wr, str);
-       sprintf (str, "Identifier length     %5d\n", identifier_length);
-       wrbuf_puts (wr, str);
-       sprintf (str, "Base address          %5d\n", base_address);
-       wrbuf_puts (wr, str);
-       sprintf (str, "Length data entry     %5d\n", length_data_entry);
-       wrbuf_puts (wr, str);
-       sprintf (str, "Length starting       %5d\n", length_starting);
-       wrbuf_puts (wr, str);
-       sprintf (str, "Length implementation %5d\n", length_implementation);
-       wrbuf_puts (wr, str);
-        if (mt->xml)
-            wrbuf_puts (wr, "-->\n");
-    }
-
-    for (entry_p = 24; buf[entry_p] != ISO2709_FS; )
-    {
-        entry_p += 3+length_data_entry+length_starting;
-        if (entry_p >= record_length)
-            return -1;
-    }
-    base_address = entry_p+1;
-    for (entry_p = 24; buf[entry_p] != ISO2709_FS; )
-    {
-        int data_length;
-       int data_offset;
-       int end_offset;
-       int i, j;
-       char tag[4];
-        int identifier_flag = 1;
-
-        memcpy (tag, buf+entry_p, 3);
-       entry_p += 3;
-        tag[3] = '\0';
-       data_length = atoi_n (buf+entry_p, length_data_entry);
-       entry_p += length_data_entry;
-       data_offset = atoi_n (buf+entry_p, length_starting);
-       entry_p += length_starting;
-       i = data_offset + base_address;
-       end_offset = i+data_length-1;
-        
-        if (indicator_length < 4 && indicator_length > 0)
-        {
-            if (buf[i + indicator_length] != ISO2709_IDFS)
-                identifier_flag = 0;
-        }
-        else if (!memcmp (tag, "00", 2))
-            identifier_flag = 0;
-        
-        switch(mt->xml)
-        {
-        case YAZ_MARC_LINE:
-            if (mt->debug)
-                wrbuf_puts (wr, "Tag: ");
-            wrbuf_puts (wr, tag);
-            wrbuf_puts (wr, " ");
-            break;
-        case YAZ_MARC_SIMPLEXML:
-            wrbuf_printf (wr, "<field tag=\"%s\"", tag);
-            break;
-        case YAZ_MARC_OAIMARC:
-            if (identifier_flag)
-                wrbuf_printf (wr, "  <varfield id=\"%s\"", tag);
-            else
-                wrbuf_printf (wr, "  <fixfield id=\"%s\"", tag);
-            break;
-        case YAZ_MARC_MARCXML:
-            if (identifier_flag)
-                wrbuf_printf (wr, "  <datafield tag=\"%s\"", tag);
-            else
-                wrbuf_printf (wr, "  <controlfield tag=\"%s\"", tag);
-        }
-        
-        if (identifier_flag)
-       {
-            for (j = 0; j<indicator_length; j++, i++)
-            {
-                switch(mt->xml)
-                {
-                case YAZ_MARC_LINE:
-                    if (mt->debug)
-                        wrbuf_puts (wr, " Ind: ");
-                    wrbuf_putc (wr, buf[i]);
-                    break;
-                case YAZ_MARC_SIMPLEXML:
-                    wrbuf_printf (wr, " Indicator%d=\"%c\"", j+1, buf[i]);
-                    break;
-                case YAZ_MARC_OAIMARC:
-                    wrbuf_printf (wr, " i%d=\"%c\"", j+1, buf[i]);
-                    break;
-                case YAZ_MARC_MARCXML:
-                    wrbuf_printf (wr, " ind%d=\"%c\"", j+1, buf[i]);
-                }
-            }
-       }
-        if (mt->xml)
-        {
-            wrbuf_puts (wr, ">");
-            if (identifier_flag)
-                wrbuf_puts (wr, "\n");
-        }
-        else
-        {
-            if (mt->debug && !mt->xml)
-                wrbuf_puts (wr, " Fields: ");
-        }
-        if (identifier_flag)
-        {
-            while (buf[i] != ISO2709_RS && buf[i] != ISO2709_FS && i < end_offset)
-            {
-                int i0;
-                i++;
-                switch(mt->xml)
-                {
-                case YAZ_MARC_LINE: 
-                    wrbuf_puts (wr, " $"); 
-                    for (j = 1; j<identifier_length; j++, i++)
-                        wrbuf_putc (wr, buf[i]);
-                    wrbuf_putc (wr, ' ');
-                    break;
-                case YAZ_MARC_SIMPLEXML:
-                    wrbuf_puts (wr, "  <subfield code=\"");
-                    for (j = 1; j<identifier_length; j++, i++)
-                        wrbuf_putc (wr, buf[i]);
-                    wrbuf_puts (wr, "\">");
-                    break;
-                case YAZ_MARC_OAIMARC:
-                    wrbuf_puts (wr, "    <subfield label=\"");
-                    for (j = 1; j<identifier_length; j++, i++)
-                        wrbuf_putc (wr, buf[i]);
-                    wrbuf_puts (wr, "\">");
-                    break;
-                case YAZ_MARC_MARCXML:
-                    wrbuf_puts (wr, "    <subfield code=\"");
-                    for (j = 1; j<identifier_length; j++, i++)
-                        wrbuf_putc (wr, buf[i]);
-                    wrbuf_puts (wr, "\">");
-                    break;
-                }
-                i0 = i;
-                while (buf[i] != ISO2709_RS && buf[i] != ISO2709_IDFS &&
-                       buf[i] != ISO2709_FS && i < end_offset)
-                    i++;
-                marc_cdata(mt, buf + i0, i - i0, wr);
-                
-                if (mt->xml)
-                    wrbuf_puts (wr, "</subfield>\n");
-            }
-        }
-        else
-        {
-            int i0 = i;
-            while (buf[i] != ISO2709_RS && buf[i] != ISO2709_FS && i < end_offset)
-                i++;
-            marc_cdata(mt, buf + i0, i - i0, wr);
-       }
-        if (!mt->xml)
-            wrbuf_putc (wr, '\n');
-       if (i < end_offset)
-           wrbuf_puts (wr, "  <!-- separator but not at end of field -->\n");
-       if (buf[i] != ISO2709_RS && buf[i] != ISO2709_FS)
-           wrbuf_puts (wr, "  <!-- no separator at end of field -->\n");
-        switch(mt->xml)
-        {
-        case YAZ_MARC_SIMPLEXML:
-            wrbuf_puts (wr, "</field>\n");
-            break;
-        case YAZ_MARC_OAIMARC:
-            if (identifier_flag)
-                wrbuf_puts (wr, "  </varfield>\n");
-            else
-                wrbuf_puts (wr, "  </fixfield>\n");
-            break;
-        case YAZ_MARC_MARCXML:
-            if (identifier_flag)
-                wrbuf_puts (wr, "  </datafield>\n");
-            else
-                wrbuf_puts (wr, "  </controlfield>\n");
-            break;
-        }
-    }
-    switch (mt->xml)
-    {
-    case YAZ_MARC_LINE:
-        wrbuf_puts (wr, "");
-        break;
-    case YAZ_MARC_SIMPLEXML:
-        wrbuf_puts (wr, "</iso2709>\n");
-        break;
-    case YAZ_MARC_OAIMARC:
-        wrbuf_puts (wr, "</oai_marc>\n");
-        break;
-    case YAZ_MARC_MARCXML:
-        wrbuf_puts (wr, "</record>\n");
-        break;
-    }
-    return record_length;
-}
-
-int yaz_marc_decode_buf (yaz_marc_t mt, const char *buf, int bsize,
-                         char **result, int *rsize)
-{
-    int r = yaz_marc_decode_wrbuf(mt, buf, bsize, mt->m_wr);
-    if (r > 0)
-    {
-        if (result)
-            *result = wrbuf_buf(mt->m_wr);
-        if (rsize)
-            *rsize = wrbuf_len(mt->m_wr);
-    }
-    return r;
-}
-
-void yaz_marc_xml(yaz_marc_t mt, int xmlmode)
-{
-    if (mt)
-        mt->xml = xmlmode;
-}
-
-void yaz_marc_debug(yaz_marc_t mt, int level)
-{
-    if (mt)
-        mt->debug = level;
-}
-
-/* depricated */
-int yaz_marc_decode(const char *buf, WRBUF wr, int debug, int bsize, int xml)
-{
-    yaz_marc_t mt = yaz_marc_create();
-    int r;
-
-    mt->debug = debug;
-    mt->xml = xml;
-    r = yaz_marc_decode_wrbuf(mt, buf, bsize, wr);
-    yaz_marc_destroy(mt);
-    return r;
-}
-
-/* depricated */
-int marc_display_wrbuf (const char *buf, WRBUF wr, int debug, int bsize)
-{
-    return yaz_marc_decode(buf, wr, debug, bsize, 0);
-}
-
-/* depricated */
-int marc_display_exl (const char *buf, FILE *outf, int debug, int bsize)
-{
-    yaz_marc_t mt = yaz_marc_create();
-    int r;
-
-    mt->debug = debug;
-    r = yaz_marc_decode_wrbuf (mt, buf, bsize, mt->m_wr);
-    if (!outf)
-       outf = stdout;
-    if (r > 0)
-       fwrite (wrbuf_buf(mt->m_wr), 1, wrbuf_len(mt->m_wr), outf);
-    yaz_marc_destroy(mt);
-    return r;
-}
-
-/* depricated */
-int marc_display_ex (const char *buf, FILE *outf, int debug)
-{
-    return marc_display_exl (buf, outf, debug, -1);
-}
-
-/* depricated */
-int marc_display (const char *buf, FILE *outf)
-{
-    return marc_display_ex (buf, outf, 0);
-}
-
diff --git a/util/matchstr.c b/util/matchstr.c
deleted file mode 100644 (file)
index e223132..0000000
+++ /dev/null
@@ -1,78 +0,0 @@
-/*
- * Copyright (c) 1995-2003, Index Data.
- * See the file LICENSE for details.
- * Sebastian Hammer, Adam Dickmeiss
- *
- * $Id: matchstr.c,v 1.7 2003-02-12 21:34:57 adam Exp $
- */
-#if HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#include <stdio.h>
-#include <assert.h>
-#include <ctype.h>
-#include <string.h>
-#include <yaz/yaz-util.h>
-
-/*
- * Match strings, independently of case and occurences of '-'.
- * fairly inefficient - will be replaced with an indexing scheme for
- * the various subsystems if we get a bottleneck here.
- */
-
-int yaz_matchstr(const char *s1, const char *s2)
-{
-    while (*s1 && *s2)
-    {
-       char c1 = *s1;
-       char c2 = *s2;
-
-        if (c2 == '?')
-            return 0;
-       if (c1 == '-')
-           c1 = *++s1;
-       if (c2 == '-')
-           c2 = *++s2;
-       if (!c1 || !c2)
-           break;
-        if (c2 != '.')
-        {
-           if (isupper(c1))
-               c1 = tolower(c1);
-           if (isupper(c2))
-               c2 = tolower(c2);
-           if (c1 != c2)
-               break;
-        }
-       s1++;
-       s2++;
-    }
-    return *s1 || *s2;
-}
-
-int yaz_strcmp_del(const char *a, const char *b, const char *b_del)
-{
-    while (*a && *b)
-    {
-        if (*a != *b)
-            return *a - *b;
-        a++;
-        b++;
-    }
-    if (b_del && strchr(b_del, *b))
-        return *a;
-    return *a - *b;
-}
-
-#ifdef __GNUC__
-#ifdef __CHECKER__
-void __assert_fail (const char *assertion, const char *file, 
-                    unsigned int line, const char *function)
-{
-    fprintf (stderr, "%s in file %s line %d func %s\n",
-             assertion, file, line, function);
-    abort ();
-}
-#endif
-#endif
diff --git a/util/nmem.c b/util/nmem.c
deleted file mode 100644 (file)
index 24225c7..0000000
+++ /dev/null
@@ -1,483 +0,0 @@
-/*
- * Copyright (c) 1995-2003, Index Data.
- * See the file LICENSE for details.
- * Sebastian Hammer, Adam Dickmeiss
- *
- * $Id: nmem.c,v 1.42 2003-09-16 19:46:56 adam Exp $
- */
-
-/*
- * This is a simple and fairly wasteful little module for nibble memory
- * allocation. Evemtually we'll put in something better.
- */
-#if HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#include <assert.h>
-#include <string.h>
-#include <errno.h>
-#include <yaz/xmalloc.h>
-#include <yaz/nmem.h>
-#include <yaz/log.h>
-#include <yaz/oid.h>
-
-#ifdef WIN32
-#include <windows.h>
-#endif
-
-#if YAZ_POSIX_THREADS
-#include <pthread.h>
-#endif
-
-#if YAZ_GNU_THREADS
-#include <pth.h>
-#endif
-
-#define NMEM_CHUNK (4*1024)
-
-#ifdef WIN32
-static CRITICAL_SECTION critical_section;
-#define NMEM_ENTER EnterCriticalSection(&critical_section)
-#define NMEM_LEAVE LeaveCriticalSection(&critical_section)
-struct nmem_mutex {
-    CRITICAL_SECTION m_handle;
-};
-#elif YAZ_POSIX_THREADS
-static pthread_mutex_t nmem_mutex = PTHREAD_MUTEX_INITIALIZER;
-#define NMEM_ENTER pthread_mutex_lock(&nmem_mutex);
-#define NMEM_LEAVE pthread_mutex_unlock(&nmem_mutex);
-struct nmem_mutex {
-    pthread_mutex_t m_handle;
-};
-#elif YAZ_GNU_THREADS
-static pth_mutex_t nmem_mutex = PTH_MUTEX_INIT;
-#define NMEM_ENTER pth_mutex_acquire(&nmem_mutex, 0, 0)
-#define NMEM_LEAVE pth_mutex_release(&nmem_mutex)
-struct nmem_mutex {
-    pth_mutex_t m_handle;
-};
-#else
-#define NMEM_ENTER
-#define NMEM_LEAVE
-struct nmem_mutex {
-    int dummy;
-};
-#endif
-
-YAZ_EXPORT void nmem_mutex_create(NMEM_MUTEX *p)
-{
-    NMEM_ENTER;
-    if (!*p)
-    {
-       *p = (NMEM_MUTEX) malloc (sizeof(**p));
-#ifdef WIN32
-       InitializeCriticalSection(&(*p)->m_handle);
-#elif YAZ_POSIX_THREADS
-       pthread_mutex_init (&(*p)->m_handle, 0);
-#elif YAZ_GNU_THREADS
-        pth_mutex_init (&(*p)->m_handle);
-#endif
-    }
-    NMEM_LEAVE;
-}
-
-YAZ_EXPORT void nmem_mutex_enter(NMEM_MUTEX p)
-{
-    if (p)
-    {
-#ifdef WIN32
-       EnterCriticalSection(&p->m_handle);
-#elif YAZ_POSIX_THREADS
-       pthread_mutex_lock(&p->m_handle);
-#endif
-    }
-}
-
-YAZ_EXPORT void nmem_mutex_leave(NMEM_MUTEX p)
-{
-    if (p)
-    {
-#ifdef WIN32
-       LeaveCriticalSection(&p->m_handle);
-#elif YAZ_POSIX_THREADS
-       pthread_mutex_unlock(&p->m_handle);
-#endif
-    }
-}
-
-YAZ_EXPORT void nmem_mutex_destroy(NMEM_MUTEX *p)
-{
-    NMEM_ENTER;
-    if (*p)
-    {
-#ifdef WIN32
-       DeleteCriticalSection(&(*p)->m_handle);
-#endif
-       free (*p);
-       *p = 0;
-    }
-    NMEM_LEAVE;
-}
-
-static nmem_block *freelist = NULL;        /* "global" freelists */
-static nmem_control *cfreelist = NULL;
-static int nmem_active_no = 0;
-static int nmem_init_flag = 0;
-
-#if NMEM_DEBUG
-struct nmem_debug_info {
-    void *p;
-    char file[40];
-    int line;
-    struct nmem_debug_info *next;
-};
-  
-struct nmem_debug_info *nmem_debug_list = 0;  
-#endif
-
-static void free_block(nmem_block *p)
-{  
-    p->next = freelist;
-    freelist = p;
-#if NMEM_DEBUG
-    yaz_log (LOG_DEBUG, "nmem free_block p=%p", p);
-#endif
-}
-
-#if NMEM_DEBUG
-void nmem_print_list (void)
-{
-    struct nmem_debug_info *p;
-
-    yaz_log (LOG_DEBUG, "nmem print list");
-    NMEM_ENTER;
-    for (p = nmem_debug_list; p; p = p->next)
-       yaz_log (LOG_DEBUG, " %s:%d p=%p size=%d", p->file, p->line, p->p,
-                nmem_total(p->p));
-    NMEM_LEAVE;
-}
-#endif
-/*
- * acquire a block with a minimum of size free bytes.
- */
-static nmem_block *get_block(int size)
-{
-    nmem_block *r, *l;
-
-#if NMEM_DEBUG
-    yaz_log (LOG_DEBUG, "nmem get_block size=%d", size);
-#endif
-    for (r = freelist, l = 0; r; l = r, r = r->next)
-       if (r->size >= size)
-           break;
-    if (r)
-    {
-#if NMEM_DEBUG
-       yaz_log (LOG_DEBUG, "nmem get_block found free block p=%p", r);
-#endif
-       if (l)
-           l->next = r->next;
-       else
-           freelist = r->next;
-    }
-    else
-    {
-       int get = NMEM_CHUNK;
-
-       if (get < size)
-           get = size;
-#if NMEM_DEBUG
-       yaz_log (LOG_DEBUG, "nmem get_block alloc new block size=%d", get);
-#endif
-       r = (nmem_block *)xmalloc(sizeof(*r));
-       r->buf = (char *)xmalloc(r->size = get);
-    }
-    r->top = 0;
-    return r;
-}
-
-void nmem_reset(NMEM n)
-{
-    nmem_block *t;
-
-#if NMEM_DEBUG
-    yaz_log (LOG_DEBUG, "nmem_reset p=%p", n);
-#endif
-    if (!n)
-       return;
-    NMEM_ENTER;
-    while (n->blocks)
-    {
-       t = n->blocks;
-       n->blocks = n->blocks->next;
-       free_block(t);
-    }
-    n->total = 0;
-    NMEM_LEAVE;
-}
-
-#if NMEM_DEBUG
-void *nmem_malloc_f (const char *file, int line, NMEM n, int size)
-#else
-void *nmem_malloc(NMEM n, int size)
-#endif
-{
-    struct nmem_block *p;
-    char *r;
-
-#if NMEM_DEBUG
-    yaz_log (LOG_DEBUG, "%s:%d: nmem_malloc p=%p size=%d", file, line,
-                     n, size);
-#endif
-    if (!n)
-    {
-        yaz_log (LOG_FATAL, "calling nmem_malloc with an null pointer");
-        abort ();
-    }
-#ifdef WIN32
-    assert (nmem_init_flag);
-#endif
-    NMEM_ENTER;
-    p = n->blocks;
-    if (!p || p->size - p->top < size)
-    {
-       p = get_block(size);
-       p->next = n->blocks;
-       n->blocks = p;
-    }
-    r = p->buf + p->top;
-    /* align size */
-    p->top += (size + (sizeof(long) - 1)) & ~(sizeof(long) - 1);
-    n->total += size;
-    NMEM_LEAVE;
-    return r;
-}
-
-int nmem_total(NMEM n)
-{
-    return n->total;
-}
-
-#if NMEM_DEBUG
-NMEM nmem_create_f(const char *file, int line)
-#else
-NMEM nmem_create(void)
-#endif
-{
-    NMEM r;
-#if NMEM_DEBUG
-    struct nmem_debug_info *debug_p;
-#endif
-    
-    NMEM_ENTER;
-    nmem_active_no++;
-    r = cfreelist;
-    if (r)
-       cfreelist = cfreelist->next;
-    else
-       r = (nmem_control *)xmalloc(sizeof(*r));
-    NMEM_LEAVE;
-
-#if NMEM_DEBUG
-    yaz_log (LOG_DEBUG, "%s:%d: nmem_create %d p=%p", file, line,
-                     nmem_active_no, r);
-#endif
-    r->blocks = 0;
-    r->total = 0;
-    r->next = 0;
-
-#if NMEM_DEBUG
-    for (debug_p = nmem_debug_list; debug_p; debug_p = debug_p->next)
-       if (debug_p->p == r)
-       {
-           yaz_log (LOG_FATAL, "multi used block in nmem");
-           abort ();
-       }
-    debug_p = xmalloc (sizeof(*debug_p));
-    strncpy (debug_p->file, file, sizeof(debug_p->file)-1);
-    debug_p->file[sizeof(debug_p->file)-1] = '\0';
-    debug_p->line = line;
-    debug_p->p = r;
-    debug_p->next = nmem_debug_list;
-    nmem_debug_list = debug_p;
-
-    nmem_print_list();
-#endif
-    return r;
-}
-
-#if NMEM_DEBUG
-void nmem_destroy_f(const char *file, int line, NMEM n)
-#else
-void nmem_destroy(NMEM n)
-#endif
-{
-#if NMEM_DEBUG
-    struct nmem_debug_info **debug_p;
-    int ok = 0;
-#endif
-    if (!n)
-       return;
-    
-#if NMEM_DEBUG
-    yaz_log (LOG_DEBUG, "%s:%d: nmem_destroy %d p=%p", file, line,
-                     nmem_active_no-1, n);
-    NMEM_ENTER;
-    for (debug_p = &nmem_debug_list; *debug_p; debug_p = &(*debug_p)->next)
-       if ((*debug_p)->p == n)
-       {
-           struct nmem_debug_info *debug_save = *debug_p;
-           *debug_p = (*debug_p)->next;
-           xfree (debug_save);
-           ok = 1;
-           break;
-       }
-    NMEM_LEAVE;
-    nmem_print_list();
-    if (!ok)
-    {
-       yaz_log (LOG_WARN, "%s:%d destroying unallocated nmem block p=%p",
-                file, line, n);
-       return;
-    }
-#endif
-    nmem_reset(n);
-    NMEM_ENTER;
-    nmem_active_no--;
-    n->next = cfreelist;
-    cfreelist = n;
-    NMEM_LEAVE;
-}
-
-void nmem_transfer (NMEM dst, NMEM src)
-{
-    nmem_block *t;
-    while ((t=src->blocks))
-    {
-       src->blocks = t->next;
-       t->next = dst->blocks;
-       dst->blocks = t;
-    }
-    dst->total += src->total;
-    src->total = 0;
-}
-
-void nmem_critical_enter (void)
-{
-    NMEM_ENTER;
-}
-
-void nmem_critical_leave (void)
-{
-    NMEM_LEAVE;
-}
-
-void nmem_init (void)
-{
-    if (++nmem_init_flag == 1)
-    {
-#ifdef WIN32
-       InitializeCriticalSection(&critical_section);
-#elif YAZ_GNU_THREADS
-       yaz_log (LOG_LOG, "pth_init");
-        pth_init ();
-#endif
-       nmem_active_no = 0;
-       freelist = NULL;
-       cfreelist = NULL;
-    }
-}
-
-void nmem_exit (void)
-{
-    if (--nmem_init_flag == 0)
-    {
-        oid_exit();
-       while (freelist)
-       {
-           struct nmem_block *fl = freelist;
-           freelist = freelist->next;
-           xfree (fl->buf);
-           xfree (fl);
-       }
-       while (cfreelist)
-       {
-           struct nmem_control *cfl = cfreelist;
-           cfreelist = cfreelist->next;
-           xfree (cfl);
-       }
-#ifdef WIN32
-       DeleteCriticalSection(&critical_section);
-#endif
-    }
-}
-
-
-#ifdef WIN32
-BOOL WINAPI DllMain (HINSTANCE hinstDLL,
-                    DWORD reason,
-                    LPVOID reserved)
-{
-    switch (reason)
-    {
-    case DLL_PROCESS_ATTACH:
-       nmem_init ();
-       break;
-    case DLL_PROCESS_DETACH:
-       nmem_exit ();
-    }
-    return TRUE;
-}
-#endif
-
-int yaz_errno(void)
-{
-    return errno;
-}
-
-void yaz_set_errno(int v)
-{
-    errno = v;
-}
-
-void yaz_strerror(char *buf, int max)
-{
-    char *cp;
-#ifdef WIN32
-    DWORD err = GetLastError();
-    if (err)
-    {
-        FormatMessage(
-               FORMAT_MESSAGE_FROM_SYSTEM,
-               NULL,
-               err,
-               MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), /* Default lang */
-               (LPTSTR) buf,
-               max-1,
-               NULL);
-    }
-    else
-       *buf = '\0';
-#else
-/* UNIX */
-#if HAVE_STRERROR_R
-#if YAZ_POSIX_THREADS
-    *buf = '\0';
-    strerror_r(errno, buf, max);
-    /* if buffer is unset - use strerror anyway (GLIBC bug) */
-    if (*buf == '\0')
-        strcpy(buf, strerror(yaz_errno()));
-#else
-    strcpy(buf, strerror(yaz_errno()));
-#endif
-#else
-    strcpy(buf, strerror(yaz_errno()));
-#endif
-/* UNIX */
-#endif
-    if ((cp=strrchr(buf, '\n')))
-       *cp = '\0';
-    if ((cp=strrchr(buf, '\r')))
-       *cp = '\0';
-}
diff --git a/util/nmemsdup.c b/util/nmemsdup.c
deleted file mode 100644 (file)
index 33a643e..0000000
+++ /dev/null
@@ -1,34 +0,0 @@
-/*
- * Copyright (c) 1997-2003, Index Data.
- * See the file LICENSE for details.
- *
- * $Id: nmemsdup.c,v 1.6 2003-03-18 13:34:37 adam Exp $
- */
-#if HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#include <string.h>
-#include <yaz/nmem.h>
-
-char *nmem_strdup (NMEM mem, const char *src)
-{
-    char *dst = (char *)nmem_malloc (mem, strlen(src)+1);
-    strcpy (dst, src);
-    return dst;
-}
-
-char *nmem_strdupn (NMEM mem, const char *src, size_t n)
-{
-    char *dst = (char *)nmem_malloc (mem, n+1);
-    memcpy (dst, src, n);
-    dst[n] = '\0';
-    return dst;
-}
-
-int *nmem_intdup(NMEM mem, int v)
-{
-    int *dst = (int*) nmem_malloc (mem, sizeof(int));
-    *dst = v;
-    return dst;
-}
diff --git a/util/oid.c b/util/oid.c
deleted file mode 100644 (file)
index 25c198b..0000000
+++ /dev/null
@@ -1,614 +0,0 @@
-/*
- * Copyright (c) 1995-2003, Index Data
- * See the file LICENSE for details.
- *
- * $Id: oid.c,v 1.68 2003-09-11 12:30:59 mike Exp $
- */
-
-/*
- * More or less protocol-transparent OID database.
- * We could (and should?) extend this so that the user app can add new
- * entries to the list at initialization.
- */
-#if HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#include <stdlib.h>
-#include <string.h>
-#include <ctype.h>
-
-#include <yaz/oid.h>
-#include <yaz/yaz-util.h>
-
-static int z3950_prefix[] = { 1, 2, 840, 10003, -1 };
-static int sr_prefix[]    = { 1, 0, 10163, -1 };
-
-struct oident_list {
-    struct oident oident;
-    struct oident_list *next;
-};
-
-static struct oident_list *oident_table = NULL;
-static int oid_value_dynamic = VAL_DYNAMIC;
-static int oid_init_flag = 0;
-static NMEM_MUTEX oid_mutex = 0;
-static NMEM oid_nmem = 0;
-
-/*
- * OID database
- */
-static oident standard_oids[] =
-{
-    /* General definitions */
-    {PROTO_GENERAL, CLASS_TRANSYN, VAL_BER,          {2,1,1,-1},
-     "BER" },
-    {PROTO_GENERAL, CLASS_TRANSYN, VAL_ISO2709,      {1,0,2709,1,1,-1},
-     "ISO2709"},
-    {PROTO_GENERAL, CLASS_GENERAL, VAL_ISO_ILL_1,    {1,0,10161,2,1,-1},
-     "ISOILL-1"},
-    /* Z39.50v3 definitions */
-    {PROTO_Z3950,   CLASS_ABSYN,   VAL_APDU,         {2,1,-1},
-     "Z-APDU"},    
-    {PROTO_Z3950,   CLASS_APPCTX,  VAL_BASIC_CTX,    {1,1,-1},
-     "Z-BASIC"},
-    {PROTO_Z3950,   CLASS_ATTSET,  VAL_BIB1,         {3,1,-1},
-     "Bib-1"},
-    {PROTO_Z3950,   CLASS_ATTSET,  VAL_EXP1,         {3,2,-1},
-     "Exp-1"},
-    {PROTO_Z3950,   CLASS_ATTSET,  VAL_EXT1,         {3,3,-1},
-     "Ext-1"},
-    {PROTO_Z3950,   CLASS_ATTSET,  VAL_CCL1,         {3,4,-1},
-     "CCL-1"},
-    {PROTO_Z3950,   CLASS_ATTSET,  VAL_GILS,         {3,5,-1},
-     "GILS-attset"},
-    {PROTO_Z3950,   CLASS_ATTSET,  VAL_GILS,         {3,5,-1},
-     "GILS"},
-    {PROTO_Z3950,   CLASS_ATTSET,  VAL_STAS,         {3,6,-1},
-     "STAS-attset"},
-    {PROTO_Z3950,   CLASS_ATTSET,  VAL_COLLECT1,     {3,7,-1},
-     "Collections-attset"},
-    {PROTO_Z3950,   CLASS_ATTSET,  VAL_CIMI1,        {3,8,-1},
-     "CIMI-attset"},
-    {PROTO_Z3950,   CLASS_ATTSET,  VAL_GEO,          {3,9,-1},
-     "Geo-attset"},
-
-    {PROTO_Z3950,   CLASS_ATTSET,  VAL_ZBIG,         {3,10,-1},
-     "ZBIG"},
-    {PROTO_Z3950,   CLASS_ATTSET,  VAL_UTIL,         {3,11,-1},
-     "Util"},
-    {PROTO_Z3950,   CLASS_ATTSET,  VAL_XD1,          {3,12,-1},
-     "XD-1"},
-    {PROTO_Z3950,   CLASS_ATTSET,  VAL_ZTHES,        {3,13,-1},
-     "Zthes"},
-    {PROTO_Z3950,   CLASS_ATTSET,  VAL_FIN1,         {3,14,-1},
-     "Fin-1"},
-    {PROTO_Z3950,   CLASS_ATTSET,  VAL_DAN1,         {3,15,-1},
-     "Dan-1"},
-    {PROTO_Z3950,   CLASS_ATTSET,  VAL_HOLDINGS,     {3,16,-1},
-     "Holdings"},
-    {PROTO_Z3950,   CLASS_ATTSET,  VAL_USMARC,       {3,17,-1},
-     "MARC"},
-    {PROTO_Z3950,   CLASS_ATTSET,  VAL_BIB2,         {3,18,-1},
-     "Bib-2"},
-    {PROTO_Z3950,   CLASS_ATTSET,  VAL_ZEEREX,       {3,19,-1},
-     "ZeeRex"},
-    /* New applications should use Zthes-1 instead of this Satan-spawn */
-    {PROTO_Z3950,   CLASS_ATTSET,  VAL_THESAURUS,    {3,1000,81,1,-1},
-     "Thesaurus-attset"},
-    {PROTO_Z3950,   CLASS_ATTSET,  VAL_IDXPATH,      {3,1000,81,2,-1},
-     "IDXPATH"},
-    {PROTO_Z3950,   CLASS_DIAGSET, VAL_BIB1,         {4,1,-1},
-     "Bib-1"},
-    {PROTO_Z3950,   CLASS_DIAGSET, VAL_DIAG1,        {4,2,-1},
-     "Diag-1"},
-    {PROTO_Z3950,   CLASS_DIAGSET, VAL_DIAG_ES,      {4,3,-1},
-     "Diag-ES"},
-    {PROTO_Z3950,   CLASS_DIAGSET, VAL_DIAG_GENERAL, {4,3,-1},
-     "Diag-General"},
-    {PROTO_Z3950,   CLASS_RECSYN,  VAL_UNIMARC,      {5,1,-1},
-     "Unimarc"},
-    {PROTO_Z3950,   CLASS_RECSYN,  VAL_INTERMARC,    {5,2,-1},
-     "Intermarc"},
-    {PROTO_Z3950,   CLASS_RECSYN,  VAL_CCF,          {5,3,-1},
-     "CCF"},
-    {PROTO_Z3950,   CLASS_RECSYN,  VAL_USMARC,       {5,10,-1},
-     "USmarc"},
-    {PROTO_Z3950,   CLASS_RECSYN,  VAL_UKMARC,       {5,11,-1},
-     "UKmarc"},
-    {PROTO_Z3950,   CLASS_RECSYN,  VAL_NORMARC,      {5,12,-1},
-     "Normarc"},
-    {PROTO_Z3950,   CLASS_RECSYN,  VAL_LIBRISMARC,   {5,13,-1},
-     "Librismarc"},
-    {PROTO_Z3950,   CLASS_RECSYN,  VAL_DANMARC,      {5,14,-1},
-     "Danmarc"},
-    {PROTO_Z3950,   CLASS_RECSYN,  VAL_FINMARC,      {5,15,-1},
-     "Finmarc"},
-    {PROTO_Z3950,   CLASS_RECSYN,  VAL_MAB,          {5,16,-1},
-     "MAB"},
-    {PROTO_Z3950,   CLASS_RECSYN,  VAL_CANMARC,      {5,17,-1},
-     "Canmarc"},
-    {PROTO_Z3950,   CLASS_RECSYN,  VAL_SBN,          {5,18,-1},
-     "SBN"},
-    {PROTO_Z3950,   CLASS_RECSYN,  VAL_PICAMARC,     {5,19,-1},
-     "Picamarc"},
-    {PROTO_Z3950,   CLASS_RECSYN,  VAL_AUSMARC,      {5,20,-1},
-     "Ausmarc"},
-    {PROTO_Z3950,   CLASS_RECSYN,  VAL_IBERMARC,     {5,21,-1},
-     "Ibermarc"},
-    {PROTO_Z3950,   CLASS_RECSYN,  VAL_CATMARC,      {5,22,-1},
-     "Carmarc"},
-    {PROTO_Z3950,   CLASS_RECSYN,  VAL_MALMARC,      {5,23,-1},
-     "Malmarc"},
-    {PROTO_Z3950,   CLASS_RECSYN,  VAL_JPMARC,       {5,24,-1},
-     "JPmarc"},
-    {PROTO_Z3950,   CLASS_RECSYN,  VAL_SWEMARC,      {5,25,-1},
-     "SWEmarc"},
-    {PROTO_Z3950,   CLASS_RECSYN,  VAL_SIGLEMARC,    {5,26,-1},
-     "SIGLEmarc"},
-    {PROTO_Z3950,   CLASS_RECSYN,  VAL_ISDSMARC,     {5,27,-1},
-     "ISDSmarc"},
-    {PROTO_Z3950,   CLASS_RECSYN,  VAL_RUSMARC,      {5,28,-1},
-     "RUSmarc"},
-    {PROTO_Z3950,   CLASS_RECSYN,  VAL_HUNMARC,      {5,29,-1},
-     "Hunmarc"},
-    {PROTO_Z3950,   CLASS_RECSYN,  VAL_EXPLAIN,      {5,100,-1},
-     "Explain"},
-    {PROTO_Z3950,   CLASS_RECSYN,  VAL_SUTRS,        {5,101,-1},
-     "SUTRS"},
-    {PROTO_Z3950,   CLASS_RECSYN,  VAL_OPAC,         {5,102,-1},
-     "OPAC"},
-    {PROTO_Z3950,   CLASS_RECSYN,  VAL_SUMMARY,      {5,103,-1},
-     "Summary"},
-    {PROTO_Z3950,   CLASS_RECSYN,  VAL_GRS0,         {5,104,-1},
-     "GRS-0"},
-    {PROTO_Z3950,   CLASS_RECSYN,  VAL_GRS1,         {5,105,-1},
-     "GRS-1"},
-    {PROTO_Z3950,   CLASS_RECSYN,  VAL_EXTENDED,     {5,106,-1},
-     "Extended"},
-    {PROTO_Z3950,   CLASS_RECSYN,  VAL_FRAGMENT,     {5,107,-1},
-     "Fragment"},
-    {PROTO_Z3950,   CLASS_RECSYN,  VAL_PDF,          {5,109,1,-1},
-     "pdf"},
-    {PROTO_Z3950,   CLASS_RECSYN,  VAL_POSTSCRIPT,   {5,109,2,-1},
-     "postscript"},
-    {PROTO_Z3950,   CLASS_RECSYN,  VAL_HTML,         {5,109,3,-1},
-     "html"},
-    {PROTO_Z3950,   CLASS_RECSYN,  VAL_TIFF,         {5,109,4,-1},
-     "tiff"},
-    {PROTO_Z3950,   CLASS_RECSYN,  VAL_GIF,          {5,109,5,-1},
-     "gif"},
-    {PROTO_Z3950,   CLASS_RECSYN,  VAL_JPEG,         {5,109,6,-1},
-     "jpeg"},
-    {PROTO_Z3950,   CLASS_RECSYN,  VAL_PNG,          {5,109,7,-1},
-     "png"},
-    {PROTO_Z3950,   CLASS_RECSYN,  VAL_MPEG,         {5,109,8,-1},
-     "mpeg"},
-    {PROTO_Z3950,   CLASS_RECSYN,  VAL_SGML,         {5,109,9,-1},
-     "sgml"},
-
-    {PROTO_Z3950,   CLASS_RECSYN,  VAL_TIFFB,        {5,110,1,-1},
-     "tiff-b"},
-    {PROTO_Z3950,   CLASS_RECSYN,  VAL_WAV,          {5,110,2,-1},
-     "wav"},
-
-    {PROTO_Z3950,   CLASS_RECSYN,  VAL_SQLRS,        {5,111,-1},
-     "SQL-RS"},
-    {PROTO_Z3950,   CLASS_RECSYN,  VAL_SOIF,         {5,1000,81,2,-1},
-     "SOIF" },
-    {PROTO_Z3950,   CLASS_RECSYN,  VAL_TEXT_XML,     {5,109,10,-1},
-     "text-XML" },
-    {PROTO_Z3950,   CLASS_RECSYN,  VAL_TEXT_XML,     {5,109,10,-1},
-     "XML" },
-    {PROTO_Z3950,   CLASS_RECSYN,  VAL_APPLICATION_XML, {5,109,11,-1},
-     "application-XML" },
-    {PROTO_Z3950,   CLASS_RESFORM, VAL_RESOURCE1,    {7,1,-1},
-     "Resource-1"},
-    {PROTO_Z3950,   CLASS_RESFORM, VAL_RESOURCE2,    {7,2,-1},
-     "Resource-2"},
-    {PROTO_Z3950,   CLASS_RESFORM, VAL_UNIVERSE_REPORT, {7,1000,81,1,-1},
-     "UNIverse-Resource-Report"},
-
-    {PROTO_Z3950,   CLASS_ACCFORM, VAL_PROMPT1,      {8,1,-1},
-     "Prompt-1"},
-    {PROTO_Z3950,   CLASS_ACCFORM, VAL_DES1,         {8,2,-1},
-     "Des-1"},
-    {PROTO_Z3950,   CLASS_ACCFORM, VAL_KRB1,         {8,3,-1},
-     "Krb-1"},
-    {PROTO_Z3950,   CLASS_EXTSERV, VAL_PRESSET,      {9,1,-1},
-     "Pers. set"},
-    {PROTO_Z3950,   CLASS_EXTSERV, VAL_PQUERY,       {9,2,-1},
-     "Pers. query"},
-    {PROTO_Z3950,   CLASS_EXTSERV, VAL_PCQUERY,      {9,3,-1},
-     "Per'd query"},
-    {PROTO_Z3950,   CLASS_EXTSERV, VAL_ITEMORDER,    {9,4,-1},
-     "Item order"},
-    {PROTO_Z3950,   CLASS_EXTSERV, VAL_DBUPDATE0,    {9,5,-1},
-     "DB. Update (first version)"},
-    {PROTO_Z3950,   CLASS_EXTSERV, VAL_DBUPDATE1,    {9,5,1,-1},
-     "DB. Update (second version)"},
-    {PROTO_Z3950,   CLASS_EXTSERV, VAL_DBUPDATE,     {9,5,1,1,-1},
-     "DB. Update"},
-    {PROTO_Z3950,   CLASS_EXTSERV, VAL_EXPORTSPEC,   {9,6,-1},
-     "exp. spec."},
-    {PROTO_Z3950,   CLASS_EXTSERV, VAL_EXPORTINV,    {9,7,-1},
-     "exp. inv."},
-    {PROTO_Z3950,   CLASS_EXTSERV, VAL_ADMINSERVICE, {9,1000,81,1,-1},
-     "Admin"},
-    {PROTO_Z3950,   CLASS_USERINFO,VAL_SEARCHRES1,   {10,1,-1},
-     "searchResult-1"},
-    {PROTO_Z3950,   CLASS_USERINFO,VAL_CHARLANG,     {10,2,-1},
-     "CharSetandLanguageNegotiation"},
-    {PROTO_Z3950,   CLASS_USERINFO,VAL_USERINFO1,    {10,3,-1},
-     "UserInfo-1"},
-    {PROTO_Z3950,   CLASS_USERINFO,VAL_MULTISRCH1,   {10,4,-1},
-     "MultipleSearchTerms-1"},
-    {PROTO_Z3950,   CLASS_USERINFO,VAL_MULTISRCH2,   {10,5,-1},
-     "MultipleSearchTerms-2"},
-    {PROTO_Z3950,   CLASS_USERINFO,VAL_DATETIME,     {10,6,-1},
-     "DateTime"},
-    {PROTO_Z3950,   CLASS_USERINFO,VAL_PROXY,        {10,1000,81,1,-1},
-     "Proxy" },
-    {PROTO_Z3950,   CLASS_USERINFO,VAL_COOKIE,       {10,1000,81,2,-1},
-     "Cookie" },
-    {PROTO_Z3950,   CLASS_USERINFO,VAL_CLIENT_IP,    {10,1000,81,3,-1},
-     "Client-IP" },
-    {PROTO_Z3950,   CLASS_ELEMSPEC,VAL_ESPEC1,       {11,1,-1},
-     "Espec-1"},
-    {PROTO_Z3950,   CLASS_VARSET,  VAL_VAR1,         {12,1,-1},
-     "Variant-1"},
-    {PROTO_Z3950,   CLASS_SCHEMA,  VAL_WAIS,         {13,1,-1},
-     "WAIS-schema"},
-    {PROTO_Z3950,   CLASS_SCHEMA,  VAL_GILS,         {13,2,-1},
-     "GILS-schema"},
-    {PROTO_Z3950,   CLASS_SCHEMA,  VAL_COLLECT1,     {13,3,-1},
-     "Collections-schema"},
-    {PROTO_Z3950,   CLASS_SCHEMA,  VAL_GEO,          {13,4,-1},
-     "Geo-schema"},
-    {PROTO_Z3950,   CLASS_SCHEMA,  VAL_CIMI1,        {13,5,-1},
-     "CIMI-schema"},
-    {PROTO_Z3950,   CLASS_SCHEMA,  VAL_UPDATEES,     {13,6,-1},
-     "Update ES"},
-    {PROTO_Z3950,   CLASS_SCHEMA,  VAL_HOLDINGS,     {13,7,-1},
-     "Holdings"},
-    {PROTO_Z3950,   CLASS_SCHEMA,  VAL_ZTHES,        {13,8,-1},
-     "Zthes"},
-    {PROTO_Z3950,   CLASS_SCHEMA,  VAL_THESAURUS,    {13,1000,81,1,-1},
-     "thesaurus-schema"},
-    {PROTO_Z3950,   CLASS_SCHEMA,  VAL_EXPLAIN,      {13,1000,81,2,-1},
-     "Explain-schema"},
-    {PROTO_Z3950,   CLASS_TAGSET,  VAL_SETM,         {14,1,-1},
-     "TagsetM"},
-    {PROTO_Z3950,   CLASS_TAGSET,  VAL_SETG,         {14,2,-1},
-     "TagsetG"},
-    {PROTO_Z3950,   CLASS_TAGSET,  VAL_STAS,         {14,3,-1},
-     "STAS-tagset"},
-    {PROTO_Z3950,   CLASS_TAGSET,  VAL_GILS,         {14,4,-1},
-     "GILS-tagset"},
-    {PROTO_Z3950,   CLASS_TAGSET,  VAL_COLLECT1,     {14,5,-1},
-     "Collections-tagset"},
-    {PROTO_Z3950,   CLASS_TAGSET,  VAL_CIMI1,        {14,6,-1},
-     "CIMI-tagset"},
-    {PROTO_Z3950,   CLASS_TAGSET,  VAL_THESAURUS,    {14,1000,81,1,-1},
-     "thesaurus-tagset"},      /* What is this Satan-spawn doing here? */
-    {PROTO_Z3950,   CLASS_TAGSET,  VAL_EXPLAIN,      {14,1000,81,2,-1},
-     "Explain-tagset"},
-    {PROTO_Z3950,   CLASS_TAGSET,  VAL_ZTHES,        {14,8,-1},
-     "Zthes-tagset"},
-    {PROTO_Z3950,   CLASS_NEGOT,   VAL_CHARNEG3,     {15,3,-1},
-     "CharSetandLanguageNegotiation-3"},
-    {PROTO_Z3950,   CLASS_NEGOT,   VAL_ID_CHARSET,   {15,1000,81,1,-1},
-     "ID-Charset" },
-    {PROTO_Z3950,   CLASS_USERINFO,VAL_CQL,          {16, 2, -1},
-     "CQL"},
-    {PROTO_GENERAL, CLASS_GENERAL, VAL_UCS2,    {1,0,10646,1,0,2,-1},
-     "UCS-2"},
-    {PROTO_GENERAL, CLASS_GENERAL, VAL_UCS4,    {1,0,10646,1,0,4,-1},
-     "UCS-4"},
-    {PROTO_GENERAL, CLASS_GENERAL, VAL_UTF16,   {1,0,10646,1,0,5,-1},
-     "UTF-16"},
-    {PROTO_GENERAL, CLASS_GENERAL, VAL_UTF8,    {1,0,10646,1,0,8,-1},
-     "UTF-8"},
-    {PROTO_Z3950,   CLASS_USERINFO,VAL_OCLCUI,  {10, 1000, 17, 1, -1},
-     "OCLC-userInfo"},
-    {PROTO_NOP,     CLASS_NOP,     VAL_NOP,       {-1},        0          }
-};
-
-/* OID utilities */
-
-void oid_oidcpy(int *t, int *s)
-{
-    while ((*(t++) = *(s++)) > -1);
-}
-
-void oid_oidcat(int *t, int *s)
-{
-    while (*t > -1)
-        t++;
-    while ((*(t++) = *(s++)) > -1);
-}
-
-int oid_oidcmp(int *o1, int *o2)
-{
-    while (*o1 == *o2 && *o1 > -1)
-    {
-        o1++;
-        o2++;
-    }
-    if (*o1 == *o2)
-        return 0;
-    else if (*o1 > *o2)
-        return 1;
-    else
-        return -1;
-}
-
-int oid_oidlen(int *o)
-{
-    int len = 0;
-
-    while (*(o++) >= 0)
-        len++;
-    return len;
-}
-
-
-static int match_prefix(int *look, int *prefix)
-{
-    int len;
-
-    for (len = 0; *look == *prefix; look++, prefix++, len++);
-    if (*prefix < 0) /* did we reach the end of the prefix? */
-        return len;
-    return 0;
-}
-
-void oid_transfer (struct oident *oidentp)
-{
-    while (*oidentp->oidsuffix >= 0)
-    {
-       oid_addent (oidentp->oidsuffix, oidentp->proto,
-                   oidentp->oclass,
-                   oidentp->desc, oidentp->value);
-       oidentp++;
-    }
-}
-
-void oid_init (void)
-{
-    if (oid_init_flag == 0)
-    {
-       /* oid_transfer is thread safe, so there's nothing wrong in having
-          two threads calling it simultaniously. On the other hand
-          no thread may exit oid_init before all OID's bave been
-          transferred - which is why checked is set after oid_transfer... 
-       */
-       nmem_mutex_create (&oid_mutex);
-       nmem_mutex_enter (oid_mutex);
-       if (!oid_nmem)
-           oid_nmem = nmem_create ();
-       nmem_mutex_leave (oid_mutex);
-       oid_transfer (standard_oids);
-       oid_init_flag = 1;
-    }
-}
-
-void oid_exit (void)
-{
-    if (oid_init_flag)
-    {
-        oid_init_flag = 0;
-        nmem_mutex_destroy (&oid_mutex);
-        nmem_destroy (oid_nmem);
-        oid_nmem = 0;
-    }
-}
-
-static struct oident *oid_getentbyoid_x(int *o)
-{
-    enum oid_proto proto;
-    int prelen;
-    struct oident_list *ol;
-    
-    /* determine protocol type */
-    if ((prelen = match_prefix(o, z3950_prefix)) != 0)
-        proto = PROTO_Z3950;
-    else if ((prelen = match_prefix(o, sr_prefix)) != 0)
-        proto = PROTO_SR;
-    else
-        proto = PROTO_GENERAL;
-    for (ol = oident_table; ol; ol = ol->next)
-    {
-       struct oident *p = &ol->oident;
-        if (p->proto == proto && !oid_oidcmp(o + prelen, p->oidsuffix))
-            return p;
-       if (p->proto == PROTO_GENERAL && !oid_oidcmp (o, p->oidsuffix))
-           return p;
-    }
-    return 0;
-}
-
-/*
- * To query, fill out proto, class, and value of the ent parameter.
- */
-int *oid_ent_to_oid(struct oident *ent, int *ret)
-{
-    struct oident_list *ol;
-    
-    oid_init ();
-    for (ol = oident_table; ol; ol = ol->next)
-    {
-       struct oident *p = &ol->oident;
-        if (ent->value == p->value &&
-            (p->proto == PROTO_GENERAL || (ent->proto == p->proto &&  
-           (ent->oclass == p->oclass || ent->oclass == CLASS_GENERAL))))
-       {
-           if (p->proto == PROTO_Z3950)
-               oid_oidcpy(ret, z3950_prefix);
-           else if (p->proto == PROTO_SR)
-               oid_oidcpy(ret, sr_prefix);
-           else
-               ret[0] = -1;
-           oid_oidcat(ret, p->oidsuffix);
-           ent->desc = p->desc;
-           return ret;
-       }
-    }
-    ret[0] = -1;
-    return 0;
-}
-
-/*
- * To query, fill out proto, class, and value of the ent parameter.
- */
-int *oid_getoidbyent(struct oident *ent)
-{
-    static int ret[OID_SIZE];
-
-    return oid_ent_to_oid (ent, ret);
-}
-
-struct oident *oid_addent (int *oid, enum oid_proto proto,
-                          enum oid_class oclass,
-                          const char *desc, int value)
-{
-    struct oident *oident = 0;
-
-    nmem_mutex_enter (oid_mutex);
-    if (!oident)
-    {
-       char desc_str[200];
-       struct oident_list *oident_list;
-       oident_list = (struct oident_list *)
-           nmem_malloc (oid_nmem, sizeof(*oident_list));
-       oident = &oident_list->oident;
-       oident->proto = proto;
-       oident->oclass = oclass;
-
-       if (!desc)
-       {
-           int i;
-
-           sprintf (desc_str, "%d", *oid);
-           for (i = 1; i < 12 && oid[i] >= 0; i++)
-               sprintf (desc_str+strlen(desc_str), ".%d", oid[i]);
-           desc = desc_str;
-       }
-       oident->desc = nmem_strdup (oid_nmem, desc);
-       if (value == VAL_DYNAMIC)
-           oident->value = (enum oid_value) (++oid_value_dynamic);
-       else
-           oident->value = (enum oid_value) value;
-       oid_oidcpy (oident->oidsuffix, oid);
-       oident_list->next = oident_table;
-       oident_table = oident_list;
-    }
-    nmem_mutex_leave (oid_mutex);
-    return oident;
-}
-
-struct oident *oid_getentbyoid(int *oid)
-{
-    struct oident *oident;
-
-    if (!oid)
-       return 0;
-    oid_init ();
-    oident = oid_getentbyoid_x (oid);
-    if (!oident)
-       oident = oid_addent (oid, PROTO_GENERAL, CLASS_GENERAL,
-                            NULL, VAL_DYNAMIC);
-    return oident;
-}
-
-static oid_value oid_getval_raw(const char *name)
-{
-    int val = 0, i = 0, oid[OID_SIZE];
-    struct oident *oident;
-    
-    while (isdigit (*name))
-    {
-        val = val*10 + (*name - '0');
-        name++;
-        if (*name == '.')
-        {
-            if (i < OID_SIZE-1)
-                oid[i++] = val;
-           val = 0;
-            name++;
-        }
-    }
-    oid[i] = val;
-    oid[i+1] = -1;
-    oident = oid_getentbyoid_x (oid);
-    if (!oident)
-        oident = oid_addent (oid, PROTO_GENERAL, CLASS_GENERAL, NULL,
-                        VAL_DYNAMIC);
-    return oident->value;
-}
-
-oid_value oid_getvalbyname(const char *name)
-{
-    struct oident_list *ol;
-
-    oid_init ();
-    if (isdigit (*name))
-        return oid_getval_raw (name);
-    for (ol = oident_table; ol; ol = ol->next)
-       if (!yaz_matchstr(ol->oident.desc, name))
-       {
-           return ol->oident.value;
-       }
-    return VAL_NONE;
-}
-
-void oid_setprivateoids(oident *list)
-{
-    oid_transfer (list);
-}
-
-void oid_trav (void (*func)(struct oident *oidinfo, void *vp), void *vp)
-{
-    struct oident_list *ol;
-
-    oid_init ();
-    for (ol = oident_table; ol; ol = ol->next)
-        (*func)(&ol->oident, vp);
-}
-
-int *oid_name_to_oid(oid_class oclass, const char *name, int *oid) {
-    struct oident ent;
-
-    /* Translate syntax to oid_val */
-    oid_value value = oid_getvalbyname(name);
-
-    /* Build it into an oident */
-    ent.proto = PROTO_Z3950;
-    ent.oclass = oclass;
-    ent.value = value;
-
-    /* Translate to an array of int */
-    return oid_ent_to_oid(&ent, oid);
-}
-
-char *oid_to_dotstring(const int *oid, char *oidbuf) {
-    char tmpbuf[20];
-    int i;
-
-    oidbuf[0] = '\0';
-    for (i = 0; oid[i] != -1; i++) {
-       sprintf(tmpbuf, "%d", oid[i]);
-       if (i > 0) strcat(oidbuf, ".");
-       strcat(oidbuf, tmpbuf);
-    }
-
-    return oidbuf;
-}
-
-char *oid_name_to_dotstring(oid_class oclass, const char *name, char *oidbuf) {
-    int oid[OID_SIZE];
-
-    (void) oid_name_to_oid(oclass, name, oid);
-    return oid_to_dotstring(oid, oidbuf);
-}
-
diff --git a/util/options.c b/util/options.c
deleted file mode 100644 (file)
index 591a329..0000000
+++ /dev/null
@@ -1,118 +0,0 @@
-/*
- * Copyright (c) 1995-2000, Index Data
- * See the file LICENSE for details.
- * Sebastian Hammer, Adam Dickmeiss
- *
- * $Log: options.c,v $
- * Revision 1.8  2000-02-29 13:44:55  adam
- * Check for config.h (currently not generated).
- *
- * Revision 1.7  1999/11/30 13:47:12  adam
- * Improved installation. Moved header files to include/yaz.
- *
- * Revision 1.6  1997/09/01 08:54:13  adam
- * New windows NT/95 port using MSV5.0. Made prefix query handling
- * thread safe. The function options ignores empty arguments when met.
- *
- * Revision 1.5  1995/12/06 13:00:19  adam
- * Minus alone not treated as an option.
- *
- * Revision 1.4  1995/09/29  17:12:35  quinn
- * Smallish
- *
- * Revision 1.3  1995/09/27  15:03:03  quinn
- * Modified function heads & prototypes.
- *
- * Revision 1.2  1995/05/16  08:51:13  quinn
- * License, documentation, and memory fixes
- *
- * Revision 1.1  1995/03/27  08:35:18  quinn
- * Created util library
- * Added memory debugging module. Imported options-manager
- *
- * Revision 1.2  1994/10/04  17:47:10  adam
- * Function options now returns arg with error option.
- *
- * Revision 1.1  1994/08/16  15:57:22  adam
- * The first utility modules.
- *
- */
-#if HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#include <stdlib.h>
-
-#include <yaz/options.h>
-
-static int arg_no = 1;
-static int arg_off = 0;
-
-int options (const char *desc, char **argv, int argc, char **arg)
-{
-    int ch, i = 0;
-    
-    if (arg_no >= argc)
-        return -2;
-    if (arg_off == 0)
-    {
-        while (argv[arg_no][0] == '\0')
-        {
-            arg_no++;
-            if (arg_no >= argc)
-                return -2;
-        }
-        if (argv[arg_no][0] != '-' || argv[arg_no][1] == '\0')
-        {
-            *arg = argv[arg_no++];
-            return 0;
-        }
-        arg_off++;
-    }
-    ch = argv[arg_no][arg_off++];
-    while (desc[i])
-    {
-        int desc_char = desc[i++];
-        int type = 0;
-        if (desc[i] == ':')
-       {       /* string argument */
-            type = desc[i++];
-       }
-        if (desc_char == ch)
-       { /* option with argument */
-            if (type)
-           {
-                if (argv[arg_no][arg_off])
-               {
-                    *arg = argv[arg_no]+arg_off;
-                    arg_no++;
-                    arg_off =  0;
-               }
-                else
-               {
-                    arg_no++;
-                    arg_off = 0;
-                    if (arg_no < argc)
-                        *arg = argv[arg_no++];
-                    else
-                        *arg = "";
-               }
-           }
-            else /* option with no argument */
-           {
-                if (argv[arg_no][arg_off])
-                    arg_off++;
-                else
-               {
-                    arg_off = 0;
-                    arg_no++;
-               }
-           }
-            return ch;
-       }               
-    }
-    *arg = argv[arg_no]+arg_off-1;
-    arg_no = arg_no + 1;
-    arg_off = 0;
-    return -1;
-}
diff --git a/util/readconf.c b/util/readconf.c
deleted file mode 100644 (file)
index ce28536..0000000
+++ /dev/null
@@ -1,129 +0,0 @@
-/*
- * Copyright (C) 1994-2000, Index Data
- * All rights reserved.
- * Sebastian Hammer, Adam Dickmeiss
- *
- * $Log: readconf.c,v $
- * Revision 1.10  2000-02-29 13:44:55  adam
- * Check for config.h (currently not generated).
- *
- * Revision 1.9  1999/11/30 13:47:12  adam
- * Improved installation. Moved header files to include/yaz.
- *
- * Revision 1.8  1999/08/27 09:40:32  adam
- * Renamed logf function to yaz_log. Removed VC++ project files.
- *
- * Revision 1.7  1999/06/30 09:10:32  adam
- * Fixed reading of MS-DOS files.
- *
- * Revision 1.6  1998/10/13 16:09:55  adam
- * Added support for arbitrary OID's for tagsets, schemas and attribute sets.
- * Added support for multiple attribute set references and tagset references
- * from an abstract syntax file.
- * Fixed many bad logs-calls in routines that read the various
- * specifications regarding data1 (*.abs,*.att,...) and made the messages
- * consistent whenever possible.
- * Added extra 'lineno' argument to function readconf_line.
- *
- * Revision 1.5  1997/09/04 07:53:02  adam
- * Added include readconf.h.
- *
- * Revision 1.4  1997/05/14 06:54:07  adam
- * C++ support.
- *
- * Revision 1.3  1996/05/29 15:48:48  quinn
- * Added \n to the isspace rule.
- *
- * Revision 1.2  1996/05/29  10:05:01  quinn
- * Changed space criteria to support 8-bit characters
- *
- * Revision 1.1  1995/11/01  13:55:06  quinn
- * Minor adjustments
- *
- * Revision 1.2  1995/10/30  13:54:27  quinn
- * iRemoved fclose().
- *
- * Revision 1.1  1995/10/10  16:28:18  quinn
- * Initial revision
- *
- *
- */
-#if HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#include <stdio.h>
-#include <ctype.h>
-
-#include <yaz/log.h>
-#include <yaz/readconf.h>
-
-#define l_isspace(c) ((c) == '\t' || (c) == ' ' || (c) == '\n' || (c) == '\r')
-
-int readconf_line(FILE *f, int *lineno, char *line, int len,
-                 char *argv[], int num)
-{
-    char *p;
-    int argc;
-    
-    while ((p = fgets(line, len, f)))
-    {
-       (*lineno)++;
-       while (*p && l_isspace(*p))
-           p++;
-       if (*p && *p != '#')
-           break;
-    }
-    if (!p)
-       return 0;
-    
-    for (argc = 0; *p ; argc++)
-    {
-       if (*p == '#')  /* trailing comment */
-           break;
-       argv[argc] = p;
-       while (*p && !l_isspace(*p))
-           p++;
-       if (*p)
-       {
-           *(p++) = '\0';
-           while (*p && l_isspace(*p))
-               p++;
-       }
-    }
-    return argc;
-}
-
-/*
- * Read lines of a configuration file.
- */
-int readconf(char *name, void *rprivate,
-            int (*fun)(char *name, void *rprivate, int argc, char *argv[]))
-{
-    FILE *f;
-    char line[512], *m_argv[50];
-    int m_argc;
-    int lineno = 0;
-    
-    if (!(f = fopen(name, "r")))
-    {
-       yaz_log(LOG_WARN|LOG_ERRNO, "readconf: %s", name);
-       return -1;
-    }
-    for (;;)
-    {
-       int res;
-       
-       if (!(m_argc = readconf_line(f, &lineno, line, 512, m_argv, 50)))
-       {
-           fclose(f);
-           return 0;
-       }
-
-       if ((res = (*fun)(name, rprivate, m_argc, m_argv)))
-       {
-           fclose(f);
-           return res;
-       }
-    }
-}
diff --git a/util/siconv.c b/util/siconv.c
deleted file mode 100644 (file)
index 73d7148..0000000
+++ /dev/null
@@ -1,541 +0,0 @@
-/*
- * Copyright (c) 1997-2003, Index Data
- * See the file LICENSE for details.
- *
- * $Id: siconv.c,v 1.9 2003-01-06 08:20:28 adam Exp $
- */
-
-/* mini iconv and wrapper for system iconv library (if present) */
-
-#if HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#include <errno.h>
-#include <string.h>
-#include <ctype.h>
-#if HAVE_WCHAR_H
-#include <wchar.h>
-#endif
-
-#if HAVE_ICONV_H
-#include <iconv.h>
-#endif
-
-#include <yaz/yaz-util.h>
-
-unsigned long yaz_marc8_conv (unsigned char *inp, size_t inbytesleft,
-                              size_t *no_read);
-    
-struct yaz_iconv_struct {
-    int my_errno;
-    int init_flag;
-    size_t (*init_handle)(yaz_iconv_t cd, unsigned char *inbuf,
-                          size_t inbytesleft, size_t *no_read);
-    unsigned long (*read_handle)(yaz_iconv_t cd, unsigned char *inbuf,
-                                 size_t inbytesleft, size_t *no_read);
-    size_t (*write_handle)(yaz_iconv_t cd, unsigned long x,
-                           char **outbuf, size_t *outbytesleft);
-#if HAVE_ICONV_H
-    iconv_t iconv_cd;
-#endif
-};
-
-static unsigned long yaz_read_ISO8859_1 (yaz_iconv_t cd, unsigned char *inp,
-                                         size_t inbytesleft, size_t *no_read)
-{
-    unsigned long x = inp[0];
-    *no_read = 1;
-    return x;
-}
-
-static size_t yaz_init_UTF8 (yaz_iconv_t cd, unsigned char *inp,
-                             size_t inbytesleft, size_t *no_read)
-{
-    if (inp[0] != 0xef)
-    {
-        *no_read = 0;
-        return 0;
-    }
-    if (inbytesleft < 3)
-    {
-        cd->my_errno = YAZ_ICONV_EINVAL;
-        return (size_t) -1;
-    }
-    if (inp[1] != 0xbb || inp[2] != 0xbf)
-    {
-        cd->my_errno = YAZ_ICONV_EILSEQ;
-        return (size_t) -1;
-    }
-    *no_read = 3;
-    return 0;
-}
-
-static unsigned long yaz_read_UTF8 (yaz_iconv_t cd, unsigned char *inp,
-                                    size_t inbytesleft, size_t *no_read)
-{
-    unsigned long x = 0;
-
-    if (inp[0] <= 0x7f)
-    {
-        x = inp[0];
-        *no_read = 1;
-    }
-    else if (inp[0] <= 0xbf || inp[0] >= 0xfe)
-    {
-        *no_read = 0;
-        cd->my_errno = YAZ_ICONV_EILSEQ;
-    }
-    else if (inp[0] <= 0xdf && inbytesleft >= 2)
-    {
-        x = ((inp[0] & 0x1f) << 6) | (inp[1] & 0x3f);
-        if (x >= 0x80)
-            *no_read = 2;
-        else
-        {
-            *no_read = 0;
-            cd->my_errno = YAZ_ICONV_EILSEQ;
-        }
-    }
-    else if (inp[0] <= 0xef && inbytesleft >= 3)
-    {
-        x = ((inp[0] & 0x0f) << 12) | ((inp[1] & 0x3f) << 6) |
-            (inp[1] & 0x3f);
-        if (x >= 0x800)
-            *no_read = 3;
-        else
-        {
-            *no_read = 0;
-            cd->my_errno = YAZ_ICONV_EILSEQ;
-        }
-    }
-    else if (inp[0] <= 0xf7 && inbytesleft >= 4)
-    {
-        x =  ((inp[0] & 0x07) << 18) | ((inp[1] & 0x3f) << 12) |
-            ((inp[2] & 0x3f) << 6) | (inp[3] & 0x3f);
-        if (x >= 0x10000)
-            *no_read = 4;
-        else
-        {
-            *no_read = 0;
-            cd->my_errno = YAZ_ICONV_EILSEQ;
-        }
-    }
-    else if (inp[0] <= 0xfb && inbytesleft >= 5)
-    {
-        x =  ((inp[0] & 0x03) << 24) | ((inp[1] & 0x3f) << 18) |
-            ((inp[2] & 0x3f) << 12) | ((inp[3] & 0x3f) << 6) |
-            (inp[4] & 0x3f);
-        if (x >= 0x200000)
-            *no_read = 5;
-        else
-        {
-            *no_read = 0;
-            cd->my_errno = YAZ_ICONV_EILSEQ;
-        }
-    }
-    else if (inp[0] <= 0xfd && inbytesleft >= 6)
-    {
-        x =  ((inp[0] & 0x01) << 30) | ((inp[1] & 0x3f) << 24) |
-            ((inp[2] & 0x3f) << 18) | ((inp[3] & 0x3f) << 12) |
-            ((inp[4] & 0x3f) << 6) | (inp[5] & 0x3f);
-        if (x >= 0x4000000)
-            *no_read = 6;
-        else
-        {
-            *no_read = 0;
-            cd->my_errno = YAZ_ICONV_EILSEQ;
-        }
-    }
-    else
-    {
-        *no_read = 0;
-        cd->my_errno = YAZ_ICONV_EINVAL;
-    }
-    return x;
-}
-
-static unsigned long yaz_read_UCS4 (yaz_iconv_t cd, unsigned char *inp,
-                                    size_t inbytesleft, size_t *no_read)
-{
-    unsigned long x = 0;
-    
-    if (inbytesleft < 4)
-    {
-        cd->my_errno = YAZ_ICONV_EINVAL; /* incomplete input */
-        *no_read = 0;
-    }
-    else
-    {
-        x = (inp[0]<<24) | (inp[1]<<16) | (inp[2]<<8) | inp[3];
-        *no_read = 4;
-    }
-    return x;
-}
-
-static unsigned long yaz_read_UCS4LE (yaz_iconv_t cd, unsigned char *inp,
-                                      size_t inbytesleft, size_t *no_read)
-{
-    unsigned long x = 0;
-    
-    if (inbytesleft < 4)
-    {
-        cd->my_errno = YAZ_ICONV_EINVAL; /* incomplete input */
-        *no_read = 0;
-    }
-    else
-    {
-        x = (inp[3]<<24) | (inp[2]<<16) | (inp[1]<<8) | inp[0];
-        *no_read = 4;
-    }
-    return x;
-}
-
-#if HAVE_WCHAR_H
-static unsigned long yaz_read_wchar_t (yaz_iconv_t cd, unsigned char *inp,
-                                       size_t inbytesleft, size_t *no_read)
-{
-    unsigned long x = 0;
-    
-    if (inbytesleft < sizeof(wchar_t))
-    {
-        cd->my_errno = YAZ_ICONV_EINVAL; /* incomplete input */
-        *no_read = 0;
-    }
-    else
-    {
-        wchar_t wch;
-        memcpy (&wch, inp, sizeof(wch));
-        x = wch;
-        *no_read = sizeof(wch);
-    }
-    return x;
-}
-#endif
-
-static unsigned long yaz_read_marc8 (yaz_iconv_t cd, unsigned char *inp,
-                                     size_t inbytesleft, size_t *no_read)
-{
-    return yaz_marc8_conv(inp, inbytesleft, no_read);
-}
-
-static size_t yaz_write_UTF8 (yaz_iconv_t cd, unsigned long x,
-                              char **outbuf, size_t *outbytesleft)
-{
-    unsigned char *outp = (unsigned char *) *outbuf;
-    if (x <= 0x7f && *outbytesleft >= 1)
-    {
-        *outp++ = (unsigned char) x;
-        (*outbytesleft)--;
-    } 
-    else if (x <= 0x7ff && *outbytesleft >= 2)
-    {
-        *outp++ = (unsigned char) ((x >> 6) | 0xc0);
-        *outp++ = (unsigned char) ((x & 0x3f) | 0x80);
-        (*outbytesleft) -= 2;
-    }
-    else if (x <= 0xffff && *outbytesleft >= 3)
-    {
-        *outp++ = (unsigned char) ((x >> 12) | 0xe0);
-        *outp++ = (unsigned char) (((x >> 6) & 0x3f) | 0x80);
-        *outp++ = (unsigned char) ((x & 0x3f) | 0x80);
-        (*outbytesleft) -= 3;
-    }
-    else if (x <= 0x1fffff && *outbytesleft >= 4)
-    {
-        *outp++ = (unsigned char) ((x >> 18) | 0xf0);
-        *outp++ = (unsigned char) (((x >> 12) & 0x3f) | 0x80);
-        *outp++ = (unsigned char) (((x >> 6)  & 0x3f) | 0x80);
-        *outp++ = (unsigned char) ((x & 0x3f) | 0x80);
-        (*outbytesleft) -= 4;
-    }
-    else if (x <= 0x3ffffff && *outbytesleft >= 5)
-    {
-        *outp++ = (unsigned char) ((x >> 24) | 0xf8);
-        *outp++ = (unsigned char) (((x >> 18) & 0x3f) | 0x80);
-        *outp++ = (unsigned char) (((x >> 12) & 0x3f) | 0x80);
-        *outp++ = (unsigned char) (((x >> 6)  & 0x3f) | 0x80);
-        *outp++ = (unsigned char) ((x & 0x3f) | 0x80);
-        (*outbytesleft) -= 5;
-    }
-    else if (*outbytesleft >= 6)
-    {
-        *outp++ = (unsigned char) ((x >> 30) | 0xfc);
-        *outp++ = (unsigned char) (((x >> 24) & 0x3f) | 0x80);
-        *outp++ = (unsigned char) (((x >> 18) & 0x3f) | 0x80);
-        *outp++ = (unsigned char) (((x >> 12) & 0x3f) | 0x80);
-        *outp++ = (unsigned char) (((x >> 6)  & 0x3f) | 0x80);
-        *outp++ = (unsigned char) ((x & 0x3f) | 0x80);
-        (*outbytesleft) -= 6;
-    }
-    else 
-    {
-        cd->my_errno = YAZ_ICONV_E2BIG;  /* not room for output */
-        return (size_t)(-1);
-    }
-    *outbuf = (char *) outp;
-    return 0;
-}
-
-static size_t yaz_write_ISO8859_1 (yaz_iconv_t cd, unsigned long x,
-                                   char **outbuf, size_t *outbytesleft)
-{
-    unsigned char *outp = (unsigned char *) *outbuf;
-    if (x > 255 || x < 1)
-    {
-        cd->my_errno = YAZ_ICONV_EILSEQ;
-        return (size_t) -1;
-    }
-    else if (*outbytesleft >= 1)
-    {
-        *outp++ = (unsigned char) x;
-        (*outbytesleft)--;
-    }
-    else 
-    {
-        cd->my_errno = YAZ_ICONV_E2BIG;
-        return (size_t)(-1);
-    }
-    *outbuf = (char *) outp;
-    return 0;
-}
-
-
-static size_t yaz_write_UCS4 (yaz_iconv_t cd, unsigned long x,
-                              char **outbuf, size_t *outbytesleft)
-{
-    unsigned char *outp = (unsigned char *) *outbuf;
-    if (*outbytesleft >= 4)
-    {
-        *outp++ = (unsigned char) (x<<24);
-        *outp++ = (unsigned char) (x<<16);
-        *outp++ = (unsigned char) (x<<8);
-        *outp++ = (unsigned char) x;
-        (*outbytesleft) -= 4;
-    }
-    else
-    {
-        cd->my_errno = YAZ_ICONV_E2BIG;
-        return (size_t)(-1);
-    }
-    *outbuf = (char *) outp;
-    return 0;
-}
-
-static size_t yaz_write_UCS4LE (yaz_iconv_t cd, unsigned long x,
-                                char **outbuf, size_t *outbytesleft)
-{
-    unsigned char *outp = (unsigned char *) *outbuf;
-    if (*outbytesleft >= 4)
-    {
-        *outp++ = (unsigned char) x;
-        *outp++ = (unsigned char) (x<<8);
-        *outp++ = (unsigned char) (x<<16);
-        *outp++ = (unsigned char) (x<<24);
-        (*outbytesleft) -= 4;
-    }
-    else
-    {
-        cd->my_errno = YAZ_ICONV_E2BIG;
-        return (size_t)(-1);
-    }
-    *outbuf = (char *) outp;
-    return 0;
-}
-
-#if HAVE_WCHAR_H
-static size_t yaz_write_wchar_t (yaz_iconv_t cd, unsigned long x,
-                                 char **outbuf, size_t *outbytesleft)
-{
-    unsigned char *outp = (unsigned char *) *outbuf;
-
-    if (*outbytesleft >= sizeof(wchar_t))
-    {
-        wchar_t wch = x;
-        memcpy(outp, &wch, sizeof(wch));
-        outp += sizeof(wch);
-        (*outbytesleft) -= sizeof(wch);
-    }
-    else
-    {
-        cd->my_errno = YAZ_ICONV_E2BIG;
-        return (size_t)(-1);
-    }
-    *outbuf = (char *) outp;
-    return 0;
-}
-#endif
-
-int yaz_iconv_isbuiltin(yaz_iconv_t cd)
-{
-    return cd->read_handle && cd->write_handle;
-}
-
-yaz_iconv_t yaz_iconv_open (const char *tocode, const char *fromcode)
-{
-    yaz_iconv_t cd = (yaz_iconv_t) xmalloc (sizeof(*cd));
-
-    cd->write_handle = 0;
-    cd->read_handle = 0;
-    cd->init_handle = 0;
-    cd->my_errno = YAZ_ICONV_UNKNOWN;
-
-    /* a useful hack: if fromcode has leading @,
-       the library not use YAZ's own conversions .. */
-    if (fromcode[0] == '@')
-        fromcode++;
-    else
-    {
-        if (!yaz_matchstr(fromcode, "UTF8"))
-        {
-            cd->read_handle = yaz_read_UTF8;
-            cd->init_handle = yaz_init_UTF8;
-        }
-        else if (!yaz_matchstr(fromcode, "ISO88591"))
-            cd->read_handle = yaz_read_ISO8859_1;
-        else if (!yaz_matchstr(fromcode, "UCS4"))
-            cd->read_handle = yaz_read_UCS4;
-        else if (!yaz_matchstr(fromcode, "UCS4LE"))
-            cd->read_handle = yaz_read_UCS4LE;
-        else if (!yaz_matchstr(fromcode, "MARC8"))
-            cd->read_handle = yaz_read_marc8;
-#if HAVE_WCHAR_H
-        else if (!yaz_matchstr(fromcode, "WCHAR_T"))
-            cd->read_handle = yaz_read_wchar_t;
-#endif
-        
-        if (!yaz_matchstr(tocode, "UTF8"))
-            cd->write_handle = yaz_write_UTF8;
-        else if (!yaz_matchstr(tocode, "ISO88591"))
-            cd->write_handle = yaz_write_ISO8859_1;
-        else if (!yaz_matchstr (tocode, "UCS4"))
-            cd->write_handle = yaz_write_UCS4;
-        else if (!yaz_matchstr(tocode, "UCS4LE"))
-            cd->write_handle = yaz_write_UCS4LE;
-#if HAVE_WCHAR_H
-        else if (!yaz_matchstr(tocode, "WCHAR_T"))
-            cd->write_handle = yaz_write_wchar_t;
-#endif
-    }
-#if HAVE_ICONV_H
-    cd->iconv_cd = 0;
-    if (!cd->read_handle || !cd->write_handle)
-    {
-        cd->iconv_cd = iconv_open (tocode, fromcode);
-        if (cd->iconv_cd == (iconv_t) (-1))
-        {
-            xfree (cd);
-            return 0;
-        }
-    }
-#else
-    if (!cd->read_handle || !cd->write_handle)
-    {
-        xfree (cd);
-        return 0;
-    }
-#endif
-    cd->init_flag = 1;
-    return cd;
-}
-
-size_t yaz_iconv (yaz_iconv_t cd, char **inbuf, size_t *inbytesleft,
-                  char **outbuf, size_t *outbytesleft)
-{
-    char *inbuf0;
-    size_t r = 0;
-#if HAVE_ICONV_H
-    if (cd->iconv_cd)
-    {
-        size_t r =
-            iconv(cd->iconv_cd, inbuf, inbytesleft, outbuf, outbytesleft);
-        if (r == (size_t)(-1))
-        {
-            switch (yaz_errno())
-            {
-            case E2BIG:
-                cd->my_errno = YAZ_ICONV_E2BIG;
-                break;
-            case EINVAL:
-                cd->my_errno = YAZ_ICONV_EINVAL;
-                break;
-            case EILSEQ:
-                cd->my_errno = YAZ_ICONV_EILSEQ;
-                break;
-            default:
-                cd->my_errno = YAZ_ICONV_UNKNOWN;
-            }
-        }
-        return r;
-    }
-#endif
-    if (inbuf == 0 || *inbuf == 0)
-    {
-        cd->init_flag = 1;
-        cd->my_errno = YAZ_ICONV_UNKNOWN;
-        return 0;
-    }
-    inbuf0 = *inbuf;
-
-    if (cd->init_flag)
-    {
-        if (cd->init_handle)
-        {
-            size_t no_read;
-            size_t r = (cd->init_handle)(cd, (unsigned char *) *inbuf,
-                                         *inbytesleft, &no_read);
-            if (r)
-            {
-                if (cd->my_errno == YAZ_ICONV_EINVAL)
-                    return r;
-                cd->init_flag = 0;
-                return r;
-            }
-            *inbytesleft -= no_read;
-            *inbuf += no_read;
-        }
-        cd->init_flag = 0;
-    }
-    while (1)
-    {
-        unsigned long x;
-        size_t no_read;
-
-        if (*inbytesleft == 0)
-        {
-            r = *inbuf - inbuf0;
-            break;
-        }
-        
-        x = (cd->read_handle)(cd, (unsigned char *) *inbuf, *inbytesleft,
-                              &no_read);
-        if (no_read == 0)
-        {
-            r = (size_t)(-1);
-            break;
-        }
-        r = (cd->write_handle)(cd, x, outbuf, outbytesleft);
-        if (r)
-            break;
-        *inbytesleft -= no_read;
-        (*inbuf) += no_read;
-    }
-    return r;
-}
-
-int yaz_iconv_error (yaz_iconv_t cd)
-{
-    return cd->my_errno;
-}
-
-int yaz_iconv_close (yaz_iconv_t cd)
-{
-#if HAVE_ICONV_H
-    if (cd->iconv_cd)
-        iconv_close (cd->iconv_cd);
-#endif
-    xfree (cd);
-    return 0;
-}
-
-    
diff --git a/util/srwtst.c b/util/srwtst.c
new file mode 100644 (file)
index 0000000..b10fb5b
--- /dev/null
@@ -0,0 +1,107 @@
+/*
+ * Copyright (c) 2002-2003, Index Data.
+ * See the file LICENSE for details.
+ *
+ * $Id: srwtst.c,v 1.1 2003-10-27 12:21:40 adam Exp $
+ */
+
+#include <yaz/srw.h>
+
+#if HAVE_XML2
+Z_SOAP_Handler h[2] = {
+    {"http://www.loc.gov/zing/srw/v1.0/", 0, (Z_SOAP_fun) yaz_srw_codec},
+    {0, 0, 0}
+};
+
+int main(int argc, char **argv)
+{
+    char buf[163840];
+    char *content_buf = buf;
+    int content_len;
+    int ret;
+    size_t no;
+    Z_SOAP *soap_package = 0;
+    ODR decode, encode;
+    int debug = 0;
+
+    nmem_init();
+    if (argc == 2 && !strcmp(argv[1], "debug"))
+        debug = 1;
+    no = fread(buf, 1, sizeof(buf), stdin);
+    if (no < 1 || no == sizeof(buf))
+    {
+        fprintf(stderr, "Bad file or too big\n");
+        exit (1);
+    }
+    decode = odr_createmem(ODR_DECODE);
+    encode = odr_createmem(ODR_ENCODE);
+    content_len = no;
+    ret = z_soap_codec(decode, &soap_package, 
+                       &content_buf, &content_len, h);
+    if (!soap_package)
+    {
+        fprintf(stderr, "Decoding seriously failed\n");
+        exit(1);
+    }
+    if (debug)
+    {
+        fprintf(stderr, "got NS = %s\n", soap_package->ns);
+        if (soap_package->which == Z_SOAP_generic &&
+            soap_package->u.generic->no == 0)
+        {
+            Z_SRW_PDU *sr = soap_package->u.generic->p;
+            if (sr->which == Z_SRW_searchRetrieve_request)
+            { 
+                Z_SRW_searchRetrieveRequest *req = sr->u.request;
+                switch(req->query_type)
+                {
+                case Z_SRW_query_type_cql:
+                    fprintf(stderr, "CQL: %s\n", req->query.cql);
+                    break;
+                case Z_SRW_query_type_xcql:
+                    fprintf(stderr, "XCQL\n");
+                    break;
+                case Z_SRW_query_type_pqf:
+                    fprintf(stderr, "PQF: %s\n", req->query.pqf);
+                    break;
+                }
+            }
+            else if (sr->which == Z_SRW_searchRetrieve_response)
+            {
+                Z_SRW_searchRetrieveResponse *res = sr->u.response;
+                if (res->records && res->num_records)
+                {
+                    int i;
+                    for (i = 0; i<res->num_records; i++)
+                    {
+                        fprintf (stderr, "%d\n", i);
+                        if (res->records[i].recordData_buf)
+                            fwrite(res->records[i].recordData_buf, 1,
+                                   res->records[i].recordData_len, stderr);
+                    }
+                }
+            }
+
+        }
+    }
+    ret = z_soap_codec(encode, &soap_package,
+                       &content_buf, &content_len, h);
+    if (content_buf && content_len)
+        fwrite (content_buf, content_len, 1, stdout);
+    else
+    {
+        fprintf(stderr, "No output!\n");
+        exit(1);
+    }
+    odr_destroy(decode);
+    odr_destroy(encode);
+    nmem_exit();
+    exit(0);
+}
+#else
+int main(int argc, char **argv)
+{
+    fprintf(stderr, "SOAP disabled\n");
+    exit(1);
+}
+#endif
diff --git a/util/tpath.c b/util/tpath.c
deleted file mode 100644 (file)
index f04df3e..0000000
+++ /dev/null
@@ -1,91 +0,0 @@
-/*
- * Copyright (c) 1995-2003, Index Data.
- * See the file LICENSE for details.
- * Sebastian Hammer, Adam Dickmeiss
- *
- * $Id: tpath.c,v 1.9 2003-01-06 08:20:28 adam Exp $
- */
-#if HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-
-#include <stdio.h>
-#include <string.h>
-#include <ctype.h>
-#include <yaz/tpath.h>
-#include <yaz/log.h>
-
-FILE *yaz_path_fopen(const char *path, const char *name, const char *mode)
-{
-    return yaz_fopen (path, name, mode, 0);
-}
-
-int yaz_fclose (FILE *f)
-{
-    return fclose (f);
-}
-
-FILE *yaz_fopen(const char *path, const char *name, const char *mode,
-                const char *base)
-{
-    char spath[1024];
-
-    for(;;)
-    {
-       FILE *f;
-
-        const char *path_sep = 0;
-        size_t len = 0;
-        size_t slen = 0;
-        
-        *spath = '\0';
-        if (path)
-        {
-            /* somewhat dirty since we have to consider Windows
-             * drive letters..
-             */
-            if (strchr ("/\\.", *path))
-            {
-                path_sep = strchr (path+1, ':');
-            }
-            else if (path[0] && path[1])
-                path_sep = strchr (path+2, ':');
-            if (path_sep)
-                len = path_sep - path;
-            else
-                len = strlen(path);
-            if (!strchr ("/\\", *path) && base)
-            {
-                strcpy (spath, base);
-                slen = strlen(spath);
-                spath[slen++] = '/';
-            }
-            memcpy (spath+slen, path, len);
-            slen += len;
-            if (!strchr("/\\", spath[slen-1]))
-                spath[slen++] = '/';
-        }
-        strcpy (spath+slen, name);
-       if ((f = fopen(spath, mode)))
-           return f;
-        
-        if (!path_sep)
-            break;
-        path = path_sep+1;
-    }
-    return 0;
-}
-
-int yaz_is_abspath (const char *p)
-{
-    if (*p == '/')
-        return 1;
-#ifdef WIN32
-    if (*p == '\\')
-        return 1;
-    if (*p && p[1] == ':' && isalpha(*p))
-        return 1;
-#endif
-    return 0;
-}
diff --git a/util/tsticonv.c b/util/tsticonv.c
deleted file mode 100644 (file)
index b98d640..0000000
+++ /dev/null
@@ -1,143 +0,0 @@
-/*
- * Copyright (c) 2002-2003, Index Data
- * See the file LICENSE for details.
- *
- * $Id: tsticonv.c,v 1.5 2003-06-22 11:48:33 adam Exp $
- */
-
-#if HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#include <errno.h>
-#include <string.h>
-#include <ctype.h>
-
-#include <yaz/yaz-util.h>
-
-/* some test strings in ISO-8859-1 format */
-const char *buf[] = {
-    "ax" ,
-    "\330",
-    "eneb\346r",
-    "\xfc",
-    "\xfb",
-    "\xfbr",
-    0 };
-
-/* some test strings in MARC-8 format */
-const char *marc8_strings[] = {
-    "ax",   
-    "\xa2",          /* latin capital letter o with stroke */
-    "eneb\xb5r",     /* latin small letter ae */
-    "\xe8\x75",      /* latin small letter u with umlaut */
-    "\xe3\x75",      /* latin small letter u with circumflex */
-    "\xe3\x75r",     /* latin small letter u with circumflex */
-    0
-};
-
-static void marc8_tst()
-{
-    int i;
-    yaz_iconv_t cd;
-
-    cd = yaz_iconv_open("ISO-8859-1", "MARC8");
-    for (i = 0; buf[i]; i++)
-    {
-        size_t r;
-        char *inbuf= (char*) marc8_strings[i];
-        size_t inbytesleft = strlen(inbuf);
-        char outbuf0[24];
-        char *outbuf = outbuf0;
-        size_t outbytesleft = sizeof(outbuf0);
-
-        r = yaz_iconv(cd, &inbuf, &inbytesleft, &outbuf, &outbytesleft);
-        if (r == (size_t) (-1))
-        {
-            int e = yaz_iconv_error(cd);
-
-            printf ("tsticonv 6 i=%d e=%d\n", i, e);
-           exit(6);
-        }
-        if ((outbuf - outbuf0) != strlen(buf[i]) 
-            || memcmp(outbuf0, buf[i], strlen(buf[i])))
-        {
-            printf ("tsticonv 7 i=%d\n", i);
-            printf ("buf=%s   out=%s\n", buf[i], outbuf0);
-           exit(7);
-        }
-    }
-    yaz_iconv_close(cd);
-}
-
-static void dconvert(int mandatory, const char *tmpcode)
-{
-    int i;
-    yaz_iconv_t cd;
-    for (i = 0; buf[i]; i++)
-    {
-        size_t r;
-       char *inbuf = (char*) buf[i];
-       size_t inbytesleft = strlen(inbuf);
-       char outbuf0[24];
-       char outbuf1[10];
-       char *outbuf = outbuf0;
-       size_t outbytesleft = sizeof(outbuf0);
-
-        cd = yaz_iconv_open(tmpcode, "ISO-8859-1");
-       if (!cd)
-        {
-            if (!mandatory)
-                return;
-            printf ("tsticonv 1\n");
-           exit(1);
-        }
-       r = yaz_iconv(cd, &inbuf, &inbytesleft, &outbuf, &outbytesleft);
-       if (r == (size_t)(-1))
-        {
-            int e = yaz_iconv_error(cd);
-
-            printf ("tsticonv 2 e=%d\n", e);
-           exit(2);
-        }
-       yaz_iconv_close(cd);
-        
-       cd = yaz_iconv_open("ISO-8859-1", tmpcode);
-       if (!cd)
-        {
-            if (!mandatory)
-                return;
-            printf ("tsticonv 3\n");
-           exit(3);
-        }
-       inbuf = outbuf0;
-       inbytesleft = sizeof(outbuf0) - outbytesleft;
-
-       outbuf = outbuf1;
-       outbytesleft = sizeof(outbuf1);
-       r = yaz_iconv(cd, &inbuf, &inbytesleft, &outbuf, &outbytesleft);
-       if (r == (size_t)(-1)) {
-            int e = yaz_iconv_error(cd);
-
-            printf ("tsticonv 4 e=%d\n", e);
-           exit(4);
-       }
-       if (strlen(buf[i]) == (sizeof(outbuf1) - outbytesleft) &&
-            memcmp(outbuf1, buf[i], strlen(buf[i])))
-        {
-            printf ("tsticonv 5\n");
-            exit(5);
-       }
-       yaz_iconv_close(cd);
-    }
-}
-       
-int main (int argc, char **argv)
-{
-    dconvert(1, "UTF-8");
-    dconvert(1, "ISO-8859-1");
-    dconvert(1, "UCS4");
-    dconvert(0, "CP865");
-    marc8_tst();
-    exit (0);
-}
diff --git a/util/tstmatchstr.c b/util/tstmatchstr.c
deleted file mode 100644 (file)
index 4539ceb..0000000
+++ /dev/null
@@ -1,53 +0,0 @@
-/*
- * Copyright (c) 2002-2003, Index Data
- * See the file LICENSE for details.
- *
- * $Id: tstmatchstr.c,v 1.2 2003-06-22 11:47:18 adam Exp $
- */
-
-#include <stdio.h>
-
-#include <yaz/yaz-iconv.h>
-
-struct {
-    char *s1;
-    char *s2;
-    int res;
-} comp_strings[] = {
-    { "x", "x", 0 },
-    { "x", "X", 0 },
-    { "a", "b", 1 },
-    { "b", "a", 1 },
-    { "aa","a", 1 },
-    { "a-", "a", 1 },
-    { "A-b", "ab", 0},
-    { "A--b", "ab", 1},
-    { "A--b", "a-b", 1},
-    { "A--b", "a--b", 0},
-    { "a123",  "a?", 0},
-    {"a123",   "a1.3", 0},
-    {"a123",   "..?", 0},
-    {"a123",   "a1.", 1},
-    {"a123",   "a...", 0},
-    {0,  0, 0} };
-
-int main (int argc, char **argv)
-{
-    int i;
-    for (i = 0; comp_strings[i].s1; i++)
-    {
-        int got = yaz_matchstr(comp_strings[i].s1,comp_strings[i].s2);
-        if (got > 0)
-            got = 1;
-        else if (got < 0)
-            got = -1;
-        if (got != comp_strings[i].res)
-        {
-            printf ("tststr %d got=%d res=%d\n", i,
-                    got, comp_strings[i].res);
-            exit(1);
-        }
-    }
-    exit(0);
-}
-
diff --git a/util/tstnmem.c b/util/tstnmem.c
deleted file mode 100644 (file)
index c8b0569..0000000
+++ /dev/null
@@ -1,44 +0,0 @@
-/*
- * Copyright (c) 2002-2003, Index Data
- * See the file LICENSE for details.
- *
- * $Id: tstnmem.c,v 1.1 2003-04-23 20:34:08 adam Exp $
- */
-
-#if HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#include <errno.h>
-#include <string.h>
-#include <ctype.h>
-
-#include <yaz/nmem.h>
-
-int main (int argc, char **argv)
-{
-    void *cp;
-    NMEM n;
-    int j;
-
-    nmem_init();
-    n = nmem_create();
-    if (!n)
-        exit (1);
-    for (j = 1; j<500; j++)
-    {
-        cp = nmem_malloc(n, j);
-        if (!cp)
-            exit(2);
-    }
-    
-    for (j = 2000; j<20000; j+= 2000)
-    {
-        cp = nmem_malloc(n, j);
-        if (!cp)
-            exit(3);
-    }
-    nmem_destroy(n);
-    nmem_exit();
-    exit(0);
-}
diff --git a/util/tstwrbuf.c b/util/tstwrbuf.c
deleted file mode 100644 (file)
index f141c6f..0000000
+++ /dev/null
@@ -1,58 +0,0 @@
-/*
- * Copyright (c) 2002-2003, Index Data
- * See the file LICENSE for details.
- *
- * $Id: tstwrbuf.c,v 1.2 2003-06-23 10:22:21 adam Exp $
- */
-
-#include <stdio.h>
-
-#include <yaz/wrbuf.h>
-
-int main (int argc, char **argv)
-{
-    int step;
-    WRBUF wr = wrbuf_alloc();
-
-    wrbuf_free(wr, 1);
-
-    wr = wrbuf_alloc();
-
-    for (step = 1; step < 65; step++)
-    {
-        int i, j, k;
-        int len;
-        char buf[64];
-        char *cp;
-        for (j = 1; j<step; j++)
-        {
-            for (i = 0; i<j; i++)
-                buf[i] = i+1;
-            buf[i] = '\0';
-            wrbuf_puts(wr, buf);
-        }
-        
-        cp = wrbuf_buf(wr);
-        len = wrbuf_len(wr);
-        if (len != step * (step-1) / 2)
-        {
-            printf ("tstwrbuf 1 %d len=%d\n", step, len);
-            exit(1);
-        }
-        k = 0;
-        for (j = 1; j<step; j++)
-            for (i = 0; i<j; i++)
-            {
-                if (cp[k] != i+1)
-                {
-                    printf ("tstwrbuf 2 %d k=%d\n", step, k);
-                    exit(1);
-                }
-                k++;
-            }
-        wrbuf_rewind(wr);
-    }
-    wrbuf_free(wr, 1);
-    exit(0);
-}
-
diff --git a/util/version.c b/util/version.c
deleted file mode 100644 (file)
index 1641d8d..0000000
+++ /dev/null
@@ -1,22 +0,0 @@
-/*
- * Copyright (c) 1995-2003, Index Data.
- * See the file LICENSE for details.
- * Sebastian Hammer, Adam Dickmeiss
- *
- * $Id: version.c,v 1.2 2003-04-14 16:57:58 adam Exp $
- */
-#if HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#include <string.h>
-#include <yaz/yaz-version.h>
-
-unsigned long yaz_version(char *version_str, char *sys_str)
-{
-    if (version_str)
-        strcpy(version_str, YAZ_VERSION);
-    if (sys_str)
-        strcpy(sys_str, "");
-    return YAZ_VERSIONL;
-}
diff --git a/util/wrbuf.c b/util/wrbuf.c
deleted file mode 100644 (file)
index a649e64..0000000
+++ /dev/null
@@ -1,133 +0,0 @@
-/*
- * Copyright (c) 1995-2003, Index Data.
- * See the file LICENSE for details.
- *
- * $Id: wrbuf.c,v 1.13 2003-07-14 12:58:18 adam Exp $
- */
-
-/*
- * Growing buffer for writing various stuff.
- */
-
-#if HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <stdarg.h>
-
-#include <yaz/wrbuf.h>
-
-WRBUF wrbuf_alloc(void)
-{
-    WRBUF n;
-
-    if (!(n = (WRBUF)xmalloc(sizeof(*n))))
-       abort();
-    n->buf = 0;
-    n->size = 0;
-    n->pos = 0;
-    return n;
-}
-
-void wrbuf_free(WRBUF b, int free_buf)
-{
-    if (free_buf && b->buf)
-       xfree(b->buf);
-    xfree(b);
-}
-
-void wrbuf_rewind(WRBUF b)
-{
-    b->pos = 0;
-}
-
-int wrbuf_grow(WRBUF b, int minsize)
-{
-    int togrow;
-
-    if (!b->size)
-       togrow = 1024;
-    else
-       togrow = b->size;
-    if (togrow < minsize)
-       togrow = minsize;
-    if (b->size && !(b->buf =(char *)xrealloc(b->buf, b->size += togrow)))
-       abort();
-    else if (!b->size && !(b->buf = (char *)xmalloc(b->size = togrow)))
-       abort();
-    return 0;
-}
-
-int wrbuf_write(WRBUF b, const char *buf, int size)
-{
-    if (size <= 0)
-        return 0;
-    if (b->pos + size >= b->size)
-       wrbuf_grow(b, size);
-    memcpy(b->buf + b->pos, buf, size);
-    b->pos += size;
-    return 0;
-}
-
-int wrbuf_puts(WRBUF b, const char *buf)
-{
-    wrbuf_write(b, buf, strlen(buf)+1);  /* '\0'-terminate as well */
-    (b->pos)--;                          /* don't include '\0' in count */
-    return 0;
-}
-
-int wrbuf_xmlputs(WRBUF b, const char *cp)
-{
-    while (*cp)
-    {
-       switch(*cp)
-       {
-       case '<':
-           wrbuf_puts(b, "&lt;");
-           break;
-       case '>':
-           wrbuf_puts(b, "&gt;");
-           break;
-       case '&':
-           wrbuf_puts(b, "&amp;");
-           break;
-       case '"':
-           wrbuf_puts(b, "&quot;");
-           break;
-       case '\'':
-           wrbuf_puts(b, "&apos;");
-           break;
-       default:
-           wrbuf_putc(b, *cp);
-       }
-       cp++;
-    }
-    wrbuf_putc(b, 0);
-    (b->pos)--;
-    return 0;
-}
-
-void wrbuf_printf(WRBUF b, const char *fmt, ...)
-{
-    va_list ap;
-    char buf[4096];
-
-    va_start(ap, fmt);
-#ifdef WIN32
-    _vsnprintf(buf, sizeof(buf)-1, fmt, ap);
-#else
-/* !WIN32 */
-#if HAVE_VSNPRINTF
-    vsnprintf(buf, sizeof(buf)-1, fmt, ap);
-#else
-    vsprintf(buf, fmt, ap);
-#endif
-#endif
-    wrbuf_puts (b, buf);
-
-    va_end(ap);
-}
-
diff --git a/util/xmalloc.c b/util/xmalloc.c
deleted file mode 100644 (file)
index 5f9b519..0000000
+++ /dev/null
@@ -1,277 +0,0 @@
-/*
- * Copyright (C) 1994-2003, Index Data
- * All rights reserved.
- * Sebastian Hammer, Adam Dickmeiss
- *
- * $Id: xmalloc.c,v 1.19 2003-05-16 13:14:26 adam Exp $
- */
-
-#if HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-
-#include <yaz/log.h>
-#include <yaz/xmalloc.h>
-
-#ifndef TRACE_XMALLOC
-#define TRACE_XMALLOC 1
-#endif
-
-#if TRACE_XMALLOC > 1
-
-static const unsigned char head[] = {88, 77, 66, 55, 44, 33, 22, 11};
-static const unsigned char tail[] = {11, 22, 33, 44, 55, 66, 77, 88};
-static const unsigned char freed[] = {11, 22, 33, 44, 55, 66, 77, 88};
-
-struct dmalloc_info {
-    int len;
-    char file[16];
-    int line;
-    struct dmalloc_info *next;
-    struct dmalloc_info *prev;
-};
-
-struct dmalloc_info *dmalloc_list = 0;
-
-void *xmalloc_d(size_t nbytes, const char *file, int line)
-{
-    char *res;
-    struct dmalloc_info *dinfo;
-    
-    if (!(res = (char*) malloc(nbytes + sizeof(*dinfo)+16*sizeof(char))))
-       return 0;
-    dinfo = (struct dmalloc_info *) res;
-    strncpy (dinfo->file, file, sizeof(dinfo->file)-1);
-    dinfo->file[sizeof(dinfo->file)-1] = '\0';
-    dinfo->line = line;
-    dinfo->len = nbytes;
-    
-    dinfo->prev = 0;
-    dinfo->next = dmalloc_list;
-    if (dinfo->next)
-       dinfo->next->prev = dinfo;
-    dmalloc_list = dinfo;
-    
-    memcpy(res + sizeof(*dinfo), head, 8*sizeof(char));
-    res += sizeof(*dinfo) + 8*sizeof(char);
-    memcpy(res + nbytes, tail, 8*sizeof(char));
-    return res;
-}
-
-void xfree_d(void *ptr, const char *file, int line)
-{
-    struct dmalloc_info *dinfo;
-
-    if (!ptr)
-       return;
-    dinfo = (struct dmalloc_info *)
-       ((char*)ptr - 8*sizeof(char) - sizeof(*dinfo));
-    if (memcmp(head, (char*) ptr - 8*sizeof(char), 8*sizeof(char)))
-    {
-       yaz_log(LOG_FATAL, "xfree_d bad head, %s:%d, %p", file, line, ptr);
-        abort();
-    }
-    if (memcmp((char*) ptr + dinfo->len, tail, 8*sizeof(char)))
-    {
-       yaz_log(LOG_FATAL, "xfree_d bad tail, %s:%d, %p", file, line, ptr);
-        abort();
-    }
-    if (dinfo->prev)
-       dinfo->prev->next = dinfo->next;
-    else
-       dmalloc_list = dinfo->next;
-    if (dinfo->next)
-       dinfo->next->prev = dinfo->prev;
-    memcpy ((char*) ptr - 8*sizeof(char), freed, 8*sizeof(char));
-    free(dinfo);
-    return;
-}
-
-void *xrealloc_d(void *p, size_t nbytes, const char *file, int line)
-{
-    struct dmalloc_info *dinfo;
-    char *ptr = (char*) p;
-    char *res;
-    
-    if (!ptr)
-    {
-       if (!nbytes)
-           return 0;
-       res = (char *) malloc(nbytes + sizeof(*dinfo) + 16*sizeof(char));
-    }
-    else
-    {
-       if (memcmp(head, ptr - 8*sizeof(char), 8*sizeof(char)))
-       {
-           yaz_log(LOG_FATAL, "xrealloc_d bad head, %s:%d, %p",
-                   file, line, ptr);
-           abort();
-       }
-       dinfo = (struct dmalloc_info *) (ptr-8*sizeof(char) - sizeof(*dinfo));
-       if (memcmp(ptr + dinfo->len, tail, 8*sizeof(char)))
-       {
-           yaz_log(LOG_FATAL, "xrealloc_d bad tail, %s:%d, %p",
-                   file, line, ptr);
-           abort();
-       }
-       if (dinfo->prev)
-           dinfo->prev->next = dinfo->next;
-       else
-           dmalloc_list = dinfo->next;
-       if (dinfo->next)
-           dinfo->next->prev = dinfo->prev;
-       
-       if (!nbytes)
-       {
-           free (dinfo);
-           return 0;
-       }
-       res = (char *)
-           realloc(dinfo, nbytes + sizeof(*dinfo) + 16*sizeof(char));
-    }
-    if (!res)
-       return 0;
-    dinfo = (struct dmalloc_info *) res;
-    strncpy (dinfo->file, file, sizeof(dinfo->file)-1);
-    dinfo->file[sizeof(dinfo->file)-1] = '\0';
-    dinfo->line = line;
-    dinfo->len = nbytes;
-
-    dinfo->prev = 0;
-    dinfo->next = dmalloc_list;
-    if (dmalloc_list)
-       dmalloc_list->prev = dinfo;
-    dmalloc_list = dinfo;
-    
-    memcpy(res + sizeof(*dinfo), head, 8*sizeof(char));
-    res += sizeof(*dinfo) + 8*sizeof(char);
-    memcpy(res + nbytes, tail, 8*sizeof(char));
-    return res;
-}
-
-void *xcalloc_d(size_t nmemb, size_t size, const char *file, int line)
-{
-    char *res;
-    struct dmalloc_info *dinfo;
-    size_t nbytes = nmemb * size;
-    
-    if (!(res = (char*) calloc(1, nbytes+sizeof(*dinfo)+16*sizeof(char))))
-       return 0;
-    dinfo = (struct dmalloc_info *) res;
-    strncpy (dinfo->file, file, sizeof(dinfo->file)-1);
-    dinfo->file[sizeof(dinfo->file)-1] = '\0';
-    dinfo->line = line;
-    dinfo->len = nbytes;
-    
-    dinfo->prev = 0;
-    dinfo->next = dmalloc_list;
-    if (dinfo->next)
-       dinfo->next->prev = dinfo;
-    dmalloc_list = dinfo;
-    
-    memcpy(res + sizeof(*dinfo), head, 8*sizeof(char));
-    res += sizeof(*dinfo) + 8*sizeof(char);
-    memcpy(res + nbytes, tail, 8*sizeof(char));
-    return res;
-}
-
-void xmalloc_trav_d(const char *file, int line)
-{
-    size_t size = 0;
-    struct dmalloc_info *dinfo = dmalloc_list;
-    
-    yaz_log (LOG_MALLOC, "malloc_trav %s:%d", file, line);
-    while (dinfo)
-    {
-       yaz_log (LOG_MALLOC, " %20s:%d p=%p size=%d", dinfo->file, dinfo->line,
-             ((char*) dinfo)+sizeof(*dinfo)+8*sizeof(char), dinfo->len);
-       size += dinfo->len;
-       dinfo = dinfo->next;
-    }
-    yaz_log (LOG_MALLOC, "total bytes %ld", (long) size);
-}
-
-#else
-/* TRACE_XMALLOC <= 1 */
-#define xrealloc_d(o, x, f, l) realloc(o, x)
-#define xmalloc_d(x, f, l) malloc(x)
-#define xcalloc_d(x,y, f, l) calloc(x,y)
-#define xfree_d(x, f, l) free(x)
-#define xmalloc_trav_d(f, l) 
-#endif
-
-void xmalloc_trav_f(const char *s, const char *file, int line)
-{
-    xmalloc_trav_d(file, line);
-}
-
-void *xrealloc_f (void *o, size_t size, const char *file, int line)
-{
-    void *p = xrealloc_d (o, size, file, line);
-
-#if TRACE_XMALLOC
-    yaz_log (LOG_MALLOC,
-            "%s:%d: xrealloc(s=%d) %p -> %p", file, line, size, o, p);
-#endif
-    if (!p)
-    {
-       yaz_log (LOG_FATAL|LOG_ERRNO, "Out of memory, realloc (%d bytes)",
-                size);
-       exit(1);
-    }
-    return p;
-}
-
-void *xmalloc_f (size_t size, const char *file, int line)
-{
-    void *p = xmalloc_d (size, file, line);
-    
-#if TRACE_XMALLOC
-    yaz_log (LOG_MALLOC, "%s:%d: xmalloc(s=%d) %p", file, line, size, p);
-#endif
-    if (!p)
-    {
-        yaz_log (LOG_FATAL, "Out of memory - malloc (%d bytes)", size);
-        exit (1);
-    }
-    return p;
-}
-
-void *xcalloc_f (size_t nmemb, size_t size, const char *file, int line)
-{
-    void *p = xcalloc_d (nmemb, size, file, line);
-#if TRACE_XMALLOC
-    yaz_log (LOG_MALLOC, "%s:%d: xcalloc(s=%d) %p", file, line, size, p);
-#endif
-    if (!p)
-    {
-        yaz_log (LOG_FATAL, "Out of memory - calloc (%d, %d)", nmemb, size);
-        exit (1);
-    }
-    return p;
-}
-
-char *xstrdup_f (const char *s, const char *file, int line)
-{
-    char *p = (char *)xmalloc_d (strlen(s)+1, file, line);
-#if TRACE_XMALLOC
-    yaz_log (LOG_MALLOC, "%s:%d: xstrdup(s=%d) %p", file, line, strlen(s)+1, p);
-#endif
-    strcpy (p, s);
-    return p;
-}
-
-void xfree_f(void *p, const char *file, int line)
-{
-    if (!p)
-        return ;
-#if TRACE_XMALLOC
-    if (p)
-        yaz_log (LOG_MALLOC, "%s:%d: xfree %p", file, line, p);
-#endif
-    xfree_d(p, file, line);
-}
index 0f7c7e4..a3a5776 100644 (file)
@@ -1,5 +1,5 @@
 #!/bin/sh
 #!/bin/sh
-# $Id: yaz-config.in,v 1.17 2003-02-18 10:37:08 adam Exp $
+# $Id: yaz-config.in,v 1.18 2003-10-27 12:21:21 adam Exp $
 yazprefix=@prefix@
 yaz_echo_cflags=no
 yaz_echo_libs=no
 yazprefix=@prefix@
 yaz_echo_cflags=no
 yaz_echo_libs=no
@@ -100,16 +100,16 @@ fi
 
 if test "$yaz_echo_source" = "yes"; then
     YAZBIN=${yaz_build_root}/bin
 
 if test "$yaz_echo_source" = "yes"; then
     YAZBIN=${yaz_build_root}/bin
-    YAZLIB="-L${yaz_build_root}/lib/.libs $lyaz $yazextralibs"
-    YAZLALIB="${yaz_build_root}/lib/libyaz.la $yazextralibs"
+    YAZLIB="-L${yaz_build_root}/src/.libs $lyaz $yazextralibs"
+    YAZLALIB="${yaz_build_root}/src/libyaz.la $yazextralibs"
     if test "$lib_ssl" = "yes" -a -n "$SSL_LIBS@"; then
     if test "$lib_ssl" = "yes" -a -n "$SSL_LIBS@"; then
-        YAZLALIB="${yaz_build_root}/lib/libyazssl.la"
+        YAZLALIB="${yaz_build_root}/src/libyazssl.la"
     fi
     if test "$lib_thread" = "yes" -a -n "@CFLAGSTHREADS@"; then
     fi
     if test "$lib_thread" = "yes" -a -n "@CFLAGSTHREADS@"; then
-        YAZLALIB="${yaz_build_root}/lib/libyazthread.la $YAZLALIB"
+        YAZLALIB="${yaz_build_root}/src/libyazthread.la $YAZLALIB"
     fi
     if test "$lib_malloc" = "yes"; then
     fi
     if test "$lib_malloc" = "yes"; then
-        YAZLALIB="${yaz_build_root}/lib/libyazmalloc.la $YAZLALIB"
+        YAZLALIB="${yaz_build_root}/src/libyazmalloc.la $YAZLALIB"
     fi
     YAZINC="-I${yaz_src_root}/include"
     YAZCOMP=${yaz_src_root}/util/yaz-comp
     fi
     YAZINC="-I${yaz_src_root}/include"
     YAZCOMP=${yaz_src_root}/util/yaz-comp
diff --git a/z39.50/.cvsignore b/z39.50/.cvsignore
deleted file mode 100644 (file)
index 70c3bae..0000000
+++ /dev/null
@@ -1,8 +0,0 @@
-.deps
-.libs
-Makefile
-Makefile.in
-libz39.50.la
-z-*.c
-zes-*.c
-*.lo
diff --git a/z39.50/Makefile.am b/z39.50/Makefile.am
deleted file mode 100644 (file)
index c98fc6b..0000000
+++ /dev/null
@@ -1,84 +0,0 @@
-## $Id: Makefile.am,v 1.14 2003-07-18 19:53:28 mike Exp $
-
-AM_CPPFLAGS=-I$(top_srcdir)/include
-
-noinst_LTLIBRARIES = libz39.50.la
-
-tabdatadir = $(pkgdatadir)/z39.50
-tabdata_DATA=datetime.asn esupdate.asn univres.asn z3950v3.asn z.tcl \
- esadmin.asn charneg-3.asn mterm2.asn oclcui.asn
-EXTRA_DIST=$(tabdata_DATA)
-
-YAZCOMP = $(top_srcdir)/util/yaz-asncomp
-YAZCOMPLINE = ../util/yaz-asncomp -d z.tcl -i yaz -I../include $(YCFLAGS)
-
-libz39_50_la_SOURCES = z-accdes1.c z-accform1.c z-acckrb1.c z-core.c \
- z-diag1.c z-espec1.c z-estask.c z-exp.c z-grs.c z-mterm2.c z-opac.c \
- z-uifr1.c z-rrf1.c z-rrf2.c z-sum.c z-sutrs.c z-oclcui.c\
- zes-expi.c zes-exps.c zes-order.c zes-pquery.c zes-psched.c \
- zes-pset.c zes-update0.c z-date.c z-univ.c zes-update.c zes-admin.c \
- z-charneg.c \
- prt-ext.c
-
-# Rules for Z39.50 V3
-$(srcdir)/z-accdes1.c \
-$(srcdir)/z-accform1.c \
-$(srcdir)/z-acckrb1.c \
-$(srcdir)/z-core.c \
-$(srcdir)/z-diag1.c \
-$(srcdir)/z-espec1.c \
-$(srcdir)/z-estask.c \
-$(srcdir)/z-exp.c \
-$(srcdir)/z-grs.c \
-$(srcdir)/z-opac.c \
-$(srcdir)/z-uifr1.c \
-$(srcdir)/z-rrf1.c \
-$(srcdir)/z-rrf2.c \
-$(srcdir)/z-sum.c \
-$(srcdir)/z-sutrs.c \
-$(srcdir)/zes-expi.c \
-$(srcdir)/zes-exps.c \
-$(srcdir)/zes-order.c \
-$(srcdir)/zes-pquery.c \
-$(srcdir)/zes-psched.c \
-$(srcdir)/zes-pset.c \
-$(srcdir)/zes-update0.c \
-$(top_srcdir)/include/z-accdes1.h \
-$(top_srcdir)/include/z-core.h: \
-$(srcdir)/z.tcl $(srcdir)/z3950v3.asn $(YAZCOMP)
-       cd $(srcdir); $(YAZCOMPLINE) z3950v3.asn
-
-# Date extension
-$(srcdir)/z-date.c \
-$(top_srcdir)/include/yaz/z-date.h: $(srcdir)/z.tcl $(srcdir)/datetime.asn $(YAZCOMP)
-       cd $(srcdir); $(YAZCOMPLINE) datetime.asn
-
-# UNIverse extension
-$(srcdir)/z-univ.c \
-$(top_srcdir)/include/yaz/z-univ.h: \
-$(srcdir)/z.tcl $(srcdir)/univres.asn $(YAZCOMP)
-       cd $(srcdir); $(YAZCOMPLINE) univres.asn
-
-# New Update extended service
-$(srcdir)/zes-update.c \
-$(top_srcdir)/include/yaz/zes-update.h: \
-$(srcdir)/z.tcl $(srcdir)/esupdate.asn $(YAZCOMP)
-       cd $(srcdir); $(YAZCOMPLINE) esupdate.asn
-
-# Admin extended service
-$(srcdir)/zes-admin.c \
-$(top_srcdir)/include/yaz/zes-admin.h: \
-$(srcdir)/z.tcl $(srcdir)/esadmin.asn $(YAZCOMP)
-       cd $(srcdir); $(YAZCOMPLINE) esadmin.asn
-
-# Charset negotiation
-$(srcdir)/z-charneg.c: $(srcdir)/z.tcl $(srcdir)/charneg-3.asn
-       cd $(srcdir); $(YAZCOMPLINE) $(YCFLAGS) charneg-3.asn
-
-# UserInfoFormat-multipleSearchTerms-2
-$(srcdir)/z-mterm2.c: $(srcdir)/z.tcl $(srcdir)/mterm2.asn
-       cd $(srcdir); $(YAZCOMPLINE) mterm2.asn
-
-# UserInfoFormat-multipleSearchTerms-2
-$(srcdir)/z-oclcui.c: $(srcdir)/z.tcl $(srcdir)/oclcui.asn
-       cd $(srcdir); $(YAZCOMPLINE) oclcui.asn
diff --git a/z39.50/charneg-3.asn b/z39.50/charneg-3.asn
deleted file mode 100644 (file)
index d178e3a..0000000
+++ /dev/null
@@ -1,212 +0,0 @@
-NegotiationRecordDefinition-charSetandLanguageNegotiation-3
-{Z39-50-negotiationRecordDefinition CharSetandLanguageNegotiation-3 (3)}
-DEFINITIONS ::= BEGIN
-IMPORTS LanguageCode FROM RecordSyntax-explain;
-
-CharSetandLanguageNegotiation ::= CHOICE{
-   proposal [1]   IMPLICIT OriginProposal,
-   response [2]   IMPLICIT TargetResponse}
---
--- For character sets:
---  Origin proposes one, two, or all three of the following, in order of
---  preference:
---       (a) 2022 character sets.
---       (b) 10646 character set.
---       (c) Private character set.
---
---    The target responds with one of (a), (b), or (c), indicating the
---    character set(s) to be supported for all name and message strings.
---
---    If the origin includes (a),
---     the origin proposes:
---        (1)  A proposed environment: 7-bit, 8-bit, or no-preference.
---        (2)  A set of iso 2022 registration numbers.
---        (3)  One or more proposed initial sets of registration numbers,
---             for c0, c1, g0, g1, g2 and g3. These must come from (2).
---        (4)  The proposed encoding level.
---      And if the target selects (a), it responds with:
---        (1)  A selected environment: 7-bit or 8-bit.
---        (2)  A subset of the set of iso 2022 registration numbers proposed
---             by the origin.
---        (3)  The initial set of registrations, which must come from (2)
---             but need not be from the set of initial registrations proposed
---             by the origin.
---        (4)  The encoding level; less than or equal to that proposed.
---
---    If the origin includes (b),
---     The origin proposes:
---        (1)  (optionally) A list of collections (i.e. subsets of characters from the
---             complete 10646 definition).
---        (2)  An implementation level.
---        (3) Syntax/form: e.g. ucs-2, ucs-4, utf-8, utf-16.
---    And if the target selects (b), it responds by choosing a subset of the
---    collections proposed by the origin in (1) and an implementation level less
---    than or equal to that proposed by the origin in (2).
---
---    If the origin includes (c), the origin proposes one of the following:
---        (1)  A list of private character sets, by one or more object
---             identifiers.
---        (2)  A list of private character sets, by an EXTERNAL.
---        (3)  An indication to use a private, previously agreed upon
---             character set.
---    And if the target selects (c):
---    -  If the origin proposed (1), the target should respond with (1), and
---       the list of object identifiers should be a subset of the list that
---       the origin included.
---    -  If the origin proposed (2), the target should respond with (2), using
---       the same EXTERNAL definition (but not necessarily the same content)
---       used by the origin.
---    -  If the origin proposed (3), the target should respond with (3).
---
---    For Languages:
---     The origin optionally proposes one or more language codes. The target
---     response may include a single language code, which indicates the
---     language to be used for all message strings. The target may include or
---     omit this, whether or not the origin included a proposed set, and the
---     language code indicated need not be from among those proposed.
---
---
-
-OriginProposal ::= SEQUENCE {
-  proposedCharSets           [1] IMPLICIT SEQUENCE OF CHOICE{
-               -- Each should occur at most once, and in order of preference
-               -- (the "order of preference" is the reason why this is
-               -- "SEQUENCE OF CHOICE" rather than just "SEQUENCE")
-                                iso2022        [1] Iso2022,
-                                iso10646       [2] IMPLICIT Iso10646,
-                                private        [3] PrivateCharacterSet} OPTIONAL,
-                                   -- proposedCharSets must be omitted
-                                   -- if origin proposes version 2
-  proposedlanguages          [2] IMPLICIT SEQUENCE OF LanguageCode OPTIONAL,
-  recordsInSelectedCharSets  [3] IMPLICIT BOOLEAN OPTIONAL
-                       -- default 'false'. See rule 6 above.
-                       }
-
-TargetResponse ::= SEQUENCE{
-  selectedCharSets           [1] CHOICE{
-                                   iso2022        [1] Iso2022,
-                                   iso10646       [2] IMPLICIT Iso10646,
-                                   private        [3] PrivateCharacterSet,
-                                   none           [4] IMPLICIT NULL
-                                            -- If selected, no negotiation
-                                            -- is assumed to be in force
-                                            -- for character sets.
-                                                     } OPTIONAL,
-                                   -- Omitted if and only if proposedCharSets
-                                   -- was Omitted in the request.
-  selectedLanguage           [2] IMPLICIT LanguageCode OPTIONAL,
-  recordsInSelectedCharSets  [3] IMPLICIT BOOLEAN OPTIONAL
-                  -- Omitted if and only if 'recordsInSelectedCharSets' was omitted
-                  -- in the request.  See rule 6 above.
-                       }
-
-
-PrivateCharacterSet ::= CHOICE{
-   viaOid                 [1] IMPLICIT SEQUENCE OF OBJECT IDENTIFIER,
-   externallySpecified    [2] IMPLICIT EXTERNAL,
-   previouslyAgreedUpon   [3] IMPLICIT NULL}
-
--- IMPORTED
--- LanguageCode ::= GeneralString -- from ANSI Z39.53-1994
-
--- Definition of ISO2022
--- For ISO 2022, the following is negotiated:
---   1)   The environment: 7-bit or 8-bit;
---   2)   a set of registration numbers (from the ISO Register of coded
---        character sets) for graphical and  control character sets;
---   3)   g0, g1, g2, g3, c0, c1, the registration numbers of the graphical and
---        control character sets that are  initially designated to g0, g1, etc.
---       The origin submits one or more sequences of values for
---        g0, g1, g2, g3, c0, c1 (for each sequence: at least one of
---        g0 and g1 must be included; g2 and g3 are optional and
---         may be included only if g1 is included;
---        c0 should be included; and c1 is optional); the target
---        selects one of the proposed sequences.
---   4)   gleft: which of g0, g1, g2 or g3, initially has GL shift status in
---        an 8-bit environment or has shift status in a 7-bit environment; and
---   5)   gright: which of g1, g2 or g3 initially has GR shift status in an
---        8-bit environment.
-
-Iso2022 ::= CHOICE{
- originProposal   [1] IMPLICIT SEQUENCE{
-            proposedEnvironment    [0] Environment OPTIONAL,
-                                         -- omitted means no preference
-            proposedSets           [1] IMPLICIT SEQUENCE OF INTEGER,
-            proposedInitialSets    [2] IMPLICIT SEQUENCE OF
-                                             InitialSet,
-            proposedLeftAndRight   [3] IMPLICIT LeftAndRight},
- targetResponse   [2] IMPLICIT SEQUENCE{
-            selectedEnvironment    [0] Environment,
-            selectedSets           [1] IMPLICIT SEQUENCE OF INTEGER,
-            selectedinitialSet     [2] IMPLICIT InitialSet,
-            selectedLeftAndRight   [3] IMPLICIT LeftAndRight}}
-
-Environment ::= CHOICE{
-   sevenBit    [1] IMPLICIT NULL,
-   eightBit    [2] IMPLICIT NULL}
-
-InitialSet::= SEQUENCE{
-      g0    [0] IMPLICIT INTEGER OPTIONAL,
-      g1    [1] IMPLICIT INTEGER OPTIONAL,
-                           -- one of g0 and g1 must be included
-      g2    [2] IMPLICIT INTEGER OPTIONAL,
-      g3    [3] IMPLICIT INTEGER OPTIONAL,
-                           --g2 and/or g3 may be included
-                           -- only if g1 was included
-      c0    [4] IMPLICIT INTEGER,
-      c1    [5] IMPLICIT INTEGER OPTIONAL}
-
-LeftAndRight ::= SEQUENCE{
-            gLeft         [3] IMPLICIT INTEGER{
-                                   g0 (0),
-                                   g1 (1),
-                                   g2 (2),
-                                   g3 (3)},
-            gRight        [4] IMPLICIT INTEGER{
-                                   g1 (1),
-                                   g2 (2),
-                                   g3 (3)} OPTIONAL}
-
--- Definition of Iso10646
---
--- The 10646 object identifier looks like:
---        1.0.10646.1.implementationLevel.repertoireSubset.arc1.arc2. ....
---
--- (The second '1' is for "part 1" of 10646.)
---
--- ImplementationLevel is 1-3
---
--- repertoireSubset is 0 or 1, for 'all' or 'collections'.
--- The arcs are present only if repertoireSubset is 'collections',
--- in which case  arc1, arc2, etc., are the
--- identifiers of collections of character repertoires.
---
--- There is a second 10646 oid, for specifying syntax/form:
---        1.0.10646.1.0.form
---
--- (The second '0' represents "transfer syntax".)
---
---  where values of form include:
---  2: ucs-2
---  4: ucs-4
---  5: utf-16
---  8: utf-8
-
-Iso10646 ::= SEQUENCE{
-   collections    [1] IMPLICIT OBJECT IDENTIFIER OPTIONAL,
-                       --oid of form 1.0.10646.1.implementationLevel
-                       -- .repertoireSubset.arc1.arc2. ....
-                       -- Target to choose a subset of the collections
-                       -- proposed by the origin, and an implementation level
-                       -- less than or equal to that proposed.
-                       --
-                       -- when 'collections' is omitted,
-                       -- 'implementationLevel' defaults to 3.
-                       --
-   encodingLevel  [2] IMPLICIT OBJECT IDENTIFIER
-                       -- oid of form 1.0.10646.1.0.form
-                    -- where value of 'form' is 2, 4, 5, or 8
-                      -- for ucs-2, ucs-4, utf-16, utf-8
-                                   }
-END
-
diff --git a/z39.50/comp.sh b/z39.50/comp.sh
deleted file mode 100755 (executable)
index b8c36b6..0000000
+++ /dev/null
@@ -1,7 +0,0 @@
-#!/bin/sh
-# $Id: comp.sh,v 1.2 1999-12-08 13:21:02 adam Exp $
-# simple script to make all compiled code.
-../util/yc.tcl -d z.tcl -i yaz -I ../include z3950v3.asn
-../util/yc.tcl -d z.tcl -i yaz -I ../include datetime.asn
-../util/yc.tcl -d z.tcl -i yaz -I ../include univres.asn
-../util/yc.tcl -d z.tcl -i yaz -I ../include esupdate.asn
diff --git a/z39.50/datetime.asn b/z39.50/datetime.asn
deleted file mode 100644 (file)
index cab9eb0..0000000
+++ /dev/null
@@ -1,81 +0,0 @@
-UserInfoFormat-dateTime
-{Z39-50-userInfoFormat dateTime (6)} DEFINITIONS ::=
-BEGIN
-IMPORTS IntUnit FROM Z39-50-APDU-1995;
-
-DateTime ::= SEQUENCE{
-     date [1]  Z3950Date OPTIONAL,
-     time [2]  Z3950Time OPTIONAL
-                    -- one or the other, or both
-          }
-
-Z3950Date ::= SEQUENCE{
- year         [1] IMPLICIT INTEGER,
-                    -- For "positive" years, i.e. 1 AD or later, supply
-                    -- the absolute year, e.g. If the year is 1995, supply
-                    -- the integer 1995; the value 95 would indicate the
-                    -- year 0095.
-                    -- For "negative" years, e.g. 1 BC or earlier, -1
-                    -- represents 1 BC, -2 represents 2 BC, etc. Zero is
-                    -- invalid, because there was no year zero.
- partOfYear   [2] CHOICE{ -- may be omitted if only year is significant
-        monthAndDay [1]   IMPLICIT SEQUENCE{
-                       month [2]  IMPLICIT INTEGER, 
-                                   -- value 1-12
-                       day   [3]  IMPLICIT INTEGER OPTIONAL
-                                   -- may be omitted if only year and month
-                                   -- are significant. Value 1-31.
-                                           },
-        julianDay   [2]   IMPLICIT INTEGER, -- Value 1 - 366.
-        weekNumber  [3]   IMPLICIT INTEGER, -- Value 1 - 53. 
-        quarter     [4] CHOICE{
-                       first    [1] IMPLICIT NULL,
-                       second   [2] IMPLICIT NULL,
-                       third    [3] IMPLICIT NULL,
-                       fourth   [4] IMPLICIT NULL},
-        season      [5] CHOICE{
-                       winter   [1] IMPLICIT NULL,
-                       spring   [2] IMPLICIT NULL,
-                       summer   [3] IMPLICIT NULL,
-                       autumn   [4] IMPLICIT NULL}
-                                              } OPTIONAL, 
- flags        [3] IMPLICIT SEQUENCE{
-     circa          [1]   IMPLICIT NULL OPTIONAL,
-                          -- if this flag is set then the date is "approximate".
-     era            [2]   CHOICE{
-                          -- If era occurs, partOfYear should not occur.
-                          decade         [1] IMPLICIT NULL,
-                                              -- year must be multiple of 10.
-                                              -- For example, 1900 refers to
-                                              -- the decade covering the years
-                                              -- 1900 through 1909.
-                          century        [2] IMPLICIT NULL,
-                                              -- year must be multiple of 100.
-                          millennium     [3] IMPLICIT NULL
-                                              -- year must be multiple of 1000.
-                                                    } OPTIONAL
-                                              } OPTIONAL
-                                }
-
-
-Z3950Time ::= SEQUENCE{
-     hour           [1] IMPLICIT INTEGER,
-                             -- Value 0-23. 
-     minute         [2]  IMPLICIT INTEGER OPTIONAL,
-                             -- value 0-59. May be omitted when hour only is
-                             -- significant (in which case second and
-                             -- partOfSecond must also be omitted). 
-     second         [3]  IMPLICIT INTEGER OPTIONAL,
-                             -- value 0-59. May be omitted when only hour, or
-                             -- hour and minute, is significant (in which case
-                             -- partOfSecond must also be omitted).
-     partOfSecond   [4]  IMPLICIT IntUnit OPTIONAL,
-                             -- Use Unit System = 'si', Unit type = 'time'; 
-                             -- Unit = 'second', with appropriate value and
-                             -- scale factor.
-     zone           [5]  CHOICE{
-                              local      [1]  IMPLICIT NULL,
-                              utc        [2]  IMPLICIT NULL,
-                              utcOffset  [3]  IMPLICIT INTEGER  -- in minutes
-                                                    }}             
-END                              
diff --git a/z39.50/esadmin.asn b/z39.50/esadmin.asn
deleted file mode 100644 (file)
index 9ec766b..0000000
+++ /dev/null
@@ -1,49 +0,0 @@
-ESFormat-Admin
-{Z39-50-extendedService Index-Data(81) AdminES (1)} DEFINITIONS ::=
-  -- oid is 1.2.840.10003.9.81.1
-BEGIN
-IMPORTS DiagRec, InternationalString, Segment
-FROM Z39-50-APDU-1995;
-Admin ::= CHOICE{
-    esRequest      [1] IMPLICIT SEQUENCE{
-       toKeep         [1] OriginPartToKeep,
-       notToKeep      [2] OriginPartNotToKeep},
-    taskPackage    [2] IMPLICIT SEQUENCE{
-                       originPart     [1]
-                                   OriginPartToKeep,
-                       targetPart     [2] TargetPart}}
-
-OriginPartToKeep ::= SEQUENCE{
-action              [1] CHOICE{
-    reIndex         [1] NULL,
-    truncate        [2] NULL,
-    drop            [3] NULL,
-    create          [4] NULL,
-    import          [5] ImportParameters,
-    refresh         [6] NULL,   -- Review internal representation of records against source files on disk to
-                               -- see if they have been updated.
-    commit          [7] NULL,
-    shutdown        [8] NULL,
-    start           [9] NULL},
-databaseName           [2] IMPLICIT InternationalString OPTIONAL}
-
-OriginPartNotToKeep ::= CHOICE{
-records                 [1] Segment,
-recordsWillFollow       [0] NULL}
-
-TargetPart ::= SEQUENCE{
-  updateStatus        [1] IMPLICIT INTEGER{
-                          success (1),
-                          partial (2),
-                          failure (3)},
-  globalDiagnostics   [2] IMPLICIT SEQUENCE OF
-                              DiagRec OPTIONAL
-               }
-              
--- Auxiliary definitions for Admin
-
-ImportParameters ::= SEQUENCE{
- recordType          [1] IMPLICIT InternationalString
-}
-
-END
diff --git a/z39.50/esupdate.asn b/z39.50/esupdate.asn
deleted file mode 100644 (file)
index e6628a1..0000000
+++ /dev/null
@@ -1,103 +0,0 @@
-ESFormat-Update
-{Z39-50-extendedService Update (5) revisions (1)  revision-1 (1)} DEFINITIONS ::=
-  -- oid is 1.2.840.10003.9.5.1.1
-BEGIN
-IMPORTS DiagRec, InternationalString
-FROM Z39-50-APDU-1995;
-Update ::= CHOICE{
-    esRequest      [1] IMPLICIT SEQUENCE{
-       toKeep         [1] OriginPartToKeep,
-       notToKeep      [2] OriginPartNotToKeep},
-    taskPackage    [2] IMPLICIT SEQUENCE{
-                       originPart     [1]
-                                   OriginPartToKeep,
-                       targetPart     [2] TargetPart}}
-
-OriginPartToKeep ::= SEQUENCE{
-action                  [1] IMPLICIT INTEGER{
-                                recordInsert    (1),
-                                recordReplace   (2),
-                                recordDelete    (3),
-                                elementUpdate   (4),
-                                specialUpdate   (5)},
- databaseName           [2] IMPLICIT InternationalString,
- schema                 [3] IMPLICIT OBJECT IDENTIFIER OPTIONAL,
- elementSetName         [4] IMPLICIT InternationalString OPTIONAL,
- actionQualifier        [5] IMPLICIT EXTERNAL OPTIONAL}
-
-OriginPartNotToKeep ::= SuppliedRecords
-
-TargetPart ::= SEQUENCE{
-  updateStatus        [1] IMPLICIT INTEGER{
-                          success (1),
-                          partial (2),
-                          failure (3)},
-  globalDiagnostics   [2] IMPLICIT SEQUENCE OF
-                              DiagRec OPTIONAL,
-                    -- These are non-surrogate
-                    -- diagnosticsrelating to the task,
-                    -- not to individual records.
-  taskPackageRecords  [3] IMPLICIT SEQUENCE OF
-TaskPackageRecordStructure
-                    -- There should be a
-                    -- TaskPackageRecordStructure
-                    -- for every record supplied.
-                    -- The target should create
-                    -- such a structure for every
-                    -- record immediately upon
-                    -- creating the task package
-                    -- to include correlation
-                    -- information and status.
-                    -- The record itself would not
-                    -- be included until processing
-                    -- for that record is complete.
-               }
-
--- Auxiliary definitions for Update
-SuppliedRecords ::= SEQUENCE OF SEQUENCE{
-  recordId     [1] CHOICE{
-                number  [1] IMPLICIT INTEGER,
-                string  [2] IMPLICIT  InternationalString,
-                opaque  [3] IMPLICIT OCTET STRING} OPTIONAL,
-  supplementalId [2] CHOICE{
-                 timeStamp       [1] IMPLICIT  GeneralizedTime,
-                 versionNumber   [2] IMPLICIT InternationalString,
-                 previousVersion [3] IMPLICIT EXTERNAL} OPTIONAL,
-  correlationInfo   [3] IMPLICIT CorrelationInfo OPTIONAL,
-  record            [4] IMPLICIT EXTERNAL}
-
-CorrelationInfo ::= SEQUENCE{
-            -- origin may supply one or both for any record:
-  note [1] IMPLICIT InternationalString OPTIONAL,
-  id   [2] IMPLICIT INTEGER OPTIONAL}
-
-TaskPackageRecordStructure ::= SEQUENCE{
-     recordOrSurDiag  [1] CHOICE {
-                    record     [1] IMPLICIT EXTERNAL,
-                      -- Choose 'record' if
-                      -- recordStatus is 'success', and
-                      -- elementSetName was supplied.
-
-                  surrogateDiagnostics   [2] IMPLICIT
-                              SEQUENCE OF DiagRec
-                         -- Choose 'SurrogateDiagnostics', if
-                         -- RecordStatus is failure.
-                                } OPTIONAL,
-                -- The parameter recordOrSurDiag
-                    -- will thus be omitted only if
-                    -- 'elementSetName' was omitted and
-                    -- recordStatus is 'success'; or
-                    --if record status is 'queued'
-                    -- or in 'process'.
-     correlationInfo [2] IMPLICIT
-                         CorrelationInfo OPTIONAL,
-                    -- This should be included
-                    -- if it was supplied by the origin.
-     recordStatus    [3] IMPLICIT INTEGER{
-                                        success   (1),
-                                        queued    (2),
-                                        inProcess (3),
-                                        failure   (4)},
-      supplementalDiagnostics   [4] IMPLICIT
-                SEQUENCE OF DiagRec OPTIONAL}
-END
diff --git a/z39.50/mterm2.asn b/z39.50/mterm2.asn
deleted file mode 100644 (file)
index eff29d7..0000000
+++ /dev/null
@@ -1,10 +0,0 @@
-UserInfoFormat-multipleSearchTerms-2
-{Z39-50-userInfoFormat MultipleSearchTerms-2 (5)} DEFINITIONS ::=
-BEGIN
-IMPORTS Term FROM Z39-50-APDU-1995;
-
-MultipleSearchTerms-2 ::= SEQUENCE OF SEQUENCE{
-                             term  [1]   IMPLICIT Term,
-                             flag  [2]   IMPLICIT BOOLEAN OPTIONAL}
-
-END
diff --git a/z39.50/oclcui.asn b/z39.50/oclcui.asn
deleted file mode 100644 (file)
index 0cd6d54..0000000
+++ /dev/null
@@ -1,33 +0,0 @@
-UserInfoFormat-oclcUserInformation
-{Z39-50-userInfoFormat OCLCUserInformation (7)} DEFINITIONS ::=
-BEGIN
-
--- $Id: oclcui.asn,v 1.4 2003-09-04 17:44:49 adam Exp $
---
--- This format is returned from the server at
---     fsz3950test.oclc.org:210
--- I found the definition at
---     http://www.oclc.org/firstsearch/documentation/z3950/config_guide.htm
---
--- I have added OPTIONAL modifiers to the `dblist' and and `code'
--- elements because they appear to be admitted from the APDU returned
--- as an Init diagnostic from fsz3950test.oclc.org:210.  Adam further
--- removed the SEQUENCE structure, changed failReason to a BOOLEAN and
--- deleted diagnosticSetId altogether, to make the ASN.1 conform to
--- what's actually returned on the wire.  Finally, I removed the
--- OPTIONAL on failReason on the advice of OCLC's Keith Neibarger
--- <neibarge@oclc.org> (although he'd also advised me, wrongly, that I
--- could remove the OPTIONAL on dblist).
-
-OCLC-UserInformation ::= SEQUENCE {
-    motd        [1] IMPLICIT VisibleString OPTIONAL,
-    dblist      SEQUENCE OF DBName OPTIONAL,
-    failReason  [3] IMPLICIT BOOLEAN OPTIONAL,
-    code        [1] IMPLICIT INTEGER OPTIONAL,
-    text        [2] IMPLICIT VisibleString OPTIONAL
-}
-
-DBName ::= [2] IMPLICIT VisibleString
-
-END
-
diff --git a/z39.50/prt-ext.c b/z39.50/prt-ext.c
deleted file mode 100644 (file)
index 4884e58..0000000
+++ /dev/null
@@ -1,232 +0,0 @@
-/*
- * Copyright (c) 1995-2003, Index Data.
- * See the file LICENSE for details.
- *
- * $Id: prt-ext.c,v 1.7 2003-07-18 19:53:28 mike Exp $
- */
-
-#include <yaz/proto.h>
-
-/*
- * The table below should be moved to the ODR structure itself and
- * be an image of the association context: To help
- * map indirect references when they show up. 
- */
-static Z_ext_typeent type_table[] =
-{
-    {VAL_SUTRS, Z_External_sutrs, (Odr_fun) z_SUTRS},
-    {VAL_EXPLAIN, Z_External_explainRecord, (Odr_fun)z_ExplainRecord},
-    {VAL_RESOURCE1, Z_External_resourceReport1, (Odr_fun)z_ResourceReport1},
-    {VAL_RESOURCE2, Z_External_resourceReport2, (Odr_fun)z_ResourceReport2},
-    {VAL_PROMPT1, Z_External_promptObject1, (Odr_fun)z_PromptObject1 },
-    {VAL_GRS1, Z_External_grs1, (Odr_fun)z_GenericRecord},
-    {VAL_EXTENDED, Z_External_extendedService, (Odr_fun)z_TaskPackage},
-    {VAL_ITEMORDER, Z_External_itemOrder, (Odr_fun)z_IOItemOrder},
-    {VAL_DIAG1, Z_External_diag1, (Odr_fun)z_DiagnosticFormat},
-    {VAL_ESPEC1, Z_External_espec1, (Odr_fun)z_Espec1},
-    {VAL_SUMMARY, Z_External_summary, (Odr_fun)z_BriefBib},
-    {VAL_OPAC, Z_External_OPAC, (Odr_fun)z_OPACRecord},
-    {VAL_SEARCHRES1, Z_External_searchResult1, (Odr_fun)z_SearchInfoReport},
-    {VAL_DBUPDATE, Z_External_update, (Odr_fun)z_IUUpdate},
-    {VAL_DBUPDATE0, Z_External_update0, (Odr_fun)z_IU0Update},
-    {VAL_DBUPDATE1, Z_External_update0, (Odr_fun)z_IU0Update},
-    {VAL_DATETIME, Z_External_dateTime, (Odr_fun)z_DateTime},
-    {VAL_UNIVERSE_REPORT, Z_External_universeReport,(Odr_fun)z_UniverseReport},
-    {VAL_ADMINSERVICE, Z_External_ESAdmin, (Odr_fun)z_Admin},
-    {VAL_USERINFO1, Z_External_userInfo1, (Odr_fun) z_OtherInformation},
-    {VAL_CHARNEG3, Z_External_charSetandLanguageNegotiation, (Odr_fun)
-                  z_CharSetandLanguageNegotiation},
-    {VAL_PROMPT1, Z_External_acfPrompt1, (Odr_fun) z_PromptObject1},
-    {VAL_DES1, Z_External_acfDes1, (Odr_fun) z_DES_RN_Object},
-    {VAL_KRB1, Z_External_acfKrb1, (Odr_fun) z_KRBObject},
-    {VAL_MULTISRCH2, Z_External_multisrch2, (Odr_fun) z_MultipleSearchTerms_2},
-    {VAL_CQL, Z_External_CQL, (Odr_fun) z_InternationalString},
-    {VAL_OCLCUI, Z_External_OCLCUserInfo, (Odr_fun) z_OCLC_UserInformation},
-    {VAL_NONE, 0, 0}
-};
-
-Z_ext_typeent *z_ext_getentbyref(oid_value val)
-{
-    Z_ext_typeent *i;
-
-    for (i = type_table; i->dref != VAL_NONE; i++)
-       if (i->dref == val)
-           return i;
-    return 0;
-}
-
-int z_External(ODR o, Z_External **p, int opt, const char *name)
-{
-    oident *oid;
-    Z_ext_typeent *type;
-
-    static Odr_arm arm[] =
-    {
-       {ODR_EXPLICIT, ODR_CONTEXT, 0, Z_External_single,
-        (Odr_fun)odr_any, 0},
-       {ODR_IMPLICIT, ODR_CONTEXT, 1, Z_External_octet,
-        (Odr_fun)odr_octetstring, 0},
-       {ODR_IMPLICIT, ODR_CONTEXT, 2, Z_External_arbitrary,
-        (Odr_fun)odr_bitstring, 0},
-       {ODR_EXPLICIT, ODR_CONTEXT, 0, Z_External_sutrs,
-        (Odr_fun)z_SUTRS, 0},
-       {ODR_EXPLICIT, ODR_CONTEXT, 0, Z_External_explainRecord,
-        (Odr_fun)z_ExplainRecord, 0},
-
-       {ODR_EXPLICIT, ODR_CONTEXT, 0, Z_External_resourceReport1,
-        (Odr_fun)z_ResourceReport1, 0},
-       {ODR_EXPLICIT, ODR_CONTEXT, 0, Z_External_resourceReport2,
-        (Odr_fun)z_ResourceReport2, 0},
-       {ODR_EXPLICIT, ODR_CONTEXT, 0, Z_External_promptObject1,
-        (Odr_fun)z_PromptObject1, 0},
-       {ODR_EXPLICIT, ODR_CONTEXT, 0, Z_External_grs1,
-        (Odr_fun)z_GenericRecord, 0},
-       {ODR_EXPLICIT, ODR_CONTEXT, 0, Z_External_extendedService,
-        (Odr_fun)z_TaskPackage, 0},
-
-       {ODR_EXPLICIT, ODR_CONTEXT, 0, Z_External_itemOrder,
-        (Odr_fun)z_IOItemOrder, 0},
-       {ODR_EXPLICIT, ODR_CONTEXT, 0, Z_External_diag1,
-        (Odr_fun)z_DiagnosticFormat, 0},
-       {ODR_EXPLICIT, ODR_CONTEXT, 0, Z_External_espec1,
-        (Odr_fun)z_Espec1, 0},
-       {ODR_EXPLICIT, ODR_CONTEXT, 0, Z_External_summary,
-        (Odr_fun)z_BriefBib, 0},
-       {ODR_EXPLICIT, ODR_CONTEXT, 0, Z_External_OPAC,
-        (Odr_fun)z_OPACRecord, 0},
-
-       {ODR_EXPLICIT, ODR_CONTEXT, 0, Z_External_searchResult1,
-        (Odr_fun)z_SearchInfoReport, 0},
-       {ODR_EXPLICIT, ODR_CONTEXT, 0, Z_External_update,
-        (Odr_fun)z_IUUpdate, 0},
-       {ODR_EXPLICIT, ODR_CONTEXT, 0, Z_External_dateTime,
-        (Odr_fun)z_DateTime, 0},
-       {ODR_EXPLICIT, ODR_CONTEXT, 0, Z_External_universeReport,
-        (Odr_fun)z_UniverseReport, 0},
-       {ODR_EXPLICIT, ODR_CONTEXT, 0, Z_External_ESAdmin,
-        (Odr_fun)z_Admin, 0},
-
-       {ODR_EXPLICIT, ODR_CONTEXT, 0, Z_External_update0,
-        (Odr_fun)z_IU0Update, 0},
-        {ODR_EXPLICIT, ODR_CONTEXT, 0, Z_External_userInfo1,
-         (Odr_fun)z_OtherInformation, 0},
-        {ODR_EXPLICIT, ODR_CONTEXT, 0, Z_External_charSetandLanguageNegotiation,
-         (Odr_fun)z_CharSetandLanguageNegotiation, 0},
-        {ODR_EXPLICIT, ODR_CONTEXT, 0, Z_External_acfPrompt1,
-         (Odr_fun)z_PromptObject1, 0},
-        {ODR_EXPLICIT, ODR_CONTEXT, 0, Z_External_acfDes1,
-         (Odr_fun)z_DES_RN_Object, 0},
-
-        {ODR_EXPLICIT, ODR_CONTEXT, 0, Z_External_acfKrb1,
-         (Odr_fun)z_KRBObject, 0},
-        {ODR_EXPLICIT, ODR_CONTEXT, 0, Z_External_multisrch2,
-         (Odr_fun)z_MultipleSearchTerms_2, 0},
-        {ODR_EXPLICIT, ODR_CONTEXT, 0, Z_External_CQL,
-         (Odr_fun)z_InternationalString, 0},
-        {ODR_EXPLICIT, ODR_CONTEXT, 0, Z_External_OCLCUserInfo,
-         (Odr_fun)z_OCLC_UserInformation, 0},
-       {-1, -1, -1, -1, 0, 0}
-    };
-    
-    odr_implicit_settag(o, ODR_UNIVERSAL, ODR_EXTERNAL);
-    if (!odr_sequence_begin(o, p, sizeof(**p), name))
-       return opt && odr_ok(o);
-    if (!(odr_oid(o, &(*p)->direct_reference, 1, 0) &&
-         odr_integer(o, &(*p)->indirect_reference, 1, 0) &&
-         odr_graphicstring(o, &(*p)->descriptor, 1, 0)))
-       return 0;
-    /*
-     * Do we know this beast?
-     */
-    if (o->direction == ODR_DECODE && (*p)->direct_reference &&
-       (oid = oid_getentbyoid((*p)->direct_reference)) &&
-       (type = z_ext_getentbyref(oid->value)))
-    {
-       int zclass, tag, cons;
-       
-       /*
-        * We know it. If it's represented as an ASN.1 type, bias the CHOICE.
-        */
-       if (!odr_peektag(o, &zclass, &tag, &cons))
-           return opt && odr_ok(o);
-       if (zclass == ODR_CONTEXT && tag == 0 && cons == 1)
-           odr_choice_bias(o, type->what);
-    }
-    return
-       odr_choice(o, arm, &(*p)->u, &(*p)->which, name) &&
-       odr_sequence_end(o);
-}
-
-Z_External *z_ext_record(ODR o, int format, const char *buf, int len)
-{
-    Z_External *thisext;
-
-    thisext = (Z_External *) odr_malloc(o, sizeof(*thisext));
-    thisext->descriptor = 0;
-    thisext->indirect_reference = 0;
-
-    thisext->direct_reference = 
-       yaz_oidval_to_z3950oid (o, CLASS_RECSYN, format);    
-    if (!thisext->direct_reference)
-       return 0;
-
-    if (len < 0) /* Structured data */
-    {
-       
-       /*
-        * We cheat on the pointers here. Obviously, the record field
-        * of the backend-fetch structure should have been a union for
-        * correctness, but we're stuck with this for backwards
-        * compatibility.
-        */
-       thisext->u.grs1 = (Z_GenericRecord*) buf;
-
-       switch (format)
-       {
-       case VAL_SUTRS:
-           thisext->which = Z_External_sutrs;
-           break;
-       case VAL_GRS1:
-           thisext->which = Z_External_grs1;
-           break;
-       case VAL_EXPLAIN:
-           thisext->which = Z_External_explainRecord;
-           break;
-       case VAL_SUMMARY:
-           thisext->which = Z_External_summary;
-           break;
-       case VAL_OPAC:
-           thisext->which = Z_External_OPAC;
-           break;
-       case VAL_EXTENDED:
-           thisext->which = Z_External_extendedService;
-           break;
-       default:
-           return 0;
-       }
-    }
-    else if (format == VAL_SUTRS) /* SUTRS is a single-ASN.1-type */
-    {
-       Odr_oct *sutrs = (Odr_oct *)odr_malloc(o, sizeof(*sutrs));
-       
-       thisext->which = Z_External_sutrs;
-       thisext->u.sutrs = sutrs;
-       sutrs->buf = (unsigned char *)odr_malloc(o, len);
-       sutrs->len = sutrs->size = len;
-       memcpy(sutrs->buf, buf, len);
-    }
-    else
-    {
-       thisext->which = Z_External_octet;
-       if (!(thisext->u.octet_aligned = (Odr_oct *)
-             odr_malloc(o, sizeof(Odr_oct))))
-           return 0;
-       if (!(thisext->u.octet_aligned->buf = (unsigned char *)
-             odr_malloc(o, len)))
-           return 0;
-       memcpy(thisext->u.octet_aligned->buf, buf, len);
-       thisext->u.octet_aligned->len = thisext->u.octet_aligned->size = len;
-    }
-    return thisext;
-}
-
diff --git a/z39.50/univres.asn b/z39.50/univres.asn
deleted file mode 100644 (file)
index f83320d..0000000
+++ /dev/null
@@ -1,23 +0,0 @@
-ResourceReport-Format-Universe-1
-{Z39-50-resourceReport universe-1 (1000)} DEFINITIONS ::=
-BEGIN
-IMPORTS StringOrNumeric FROM Z39-50-APDU-1995;
---
-
-UniverseReportHits ::= SEQUENCE {
-       database        StringOrNumeric,
-       hits    StringOrNumeric
-}
-
-UniverseReportDuplicate ::= SEQUENCE {
-       hitno StringOrNumeric
-}
-
-UniverseReport ::= SEQUENCE {
-       totalHits INTEGER,
-       report CHOICE {
-               databaseHits    [0] IMPLICIT UniverseReportHits,
-               duplicate               [1] IMPLICIT UniverseReportDuplicate
-       }
-}
-END
diff --git a/z39.50/z.tcl b/z39.50/z.tcl
deleted file mode 100644 (file)
index 7cd0dff..0000000
+++ /dev/null
@@ -1,351 +0,0 @@
-# YC Sample Config File for Z39.50
-# $Id: z.tcl,v 1.12 2003-07-18 19:53:28 mike Exp $
-# ----------------------------------------------------------
-# Prefix Specifications
-#  
-#    1: C function prefix
-#    2: C type prefix
-#    3: C preprocessor prefix
-
-# Default prefix
-set default-prefix {z_ Z_ Z_}
-
-# Name clash in extended services (TargetPart, OriginPartToKeep, etc)
-# You can possibly think of better names :)
-set prefix(ESFormat-PersistentResultSet) {z_PR Z_PR Z_PR}
-set prefix(ESFormat-PersistentQuery) {z_PQuery Z_PQuery Z_PQuery}
-set prefix(ESFormat-PeriodicQuerySchedule) {z_PQS Z_PQS Z_PQS}
-set prefix(ESFormat-ItemOrder) {z_IO Z_IO Z_IO}
-set prefix(ESFormat-Update0) {z_IU0 Z_IU0 Z_IU0}
-set prefix(ESFormat-Update) {z_IU Z_IU Z_IU}
-set prefix(ESFormat-ExportSpecification) {z_ES Z_ES Z_ES}
-set prefix(ESFormat-ExportInvocation) {z_EI Z_EI Z_EI}
-
-# ----------------------------------------------------------
-# Settings for core of the protocol
-set m Z39-50-APDU-1995
-
-# Filename
-set filename($m) z-core
-
-# Public header initialization code
-set init($m,h) {
-typedef struct Z_External Z_External;
-YAZ_EXPORT int z_External(ODR o, Z_External **p, int opt, const char *name);
-}
-
-set body($m,h) "
-#ifdef __cplusplus
-extern \"C\" \{
-#endif
-
-int z_ANY_type_0 (ODR o, void **p, int opt);
-
-#ifdef __cplusplus
-\}
-#endif
-"
-set body($m,c) {
-
-/* the type-0 query ... */
-int z_ANY_type_0 (ODR o, void **p, int opt)
-{
-    return 0;
-}
-
-}
-
-# Type Name overrides
-set map($m,PDU) APDU
-set membermap($m,Operator,and) {Operator_and op_and}
-set membermap($m,Operator,or) {Operator_or op_or}
-#set membermap($m,Operator,and-not) {Operator_and_not op_and_not}
-set map($m,AttributeElement_complex) ComplexAttribute
-set map($m,DeleteSetStatus) DeleteStatus
-set membermap($m,ProximityOperator,private) {ProximityOperator_private zprivate}
-set unionmap($m,AttributeElement,attributeValue) {which value AttributeValue}
-set membermap($m,ElementSpec,externalEspec) externalSpec
-set membermap($m,RPNStructure,op) simple
-set membermap($m,RPNStructure,rpnRpnOp) complex
-set map($m,RPNStructure_complex) Complex
-set membermap($m,Operand,attrTerm) {Operand_APT attributesPlusTerm}
-set membermap($m,Operand,resultSet) {Operand_resultSetId resultSetId}
-set membermap($m,Operand,resultAttr) {Operand_resultAttr resultAttr}
-set membermap($m,Complex,rpn1) s1
-set membermap($m,Complex,rpn2) s2
-set membermap($m,Complex,op) roperator
-set membermap($m,RPNQuery,attributeSet) attributeSetId
-set membermap($m,RPNQuery,rpn) RPNStructure
-set map($m,KnownProximityUnit) ProxUnit
-set membermap($m,ProximityOperator,lessThan) {Prox_lessThan 1}
-set membermap($m,ProximityOperator,lessThanOrEqual) {Prox_lessThanOrEqual 1}
-set membermap($m,ProximityOperator,equal) {Prox_equal 1}
-set membermap($m,ProximityOperator,greaterThanOrEqual) {Prox_greaterThanOrEqual 1}
-set membermap($m,ProximityOperator,greaterThan) {Prox_greaterThan 1}
-set membermap($m,ProximityOperator,notEqual) {Prox_notEqual 1}
-#
-set membermap($m,Records,responseRecords) {Records_DBOSD databaseOrSurDiagnostics}
-set membermap($m,Records,nonSurrogateDiagnostic) {Records_NSD nonSurrogateDiagnostic}
-set membermap($m,Records,multipleNonSurDiagnostics) {Records_multipleNSD multipleNonSurDiagnostics}
-set map($m,Records_DBOSD) NamePlusRecordList
-set map($m,Records_NSD) DiagRec
-set map($m,Records_multipleNSD) DiagRecs
-set membermap($m,NamePlusRecord,name) databaseName
-set unionmap($m,DiagRecs) {num_diagRecs diagRecs}
-set unionmap($m,NamePlusRecordList) {num_records records}
-#
-set membermap($m,ElementSetNames,genericElementSetName) generic
-set map($m,ElementSetNames_databaseSpecific) DatabaseSpecific
-#
-set map($m,OccurrenceByAttributes_s) OccurrenceByAttributesElem
-set map($m,OccurrenceByAttributesElem_byDatabase) byDatabaseList
-#
-set membermap($m,SortElement,datbaseSpecific) databaseSpecific
-set map($m,SortElement_databaseSpecific) SortDbSpecificList
-#
-set map($m,SortKey_sortAttributes) SortAttributes
-set unionmap($m,PresentRequest,recordComposition) {}
-set map($m,PresentRequest_0) RecordComposition
-set unionmap($m,PresentRequest,additionalRanges) {num_ranges additionalRanges}
-set unionmap($m,SortRequest,sortSequence) {}
-set map($m,SortRequest_0) SortKeySpecList
-set unionmap($m,SortKeySpecList) {num_specs specs}
-set map($m,InitializeRequest) InitRequest
-set map($m,InitializeResponse) InitResponse
-set unionmap($m,CloseReason) Close
-set membermap($m,ProtocolVersion,version-1) 1
-set membermap($m,ProtocolVersion,version-2) 2
-set membermap($m,ProtocolVersion,version-3) 3
-set membermap($m,InitRequest,exceptionalRecordSize) maximumRecordSize
-set membermap($m,InitResponse,exceptionalRecordSize) maximumRecordSize
-set map($m,RecordsMultipleNonSurDiagnostics) DiagRecs
-set map($m,RecordsDatabaseOrSurDiagnostics) NamePlusRecordList
-set membermap($m,NamePlusRecord,retrievalRecord) databaseRecord
-set unionmap($m,RecordComposition) {which u RecordComp}
-set unionmap($m,ScanResponse,scanStatus) Scan
-set unionmap($m,AttributeList) {num_attributes attributes}
-set membermap($m,SortKey,sortfield) sortField
-set map($m,CompSpec_0) DbSpecific
-set map($m,DatabaseSpecific_s) DatabaseSpecificUnit
-set map($m,ListStatuses_s) ListStatus
-set map($m,IdAuthenticationIdPass) IdPass
-set map($m,OtherInformation_s) OtherInformationUnit
-set unionmap($m,OtherInformationUnit,information) {which information OtherInfo}
-set unionmap($m,OtherInformation) {num_elements list}
-set unionmap($m,Specification,elementSpec) {}
-set map($m,Specification_0) ElementSpec
-set unionmap($m,Specification,schema) {which schema Schema}
-
-# ----
-set m DiagnosticFormatDiag1
-set filename($m) z-diag1
-set map($m,DiagFormat_tooMany) TooMany
-set map($m,DiagFormat_badSpec) BadSpec
-set map($m,DiagFormat_dbUnavail) DbUnavail
-set map($m,DiagFormat_attribute) Attribute
-set map($m,DiagFormat_attCombo) AttCombo
-set map($m,DiagFormat_term) DiagTerm
-set map($m,DiagFormat_proximity) Proximity
-set map($m,DiagFormat_scan) Scan
-set map($m,DiagFormat_sort) Sort
-set unionmap($m,Sort) {which u SortD}
-set map($m,DiagFormat_segmentation) Segmentation
-set map($m,DiagFormat_extServices) ExtServices
-set map($m,DiagFormat_accessCtrl) AccessCtrl
-set map($m,DiagFormat_recordSyntax) RecordSyntax
-#
-set map($m,Scan_termList2) AttrListList
-set map($m,Sort_inputTooLarge) StringList
-#
-set map($m,AccessCtrl_oid) OidList
-set map($m,AccessCtrl_alternative) AltOidList
-# ----
-set m RecordSyntax-explain
-set filename($m) z-exp
-set map($m,Explain-Record) ExplainRecord
-set map($m,ElementDataType_structured) ElementInfoList
-set map($m,HumanString_s) HumanStringUnit
-set unionmap($m,HumanString) {num_strings strings}
-set membermap($m,CommonInfo,humanString-Language) humanStringLanguage
-set unionmap($m,AttributeOccurrence,attributeValues) {which attributeValues AttributeOcc}
-set unionmap($m,AttributeCombination) {num_occurrences occurrences}
-#
-set membermap($m,NetworkAddress,internetAddress) {NetworkAddress_iA internetAddress}
-set map($m,NetworkAddress_iA) NetworkAddressIA
-set membermap($m,NetworkAddress,osiPresentationAddress) {NetworkAddress_oPA osiPresentationAddress}
-set map($m,NetworkAddress_oPA) NetworkAddressOPA
-set map($m,NetworkAddress_other) NetworkAddressOther
-set unionmap($m,DatabaseList) {num_databases databases}
-set membermap($m,TargetInfo,recent-news) recentNews
-set membermap($m,TargetInfo,usage-restrictions) usageRest
-set membermap($m,DatabaseInfo,user-fee) userFee
-#
-set map($m,ProximitySupport_0) ProxSupportUnit
-set map($m,ProxSupportUnitZprivate) ProxSupportPrivate
-set membermap($m,ProxSupportUnit,private) {ProxSupportUnit_private zprivate}
-#
-set map($m,AttributeOccurrence_specific) AttributeValueList
-set unionmap($m,AttributeValueList) {num_attributes attributes}
-
-set unionmap($m,ExplainRecord) {which u Explain}
-set map($m,SchemaInfo_0) TagTypeMapping
-set map($m,TagSetInfo_0) TagSetElements
-set map($m,TermListInfo_0) TermListElement
-set map($m,TermListDetails_0) EScanInfo
-set map($m,PrivateCapabilities_0) PrivateCapOperator
-set map($m,Costs_0) CostsOtherCharge
-set map($m,Path_s) PathUnit
-set map($m,IconObject_s) IconObjectUnit
-set map($m,NetworkAddressInternetAddress) NetworkAddressIA
-set map($m,NetworkAddressOsiPresentationAddress) NetworkAddressOPA
-set membermap($m,QueryTypeDetails,private) {QueryTypeDetails_private zprivate}
-set membermap($m,PrivateCapOperator,operator) roperator
-set map($m,AccessRestrictions_s) AccessRestrictionsUnit
-# ----
-set m RecordSyntax-SUTRS
-set filename($m) z-sutrs
-#set map($m,SutrsRecord) SUTRS
-set body($m,c) {
-int z_SUTRS (ODR o, Odr_oct **p, int opt, const char *name)
-{
-    return odr_implicit_tag(o, odr_octetstring, p, ODR_UNIVERSAL,
-        ODR_GENERALSTRING, opt, name);
-}
-}
-
-set init($m,h) {
-typedef Odr_oct Z_SUTRS;
-YAZ_EXPORT int z_SUTRS (ODR o, Odr_oct **p, int opt, const char *name);
-}
-# ----
-set m RecordSyntax-opac
-set filename($m) z-opac
-# ----
-set m RecordSyntax-summary
-set filename($m) z-sum
-# ----
-set m RecordSyntax-generic
-set filename($m) z-grs
-set map($m,ElementData_subtree) GenericRecord
-set map($m,Variant_0) Triple
-set membermap($m,Triple,class) zclass
-set unionmap($m,Triple,value) {which value Triple}
-set unionmap($m,GenericRecord) {num_elements elements}
-# ----
-set m RecordSyntax-ESTaskPackage
-set filename($m) z-estask
-# ----
-set m ResourceReport-Format-Resource-1
-set filename($m) z-rrf1
-set map($m,ResourceReport) ResourceReport1
-set map($m,Estimate) Estimate1
-# ----
-set m ResourceReport-Format-Resource-2
-set filename($m) z-rrf2
-set map($m,ResourceReport) ResourceReport2
-set map($m,Estimate) Estimate2
-# ----
-set m AccessControlFormat-prompt-1
-set filename($m) z-accform1
-set membermap($m,PromptId,enummeratedPrompt) enumeratedPrompt 
-set map($m,PromptObject) PromptObject1
-set map($m,Challenge) Challenge1
-set map($m,Challenge1_s) ChallengeUnit1
-set map($m,Response) Response1
-set map($m,Response1_s) ResponseUnit1
-set map($m,PromptObject) PromptObject1
-# ----
-set m AccessControlFormat-des-1
-set filename($m) z-accdes1
-# ----
-set m AccessControlFormat-krb-1
-set filename($m) z-acckrb1
-# ----
-set m ESFormat-PersistentResultSet
-set filename($m) zes-pset
-# ----
-set m ESFormat-PersistentQuery
-set filename($m) zes-pquery
-# ----
-set m ESFormat-PeriodicQuerySchedule 
-set filename($m) zes-psched
-# ----
-set m ESFormat-ItemOrder
-set filename($m) zes-order
-set map($m,ItemOrderEsRequest) Request
-set map($m,ItemOrderTaskPackage) TaskPackage
-set map($m,OriginPartToKeep_0) Contact
-set map($m,OriginPartToKeep_1) Billing
-set map($m,OriginPartNotToKeep_0) ResultSetItem
-#
-# ---- (old version)
-set m ESFormat-Update0
-set filename($m) zes-update0
-set map($m,SuppliedRecords_s) SuppliedRecords_elem
-set map($m,SuppliedRecords_elem_0) SuppliedRecordsId
-#
-# ---- (new, current version)
-set m ESFormat-Update
-set filename($m) zes-update
-set map($m,SuppliedRecords_s) SuppliedRecords_elem
-set map($m,SuppliedRecords_elem_0) SuppliedRecordsId
-# ----
-set m ESFormat-ExportSpecification
-set filename($m) zes-exps
-# ----
-set m ESFormat-ExportInvocation
-set filename($m) zes-expi
-# ----
-set m UserInfoFormat-searchResult-1
-set filename($m) z-uifr1
-# ----
-set m ElementSpecificationFormat-eSpec-1
-set filename($m) z-espec1
-set map($m,Espec-1) Espec1
-set map($m,TagPath) ETagPath
-set map($m,ETagPath_s) ETagUnit
-set map($m,ETagUnitSpecificTag) SpecificTag
-set membermap($m,SpecificTag,occurrence) occurrences
-set unionmap($m,ElementRequest) {which u ERequest}
-set unionmap($m,ETagPath) {num_tags tags}
-set map($m,OccurrencesValues) OccurValues
-# ----
-set m UserInfoFormat-dateTime
-set filename($m) z-date
-set map($m,Z3950Date) Date
-set map($m,Z3950Time) Time
-set unionmap($m,Z3950Date,era) {}
-set map($m,DateFlags_0) Era
-set map($m,Z3950DateMonthAndDay) MonthAndDay
-set map($m,Z3950DateQuarter) DateQuater
-set map($m,Z3950DateSeason) DateSeason
-set map($m,Date_0) DateFlags
-set unionmap($m,DateFlags,era) {}
-# ----
-set m UserInfoFormat-multipleSearchTerms-2
-set filename($m) z-mterm2
-# ----
-set m ResourceReport-Format-Universe-1 
-set filename($m) z-univ
-# ----
-set m UserInfoFormat-oclcUserInformation
-set filename($m) z-oclcui
-# ----
-set m ESFormat-Admin
-set filename($m) zes-admin
-set map($m,EsRequest) ESAdminRequest
-set map($m,TaskPackage) ESAdminTaskPackage
-set map($m,OriginPartToKeep) ESAdminOriginPartToKeep
-set map($m,OriginPartNotToKeep) ESAdminOriginPartNotToKeep
-set map($m,TargetPart) ESAdminTargetPart
-# ----
-set m NegotiationRecordDefinition-charSetandLanguageNegotiation-3
-set filename($m) z-charneg
-set membermap($m,OriginProposal_0,private) {OriginProposal_0_private zprivate}
-set membermap($m,TargetResponse,private) {TargetResponse_private zprivate}
-# ----------------------------------------------------------
-# "Constructed" types defined by means of C-types are declared here.
-# Each function returns the C-handler and the C-type.
-proc asnBasicEXTERNAL {} {
-    return {z_External Z_External}
-}
diff --git a/z39.50/z3950v3.asn b/z39.50/z3950v3.asn
deleted file mode 100644 (file)
index 98cf885..0000000
+++ /dev/null
@@ -1,2667 +0,0 @@
-Z39-50-APDU-1995 -- OID for this definition, assigned in OID.3.1, is {Z39-50 2 1} 
-DEFINITIONS ::=  
-BEGIN   -- Z39.50 Maintenance Agency Official Text for ANSI/NISO Z39.50-1995 - July 1995
---
-EXPORTS OtherInformation, Term, AttributeSetId, AttributeList, AttributeElement, ElementSetName, SortElement, DatabaseName,
-CompSpec, Specification, Permissions, InternationalString, IntUnit, Unit, StringOrNumeric, Query, Records, ResultSetId,
-DefaultDiagFormat, DiagRec, Segment;
---
-
-PDU ::= CHOICE{
- initRequest        [20] IMPLICIT InitializeRequest,
- initResponse      [21] IMPLICIT InitializeResponse,
- searchRequest      [22] IMPLICIT SearchRequest,
- searchResponse      [23] IMPLICIT SearchResponse,
- presentRequest      [24] IMPLICIT PresentRequest,
- presentResponse      [25] IMPLICIT PresentResponse,
- deleteResultSetRequest    [26] IMPLICIT DeleteResultSetRequest,
- deleteResultSetResponse    [27] IMPLICIT DeleteResultSetResponse,
- accessControlRequest    [28] IMPLICIT AccessControlRequest,
- accessControlResponse    [29] IMPLICIT AccessControlResponse,
- resourceControlRequest         [30] IMPLICIT ResourceControlRequest,
- resourceControlResponse    [31] IMPLICIT ResourceControlResponse,
- triggerResourceControlRequest  [32] IMPLICIT TriggerResourceControlRequest,
- resourceReportRequest          [33] IMPLICIT ResourceReportRequest,
- resourceReportResponse    [34] IMPLICIT ResourceReportResponse,
- scanRequest         [35] IMPLICIT ScanRequest,
- scanResponse      [36] IMPLICIT ScanResponse,
-              -- [37] through [42] reserved
- sortRequest        [43] IMPLICIT SortRequest,
- sortResponse      [44] IMPLICIT SortResponse,
- segmentRequest      [45] IMPLICIT Segment,
- extendedServicesRequest    [46] IMPLICIT ExtendedServicesRequest,
- extendedServicesResponse    [47] IMPLICIT ExtendedServicesResponse,
- close          [48] IMPLICIT Close,
- duplicateDetectionRequest      [49] IMPLICIT DuplicateDetectionRequest,
- duplicateDetectionResponse     [50] IMPLICIT DuplicateDetectionResponse}
-
-
--- Initialize APDUs
---
-  InitializeRequest ::= SEQUENCE{
-  referenceId        ReferenceId OPTIONAL,
-  protocolVersion      ProtocolVersion,
-  options        Options,
-  preferredMessageSize  [5]  IMPLICIT INTEGER,
-   exceptionalRecordSize  [6]  IMPLICIT INTEGER,
-   idAuthentication    [7]    IdAuthentication OPTIONAL, -- see note below
-  implementationId    [110]  IMPLICIT InternationalString OPTIONAL,
-  implementationName  [111]  IMPLICIT InternationalString OPTIONAL,
-   implementationVersion  [112]  IMPLICIT InternationalString OPTIONAL,   
-  userInformationField  [11]  EXTERNAL OPTIONAL,
-  otherInfo        OtherInformation OPTIONAL}
---Note:
--- For idAuthentication, the type ANY is retained for compatibility with earlier versions. 
--- For interoperability, the following is recommended:
-IdAuthentication ::=
-   CHOICE{
-      open   VisibleString,
-      idPass  SEQUENCE {
-      groupId  [0]  IMPLICIT InternationalString OPTIONAL,
-      userId   [1]  IMPLICIT InternationalString OPTIONAL,
-      password  [2]  IMPLICIT InternationalString OPTIONAL },
-      anonymous  NULL,
-      other    EXTERNAL
-   }
--- May use access control formats for 'other'.  See Appendix 7 ACC.
---
-  InitializeResponse ::= SEQUENCE{
-  referenceId        ReferenceId OPTIONAL,
-   protocolVersion                ProtocolVersion,
-  options              Options,
-  preferredMessageSize  [5]  IMPLICIT INTEGER,
-   exceptionalRecordSize  [6]  IMPLICIT INTEGER,
-  result        [12]  IMPLICIT BOOLEAN,    -- reject = FALSE; Accept = TRUE
-  implementationId    [110]  IMPLICIT InternationalString OPTIONAL,
-  implementationName  [111]  IMPLICIT InternationalString OPTIONAL,
-   implementationVersion  [112]  IMPLICIT InternationalString OPTIONAL,   
-  userInformationField  [11]  EXTERNAL OPTIONAL,
-  otherInfo        OtherInformation OPTIONAL}
--- Begin auxiliary definitions for Init PDUs
-  ProtocolVersion  ::=  [3]   IMPLICIT BIT STRING{
-    version-1      (0),       -- This bit should always be set, but does not
-              -- correspond to any Z39.50 version.
-    version-2      (1),              -- "Version 2 supported."
-              -- This bit should always be set.
-    version-3      (2)        -- "Version 3 supported."
--- Values higher than 'version-3' should be ignored. Both the Initialize request and Initialize Response APDUs
--- include a value string corresponding to the supported versions. The highest common version is selected
--- for use. If there are no versions in common, "Result" in the Init Response should indicate "reject."
--- Note: Versions 1 and 2 are identical. Systems supporting version 2 should indicate support for version
--- 1 as well, for interoperability with systems that indicate support for version 1 only (e.g. ISO 10163-1991
--- implementations).  
-  }
-  Options  ::= [4] IMPLICIT BIT STRING{ 
-      search        (0), 
-      present       (1), 
-      delSet        (2),
-       resourceReport    (3),
-      triggerResourceCtrl    (4),
-      resourceCtrl       (5), 
-      accessCtrl       (6),
-      scan         (7),
-      sort        (8), 
-      -- (not used) (9),
-      extendedServices    (10),
-      level-1Segmentation    (11),
-      level-2Segmentation    (12),
-      concurrentOperations  (13),
-      namedResultSets    (14),
-      encapsulation    (15),
-      resultCount    (16),
-      negotiationModel (17),
-      duplicateDetection (18),
-      queryType104 (19),
-      pQESCorrection (20),
-      stringSchema (21)
-}
--- end auxiliary definitions for Init PDUs
-
-
---Search APDUs
-  SearchRequest ::= SEQUENCE{
-  referenceId          ReferenceId OPTIONAL,
-      smallSetUpperBound    [13]  IMPLICIT INTEGER,
-  largeSetLowerBound    [14]  IMPLICIT INTEGER,
-  mediumSetPresentNumber    [15]  IMPLICIT INTEGER,
-  replaceIndicator      [16]  IMPLICIT BOOLEAN,
-  resultSetName      [17]  IMPLICIT InternationalString,
-   databaseNames      [18]   IMPLICIT SEQUENCE OF DatabaseName,
-   smallSetElementSetNames    [100]  ElementSetNames OPTIONAL,
-    mediumSetElementSetNames  [101]  ElementSetNames OPTIONAL,
-  preferredRecordSyntax    [104]  IMPLICIT OBJECT IDENTIFIER OPTIONAL,
-  query          [21]  Query,
-    -- Following two parameters may be used only if version 3 is in force.
-   additionalSearchInfo    [203]  IMPLICIT OtherInformation OPTIONAL,
-  otherInfo          OtherInformation OPTIONAL}
-
-
--- Query Definitions
-  Query  ::=  CHOICE{
-      type-0  [0]  ANY,  
-        type-1    [1]  IMPLICIT RPNQuery,
-        type-2      [2]  OCTET STRING,
-        type-100  [100]  OCTET STRING,
-        type-101  [101]  IMPLICIT RPNQuery,
-       type-102  [102]  OCTET STRING,
-       type-104  [104]  IMPLICIT EXTERNAL
-}
---
--- Definitions for RPN query
-     RPNQuery ::= SEQUENCE{
-      attributeSet    AttributeSetId,
-      rpn      RPNStructure}
---
-  RPNStructure ::= CHOICE{
-    op    [0] Operand, 
-     rpnRpnOp  [1] IMPLICIT SEQUENCE{
-          rpn1    RPNStructure,
-                rpn2    RPNStructure,
-                op    Operator }} 
-  Operand ::= CHOICE{
-    attrTerm  AttributesPlusTerm, 
-    resultSet  ResultSetId, 
-          -- If version 2 is in force: 
-          --   - If query type is 1, one of the above two must be chosen; 
-          --   - resultAttr (below) may be used only if query type is 101. 
-    resultAttr  ResultSetPlusAttributes}
-
-  AttributesPlusTerm ::= [102] IMPLICIT SEQUENCE{
-         attributes  AttributeList, 
-        term    Term}
-  ResultSetPlusAttributes ::= [214] IMPLICIT SEQUENCE{
-        resultSet  ResultSetId,
-        attributes  AttributeList}
-  AttributeList ::=    [44]  IMPLICIT SEQUENCE OF AttributeElement
---
-  Term ::= CHOICE{
-    general      [45]  IMPLICIT OCTET STRING,
-              -- values below may be used only if version 3 is in force
-    numeric      [215]  IMPLICIT INTEGER,
-    characterString    [216]  IMPLICIT InternationalString,
-    oid        [217]  IMPLICIT OBJECT IDENTIFIER,
-    dateTime      [218]  IMPLICIT GeneralizedTime,
-    external      [219]  IMPLICIT EXTERNAL,
-    integerAndUnit    [220] IMPLICIT IntUnit,
-    null        [221] IMPLICIT NULL}   
-
-  Operator ::= [46] CHOICE{
-         and    [0] IMPLICIT NULL,
-            or    [1] IMPLICIT NULL,
-                and-not  [2] IMPLICIT NULL,
-              -- If version 2 is in force: 
-              --  - For query type 1, one of the above three must be chosen;
-              --  - prox (below) may be used only if query type is 101. 
-        prox    [3] IMPLICIT ProximityOperator}
-  AttributeElement  ::=  SEQUENCE{
-    attributeSet    [1]    IMPLICIT AttributeSetId OPTIONAL,
-                -- Must be omitted if version 2 is in force.
-                -- If included, overrides value of attributeSet
-                -- in RPNQuery above, but only for this attribute.
-    attributeType  [120]  IMPLICIT INTEGER,
-    attributeValue    CHOICE{
-              numeric  [121]   IMPLICIT INTEGER,
-                  -- If version 2 is in force, 
-                  -- Must select 'numeric' for attributeValue.
-
-      complex  [224] IMPLICIT SEQUENCE{ 
-               list      [1] IMPLICIT SEQUENCE OF StringOrNumeric,
-                    semanticAction  [2] IMPLICIT SEQUENCE OF INTEGER OPTIONAL}}}
-                       
-
-  ProximityOperator ::= SEQUENCE{
-    exclusion      [1] IMPLICIT BOOLEAN OPTIONAL,
-    distance      [2] IMPLICIT INTEGER,
-    ordered      [3] IMPLICIT BOOLEAN,
-    relationType      [4] IMPLICIT INTEGER{
-              lessThan      (1),
-              lessThanOrEqual    (2),
-              equal        (3),
-              greaterThanOrEqual    (4),
-              greaterThan      (5),
-              notEqual      (6)},
-    proximityUnitCode    [5] CHOICE{
-              known  [1] IMPLICIT KnownProximityUnit,
-              private  [2] IMPLICIT INTEGER}}
---
-    KnownProximityUnit ::= INTEGER{
-          character  (1),
-          word     (2),
-          sentence   (3),
-          paragraph   (4),
-          section   (5),
-          chapter   (6),
-          document   (7),
-          element  (8),
-          subelement  (9),
-          elementType  (10),
-           byte    (11) -- Version 3 only
-          }
--- End definitions for RPN Query
-
-
-SearchResponse ::= SEQUENCE{
-  referenceId        ReferenceId OPTIONAL,
-  resultCount       [23]  IMPLICIT INTEGER,
-  numberOfRecordsReturned  [24]  IMPLICIT INTEGER,
-  nextResultSetPosition  [25]  IMPLICIT INTEGER,
-  searchStatus      [22]  IMPLICIT BOOLEAN,
-  resultSetStatus    [26]  IMPLICIT INTEGER{
-              subset    (1),
-                 interim  (2), 
-               none    (3)} OPTIONAL,
-  presentStatus        PresentStatus  OPTIONAL,
-    records        Records OPTIONAL,
-    -- Following two parameters may be used only if version 3 is in force.
-  additionalSearchInfo  [203]  IMPLICIT OtherInformation OPTIONAL,
-  otherInfo        OtherInformation OPTIONAL}
---Retrieval APDUs 
-  PresentRequest ::= SEQUENCE{
-  referenceId          ReferenceId OPTIONAL,
-      resultSetId          ResultSetId,
-  resultSetStartPoint      [30]  IMPLICIT INTEGER,
-  numberOfRecordsRequested  [29]  IMPLICIT INTEGER,
-  additionalRanges      [212]  IMPLICIT SEQUENCE OF Range OPTIONAL,
-      -- additionalRanges may be included only if version 3 is in force.
-  recordComposition      CHOICE{
-                simple  [19]         ElementSetNames,
-                -- must choose 'simple' if version 2 is in force
-                complex  [209]               IMPLICIT CompSpec} OPTIONAL,
-  preferredRecordSyntax    [104]  IMPLICIT OBJECT IDENTIFIER OPTIONAL,
-  maxSegmentCount      [204]  IMPLICIT INTEGER OPTIONAL, -- level 1 or 2
-  maxRecordSize      [206]  IMPLICIT INTEGER OPTIONAL, -- level 2 only
-  maxSegmentSize      [207]  IMPLICIT INTEGER OPTIONAL, -- level 2 only
-  otherInfo          OtherInformation OPTIONAL}
---
-  Segment ::= SEQUENCE{
-      -- Segment PDU may only be used when version 3 is in force, 
-      -- and only when segmentation is in effect.
-   referenceId          ReferenceId OPTIONAL,
-     numberOfRecordsReturned    [24]  IMPLICIT INTEGER,
-  segmentRecords      [0]  IMPLICIT SEQUENCE OF NamePlusRecord,
-  otherInfo          OtherInformation OPTIONAL}
---
-  PresentResponse ::= SEQUENCE{
-  referenceId          ReferenceId OPTIONAL,
-  numberOfRecordsReturned    [24]  IMPLICIT INTEGER,
-   nextResultSetPosition    [25]  IMPLICIT INTEGER,
-    presentStatus          PresentStatus,
-  records          Records OPTIONAL,
-  otherInfo          OtherInformation OPTIONAL} 
--- begin auxiliary definitions for Search and Present APDUs
-
--- begin definition of records
-  Records ::= CHOICE{
-  responseRecords      [28]  IMPLICIT SEQUENCE OF NamePlusRecord,
-  nonSurrogateDiagnostic     [130]  IMPLICIT DefaultDiagFormat,
-  multipleNonSurDiagnostics   [205]  IMPLICIT SEQUENCE OF DiagRec} 
---
-  NamePlusRecord  ::=  SEQUENCE{
-  name    [0] IMPLICIT DatabaseName OPTIONAL,
-  record  [1] CHOICE{
-        retrievalRecord        [1] EXTERNAL,
-        surrogateDiagnostic    [2] DiagRec, 
-          -- Must select one of the above two, retrievalRecord or
-          -- surrogateDiagnostic, unless 'level 2 segmentation' is in effect.
-        startingFragment    [3] FragmentSyntax,
-        intermediateFragment  [4] FragmentSyntax,
-        finalFragment    [5] FragmentSyntax}}
-  FragmentSyntax ::= CHOICE{
-    externallyTagged    EXTERNAL,
-    notExternallyTagged  OCTET STRING}
-
-  DiagRec ::= CHOICE{
-      defaultFormat    DefaultDiagFormat,
-                -- Must choose defaultFormat if version 2 is in effect.
-      externallyDefined    EXTERNAL}
-
-  DefaultDiagFormat::= SEQUENCE{ 
-  diagnosticSetId  OBJECT IDENTIFIER,
-  condition    INTEGER,
-  addinfo      CHOICE{
-           v2Addinfo  VisibleString,  -- version 2
-           v3Addinfo  InternationalString  -- version 3
-            }}
-  -- end definition of records
-  Range  ::= SEQUENCE{
-    startingPosition    [1] IMPLICIT INTEGER,
-    numberOfRecords    [2] IMPLICIT INTEGER} 
---
-  ElementSetNames ::= CHOICE {
-    genericElementSetName  [0] IMPLICIT InternationalString,
-    databaseSpecific    [1] IMPLICIT SEQUENCE OF SEQUENCE{
-              dbName  DatabaseName,
-              esn    ElementSetName}}
-
-  PresentStatus   ::=    [27]  IMPLICIT INTEGER{
-                            success  (0),
-                             partial-1   (1),
-                              partial-2   (2),
-              partial-3   (3),
-                                      partial-4   (4),
-                               failure    (5)}
-
--- begin definition of composition specification
-  CompSpec ::= SEQUENCE{
-  selectAlternativeSyntax  [1] IMPLICIT BOOLEAN,
-            -- See comment for recordSyntax, below.
-  generic             [2] IMPLICIT Specification OPTIONAL,
-  dbSpecific      [3] IMPLICIT SEQUENCE OF SEQUENCE{
-                db  [1] DatabaseName,
-                spec  [2] IMPLICIT Specification} OPTIONAL,
-    -- At least one of generic and dbSpecific must occur, and both may occur. If both, then for
-     -- any record not in the list of databases within dbSpecific, generic applies.
-   recordSyntax               [4] IMPLICIT SEQUENCE OF OBJECT IDENTIFIER OPTIONAL
-               -- For each record, the target selects the first record syntax
-               -- in this list that it can support.  If the list is exhausted, the
-               -- target may select an alternative syntax if
-               -- selectAlternativeSyntax is 'true'.
-        }
-  Specification ::= SEQUENCE{
-  schema CHOICE {
-              oid [1]   IMPLICIT OBJECT IDENTIFIER,
-              uri [300] IMPLICIT InternationalString
-  } OPTIONAL,
-  elementSpec    [2] CHOICE{
-              elementSetName   [1] IMPLICIT InternationalString,
-          externalEspec  [2] IMPLICIT EXTERNAL} OPTIONAL}
--- end definition of composition specification
--- end auxiliary definitions for search and response APDUs
-
--- Delete APDUs
-  DeleteResultSetRequest ::= SEQUENCE{
-  referenceId          ReferenceId OPTIONAL,
-      deleteFunction      [32]  IMPLICIT INTEGER{
-                    list   (0),
-                    all   (1)},
-   resultSetList          SEQUENCE OF ResultSetId OPTIONAL,
-  otherInfo          OtherInformation OPTIONAL} 
---
-  DeleteResultSetResponse ::= SEQUENCE{
-  referenceId          ReferenceId OPTIONAL,
-    deleteOperationStatus    [0]  IMPLICIT DeleteSetStatus,
-  deleteListStatuses      [1]  IMPLICIT ListStatuses OPTIONAL,
-  numberNotDeleted       [34]  IMPLICIT INTEGER OPTIONAL,
-     bulkStatuses        [35]   IMPLICIT ListStatuses OPTIONAL,
-   deleteMessage      [36]  IMPLICIT InternationalString OPTIONAL,
-  otherInfo          OtherInformation OPTIONAL}
-  ListStatuses ::= SEQUENCE OF SEQUENCE{ 
-        id  ResultSetId, 
-        status  DeleteSetStatus}
-
-  DeleteSetStatus ::= [33] IMPLICIT INTEGER{
-                  success          (0),
-                   resultSetDidNotExist      (1),
-                    previouslyDeletedByTarget      (2),
-                     systemProblemAtTarget      (3),
-                   accessNotAllowed        (4),
-      resourceControlAtOrigin      (5),
-                   resourceControlAtTarget      (6),
-                    bulkDeleteNotSupported      (7),
-                   notAllRsltSetsDeletedOnBulkDlte    (8),
-      notAllRequestedResultSetsDeleted    (9),
-      resultSetInUse        (10)}
---
-
---Access- and Resource-control APDUs
---
-  AccessControlRequest ::= SEQUENCE{
-  referenceId        ReferenceId OPTIONAL,
-  securityChallenge      CHOICE{
-              simpleForm      [37] IMPLICIT OCTET STRING,
-               externallyDefined    [0]  EXTERNAL},
-  otherInfo        OtherInformation OPTIONAL}
-
-  AccessControlResponse ::= SEQUENCE{
-  referenceId        ReferenceId OPTIONAL,
-  securityChallengeResponse  CHOICE{
-              simpleForm      [38]   IMPLICIT OCTET STRING,
-               externallyDefined    [0]  EXTERNAL} OPTIONAL,
-              -- Optional only in version 3; mandatory in version 2. If
-              -- omitted (in version 3) then diagnostic must occur.
-  diagnostic    [223]    DiagRec OPTIONAL, -- Version 3 only.
-  otherInfo        OtherInformation OPTIONAL}
-
-
-
-  ResourceControlRequest ::= SEQUENCE{
-  referenceId          ReferenceId OPTIONAL,
-  suspendedFlag      [39]  IMPLICIT BOOLEAN OPTIONAL,
-  resourceReport      [40]  ResourceReport OPTIONAL,
-  partialResultsAvailable    [41]  IMPLICIT INTEGER{
-                subset    (1),
-                interim  (2),
-                none    (3)} OPTIONAL,
-  responseRequired      [42]   IMPLICIT BOOLEAN, 
-  triggeredRequestFlag    [43]   IMPLICIT BOOLEAN OPTIONAL,
-  otherInfo          OtherInformation OPTIONAL}
-
-
-  ResourceControlResponse ::= SEQUENCE{
-     referenceId          ReferenceId OPTIONAL,
-    continueFlag       [44]   IMPLICIT BOOLEAN, 
-  resultSetWanted      [45]  IMPLICIT BOOLEAN OPTIONAL,
-  otherInfo          OtherInformation OPTIONAL}
-
-
-
-  TriggerResourceControlRequest ::= SEQUENCE{
-     referenceId          ReferenceId OPTIONAL,
-  requestedAction      [46]  IMPLICIT INTEGER{
-                resourceReport  (1),
-                resourceControl  (2),
-                cancel      (3)}, 
-  prefResourceReportFormat    [47]   IMPLICIT ResourceReportId OPTIONAL,
-  resultSetWanted      [48]   IMPLICIT BOOLEAN OPTIONAL,
-  otherInfo          OtherInformation OPTIONAL}
-
-
-
-  ResourceReportRequest ::= SEQUENCE{
-     referenceId          ReferenceId OPTIONAL,
-  opId          [210]  IMPLICIT ReferenceId OPTIONAL,
-  prefResourceReportFormat    [49]   IMPLICIT ResourceReportId OPTIONAL,
-  otherInfo          OtherInformation OPTIONAL}
---
-  ResourceReportResponse ::= SEQUENCE{
-     referenceId          ReferenceId OPTIONAL,
-  resourceReportStatus    [50]   IMPLICIT INTEGER{
-                success    (0),
-                partial    (1),
-                failure-1    (2),
-                failure-2    (3),
-                failure-3    (4),
-                failure-4    (5),
-                failure-5    (6),
-                failure-6    (7)},
-  resourceReport               [51]   ResourceReport OPTIONAL,
-  otherInfo          OtherInformation OPTIONAL}
---
-   ResourceReport     ::=   EXTERNAL
-  ResourceReportId    ::=    OBJECT IDENTIFIER
-
---Scan APDUs
-  ScanRequest ::= SEQUENCE{
-  referenceId              ReferenceId OPTIONAL,
-    databaseNames        [3]  IMPLICIT SEQUENCE OF DatabaseName,
-    attributeSet            AttributeSetId OPTIONAL,
-    termListAndStartPoint        AttributesPlusTerm,
-    stepSize           [5]   IMPLICIT INTEGER OPTIONAL,
-    numberOfTermsRequested         [6]   IMPLICIT INTEGER,
-    preferredPositionInResponse      [7]   IMPLICIT INTEGER OPTIONAL,
-    otherInfo            OtherInformation OPTIONAL}
-
-  ScanResponse ::= SEQUENCE{
-   referenceId              ReferenceId OPTIONAL,
-   stepSize           [3]  IMPLICIT INTEGER OPTIONAL,
-   scanStatus           [4]  IMPLICIT INTEGER {
-                                success   (0),
-                                partial-1   (1),
-                                partial-2   (2),
-                                partial-3   (3),
-                                partial-4   (4),
-                                partial-5   (5),
-                                failure  (6) },
-   numberOfEntriesReturned       [5]  IMPLICIT INTEGER,
-   positionOfTerm         [6]  IMPLICIT INTEGER OPTIONAL,
-   entries           [7]  IMPLICIT ListEntries  OPTIONAL,  
-   attributeSet          [8]  IMPLICIT AttributeSetId OPTIONAL,
-   otherInfo            OtherInformation OPTIONAL}
-
--- begin auxiliary definitions for Scan
-  ListEntries ::= SEQUENCE{
-  entries        [1]   IMPLICIT SEQUENCE OF Entry OPTIONAL,
-    nonsurrogateDiagnostics    [2]  IMPLICIT SEQUENCE OF DiagRec OPTIONAL
-    -- At least one of entries and nonsurrogateDiagnostics must occur
-          }
-
-  Entry  ::= CHOICE {
-     termInfo               [1]   IMPLICIT TermInfo,
-     surrogateDiagnostic    [2]   DiagRec}
---
-  TermInfo ::= SEQUENCE {
-   term                    Term,
-     displayTerm      [0]   IMPLICIT InternationalString OPTIONAL,
-                                     -- Presence of displayTerm means that term is not considered by
-              -- the target to be suitable for display, and displayTerm should
-              -- instead be displayed. 'term' is the actual term in the term list;
-               -- 'displayTerm' is for display purposes only, and is not an actual
-              -- term in the term list.
-  suggestedAttributes            AttributeList OPTIONAL,
-     alternativeTerm    [4]  IMPLICIT SEQUENCE OF AttributesPlusTerm OPTIONAL, 
-     globalOccurrences    [2]  IMPLICIT INTEGER OPTIONAL,
-     byAttributes      [3]  IMPLICIT OccurrenceByAttributes OPTIONAL,
-     otherTermInfo      OtherInformation OPTIONAL} 
-
-  OccurrenceByAttributes ::= SEQUENCE OF SEQUENCE{
-     attributes    [1]  AttributeList, 
-     occurrences       CHOICE{
-               global    [2] INTEGER,
-            byDatabase  [3] IMPLICIT SEQUENCE OF SEQUENCE{ 
-              db      DatabaseName,
-              num     [1]  IMPLICIT INTEGER OPTIONAL,
-              otherDbInfo    OtherInformation OPTIONAL}} OPTIONAL,
-     otherOccurInfo    OtherInformation OPTIONAL} 
--- end auxiliary definitions for Scan
-
--- Sort APDUs
-SortRequest  ::= SEQUENCE{
-  referenceId              ReferenceId OPTIONAL,
-  inputResultSetNames  [3]  IMPLICIT SEQUENCE OF InternationalString,
-  sortedResultSetName  [4]    IMPLICIT InternationalString,
-  sortSequence     [5]  IMPLICIT SEQUENCE OF SortKeySpec,
-              -- order of occurrence is from major to minor
-  otherInfo        OtherInformation OPTIONAL}
-
-SortResponse  ::= SEQUENCE{
-  referenceId          ReferenceId OPTIONAL,
-  sortStatus         [3]  IMPLICIT INTEGER{
-                            success  (0), 
-              partial-1  (1),
-              failure  (2)},
-  resultSetStatus    [4]  IMPLICIT INTEGER{
-              empty    (1), 
-                  interim  (2), 
-                  unchanged  (3),
-              none    (4)} OPTIONAL,
-  diagnostics        [5]             IMPLICIT SEQUENCE OF DiagRec OPTIONAL,
-  resultCount        [6]             IMPLICIT INTEGER OPTIONAL,
-  otherInfo        OtherInformation OPTIONAL}
-
--- begin auxiliary definitions for Sort
-  SortKeySpec ::= SEQUENCE{
-    sortElement      SortElement, 
-       sortRelation    [1]  IMPLICIT INTEGER{
-                                ascending      (0),
-              descending      (1),
-              ascendingByFrequency    (3),
-              descendingByfrequency  (4)},
-      caseSensitivity    [2]   IMPLICIT INTEGER{
-                                 caseSensitive      (0), 
-              caseInsensitive    (1)},
-      missingValueAction    [3]   CHOICE{
-                                     abort    [1] IMPLICIT NULL,
-                                     null      [2] IMPLICIT NULL,
-                    --supply a null value for missing value
-          missingValueData  [3] IMPLICIT OCTET STRING} OPTIONAL}
-
-  SortElement ::=   CHOICE{
-    generic        [1] SortKey,
-       datbaseSpecific    [2] IMPLICIT SEQUENCE OF SEQUENCE{
-                       databaseName  DatabaseName,
-                       dbSort    SortKey}} 
-
-  SortKey ::= CHOICE{
-    sortfield       [0]  IMPLICIT InternationalString,
-                  -- An element, element-group-tag, or alias supported by the target
-               -- and denoting a set of elements associated with each record.
-     elementSpec    [1]  IMPLICIT Specification,
-        sortAttributes    [2]  IMPLICIT SEQUENCE{
-              id  AttributeSetId,
-              list  AttributeList}}
--- end auxiliary definitions for sort
-
-
-
--- Extended Service APDUs
-  ExtendedServicesRequest  ::= SEQUENCE{
-  referenceId              ReferenceId OPTIONAL,
-  function      [3]  IMPLICIT INTEGER {
-              create    (1),
-              delete    (2),
-              modify  (3)},
-  packageType      [4]  IMPLICIT OBJECT IDENTIFIER,
-  packageName    [5]  IMPLICIT InternationalString OPTIONAL,
-              -- PackageName mandatory for 'modify' or 'delete'; optional for
-              -- 'create'. Following four parameters mandatory for 'create'; should
-              -- be included on 'modify' if being modified; not needed on 'delete'.
-  userId        [6]   IMPLICIT InternationalString OPTIONAL,
-  retentionTime    [7]   IMPLICIT IntUnit OPTIONAL,
-  permissions      [8]   IMPLICIT Permissions OPTIONAL,
-  description      [9]   IMPLICIT InternationalString OPTIONAL,
-
--- (ExtendedServiceRequest APDU continued)
-  taskSpecificParameters  [10]  IMPLICIT EXTERNAL OPTIONAL, 
-              -- Mandatory for 'create'; included on 'modify' if specific
-              -- parameters being modified; not necessary on 'delete'. For the
-              -- 'EXTERNAL,' use OID of specific ES definition and select
-              --  CHOICE [1]: 'esRequest'.
-  waitAction      [11]  IMPLICIT INTEGER{
-              wait      (1),
-              waitIfPossible  (2),
-              dontWait    (3),
-              dontReturnPackage  (4)},
-  elements          ElementSetName OPTIONAL,
-  otherInfo          OtherInformation OPTIONAL}
---
-
-ExtendedServicesResponse ::= SEQUENCE{
-  referenceId                ReferenceId OPTIONAL,
-  operationStatus    [3]    IMPLICIT INTEGER{
-                done      (1),
-                accepted    (2),  
-                failure    (3)},
-  diagnostics      [4]    IMPLICIT SEQUENCE OF DiagRec OPTIONAL,
-  taskPackage      [5]    IMPLICIT EXTERNAL OPTIONAL,
-                -- Use OID: {Z39-50-recordSyntax (106)} and corresponding
-                -- syntax. For the EXTERNAL, 'taskSpecific,' within that
-                -- definition, use OID of the specific es, and choose [2],
-                -- 'taskPackage'.
-  otherInfo          OtherInformation OPTIONAL}
-
- Permissions ::= SEQUENCE OF SEQUENCE{
-  userId      [1] IMPLICIT InternationalString,
-  allowableFunctions  [2] IMPLICIT SEQUENCE OF INTEGER{
-              delete      (1),
-              modifyContents  (2),
-              modifyPermissions  (3),
-              present    (4),
-                 invoke    (5)}} 
-
-Close ::= SEQUENCE{
-  referenceId          ReferenceId OPTIONAL,  -- See 3.2.11.1.5.
-  closeReason          CloseReason,
-  diagnosticInformation    [3]  IMPLICIT InternationalString OPTIONAL,
-  resourceReportFormat    [4]  IMPLICIT ResourceReportId OPTIONAL, 
-                -- For use by origin only, and only on Close request;
-                -- origin requests target to include report in response.
-   resourceReport      [5]  ResourceReport OPTIONAL,
-                -- For use by target only, unilaterally on Close request;
-                -- on Close response may be unilateral or in response
-                -- to origin request.
-  otherInfo          OtherInformation OPTIONAL}
-
-  CloseReason ::=  [211]  IMPLICIT INTEGER{
-            finished      (0),
-            shutdown      (1),
-            systemProblem    (2),
-            costLimit      (3),
-            resources      (4),
-            securityViolation    (5),
-            protocolError    (6),
-            lackOfActivity    (7),
-            peerAbort      (8),
-            unspecified      (9)}
-
---Duplicate detection APDUs
-DuplicateDetectionRequest ::= SEQUENCE {
-  referenceId                      ReferenceId  OPTIONAL,
-  inputResultSetIds            [3] IMPLICIT SEQUENCE OF InternationalString,
-  outputResultSetName          [4] IMPLICIT InternationalString,
-  applicablePortionOfRecord    [5] IMPLICIT EXTERNAL OPTIONAL,
-  duplicateDetectionCriteria   [6] IMPLICIT SEQUENCE OF
-                                   DuplicateDetectionCriterion OPTIONAL,
-  clustering                   [7] IMPLICIT BOOLEAN OPTIONAL,
-                                        -- 'true' means "clustered".
-                                        -- This parameter may be omitted
-                                        -- only if retentionCriteria CHOICE is
-                                        -- 'numberOfEntries' and its value is 1.
-  retentionCriteria            [8] IMPLICIT SEQUENCE OF
-                                            RetentionCriterion,
-  sortCriteria                 [9] IMPLICIT SEQUENCE OF
-                                            SortCriterion OPTIONAL,
-  otherInfo                        OtherInformation OPTIONAL}
-
-DuplicateDetectionCriterion ::= CHOICE{
-                           levelOfMatch         [1] IMPLICIT INTEGER,
-                                -- a percentage; 1-100.
-                           caseSensitive        [2] IMPLICIT NULL,
-                           punctuationSensitive [3] IMPLICIT NULL,
-                           regularExpression    [4] IMPLICIT EXTERNAL,
-                           rsDuplicates         [5] IMPLICIT NULL
-                 -- values 6-100 reserved for future assignment.
-                                                       }
-
-RetentionCriterion ::= CHOICE{
-                          numberOfEntries       [1] IMPLICIT INTEGER, 
-                                                        --  greater than 0
-                          percentOfEntries      [2] IMPLICIT INTEGER,
-                                                        -- 1-100,
-                          duplicatesOnly        [3] IMPLICIT NULL,
-                                                 -- should not be chosen 
-                                                 -- if clustering is 'true'
-                          discardRsDuplicates   [4] IMPLICIT NULL
-                 -- values 5-100 reserved for future assignment.
-                                                       }
-
-SortCriterion ::= CHOICE{
-                         mostComprehensive      [1] IMPLICIT NULL,
-                         leastConmprehensive    [2] IMPLICIT NULL,
-                         mostRecent             [3] IMPLICIT NULL,
-                         oldest                 [4] IMPLICIT NULL,
-                         leastCost              [5] IMPLICIT NULL,
-                         preferredDatabases     [6] IMPLICIT
-                                     SEQUENCE OF InternationalString
-                 -- values 7-100 reserved for future assignment.
-}
-
-DuplicateDetectionResponse ::= SEQUENCE {
-  referenceId                          ReferenceId  OPTIONAL,
-  status                       [3]     IMPLICIT INTEGER{
-                                         success               (0),
-                                         failure               (1)},
-  resultSetCount               [4]     IMPLICIT INTEGER OPTIONAL,
-  diagnostics                  [5]     IMPLICIT SEQUENCE OF DiagRec OPTIONAL,
-  otherInfo                           OtherInformation OPTIONAL}
-
--- Global auxiliary definitions
-  ReferenceId       ::=      [2]  IMPLICIT OCTET STRING
-  ResultSetId        ::=      [31]    IMPLICIT InternationalString
-  ElementSetName     ::=     [103]   IMPLICIT InternationalString
-  DatabaseName     ::=    [105]   IMPLICIT InternationalString
-  AttributeSetId     ::=       OBJECT IDENTIFIER
-
-
--- OtherInformation
-  OtherInformation   ::= [201] IMPLICIT SEQUENCE OF SEQUENCE{
-    category            [1]   IMPLICIT InfoCategory OPTIONAL, 
-    information        CHOICE{
-      characterInfo        [2]  IMPLICIT InternationalString,
-      binaryInfo        [3]  IMPLICIT OCTET STRING,
-      externallyDefinedInfo    [4]  IMPLICIT EXTERNAL,
-      oid          [5]  IMPLICIT OBJECT IDENTIFIER}}
---
-  InfoCategory ::= SEQUENCE{
-      categoryTypeId  [1]   IMPLICIT OBJECT IDENTIFIER OPTIONAL,
-      categoryValue  [2]   IMPLICIT INTEGER}
-
-
--- Units
-  -- IntUnit is used when value and unit are supplied together. Unit, alone, is used when just
-  -- specifying a unit (without a value).  For example, IntUnit is used in Term, in an RPNQuery, or
-  -- it can be the datatype of an element within a retrieval record. Unit (alone) would be used in an
-  -- element request, when requesting data be returned according to a particular unit.
-
-  IntUnit ::= SEQUENCE{
-    value    [1] IMPLICIT INTEGER,
-    unitUsed  [2] IMPLICIT Unit}
---
-  Unit ::= SEQUENCE{
-    unitSystem    [1] InternationalString OPTIONAL,    -- e.g. 'SI'
-    unitType    [2] StringOrNumeric OPTIONAL,    -- e.g. 'mass'
-    unit      [3] StringOrNumeric OPTIONAL,    -- e.g. 'kilograms'
-    scaleFactor    [4] IMPLICIT INTEGER OPTIONAL    -- e.g. 9 means 10**9
-        }
-
---CharacterString
-  InternationalString ::= GeneralString
-    -- When version 2 is in force, this collapses to VisibleString. That is, only characters in the
-    -- visibleString repertoire may be used. (Datatype compatibility with version 2 is not affected,
-     -- because references are IMPLICIT.)  When version 3 is in force, the semantics of the
-    -- GeneralString content may be altered by negotiation during initialization. If no such
-    -- negotiation is in effect, then GeneralString semantics are in force.
-
-StringOrNumeric ::= CHOICE{
-  string    [1] IMPLICIT InternationalString,
-  numeric  [2] IMPLICIT INTEGER}
-
-END -- IR DEFINITIONS
-
-
-
-DiagnosticFormatDiag1 
-{Z39-50-diagnosticFormat diag-1 (2)} DEFINITIONS ::=
-BEGIN
-IMPORTS Term, Specification, AttributeList, SortElement, DatabaseName, 
-DefaultDiagFormat, InternationalString FROM Z39-50-APDU-1995;
-
-
-DiagnosticFormat ::=  SEQUENCE OF SEQUENCE{ 
-  diagnostic  [1] CHOICE{
-              defaultDiagRec    [1]  IMPLICIT DefaultDiagFormat,
-              explicitDiagnostic    [2]  DiagFormat} OPTIONAL, 
-  message  [2] IMPLICIT InternationalString OPTIONAL} 
-
-
-DiagFormat ::= CHOICE{
-
-tooMany  [1000]   IMPLICIT SEQUENCE{
-                tooManyWhat   [1]  IMPLICIT INTEGER{
-                                  argumentWords        (1), 
-                                  truncatedWords        (2), 
-                                  booleanOperators      (3),
-                                  incompleteSubfields    (4), 
-                                  characters          (5),
-                                  recordsRetrieved      (6), 
-                                  dataBasesSpecified      (7),
-                                  resultSetsCreated      (8), 
-                                  indexTermsProcessed    (9)},
-                max        [2]  IMPLICIT INTEGER OPTIONAL},
-
-
-
-
-
-
-
-badSpec    [1001]  IMPLICIT SEQUENCE{  -- element set name or specification
-                spec        [1] IMPLICIT Specification, -- esn or element spec not supported
-                db        [2] IMPLICIT DatabaseName OPTIONAL,
-                            -- if db specified, above spec not supported for db; otherwise,
-                            -- spec not supported period.
-                goodOnes    [3] IMPLICIT SEQUENCE OF Specification OPTIONAL  
-                            -- target supplies ones that are supported
-                            },
-
-
-dbUnavail  [1002]  IMPLICIT SEQUENCE{ -- database unavailable
-                db  [1] IMPLICIT DatabaseName,
-                why  [2] IMPLICIT SEQUENCE{
-                        reasonCode  [1] IMPLICIT INTEGER{
-                                      doesNotExist    (0),
-                                      existsButUnavail  (1),
-                                      locked      (2),
-                                      accessDenied    (3)} OPTIONAL,
-                        message    [2] IMPLICIT InternationalString OPTIONAL}},
-
-
-unSupOp  [1003]  IMPLICIT INTEGER{  -- unsupported operator
-                and     (0),
-                or      (1),
-                and-not  (2),
-                prox    (3)},
-
-
-attribute    [1004]  IMPLICIT SEQUENCE{
-                    -- Applies for unsupported attribute set, attribute type, 
-                    -- attribute value, or term (for a given attribute type or value).
-
-                id      [1]  IMPLICIT OBJECT IDENTIFIER,
-                   -- if only "id" occurs, then attribute set is not supported
-                type    [2]  IMPLICIT INTEGER OPTIONAL,
-                   -- must occur if value occurs.
-                value    [3]   IMPLICIT INTEGER OPTIONAL,
-                    -- if omitted, and Type occurs, then Type is what is unsupported
-                term    [4]  Term OPTIONAL
-                    -- If occurs, term is illegal or not supported, for attribute value,
-                    -- if value occurs; otherwise, for type.
-                                },
-
-
-attCombo  [1005]  IMPLICIT SEQUENCE{ -- attribute combination not supported
-              unsupportedCombination  [1] IMPLICIT AttributeList, 
-              recommendedAlternatives  [2] IMPLICIT SEQUENCE OF AttributeList OPTIONAL}, 
-
-
-
-
-term      [1006]  IMPLICIT SEQUENCE{
-                problem    [1] IMPLICIT INTEGER{
-                            codedValue  (1),
-                            unparsable  (2),
-                            tooShort    (3),
-                            type      (4)} OPTIONAL,
-                term      [2] Term},
-
-
-proximity  [1007] CHOICE{        -- proximity diagnostics:
-               resultSets  [1]    IMPLICIT NULL,         -- proximity between sets not supported
-              badSet    [2]    IMPLICIT InternationalString,  -- bad result set specified
-                 relation    [3]   IMPLICIT INTEGER,      -- 1 to 6 ; relation not supported
-              unit      [4]  IMPLICIT INTEGER,      -- unsupported unit code
-              distance    [5]  IMPLICIT INTEGER,      -- unsupported distance
-              attributes  [6]  AttributeList,             --  proximity not supported with specified
-                                                   -- attribute combination
-              ordered    [7]  IMPLICIT NULL,        -- ordered flag not supported
-              exclusion  [8]  IMPLICIT NULL          -- exclusion flag not supported
-                    },
-
-
-
-
-
-scan     [1008] CHOICE{      -- scan diagnostics:
-              nonZeroStepSize  [0] IMPLICIT NULL,  -- only zero step size supported
-              specifiedStepSize  [1] IMPLICIT NULL,  -- specified step size not supported
-              termList1      [3] IMPLICIT NULL,  -- term list not supported (no alternative supplied)
-              termList2      [4] IMPLICIT SEQUENCE OF AttributeList,
-                                          -- term list not supported (alternatives supplied)
-              posInResponse    [5] IMPLICIT INTEGER{  --value of positionInResponse not supported
-                              mustBeOne        (1),
-                              mustBePositive    (2),
-                              mustBeNonNegative  (3),
-                              other            (4)},
-              resources      [6] IMPLICIT NULL,   -- resources exhausted looking for satisfying terms
-              endOfList      [7] IMPLICIT NULL  -- beginning or end of term list
-                },
-
-
-sort       [1009] CHOICE{
-              sequence    [0]  IMPLICIT NULL,        -- cannot sort according to sequence
-              noRsName    [1]  IMPLICIT NULL,        -- no result set name supplied
-              tooMany    [2]  IMPLICIT INTEGER,      --  Too many input result sets,
-                                                --  maximum supplied.
-              incompatible  [3]  IMPLICIT NULL,        -- records with different formats
-                                                 -- not compatible for sorting
-              generic      [4]  IMPLICIT NULL,        -- generic sort not supported 
-                                                -- (db specific only)
-              dbSpecific    [5]  IMPLICIT NULL,        -- db specific sort not supported
-              sortElement    [6]  SortElement,
-              key        [7]  IMPLICIT INTEGER{
-                              tooMany  (1),    -- too many sort keys
-                              duplicate  (2)},    -- duplicate sort keys
-              action      [8]  IMPLICIT NULL,  -- unsupported missing data action
-              illegal      [9]  IMPLICIT INTEGER{
-                              relation  (1),  -- illegal sort relation
-                              case    (2),  -- illegal case value
-                              action  (3),   -- illegal missing data action
-                              sort    (4)},  -- illegal sort
-            inputTooLarge    [10]  IMPLICIT SEQUENCE OF InternationalString,
-                                      --   one or more of the input result sets too large to sort
-          aggregateTooLarge  [11]  IMPLICIT NULL  --  aggregate result set too large
-                          },
-
-segmentation  [1010]  CHOICE{
-                segmentCount  [0]    IMPLICIT NULL,
-                                  -- Cannot guarantee record will fit within max segments. Target
-                                  -- suggests that origin try again to retrieve record, without
-                                  -- including max-segment-count.
-                segmentSize  [1]    IMPLICIT INTEGER
-                                -- record cannot be segmented into fragments such that the largest
-                                -- will fit within max segment size specified. Target supplies (in
-                                -- bytes) the smallest acceptable value of Max-segment-size to
-                                -- retrieve the record.
-                          },
-
-
-extServices  [1011] CHOICE{
-                req        [1] IMPLICIT INTEGER{   -- bad request
-                            nameInUse    (1),  -- package name already in use
-                            noSuchName  (2),  -- no such package, on modify/delete
-                            quota        (3),  -- quota exceeded
-                            type        (4)},  -- extended service type not supported
-                permission  [2] IMPLICIT INTEGER{ -- permission denied on ES, because: 
-                            id         (1),    --   id not authorized, or
-                            modifyDelete  (2)},    -- cannot modify or delete
-                immediate  [3] IMPLICIT INTEGER{ -- immediate execution:
-                            failed      (1),    -- failed, 
-                            service      (2),    -- not supported for this service, or
-                            parameters    (3)    -- for these parameters.
-                                }},
-
-
-accessCtrl    [1012] CHOICE{
-                noUser    [1] IMPLICIT NULL,    -- no user to display challenge to
-                refused    [2] IMPLICIT NULL,    -- access control information refused by user
-                simple    [3] IMPLICIT NULL,    -- only simple form supported (target used
-                                          -- externally defined)
-                oid      [4] IMPLICIT SEQUENCE OF OBJECT IDENTIFIER,
-                                          -- oid not supported (origin supplies alternative
-                                          -- suggested oids)
-                alternative  [5] IMPLICIT SEQUENCE OF OBJECT IDENTIFIER,
-                                          -- origin insists that target use an alternative
-                                          -- challenge for this data (e.g. stronger                                     
-   
-                                          -- authentication or stronger Access control). The                            
-              -- origin supplies suggested alternative oids.
-                pwdInv    [6] IMPLICIT NULL,    -- password invalid
-                pwdExp    [7] IMPLICIT NULL      -- password expired
-                    },
-
-
-recordSyntax  [1013] IMPLICIT SEQUENCE{ -- record cannot be transferred in requested syntax
-              unsupportedSyntax    [1] IMPLICIT OBJECT IDENTIFIER, 
-              suggestedAlternatives  [2] IMPLICIT SEQUENCE OF OBJECT IDENTIFIER OPTIONAL}
-}
-
-END
-
-
-
-
-
-RecordSyntax-explain 
-{Z39-50-recordSyntax explain (100)} DEFINITIONS ::=
-
-BEGIN 
-IMPORTS AttributeSetId, Term, OtherInformation, DatabaseName, ElementSetName, IntUnit, Unit,
- StringOrNumeric, Specification, InternationalString, AttributeList, AttributeElement FROM Z39-50-APDU-1995;
-EXPORTS LanguageCode;
-
-Explain-Record ::= CHOICE{
-  -- Each of these may be used as search term  when Use attribute is 'explain-category'.
-  targetInfo         [0]    IMPLICIT TargetInfo,
-  databaseInfo      [1]    IMPLICIT DatabaseInfo,
-  schemaInfo        [2]    IMPLICIT SchemaInfo,
-  tagSetInfo         [3]    IMPLICIT TagSetInfo,
-  recordSyntaxInfo    [4]    IMPLICIT RecordSyntaxInfo,
-  attributeSetInfo    [5]    IMPLICIT AttributeSetInfo,
-  termListInfo      [6]    IMPLICIT TermListInfo,
-  extendedServicesInfo  [7]    IMPLICIT ExtendedServicesInfo,
-  attributeDetails      [8]    IMPLICIT AttributeDetails,
-  termListDetails    [9]    IMPLICIT TermListDetails,
-  elementSetDetails    [10]  IMPLICIT ElementSetDetails,
-  retrievalRecordDetails  [11]   IMPLICIT RetrievalRecordDetails,
-  sortDetails             [12]   IMPLICIT SortDetails,
-  processing           [13]  IMPLICIT ProcessingInformation,
-  variants          [14]  IMPLICIT VariantSetInfo,
-  units          [15]    IMPLICIT UnitInfo,
-  categoryList            [100]  IMPLICIT CategoryList}
-
--- Element set name 'B' (brief)  retrieves:
---  -  'commonInfo' (except for otherInfo within commonInfo)
---  -  key elements
---  -  other elements designated as 'non-key brief elements'
--- Esn 'description' retrieves brief elements as well as 'description', and specific additional descriptive
--- elements if designated.  
--- Element set name 'F' (full) retrieves all of the above, as well as those designated as "non-brief elements". Some
--- elements designated as OPTIONAL may be mandatory in full records, and are so identified. (Note that all elements
--- that are not part of the brief element set must be designated as OPTIONAL in the ASN.1, otherwise it would be
--- illegal to omit them.)
--- Other esns are defined (below) as needed.
-
--- - - - - - - - - - - - -   Info Records
-  -- Info records are mainly for software consumption
-  -- They describe individual entities within the target system:
-  --   The target itself
-  --   Individual databases
-  --   Schemas
-  --   Tag sets
-  --   Record syntaxes
-  --   Attribute sets
-  --   Term lists
-  --   Extended services
- --     The information about each Schema, Tag Set, Record Syntax and Attribute Set should
-  -- match the universal definitions of these items. The only exception is that a target may omit any
-  -- items it doesn't support, for example the description of the bib-1 attribute set may omit attributes
-  -- that the target does not support under any circumstances.
-  --      Databases that may be searched together can be listed in the dbCominations element of the TargetInfo record.  
-TargetInfo ::= SEQUENCE {
-  commonInfo      [0]    IMPLICIT CommonInfo OPTIONAL,
-    -- Key elements follow:
-  name          [1]    IMPLICIT InternationalString,
-    -- Non-key brief elements follow:
-  recent-news      [2]    IMPLICIT HumanString OPTIONAL,
-  icon          [3]    IMPLICIT IconObject OPTIONAL,
-  namedResultSets    [4]    IMPLICIT BOOLEAN,
-  multipleDBsearch    [5]    IMPLICIT BOOLEAN,
-  maxResultSets      [6]    IMPLICIT INTEGER OPTIONAL,
-  maxResultSize      [7]    IMPLICIT INTEGER OPTIONAL,
-  maxTerms        [8]    IMPLICIT INTEGER OPTIONAL,
-  timeoutInterval      [9]    IMPLICIT IntUnit OPTIONAL,
-  welcomeMessage    [10]  IMPLICIT HumanString OPTIONAL,
-    -- non-brief elements follow:
-  -- 'description' esn retrieves the following two (as well as brief):
-  contactInfo      [11]  IMPLICIT ContactInfo OPTIONAL,
-  description      [12]  IMPLICIT HumanString OPTIONAL,
-  nicknames        [13]  IMPLICIT SEQUENCE OF InternationalString OPTIONAL,
-  usage-restrictions    [14]  IMPLICIT HumanString OPTIONAL,
-  paymentAddr      [15]  IMPLICIT HumanString OPTIONAL,
-  hours          [16]  IMPLICIT HumanString OPTIONAL,
-  dbCombinations    [17]  IMPLICIT SEQUENCE OF DatabaseList OPTIONAL,
-  addresses        [18]  IMPLICIT SEQUENCE OF NetworkAddress OPTIONAL,
-  languages        [101]  IMPLICIT SEQUENCE OF InternationalString OPTIONAL,
-                  -- Languages supported for message strings.  Each is a three-character
-                  -- language code from Z39.53-1994.
--- characterSets      [102]  this tag reserved for "character sets supported for name and message strings".
-  -- commonAccessInfo elements list objects the target supports. All objects listed in
-  -- AccessInfo for any individual database should also be listed here.
-  commonAccessInfo  [19]  IMPLICIT AccessInfo OPTIONAL}
-
-
-DatabaseInfo ::= SEQUENCE {
-      -- A target may provide "virtual databases" that are combinations of individual database. These
-      -- databases are indicated by the presence of subDbs in the combination database's DatabaseDescription.
-  commonInfo        [0]    IMPLICIT CommonInfo OPTIONAL,
-    -- Key elements follow:
-  name            [1]    IMPLICIT DatabaseName,
-    -- Non-key brief elements follow:
-  explainDatabase      [2]             IMPLICIT NULL OPTIONAL,
-                       -- If present, this database is the Explain database, or an Explain database
-                    -- for a different server, possibly on a different host. The means by which
-                    -- that server may be accessed is not addressed by this standard. One
-                    -- suggested possibility is an implementor agreement whereby the
-                    -- database name is a url which may be used to connect to the server.
-  nicknames          [3]    IMPLICIT SEQUENCE OF DatabaseName OPTIONAL,
-  icon            [4]    IMPLICIT IconObject OPTIONAL,
-  user-fee          [5]    IMPLICIT BOOLEAN,
-  available          [6]    IMPLICIT BOOLEAN,
-  titleString          [7]    IMPLICIT HumanString OPTIONAL,
-    -- Non-brief elements follow:
-  keywords          [8]    IMPLICIT SEQUENCE OF HumanString OPTIONAL,
-  description        [9]    IMPLICIT HumanString OPTIONAL,
-  associatedDbs        [10]  IMPLICIT DatabaseList OPTIONAL,
-                    -- databases that may be searched in combination with this one 
-
-  subDbs          [11]  IMPLICIT DatabaseList OPTIONAL,
-                        -- When present, this database is a composite representing the combined
-                     -- databases 'subDbs'. The individual subDbs are also available.
-  disclaimers        [12]  IMPLICIT HumanString OPTIONAL,
-  news            [13]  IMPLICIT HumanString OPTIONAL,
-  recordCount           [14]    CHOICE {
-                                   actualNumber  [0] IMPLICIT INTEGER,
-                                    approxNumber  [1] IMPLICIT INTEGER} OPTIONAL,
-  defaultOrder        [15]  IMPLICIT HumanString OPTIONAL,
-  avRecordSize        [16]  IMPLICIT INTEGER OPTIONAL,
-  maxRecordSize      [17]  IMPLICIT INTEGER OPTIONAL,
-  hours            [18]  IMPLICIT HumanString OPTIONAL,
-  bestTime          [19]  IMPLICIT HumanString OPTIONAL,
-  lastUpdate          [20]  IMPLICIT GeneralizedTime OPTIONAL,
-  updateInterval        [21]  IMPLICIT IntUnit OPTIONAL,
-  coverage          [22]  IMPLICIT HumanString OPTIONAL,
-  proprietary        [23]  IMPLICIT BOOLEAN OPTIONAL, -- mandatory in full record
-  copyrightText        [24]  IMPLICIT HumanString OPTIONAL,
-  copyrightNotice      [25]  IMPLICIT HumanString OPTIONAL,
-  producerContactInfo    [26]  IMPLICIT ContactInfo OPTIONAL,
-  supplierContactInfo      [27]  IMPLICIT ContactInfo OPTIONAL,
-  submissionContactInfo    [28]  IMPLICIT ContactInfo OPTIONAL,
-    -- accessInfo lists items connected with the database. All listed items should be in the target's AccessInfo.
-  accessInfo                [29]  IMPLICIT AccessInfo OPTIONAL}
-
-
-SchemaInfo ::= SEQUENCE {
-  commonInfo    [0]  IMPLICIT CommonInfo OPTIONAL,
-    -- Key elements follow:
-  schema      [1]  IMPLICIT OBJECT IDENTIFIER,
-    -- Non-key brief elements follow:
-  name        [2]  IMPLICIT InternationalString,
-    -- Non-brief elements follow:
-  description    [3]  IMPLICIT HumanString OPTIONAL,
-  tagTypeMapping  [4]  IMPLICIT SEQUENCE OF SEQUENCE {
-              tagType    [0] IMPLICIT INTEGER,
-              tagSet       [1] IMPLICIT OBJECT IDENTIFIER OPTIONAL,
-                -- If tagSet is omitted, then this tagType is for a tagSet locally defined
-                -- within the schema that cannot be referenced by another schema.
-              defaultTagType  [2] IMPLICIT NULL OPTIONAL
-                        } OPTIONAL,
-  recordStructure  [5]  IMPLICIT SEQUENCE OF ElementInfo OPTIONAL}
-
-
-  --  ElementInfo referenced in SchemaInfo and RecordSyntaxInfo
-    ElementInfo ::= SEQUENCE {
-      elementName  [1] IMPLICIT InternationalString,
-      elementTagPath  [2] IMPLICIT Path,
-      dataType      [3] ElementDataType OPTIONAL, -- If omitted, not specified. 
-       required         [4] IMPLICIT BOOLEAN,
-      repeatable     [5] IMPLICIT BOOLEAN,
-       description    [6] IMPLICIT HumanString OPTIONAL}
-
-
-  -- Path is referenced by ElementInfo as well as PerElementDetails
-             Path ::= SEQUENCE OF SEQUENCE{
-              tagType  [1] IMPLICIT INTEGER,
-              tagValue     [2] StringOrNumeric}
-      ElementDataType ::= CHOICE{
-            primitive  [0] IMPLICIT PrimitiveDataType,
-           structured  [1] IMPLICIT SEQUENCE OF ElementInfo}
-      PrimitiveDataType ::= INTEGER{
-            octetString        (0),
-            numeric           (1),
-            date            (2),
-            external        (3),
-            string          (4),
-            trueOrFalse       (5),
-            oid         (6),
-            intUnit        (7),
-        empty        (8),
-            noneOfTheAbove  (100) -- see 'description'
-            }
-
-
-TagSetInfo ::= SEQUENCE {
-  commonInfo  [0]  IMPLICIT CommonInfo OPTIONAL,
-    -- Key elements follow:
-  tagSet      [1]  IMPLICIT OBJECT IDENTIFIER,
-    -- non-key brief elements follow:
-  name      [2]  IMPLICIT InternationalString,
-    -- non-brief elements follow:
-  description  [3]  IMPLICIT HumanString OPTIONAL,
-  elements    [4]  IMPLICIT SEQUENCE OF SEQUENCE {
-              elementname  [1]  IMPLICIT InternationalString,
-               nicknames    [2]  IMPLICIT SEQUENCE OF InternationalString OPTIONAL,
-              elementTag     [3]  StringOrNumeric, 
-              description    [4]  IMPLICIT HumanString OPTIONAL, 
-            dataType       [5]  PrimitiveDataType OPTIONAL,
-              -- If the data type is expected to be structured, that is described in the schema info,
-              -- and datatype is omitted here.
-             otherTagInfo       OtherInformation OPTIONAL} OPTIONAL}
-
-RecordSyntaxInfo ::= SEQUENCE {
-  commonInfo    [0]  IMPLICIT CommonInfo OPTIONAL,
-    -- Key elements follow:
-  recordSyntax    [1]  IMPLICIT OBJECT IDENTIFIER,
-    -- Non-key brief elements follow:
-  name        [2]  IMPLICIT InternationalString,
-    -- non-brief elements follow:
-  transferSyntaxes  [3]  IMPLICIT SEQUENCE OF OBJECT IDENTIFIER OPTIONAL,
-  description    [4]  IMPLICIT HumanString OPTIONAL,
-  asn1Module    [5]  IMPLICIT InternationalString OPTIONAL,
-  abstractStructure  [6]  IMPLICIT SEQUENCE OF ElementInfo OPTIONAL
-               -- Omitting abstractStructure only means target isn't using
-                 -- Explain to describe the structure, not that there is no structure.
-              }
-
-AttributeSetInfo ::= SEQUENCE {
-  commonInfo  [0]  IMPLICIT CommonInfo OPTIONAL,
-    -- Key elements follow:
-  attributeSet  [1]  IMPLICIT AttributeSetId,
-    -- non-key brief elements follow:
-  name      [2]  IMPLICIT InternationalString,
-    -- non-brief elements follow:
-  attributes    [3]  IMPLICIT SEQUENCE OF AttributeType OPTIONAL,
-            -- mandatory in full record
-  description   [4] IMPLICIT HumanString OPTIONAL}
--- AttributeType referenced in AttributeSetInfo
-  AttributeType ::= SEQUENCE {
-      name             [0] IMPLICIT InternationalString OPTIONAL,
-      description      [1] IMPLICIT HumanString OPTIONAL,
-       attributeType    [2] IMPLICIT INTEGER,
-      attributeValues  [3] IMPLICIT SEQUENCE OF AttributeDescription}
-    AttributeDescription ::= SEQUENCE {
-        name                 [0] IMPLICIT InternationalString OPTIONAL,
-        description          [1] IMPLICIT HumanString OPTIONAL,
-        attributeValue       [2] StringOrNumeric,
-        equivalentAttributes  [3]  IMPLICIT SEQUENCE OF StringOrNumeric OPTIONAL
-                  -- each is an occurrence of 'attributeValue' from AttributeDescription for a
-                  -- different attribute. Equivalences listed here should be derived from the 
-                  -- attribute set definition, not from a particular server's behavior.  
-                    }
-
-
-TermListInfo ::= SEQUENCE{
-  commonInfo    [0]  IMPLICIT CommonInfo OPTIONAL,
-    -- Key elements follow:
-  databaseName  [1]  IMPLICIT DatabaseName,
-    -- Non-key brief elements follow:
-  termLists      [2] IMPLICIT SEQUENCE OF SEQUENCE{
-            name    [1] IMPLICIT InternationalString,
-            title    [2] IMPLICIT HumanString OPTIONAL,
-                                            -- Title is for users to see and can differ by language. Name, on the
-                      -- other hand is typically a short string not necessarily meant to be
-                       -- human-readable, and not variable by language.
-            searchCost   [3]   IMPLICIT INTEGER {
-                  optimized  (0),    -- The attribute (or combination) associated
-                            -- with this   list will do fast searches. 
-                      normal      (1),    -- The attribute (combination) will work as
-                            -- expected. So there's probably an index for the
-                            -- attribute (combination) or some similar
-                             -- mechanism.
-                      expensive   (2),    -- Can use the attribute (combination), but it
-                            -- might not provide satisfactory results.
-                            -- Probably there is no index, or post-
-                            -- processing of records is required.
-                      filter      (3)    -- can't search with this attribute (combination) alone.
-                         } OPTIONAL,
-              scanable  [4]  IMPLICIT BOOLEAN, -- 'true' means this list can be scanned.
-               broader    [5] IMPLICIT SEQUENCE OF InternationalString OPTIONAL,
-               narrower  [6] IMPLICIT SEQUENCE OF InternationalString OPTIONAL
-                       -- broader and narrower list alternative term lists related to this one.
-                       -- The term lists so listed should also be in this termLists structure.
-                          }
-  -- no non-brief elements
-            }
-
-
-ExtendedServicesInfo ::= SEQUENCE {
-  commonInfo          [0]  IMPLICIT CommonInfo OPTIONAL,
-    -- Key elements follow:
-  type          [1]  IMPLICIT OBJECT IDENTIFIER,
-    -- Non-key brief elements follow:
-  name                [2]  IMPLICIT InternationalString OPTIONAL,
-                -- should be supplied if privateType is 'true'
-  privateType      [3]  IMPLICIT BOOLEAN,
-  restrictionsApply    [5]  IMPLICIT BOOLEAN,  -- if 'true' see 'description'
-  feeApply              [6]  IMPLICIT BOOLEAN,  -- if 'true' see 'description'
-  available             [7]  IMPLICIT BOOLEAN,
-  retentionSupported    [8]  IMPLICIT BOOLEAN,
-  waitAction      [9]  IMPLICIT INTEGER{
-                waitSupported    (1),
-                waitAlways      (2),
-                waitNotSupported  (3),
-                depends      (4),
-                notSaying      (5)},
-  -- non-brief elements follow:
-    -- To get brief plus 'description' use esn 'description'
-  description           [10]  IMPLICIT HumanString OPTIONAL,
-      -- to get above elements and 'specificExplain' use esn 'specificExplain'
-  specificExplain    [11]  IMPLICIT EXTERNAL OPTIONAL,
-                  -- Use oid of specific ES, and select choice [3] 'explain'. Format
-                  -- to be developed in conjunction with the specific ES definition.
-    -- to get all elements except 'specificExplain', use esn 'asn'
-  esASN          [12]  IMPLICIT InternationalString OPTIONAL -- the ASN.1 for this ES
-                }
-
--- - - - - - - - - - - - - Detail records
- -- The detail records describe relationships among entities supported by the target. RetrievalRecordDetails describes
- -- the way that schema elements are mapped into record elements. This mapping may be different for each
- -- combination of database, schema, record syntax. The per-element details describe the default mapping.
- -- Origin-request re-tagging can change that mapping. When multiple databases are listed in a databaseNames
- -- element, the record applies equally to all of the listed databases.  This is unrelated to searching the databases
- -- together. AttributeDetails describes how databases can be searched. Each supported attribute is listed, and the
- -- allowable combinations can be described.
-
-
-AttributeDetails ::= SEQUENCE {
-  commonInfo        [0]  IMPLICIT CommonInfo OPTIONAL,
-    -- Key elements follow:
-  databaseName        [1]  IMPLICIT DatabaseName,
-    -- Non-brief elements follow:
-  attributesBySet        [2]  IMPLICIT SEQUENCE OF AttributeSetDetails OPTIONAL, 
-                  -- mandatory in full record
-  attributeCombinations    [3]  IMPLICIT AttributeCombinations OPTIONAL}
-
-
-
-
--- AttributeSetDetails referenced by AttributeDetails
-  AttributeSetDetails ::= SEQUENCE {
-        attributeSet      [0] IMPLICIT AttributeSetId,
-          attributesByType  [1] IMPLICIT SEQUENCE OF AttributeTypeDetails }
-    AttributeTypeDetails ::= SEQUENCE {
-         attributeType     [0] IMPLICIT INTEGER,
-          defaultIfOmitted    [1] IMPLICIT OmittedAttributeInterpretation OPTIONAL,
-          attributeValues    [2] IMPLICIT SEQUENCE OF AttributeValue OPTIONAL }
-                          -- If no attributeValues are supplied, all values of this type are fully
-                    -- supported, and the descriptions in AttributeSetInfo are adequate.
-
-    OmittedAttributeInterpretation ::= SEQUENCE {
-        defaultValue           [0] StringOrNumeric OPTIONAL,
-                                -- A default value is listed if that's how the server works
-        defaultDescription  [1] IMPLICIT HumanString OPTIONAL }
-                          -- The human-readable description should generally be provided.
-                    -- It is legal for both default elements to be missing, which
-                    -- means that the target will allow the attribute type to be
-                    -- omitted, but isn't saying what it will do.
-
-    AttributeValue ::= SEQUENCE {
-        value              [0]  StringOrNumeric,
-        description        [1]  IMPLICIT HumanString OPTIONAL,
-        subAttributes     [2]  IMPLICIT SEQUENCE OF StringOrNumeric OPTIONAL,
-        superAttributes    [3]  IMPLICIT SEQUENCE OF StringOrNumeric OPTIONAL,
-        partialSupport    [4]  IMPLICIT NULL OPTIONAL }
-        -- partialSupport indicates that an attributeValue is accepted, but may not be processed in the
-        -- "expected" way. One important reason for this is composite databases: in this case partialSupport
-        -- may indicate that only some of the subDbs support the attribute, and others ignore it.
-
-
-
-TermListDetails ::= SEQUENCE{  -- one for each termList in TermListInfo
-  commonInfo    [0]  IMPLICIT CommonInfo OPTIONAL,
-    -- Key elements follow:
-  termListName    [1]  IMPLICIT InternationalString,
-    -- Non-key elements (all non-brief) follow:
-  description    [2]  IMPLICIT HumanString OPTIONAL,
-  attributes      [3]  IMPLICIT AttributeCombinations OPTIONAL,
-                          -- Pattern for attributes that hit this list. Mandatory in full record
-  scanInfo      [4]  IMPLICIT SEQUENCE {
-                maxStepSize         [0] IMPLICIT INTEGER OPTIONAL,
-                collatingSequence  [1] IMPLICIT HumanString OPTIONAL,
-                increasing            [2] IMPLICIT BOOLEAN OPTIONAL} OPTIONAL,
-            -- Occurs only if list is scanable. If list is scanable and if scanInfo is omitted, 
-            -- target doesn't consider these important.
-  estNumberTerms  [5]  IMPLICIT INTEGER OPTIONAL,
-  sampleTerms    [6]  IMPLICIT SEQUENCE OF Term OPTIONAL}
-
-
-
-ElementSetDetails ::= SEQUENCE {
-  -- ElementSetDetails describes the way that database records are mapped to record elements. This
-  -- mapping may be different for each combination of database name and element set. The database record
-   -- description is a schema, which may be private to the target. The schema's abstract record structure
-  -- and tag sets provide the vocabulary for discussing record content; their presence in the Explain
-  -- database does not imply support for complex retrieval specification.
-  commonInfo      [0]  IMPLICIT CommonInfo OPTIONAL,
-    -- Key elements follow:
-  databaseName      [1]  IMPLICIT DatabaseName,
-  elementSetName    [2]  IMPLICIT ElementSetName,
-  recordSyntax      [3]  IMPLICIT OBJECT IDENTIFIER,
-    -- Non-key Brief elements follow:
-  schema        [4]  IMPLICIT OBJECT IDENTIFIER,
-    -- Non-brief elements follow:
-  description      [5]  IMPLICIT HumanString OPTIONAL,
-  detailsPerElement    [6]  IMPLICIT SEQUENCE OF PerElementDetails OPTIONAL -- mandatory in full record
-              }
-
-
-RetrievalRecordDetails ::= SEQUENCE {
-  commonInfo      [0]  IMPLICIT CommonInfo OPTIONAL,
-    -- Key elements follow:
-  databaseName      [1]  IMPLICIT DatabaseName,
-  schema        [2]  IMPLICIT OBJECT IDENTIFIER,
-  recordSyntax      [3]  IMPLICIT OBJECT IDENTIFIER,
-    -- Non-brief elements follow:
-  description      [4]  IMPLICIT HumanString OPTIONAL,
-  detailsPerElement    [5]  IMPLICIT SEQUENCE OF PerElementDetails OPTIONAL
-                -- mandatory in full record
-            }
-
--- PerElementDetails is referenced in RetrievalRecordDetails and ElementSetDetails.
-  PerElementDetails ::= SEQUENCE {
-      name      [0]    IMPLICIT InternationalString OPTIONAL,
-                   -- If the name is omitted, the record syntax's name for this element
-                  -- is appropriate.
-      recordTag    [1]    IMPLICIT RecordTag OPTIONAL,
-                   -- The record tag may be omitted if tags are inappropriate for the record
-                  -- syntax, or if the origin can be expected to know it for some other reason.
-      schemaTags    [2]    IMPLICIT SEQUENCE OF Path OPTIONAL,
-                      -- The information from the listed schema elements is combined
-                  -- in some way to produce the data sent in the listed record tag. The
-                  -- 'contents' element below may describe the logic used.
-      maxSize    [3]    IMPLICIT INTEGER OPTIONAL,
-      minSize    [4]    IMPLICIT INTEGER OPTIONAL,
-      avgSize      [5]    IMPLICIT INTEGER OPTIONAL,
-      fixedSize    [6]    IMPLICIT INTEGER OPTIONAL,
-      repeatable    [8]    IMPLICIT BOOLEAN,
-      required    [9]    IMPLICIT BOOLEAN, 
-                  -- 'required' really means that target will always supply the element.
-      description    [12]  IMPLICIT HumanString OPTIONAL,
-      contents    [13]  IMPLICIT HumanString OPTIONAL,
-      billingInfo    [14]  IMPLICIT HumanString OPTIONAL,
-      restrictions    [15]  IMPLICIT HumanString OPTIONAL,
-      alternateNames  [16]  IMPLICIT SEQUENCE OF InternationalString OPTIONAL,
-      genericNames  [17]  IMPLICIT SEQUENCE OF InternationalString OPTIONAL,
-      searchAccess  [18]  IMPLICIT AttributeCombinations OPTIONAL }
-      -- RecordTag referenced in PerElementDetails above
-        RecordTag ::= SEQUENCE {
-              qualifier  [0] StringOrNumeric OPTIONAL,
-                    -- E.g. tag set for GRS-1
-              tagValue  [1] StringOrNumeric}
-
-SortDetails ::= SEQUENCE {
-  commonInfo    [0]  IMPLICIT CommonInfo OPTIONAL,
-  -- Key elements follow:
-  databaseName    [1]  IMPLICIT DatabaseName,
-    -- No non-key brief elements
-    -- Non-brief elements follow:
-  sortKeys      [2]  IMPLICIT SEQUENCE OF SortKeyDetails OPTIONAL
-              -- mandatory in full record
-          }
-  SortKeyDetails ::= SEQUENCE {
-      description        [0]  IMPLICIT HumanString OPTIONAL,
-      elementSpecifications  [1]  IMPLICIT SEQUENCE OF Specification OPTIONAL,
-                      -- each specification is a way of specifying this same sort key
-      attributeSpecifications  [2]  IMPLICIT AttributeCombinations OPTIONAL,
-                      -- each combination is a way of specifying this same sort key
-      sortType                   [3]  CHOICE {
-                    character    [0]  IMPLICIT NULL,
-                    numeric    [1]  IMPLICIT NULL,
-                    structured    [2]  IMPLICIT HumanString} OPTIONAL,
-      caseSensitivity      [4]  IMPLICIT INTEGER {
-                      always    (0),  -- always case-sensitive
-                    never    (1),            -- never case-sensitive
-                    default-yes  (2),               -- case-sensitivity is as specified on request, and if not
-                            -- specified, case-sensitive.
-                    default-no  (3)} -- case-sensitivity is as specified on request, and if not
-                            -- specified, not case-sensitive.
-                          OPTIONAL}
-
-ProcessingInformation ::= SEQUENCE{
-  commonInfo      [0]  IMPLICIT CommonInfo OPTIONAL,
-    -- Key elements follow:
-  databaseName      [1]  IMPLICIT DatabaseName,
-  processingContext    [2]  IMPLICIT INTEGER {
-                  access        (0),   -- e.g. choosing databases
-                  search        (1),   -- e.g. "search strategies" or search forms 
-                  retrieval      (2),   -- e.g. recommended element combinations 
-                  record-presentation  (3),    -- display of retrieved records
-                  record-handling    (4)    -- handling (e.g. saving) of retrieved records
-        },
-  name          [3]  IMPLICIT InternationalString,
-  oid          [4]  IMPLICIT OBJECT IDENTIFIER,
-    -- No non-key brief elements
-    -- Non-brief elements follow:
-  description      [5]  IMPLICIT HumanString OPTIONAL,
-                -- use element set name 'description' to retrieve all except instructions.
-  instructions      [6]  IMPLICIT EXTERNAL OPTIONAL -- mandatory in full record
-              }
-
-
-VariantSetInfo ::= SEQUENCE {
-    -- A record in this category describes a variant set definition, i.e., classes, types, and values, for a specific
-    -- variant set definition supported by the target. Support by the target of a particular variant set definition
-    -- does not imply that the definition is supported for any specific database or element. 
-  commonInfo    [0] IMPLICIT CommonInfo OPTIONAL,
-  -- Key elements follow:
-  variantSet    [1] IMPLICIT OBJECT IDENTIFIER,
-  -- Non-key brief elements follow:
-  name      [2] IMPLICIT InternationalString,
-  -- Non-brief elements follow:
-  variants    [3] IMPLICIT SEQUENCE OF VariantClass OPTIONAL
-                   -- mandatory in full record
-           }
-
-  -- Subsidiary structures for VariantSetInfo
-    VariantClass ::= SEQUENCE {
-          name        [0] IMPLICIT InternationalString OPTIONAL,
-          description    [1] IMPLICIT HumanString OPTIONAL,
-          variantClass    [2] IMPLICIT INTEGER,
-          variantTypes  [3] IMPLICIT SEQUENCE OF VariantType}
-    VariantType ::= SEQUENCE {
-          name            [0] IMPLICIT InternationalString OPTIONAL,
-          description     [1] IMPLICIT HumanString OPTIONAL,
-          variantType    [2] IMPLICIT INTEGER,
-          variantValue  [3] IMPLICIT VariantValue OPTIONAL}
-    VariantValue ::= SEQUENCE {
-          dataType     [0] PrimitiveDataType,
-          values        [1] ValueSet OPTIONAL }
-    ValueSet ::= CHOICE {
-          range       [0] IMPLICIT ValueRange,
-          enumerated  [1] IMPLICIT SEQUENCE OF ValueDescription }
-    ValueRange ::= SEQUENCE {
-            -- At last one the following must be supplied, both may be supplied.
-          lower      [0] ValueDescription OPTIONAL,
-          upper     [1] ValueDescription OPTIONAL }
-    ValueDescription ::= CHOICE{
-      integer             INTEGER,
-          string              InternationalString,
-          octets              OCTET STRING,
-          oid                 OBJECT IDENTIFIER,
-          unit               [1]  IMPLICIT Unit,
-          valueAndUnit   [2]  IMPLICIT IntUnit 
-            -- oid and unit can't be used in a ValueRange
-            }
-
-
-
-UnitInfo ::= SEQUENCE {
-  commonInfo  [0] IMPLICIT CommonInfo OPTIONAL,
-  -- Key elements follow:
-  unitSystem   [1] IMPLICIT InternationalString,
-   -- No non-key brief elements
-   -- Non-brief elements follow:
-  description   [2] IMPLICIT HumanString OPTIONAL,
-  units      [3] IMPLICIT SEQUENCE OF UnitType OPTIONAL
-                         -- mandatory in full record
-           }
-
-  -- Subsidiary structures for UnitInfo
-    UnitType ::= SEQUENCE {
-      name    [0] IMPLICIT InternationalString OPTIONAL,
-      description  [1] IMPLICIT HumanString OPTIONAL,
-      unitType  [2] StringOrNumeric,
-      units     [3] IMPLICIT SEQUENCE OF Units}
-
-    Units ::= SEQUENCE {
-      name     [0] IMPLICIT InternationalString OPTIONAL,
-      description  [1] IMPLICIT HumanString OPTIONAL,
-      unit      [2] StringOrNumeric}
-
-CategoryList ::= SEQUENCE {
-  commonInfo      [0] IMPLICIT CommonInfo OPTIONAL,
-    -- Only one record expected per Explain database. All elements appear in brief presentation.
-  categories      [1] IMPLICIT SEQUENCE OF CategoryInfo }
-    CategoryInfo ::= SEQUENCE {
-           category          [1] IMPLICIT InternationalString,
-            originalCategory    [2] IMPLICIT InternationalString OPTIONAL,
-          description         [3] IMPLICIT HumanString OPTIONAL,
-         asn1Module      [4] IMPLICIT InternationalString OPTIONAL}
-
-
--- - - - - - - - - - - - - - Subsidiary definitions
-
-CommonInfo ::= SEQUENCE {
-  dateAdded         [0] IMPLICIT GeneralizedTime OPTIONAL,
-  dateChanged       [1] IMPLICIT GeneralizedTime OPTIONAL,
-  expiry                [2] IMPLICIT GeneralizedTime OPTIONAL,
-  humanString-Language  [3] IMPLICIT LanguageCode OPTIONAL,
-  -- following not to occur for brief:
-  otherInfo          OtherInformation OPTIONAL}
-
-
-HumanString ::= SEQUENCE OF SEQUENCE {
-          language  [0] IMPLICIT LanguageCode OPTIONAL,
-        text        [1] IMPLICIT InternationalString}
-
-IconObject ::= SEQUENCE OF SEQUENCE{
-      -- Note that the "SEQUENCE OF" is to allow alternative representations of the same Icon; it is not
-      -- intended to allow multiple icons.
-  bodyType [1] CHOICE{
-           ianaType  [1] IMPLICIT InternationalString,
-          z3950type  [2] IMPLICIT InternationalString,
-           otherType  [3] IMPLICIT InternationalString},
-  content  [2] IMPLICIT OCTET STRING}
-
-
-LanguageCode ::= InternationalString  -- from ANSI/NISO Z39.53-1994 
-
-ContactInfo ::= SEQUENCE {
-  name           [0] IMPLICIT InternationalString OPTIONAL,
-  description  [1] IMPLICIT HumanString OPTIONAL,
-  address        [2] IMPLICIT HumanString OPTIONAL,
-  email         [3] IMPLICIT InternationalString OPTIONAL,
-  phone         [4] IMPLICIT InternationalString OPTIONAL}
-
-NetworkAddress ::= CHOICE {
-  internetAddress      [0] IMPLICIT SEQUENCE {
-                  hostAddress    [0]  IMPLICIT InternationalString,
-                  port       [1]  IMPLICIT INTEGER},
-  osiPresentationAddress    [1] IMPLICIT SEQUENCE { 
-                    pSel         [0] IMPLICIT InternationalString,  
-                    sSel         [1] IMPLICIT InternationalString OPTIONAL,  
-                    tSel        [2] IMPLICIT InternationalString OPTIONAL,  
-                    nSap      [3] IMPLICIT InternationalString},
-  other            [2] IMPLICIT SEQUENCE {  
-                      type        [0] IMPLICIT InternationalString,
-                address    [1] IMPLICIT InternationalString}}
-
-AccessInfo ::= SEQUENCE {
-    -- AccessInfo contains the fundamental information about what facilities are required to use this target
-    -- or server. For example, if an origin can handle none of the record syntaxes a database can provide, 
-    -- it might choose not to access the database.
-  queryTypesSupported  [0]    IMPLICIT SEQUENCE OF QueryTypeDetails OPTIONAL,
-  diagnosticsSets        [1]    IMPLICIT SEQUENCE OF OBJECT IDENTIFIER OPTIONAL,
-  attributeSetIds          [2]    IMPLICIT SEQUENCE OF AttributeSetId OPTIONAL,
-  schemas                [3]    IMPLICIT SEQUENCE OF OBJECT IDENTIFIER OPTIONAL,
-  recordSyntaxes         [4]    IMPLICIT SEQUENCE OF OBJECT IDENTIFIER OPTIONAL,
-  resourceChallenges    [5]    IMPLICIT SEQUENCE OF OBJECT IDENTIFIER OPTIONAL,
-  restrictedAccess       [6]    IMPLICIT AccessRestrictions OPTIONAL,
-  costInfo                 [8]    IMPLICIT Costs OPTIONAL,
-  variantSets       [9]    IMPLICIT SEQUENCE OF OBJECT IDENTIFIER OPTIONAL,
-  elementSetNames    [10]  IMPLICIT SEQUENCE OF ElementSetName OPTIONAL,
-  unitSystems      [11]  IMPLICIT SEQUENCE OF InternationalString}
-
--- begin auxiliary definitions for AccessInfo
--- Begin Query Details
-QueryTypeDetails ::= CHOICE {
-  private       [0]    IMPLICIT PrivateCapabilities,
-  rpn            [1]    IMPLICIT RpnCapabilities,
-  iso8777          [2]    IMPLICIT Iso8777Capabilities,
-  z39-58      [100]  IMPLICIT HumanString,
-  erpn        [101]  IMPLICIT RpnCapabilities,
-  rankedList      [102]  IMPLICIT HumanString}
-
-PrivateCapabilities ::= SEQUENCE {
-  operators       [0]  IMPLICIT SEQUENCE OF SEQUENCE {
-              operator  [0] IMPLICIT InternationalString,
-              description  [1] IMPLICIT HumanString OPTIONAL } OPTIONAL,
-  searchKeys    [1]  IMPLICIT SEQUENCE OF SearchKey OPTIONAL,  -- field names that can be searched
-  description    [2]  IMPLICIT SEQUENCE OF HumanString OPTIONAL }
-
-RpnCapabilities ::= SEQUENCE {
-  operators                    [0] IMPLICIT SEQUENCE OF INTEGER OPTIONAL,
-                                        -- Omitted means all operators are supported.
-  resultSetAsOperandSupported  [1] IMPLICIT BOOLEAN,
-  restrictionOperandSupported    [2] IMPLICIT BOOLEAN,
-  proximity                    [3] IMPLICIT ProximitySupport OPTIONAL}
-
-Iso8777Capabilities ::= SEQUENCE {
-  searchKeys  [0]  IMPLICIT SEQUENCE OF SearchKey,  -- field names that may be searched
-  restrictions   [1]  IMPLICIT HumanString OPTIONAL 
-            -- Omitted means supported, not specifying units.
-              }
-
-ProximitySupport ::= SEQUENCE {
-  anySupport      [0]   IMPLICIT BOOLEAN,
-          -- 'false' means no proximity support, in which case unitsSupported not supplied.
-  unitsSupported  [1]   IMPLICIT SEQUENCE OF CHOICE{  
-             known  [1] IMPLICIT INTEGER, -- values from KnownProximityUnit
-          private  [2] IMPLICIT SEQUENCE{  
-                      unit    [0] IMPLICIT INTEGER,  
-                description  [1] HumanString OPTIONAL}} OPTIONAL}
-
-SearchKey ::= SEQUENCE {
-  searchKey     [0]  IMPLICIT InternationalString,
-  description     [1]  IMPLICIT HumanString OPTIONAL }
--- End Query details
-AccessRestrictions ::= SEQUENCE OF SEQUENCE {
-  accessType      [0] INTEGER {
-                  any         (0),
-                  search         (1),
-                  present         (2),
-                  specific-elements  (3),
-                  extended-services  (4),
-            by-database      (5)},
-  accessText         [1]  IMPLICIT HumanString OPTIONAL,
-  accessChallenges  [2]  IMPLICIT SEQUENCE OF OBJECT IDENTIFIER OPTIONAL}
-
-Costs ::= SEQUENCE {
-  connectCharge    [0] IMPLICIT Charge OPTIONAL,    -- Per-connection charge
-  connectTime    [1] IMPLICIT Charge OPTIONAL,    -- Time-based charge
-  displayCharge     [2] IMPLICIT Charge OPTIONAL,    -- Per-record charge
-  searchCharge     [3] IMPLICIT Charge OPTIONAL,    -- Per-search charge
-  subscriptCharge  [4]  IMPLICIT Charge OPTIONAL,  -- Subscription charges
-  otherCharges    [5] IMPLICIT SEQUENCE OF SEQUENCE{   -- Other charges
-            forWhat  [1]  IMPLICIT HumanString,
-            charge    [2]  IMPLICIT Charge} OPTIONAL} 
-    Charge ::= SEQUENCE{
-        cost          [1] IMPLICIT IntUnit,
-        perWhat  [2] IMPLICIT Unit OPTIONAL,
-                      -- e.g. "second," "minute," "line," "record"...
-        text          [3] IMPLICIT HumanString OPTIONAL} 
--- End Auxiliary definitions for AccessInfo
-
-DatabaseList ::= SEQUENCE OF DatabaseName
-
-AttributeCombinations ::= SEQUENCE {
-  defaultAttributeSet  [0] IMPLICIT AttributeSetId,
-                 -- Default for the combinations. Also probably a good choice for the default
-              -- in searches, but that isn't required.
-  legalCombinations  [1] IMPLICIT SEQUENCE OF AttributeCombination }
-
-
-AttributeCombination ::= SEQUENCE OF AttributeOccurrence
-            -- An AttributeCombination is a pattern for legal combination of attributes
-
-
-AttributeOccurrence ::= SEQUENCE {   
-      -- An AttributeOccurrence lists the legal values for a specific attribute type in a combination.
-       attributeSet       [0]  IMPLICIT AttributeSetId OPTIONAL,
-       attributeType      [1]  IMPLICIT INTEGER,
-       mustBeSupplied  [2]  IMPLICIT NULL OPTIONAL,
-       attributeValues    CHOICE {
-                      any-or-none  [3] IMPLICIT NULL, -- All supported values are OK 
-                      specific    [4] IMPLICIT SEQUENCE OF StringOrNumeric}}
-                                                  -- Only these values allowed
-END
-
-
-
-
-
-
-
-
-
-RecordSyntax-SUTRS
-{Z39-50-recordSyntax SUTRS (101)} DEFINITIONS ::=
-BEGIN 
-IMPORTS InternationalString  FROM Z39-50-APDU-1995;
-        SutrsRecord ::=  InternationalString
--- Line terminator is ASCII LF (X'0A').
--- Recommended maximum line length is 72 characters.
-END
-
-
-
-
-
-RecordSyntax-opac
-{Z39-50-recordSyntax opac (102)} DEFINITIONS ::=
-BEGIN 
-IMPORTS InternationalString  FROM Z39-50-APDU-1995;
-OPACRecord ::= SEQUENCE {
-  bibliographicRecord   [1]   IMPLICIT EXTERNAL OPTIONAL,
-  holdingsData     [2]   IMPLICIT SEQUENCE OF HoldingsRecord OPTIONAL}
-HoldingsRecord ::=  CHOICE {
-  marcHoldingsRecord  [1]   IMPLICIT EXTERNAL,
-  holdingsAndCirc  [2]  IMPLICIT HoldingsAndCircData}
-HoldingsAndCircData ::=  SEQUENCE {
--- the following elements are required to display holdings in conformance with NISO standards.
-  typeOfRecord    [1]   IMPLICIT InternationalString OPTIONAL, -- LDR 06
-  encodingLevel    [2]   IMPLICIT InternationalString OPTIONAL, -- LDR 017
-  format      [3]   IMPLICIT InternationalString OPTIONAL, -- 007 00-01
-  receiptAcqStatus    [4]   IMPLICIT InternationalString OPTIONAL, -- 008 06
-  generalRetention    [5]   IMPLICIT InternationalString OPTIONAL, -- 008 12
-  completeness    [6]   IMPLICIT InternationalString OPTIONAL, -- 008 16
-       dateOfReport     [7]   IMPLICIT InternationalString OPTIONAL, -- 008 26-31
-  nucCode    [8]   IMPLICIT InternationalString OPTIONAL, -- 852 $a
-  localLocation    [9]   IMPLICIT InternationalString OPTIONAL, -- 852 $b
-  shelvingLocation  [10]   IMPLICIT InternationalString OPTIONAL, -- 852 $c
-  callNumber    [11]   IMPLICIT InternationalString OPTIONAL, -- 852 $h and $i
-  shelvingData     [12]   IMPLICIT InternationalString OPTIONAL, -- 852 $j thru $m
-  copyNumber    [13]   IMPLICIT InternationalString OPTIONAL, -- 852 $t
-  publicNote    [14]   IMPLICIT InternationalString OPTIONAL, -- 852 $z
-  reproductionNote  [15]   IMPLICIT InternationalString OPTIONAL, -- 843
-  termsUseRepro     [16]   IMPLICIT InternationalString OPTIONAL, -- 845
-  enumAndChron    [17]   IMPLICIT InternationalString OPTIONAL, -- all 85x, 86x
-  volumes     [18]   IMPLICIT SEQUENCE OF Volume OPTIONAL, 
-            -- repeats for each volume held
-  circulationData    [19]   IMPLICIT SEQUENCE OF CircRecord OPTIONAL 
-            -- repeats for each circulating item.
-            }
-Volume ::=  SEQUENCE {
-  enumeration    [1]   IMPLICIT InternationalString OPTIONAL,
-  chronology     [2]   IMPLICIT InternationalString OPTIONAL,
-  enumAndChron    [3]   IMPLICIT InternationalString OPTIONAL }
-CircRecord ::=  SEQUENCE {
-  availableNow    [1]   IMPLICIT BOOLEAN,
-  availablityDate    [2]   IMPLICIT InternationalString OPTIONAL,
-  availableThru      [3]   IMPLICIT InternationalString OPTIONAL,
-  restrictions     [4]   IMPLICIT InternationalString OPTIONAL,
-  itemId        [5]   IMPLICIT InternationalString OPTIONAL,
-  renewable        [6]   IMPLICIT BOOLEAN,
-  onHold        [7]   IMPLICIT BOOLEAN,
-  enumAndChron     [8]   IMPLICIT InternationalString OPTIONAL,
-  midspine    [9]   IMPLICIT InternationalString OPTIONAL,
-  temporaryLocation  [10]   IMPLICIT InternationalString OPTIONAL}
-END
-
-
-
-RecordSyntax-summary
-
-{Z39-50-recordSyntax summary (103)} DEFINITIONS ::=
-BEGIN 
-IMPORTS OtherInformation, InternationalString  FROM Z39-50-APDU-1995;
-BriefBib ::= SEQUENCE {
-  title           [1]   IMPLICIT InternationalString,
-  author            [2]   IMPLICIT InternationalString OPTIONAL,
-  callNumber         [3]   IMPLICIT InternationalString OPTIONAL,
-  recordType      [4]   IMPLICIT InternationalString OPTIONAL,
-  bibliographicLevel  [5]   IMPLICIT InternationalString OPTIONAL,
-  format        [6]   IMPLICIT SEQUENCE OF FormatSpec OPTIONAL,
-  publicationPlace    [7]   IMPLICIT InternationalString OPTIONAL,
-  publicationDate     [8]   IMPLICIT InternationalString OPTIONAL,
-  targetSystemKey   [9]   IMPLICIT InternationalString OPTIONAL,
-  satisfyingElement  [10]   IMPLICIT InternationalString OPTIONAL,
-  rank         [11]   IMPLICIT INTEGER OPTIONAL,
-  documentId     [12]   IMPLICIT InternationalString OPTIONAL,
-  abstract       [13]   IMPLICIT InternationalString OPTIONAL,
-  otherInfo        OtherInformation OPTIONAL}
-
-FormatSpec     ::=  SEQUENCE {
-  type         [1]   IMPLICIT InternationalString,
-  size      [2]   IMPLICIT INTEGER OPTIONAL,
-  bestPosn     [3]   IMPLICIT INTEGER OPTIONAL}
-END
-
-
-
-
-
-
-
-
-
-
-RecordSyntax-generic  -- For detailed semantics, see Appendix RET.
-{Z39-50-recordSyntax GRS-1 (105)} DEFINITIONS ::=
-BEGIN 
-EXPORTS Variant;
-IMPORTS IntUnit, Unit, InternationalString, StringOrNumeric, Term FROM Z39-50-APDU-1995;
-
-GenericRecord ::= SEQUENCE OF TaggedElement  
-TaggedElement ::= SEQUENCE {
-  tagType    [1] IMPLICIT INTEGER OPTIONAL,
-              -- If omitted, default should be supplied dynamically by tagSet-M; 
-              -- otherwise it should be statically specified by the schema.
-  tagValue    [2] StringOrNumeric,
-  tagOccurrence  [3] IMPLICIT INTEGER OPTIONAL,
-                             -- Occurrence within the database record, and relative to the parent. No
-              -- default; if omitted, target not telling or it is irrelevant.
-  content      [4] ElementData,
-  metaData    [5] IMPLICIT ElementMetaData OPTIONAL,
-  appliedVariant  [6] IMPLICIT Variant OPTIONAL}
-
-ElementData ::= CHOICE{
-  octets      OCTET STRING,
-  numeric    INTEGER,
-  date      GeneralizedTime,
-  ext        EXTERNAL,
-  string      InternationalString,
-  trueOrFalse    BOOLEAN,
-  oid        OBJECT IDENTIFIER,
-  intUnit          [1]  IMPLICIT IntUnit,
-   elementNotThere    [2] IMPLICIT NULL,  -- element requested but not there
-  elementEmpty      [3] IMPLICIT NULL,  -- element there, but empty
-  noDataRequested    [4] IMPLICIT NULL,  -- variant request said 'no data'
-  diagnostic        [5] IMPLICIT EXTERNAL,
-  subtree          [6] SEQUENCE OF TaggedElement -- recursive, for nested tags
-              }
-
-
-ElementMetaData ::= SEQUENCE{
-  seriesOrder        [1]   IMPLICIT Order OPTIONAL, -- only for a non-leaf node
-  usageRight        [2]   IMPLICIT Usage OPTIONAL,
-  hits            [3]    IMPLICIT SEQUENCE OF HitVector OPTIONAL,
-  displayName      [4]    IMPLICIT InternationalString OPTIONAL, 
-                    -- name for element that origin can use for display
-  supportedVariants    [5]   IMPLICIT SEQUENCE OF Variant OPTIONAL,
-  message        [6]    IMPLICIT InternationalString OPTIONAL,
-  elementDescriptor    [7]   IMPLICIT OCTET STRING OPTIONAL,
-  surrogateFor      [8]   IMPLICIT TagPath OPTIONAL,  
-                    -- the retrieved element is a surrogate for the element given by this path  
-  surrogateElement    [9]   IMPLICIT TagPath OPTIONAL,
-                    -- the element given by this path is a surrogate for the retrieved element
-    other          [99]  IMPLICIT EXTERNAL OPTIONAL}
-
-        TagPath ::= SEQUENCE  OF SEQUENCE{
-          tagType      [1]  IMPLICIT INTEGER OPTIONAL,
-            tagValue      [2]  StringOrNumeric,
-            tagOccurrence    [3]  IMPLICIT INTEGER OPTIONAL}
-
-
-
-Order ::= SEQUENCE{
-  ascending    [1] IMPLICIT BOOLEAN,
-              -- "true" means monotonically increasing (i.e. non-decreasing); 
-              -- "false" means monotonically decreasing (i.e. non-increasing).
-  order      [2] IMPLICIT INTEGER
-              -- Same as defined by 'elementOrdering' in tagSet-M, though this may be
-              -- overridden by schema.
-          }
-
-
-
-Usage ::= SEQUENCE  {
-  type        [1] IMPLICIT INTEGER{
-              redistributable    (1),   -- Element is freely redistributable.
-              restricted      (2),   -- Restriction contains statement.
-              licensePointer    (3)   -- Restriction contains license pointer.
-              },
-  restriction    [2] IMPLICIT InternationalString OPTIONAL}
-
-
-
-HitVector ::= SEQUENCE{ 
-    -- Each hit vector points to a fragment within the element, via location and/or token.
-  satisfier            Term OPTIONAL, -- sourceword, etc.
-  offsetIntoElement    [1] IMPLICIT IntUnit OPTIONAL,
-  length          [2] IMPLICIT IntUnit OPTIONAL,
-  hitRank          [3] IMPLICIT INTEGER OPTIONAL,
-  targetToken        [4] IMPLICIT OCTET STRING OPTIONAL
-                  -- Origin may use token subsequently within a variantRequest (in
-                  --  an elementRequest) to retrieve (or to refer to) the fragment.  
-              }
-
-
-
-
-Variant ::= SEQUENCE{
-    globalVariantSetId    [1] IMPLICIT OBJECT IDENTIFIER OPTIONAL,
-                  -- Applies to the triples below, when variantSetId omitted. If
-                  -- globalVariantSetId omitted, default applies. Default may be provided by
-                  -- the tagSet-M element defaultVariantSetId.
-
-
-
-
-  triples          [2]  IMPLICIT SEQUENCE OF SEQUENCE{
-                  variantSetId  [0]  IMPLICIT OBJECT IDENTIFIER OPTIONAL,
-                              -- If omitted, globalVariantSetId (above)
-                              -- applies, unless that too is omitted, in
-                               -- which case, default used.
-                  class      [1]  IMPLICIT INTEGER,
-                  type      [2]  IMPLICIT INTEGER,
-                  value      [3]  CHOICE{
-                               integer INTEGER,
-                               internationalString InternationalString,
-                               octetString OCTET STRING,
-                               objectIdentifier OBJECT IDENTIFIER,
-                               boolean BOOLEAN,
-                              null NULL,
-                          -- Following need context tags:
-                            unit      [1] IMPLICIT Unit, 
-                            valueAndUnit  [2] IMPLICIT IntUnit}}}
-END
-
-
-
-RecordSyntax-ESTaskPackage
-{Z39-50-recordSyntax ESTaskPackage (106)} DEFINITIONS ::=
-BEGIN 
-IMPORTS Permissions, InternationalString, IntUnit, DiagRec FROM Z39-50-APDU-1995;
-
-TaskPackage ::= SEQUENCE{
-  packageType      [1]   IMPLICIT OBJECT IDENTIFIER,
-                    -- oid of specific ES definition
-  packageName      [2]   IMPLICIT InternationalString OPTIONAL,
-  userId          [3]   IMPLICIT InternationalString OPTIONAL,
-  retentionTime      [4]   IMPLICIT IntUnit OPTIONAL,
-  permissions        [5]   IMPLICIT Permissions OPTIONAL,
-  description        [6]   IMPLICIT InternationalString OPTIONAL,
-  targetReference      [7]   IMPLICIT OCTET STRING OPTIONAL,
-  creationDateTime    [8]   IMPLICIT GeneralizedTime OPTIONAL,
-  taskStatus        [9]   IMPLICIT INTEGER{
-                      pending    (0),
-                      active    (1),
-                      complete  (2),
-                      aborted    (3)},
-  packageDiagnostics    [10]  IMPLICIT SEQUENCE OF DiagRec OPTIONAL,
-  taskSpecificParameters  [11]  IMPLICIT EXTERNAL
-                    -- Use oid for specific ES definition
-                    -- (same oid as packageType above)
-                    -- and select [2] "taskPackage."
-    } 
-END
-
-
-
-
-ResourceReport-Format-Resource-1
-{Z39-50-resourceReport resource-1 (1)} DEFINITIONS ::=
-BEGIN 
-IMPORTS InternationalString FROM Z39-50-APDU-1995;  
---
-ResourceReport ::= SEQUENCE{
-estimates    [1]   IMPLICIT SEQUENCE OF Estimate,
-message      [2]   IMPLICIT InternationalString}
---
-Estimate ::= SEQUENCE{
-type        [1]   IMPLICIT EstimateType,
-value        [2]   IMPLICIT INTEGER,  -- the actual estimate
-currency-code  [3]   IMPLICIT INTEGER OPTIONAL
-                -- code for representation of currencies defined in ISO 4217-1990.  
-                -- Applicable only to monetary estimates.
-                              }
-EstimateType ::= INTEGER{
-currentSearchRecords    (1),         -- estimated no. records in current (incomplete) result set for search
-finalSearchRecords       (2),        -- estimated no. records that will be in result set if search completes
-currentPresentRecords    (3),        -- estimated number of records in current (incomplete) set of
-                      -- records to be returned on Present
-finalPresentRecords      (4),  -- estimated number of records that will be in the set of records
-                      -- to be returned by Present if Present completes
-currentOpTimeProcessing  (5),  -- processing time (in .001 CPU seconds) used by operation so far
-finalOpTimeProcessing    (6),                -- estimated total processing time (in .001 CPU seconds) that will
-                              -- be used by this operation if it completes
-currentAssocTime      (7),  -- estimated processing time used by association (in .001 CPU sec.)
-currentOperationCost      (8),  -- estimated cost for this operation so far
-finalOperationCost      (9),  -- estimated cost for this operation if it completes
-currentAssocCost        (10),  -- estimated cost for this association so far
-finalOpTimeElapsed            (11),  -- estimated elapsed time for operation if it completes (in .001 sec.) 
-percentComplete         (12), -- estimated percent complete
-currentSearchAssocCost    (13),  -- estimated search cost for association so far
-currentPresentAssocCost  (14),  -- estimated present cost for this association so far
-currentConnectAssocCost    (15),  -- estimated connect time cost for association so far
-currentOtherAssocCost    (16)  -- estimated other cost (not included in 13-15) for association so far
-                  }
-END
-
-
-
-
-
-
-
-
-
-
-
-
-
-ResourceReport-Format-Resource-2
-{Z39-50-resourceReport resource-2 (2)} DEFINITIONS ::=
-BEGIN 
-IMPORTS InternationalString, StringOrNumeric, IntUnit FROM Z39-50-APDU-1995;  
---
-ResourceReport ::= SEQUENCE{
-estimates    [1]   IMPLICIT SEQUENCE OF Estimate OPTIONAL,
-message      [2]   IMPLICIT InternationalString OPTIONAL}
---
-Estimate ::= SEQUENCE{
-type      [1]   StringOrNumeric,
-              -- Numeric values of 1-16 are the same as used in Resource-1.
-value      [2]   IMPLICIT IntUnit
-              -- When expressing currency:
-              --    unitSystem (of Unit) is 'z3950'  (case insensitive)
-              --    unitType is 'iso4217-1990'       (case insensitive)
-              --    unit is currency code from ISO 4217-1990.
-}
-END
-
-
-
-
-
-AccessControlFormat-prompt-1
-{Z39-50-accessControl prompt-1 (1)} DEFINITIONS ::=
-BEGIN
-IMPORTS InternationalString, DiagRec FROM Z39-50-APDU-1995;
---
-PromptObject ::= CHOICE{
-  challenge      [1] IMPLICIT Challenge,
-   response        [2] IMPLICIT Response}
-
-  Challenge ::= SEQUENCE OF SEQUENCE {
-    promptId      [1] PromptId,
-                    -- Target supplies a number (for an enumerated prompt) or string (for a non
-                    -- -enumerated prompt), for each prompt, and the origin returns it in response, for
-                    -- this prompt, so target may correlate the prompt response with the prompt.
-    defaultResponse  [2] IMPLICIT InternationalString OPTIONAL,
-     promptInfo      [3] CHOICE{ 
-                    character  [1] IMPLICIT InternationalString,
-                    encrypted  [2] IMPLICIT Encryption} OPTIONAL,
-                    -- Information corresponding to an enumerated prompt. For example if 'type', within
-                    -- PromptId, is 'copyright', then promptInfo may contain a copyright statement.  
-    regExpr        [4] IMPLICIT InternationalString OPTIONAL,
-                              -- A regular expression that promptResponse should match. See IEEE 1003.2
-                    -- Volume 1, Section 2.8 "Regular Expression Notation." For example if promptId
-                    -- is "Year of publication," regExpr might be "19[89][0-9]|20[0-9][0-9]".
-    responseRequired  [5] IMPLICIT NULL OPTIONAL,
-     allowedValues    [6] IMPLICIT SEQUENCE OF InternationalString OPTIONAL,
-                        -- e.g. promptId="Desired color"; allowed = 'red', 'blue','Green'.
-    shouldSave      [7] IMPLICIT NULL OPTIONAL,
-                        -- Target recommends that origin save the data that it prompts from the
-                     -- user corresponding to this prompt, because it is likely to be requested again (so
-                    -- origin might not have to prompt the user next time).
-        dataType        [8] IMPLICIT INTEGER{
-                             integer        (1),
-                          date            (2),
-                        float           (3),
-                        alphaNumeric  (4),
-                        url-urn       (5),
-                        boolean       (6)} OPTIONAL,
-                        -- Target telling origin type of data it wants. E.g., if "date" is specified,
-                        -- presumably the origin will try to prompt something "date-like" from the user.
-        diagnostic       [9] IMPLICIT EXTERNAL OPTIONAL
-                          -- Intended for repeat requests when there is an error the origin 
-                        -- should report to the user from previous attempt.
-                }
-
-
-  Response ::= SEQUENCE OF SEQUENCE {
-      promptId    [1] PromptId,
-                  -- Corresponds to a prompt in the challenge, or may be unprompted, for
-                  -- example "newPassword." If unprompted, should be "enumerated." 
-                  -- If this responds to a non-enumerated prompt, then nonEnumeratedPrompt
-                   -- should contain the prompt string from the challenge.
-    promptResponse  [2] CHOICE{
-                    string      [1] IMPLICIT InternationalString,
-                    accept      [2] IMPLICIT BOOLEAN,
-                    acknowledge  [3] IMPLICIT NULL,
-                    diagnostic    [4] DiagRec,
-                     encrypted    [5] IMPLICIT Encryption}}
-
-
- PromptId ::= CHOICE{
-  enummeratedPrompt    [1] IMPLICIT SEQUENCE{
-                      type            [1] IMPLICIT INTEGER{
-                                      groupId    (0),
-                                      userId     (1),
-                                      password   (2),
-                                      newPassword  (3),
-                                      copyright    (4),
-                            -- When type on Challenge is 'copyright', promptInfo has text of
-                            -- copyright message to be displayed verbatim to the user. If
-                            -- promptResponse indicates 'acceptance', this indicates the user has been
-                            -- shown, and accepted, the terms of the copyright. This is not intended
-                            -- to be legally binding, but provides a good-faith attempt on
-                            -- the part of the target to inform the user of the copyright.
-                                      sessionId      (5)},
-                      suggestedString    [2] IMPLICIT InternationalString OPTIONAL},
-   nonEnumeratedPrompt  [2] IMPLICIT InternationalString}
-
-
- Encryption ::= SEQUENCE{
-  cryptType    [1] IMPLICIT OCTET STRING OPTIONAL, 
-  credential    [2] IMPLICIT OCTET STRING OPTIONAL,
-                    --random number, SALT, or other factor
-  data        [3] IMPLICIT OCTET STRING}
-
-END
-
-
-
-
-AccessControlFormat-des-1
-{Z39-50-accessControlFormat  des-1 (2)} DEFINITIONS ::=
-BEGIN
-    DES-RN-Object ::= CHOICE {
-      challenge    [1]    IMPLICIT DRNType,
-      response      [2]    IMPLICIT DRNType}
-    DRNType ::= SEQUENCE{
-          userId        [1]    IMPLICIT OCTET STRING OPTIONAL,
-          salt          [2]    IMPLICIT OCTET STRING OPTIONAL,
-          randomNumber  [3]    IMPLICIT OCTET STRING}
-END
-
-
-AccessControlFormat-krb-1
-{Z39-50-accessControlFormat  krb-1 (3)} DEFINITIONS ::=
-BEGIN
-IMPORTS InternationalString FROM Z39-50-APDU-1995;
-
-     KRBObject ::= CHOICE {
-       challenge   [1]    IMPLICIT KRBRequest,
-       response    [2]    IMPLICIT KRBResponse}
-     KRBRequest ::= SEQUENCE{
-           service         [1]   IMPLICIT InternationalString,
-           instance        [2]   IMPLICIT InternationalString OPTIONAL,
-           realm          [3]   IMPLICIT InternationalString OPTIONAL}
-        -- target requests a ticket for the given service, instance, and realm
-     KRBResponse ::= SEQUENCE{
-           userid            [1]   IMPLICIT InternationalString OPTIONAL,
-           ticket           [2]  IMPLICIT OCTET STRING}
-        -- origin responds with a ticket for the requested service
-END
-
-
-
-
-
-
-
-
-
-ESFormat-PersistentResultSet
-{Z39-50-extendedService PersistentResultSet (1)} DEFINITIONS ::=
-BEGIN
-IMPORTS InternationalString FROM Z39-50-APDU-1995;
-PersistentResultSet ::= CHOICE{
-    esRequest    [1] IMPLICIT SEQUENCE{
-        toKeep    [1] IMPLICIT NULL,
-        notToKeep  [2] OriginPartNotToKeep OPTIONAL},
-    taskPackage  [2] IMPLICIT SEQUENCE{
-        originPart  [1] IMPLICIT NULL,
-        targetPart  [2] TargetPart OPTIONAL}}
-OriginPartNotToKeep ::= SEQUENCE{
-  originSuppliedResultSet  [1] IMPLICIT InternationalString OPTIONAL,
-          -- name of transient result set, supplied on request, mandatory unless function is 'delete'
-  replaceOrAppend    [2] IMPLICIT INTEGER{  -- only if function is "modify"
-          replace    (1),
-          append    (2)} OPTIONAL}
-TargetPart ::= SEQUENCE{
-  targetSuppliedResultSet  [1] IMPLICIT InternationalString OPTIONAL, 
-          -- Name of transient result set, supplied by target, representing the persistent result set to which
-          -- package pertains. Meaningful only when package  is presented. (i.e. not on ES response).
-  numberOfRecords  [2] IMPLICIT INTEGER OPTIONAL}
-END
-
-
-ESFormat-PersistentQuery
-{Z39-50-extendedService PersistentQuery (2)} DEFINITIONS ::=
-BEGIN
-IMPORTS Query, InternationalString, OtherInformation FROM Z39-50-APDU-1995;
-PersistentQuery ::= CHOICE{
-    esRequest      [1] IMPLICIT SEQUENCE{
-        toKeep    [1] OriginPartToKeep OPTIONAL,
-        notToKeep  [2] OriginPartNotToKeep},
-    taskPackage    [2] IMPLICIT SEQUENCE{
-        originPart  [1] OriginPartToKeep OPTIONAL,
-        targetPart  [2] TargetPart}}
-OriginPartToKeep ::= SEQUENCE{
-  dbNames        [2] IMPLICIT SEQUENCE OF InternationalString OPTIONAL,
-  additionalSearchInfo  [3] OtherInformation OPTIONAL}
-OriginPartNotToKeep ::= CHOICE{
-  package    [1] IMPLICIT InternationalString,
-  query    [2] Query}
-TargetPart ::= Query          
-END
-
-ESFormat-PeriodicQuerySchedule
-{Z39-50-extendedService PeriodicQuerySchedule (3)} DEFINITIONS ::=
-BEGIN
-IMPORTS Query, InternationalString, IntUnit FROM Z39-50-APDU-1995 
-ExportSpecification, Destination FROM ESFormat-ExportSpecification;
-
-PeriodicQuerySchedule ::= CHOICE{
-    esRequest    [1] IMPLICIT SEQUENCE{
-              toKeep    [1] OriginPartToKeep,
-              notToKeep  [2] OriginPartNotToKeep},
-    taskPackage    [2] IMPLICIT SEQUENCE{
-              originPart  [1] OriginPartToKeep,
-              targetPart  [2] TargetPart}}
-
-OriginPartToKeep ::=SEQUENCE{
-  activeFlag          [1] IMPLICIT BOOLEAN,
-  databaseNames        [2] IMPLICIT SEQUENCE OF InternationalString OPTIONAL,
-  resultSetDisposition      [3] IMPLICIT INTEGER{
-                    replace    (1),
-                    append    (2),
-                    createNew  (3)  -- Only if origin and target have agreement about
-                            -- naming convention for the resulting package,
-                             -- and only if no result set is specified.
-                } OPTIONAL,   -- Mandatory on 'create' if result set is specified, in
-                        -- which case it must be 'replace' or 'append.
-  alertDestination        [4] Destination OPTIONAL,
-  exportParameters      [5] CHOICE{
-                    packageName  [1]   IMPLICIT InternationalString,
-                    exportPackage  [2] ExportSpecification} OPTIONAL}
-
-OriginPartNotToKeep ::= SEQUENCE{
-  querySpec           [1] CHOICE{
-                    actualQuery    [1] Query,
-                    packageName  [2] IMPLICIT InternationalString} OPTIONAL,
-                  -- mandatory for 'create'
-  originSuggestedPeriod    [2] Period OPTIONAL,  -- mandatory for 'create'
-  expiration          [3] IMPLICIT GeneralizedTime OPTIONAL,
-  resultSetPackage        [4] IMPLICIT InternationalString OPTIONAL}
-
-TargetPart ::= SEQUENCE{
-  actualQuery        [1] Query,
-  targetStatedPeriod    [2] Period,
-                  -- Target supplies the period, which may be same as origin proposed.
-  expiration        [3] IMPLICIT GeneralizedTime OPTIONAL,
-                  -- Target supplies value for task package. It may be the same as origin
-                  -- proposed or different from (and overrides) origin proposal, but if
-                  -- omitted, there is no expiration.
-  resultSetPackage      [4] IMPLICIT InternationalString OPTIONAL,
-                  -- May be omitted only if exportParameters was supplied. Target
-                  -- supplies same name as origin supplied, if origin did supply a name.
-  lastQueryTime      [5] IMPLICIT GeneralizedTime,
-  lastResultNumber    [6] IMPLICIT INTEGER,
-  numberSinceModify    [7] IMPLICIT INTEGER OPTIONAL}
-
-
-
-
-  Period ::= CHOICE{
-                unit             [1] IMPLICIT IntUnit,
-                 businessDaily     [2] IMPLICIT NULL,
-              continuous       [3] IMPLICIT NULL,
-              other         [4] IMPLICIT InternationalString}
-END
-
-
-ESFormat-ItemOrder
-{Z39-50-extendedService ItemOrder (4)} DEFINITIONS ::=
-BEGIN
-IMPORTS InternationalString FROM Z39-50-APDU-1995;
-ItemOrder ::= CHOICE{
-    esRequest  [1] IMPLICIT SEQUENCE{
-              toKeep    [1] OriginPartToKeep OPTIONAL,
-              notToKeep  [2] OriginPartNotToKeep},
-    taskPackage  [2] IMPLICIT SEQUENCE{
-              originPart  [1] OriginPartToKeep OPTIONAL,
-              targetPart  [2] TargetPart}}
-OriginPartToKeep ::= SEQUENCE{
-  supplDescription    [1] IMPLICIT EXTERNAL OPTIONAL,
-  contact        [2] IMPLICIT SEQUENCE{
-                       name  [1]   IMPLICIT InternationalString OPTIONAL,
-                         phone  [2]   IMPLICIT InternationalString OPTIONAL,
-                       email  [3]   IMPLICIT InternationalString OPTIONAL} OPTIONAL,
-  addlBilling      [3] IMPLICIT SEQUENCE{
-                paymentMethod    [1]   CHOICE{
-                                  billInvoice              [0] IMPLICIT NULL,
-                                    prepay                [1] IMPLICIT NULL,
-                                    depositAccount        [2] IMPLICIT NULL,
-                                    creditCard          [3] IMPLICIT CreditCardInfo,
-                    cardInfoPreviouslySupplied  [4] IMPLICIT NULL,
-                    privateKnown        [5] IMPLICIT NULL,
-                    privateNotKnown      [6] IMPLICIT EXTERNAL},
-                customerReference  [2] IMPLICIT InternationalString OPTIONAL,
-                     customerPONumber  [3] IMPLICIT InternationalString OPTIONAL}
-                                 OPTIONAL}
-CreditCardInfo   ::= SEQUENCE{
-       nameOnCard    [1] IMPLICIT InternationalString,
-      expirationDate    [2] IMPLICIT InternationalString,
-    cardNumber      [3] IMPLICIT InternationalString} 
-
-OriginPartNotToKeep ::= SEQUENCE{ -- Corresponds to 'requestedItem' in service definition.
-      --  Must supply at least one, and may supply both.
-  resultSetItem    [1]   IMPLICIT SEQUENCE{  
-                resultSetId    [1]   IMPLICIT InternationalString,
-                    item      [2]   IMPLICIT INTEGER} OPTIONAL,
-  itemRequest      [2] IMPLICIT EXTERNAL OPTIONAL
-                -- When itemRequest is an ILL-Request APDU, 
-                -- use OID {iso standard 10161 abstract-syntax (2) ill-apdus (1)}
-              }
-
-TargetPart ::= SEQUENCE{
-  itemRequest      [1]  IMPLICIT EXTERNAL OPTIONAL,
-    -- When itemRequest is an ILL-Request APDU, use OID 1.0.10161.2.1 (as above)
-  statusOrErrorReport  [2] IMPLICIT EXTERNAL OPTIONAL,
-    -- When statusOrErrorReport is an ILL Status-Or-Error-Report APDU, use OID  1.0.10161.2.1 (as above)
-  auxiliaryStatus    [3]  IMPLICIT INTEGER{
-                notReceived      (1),
-                loanQueue      (2),
-                forwarded      (3),
-                unfilledCopyright  (4),
-                filledCopyright    (5)} OPTIONAL}
-END
-
-
-
-
-ESFormat-Update0
-{Z39-50-extendedService Update (5)} DEFINITIONS ::=
-BEGIN
-IMPORTS DiagRec, InternationalString FROM Z39-50-APDU-1995; 
-Update ::= CHOICE{
-    esRequest  [1] IMPLICIT SEQUENCE{
-              toKeep    [1] OriginPartToKeep,
-              notToKeep  [2] OriginPartNotToKeep},
-    taskPackage  [2] IMPLICIT SEQUENCE{
-              originPart  [1] OriginPartToKeep,
-              targetPart  [2] TargetPart}}
-
-
-OriginPartToKeep ::= SEQUENCE{
-  action          [1] IMPLICIT INTEGER{
-                   recordInsert    (1),
-                   recordReplace  (2),
-                  recordDelete  (3),
-                  elementUpdate  (4)},
-  databaseName      [2] IMPLICIT InternationalString,
-  schema          [3] IMPLICIT OBJECT IDENTIFIER OPTIONAL,
-  elementSetName      [4] IMPLICIT InternationalString OPTIONAL}
-
-
-OriginPartNotToKeep ::= SuppliedRecords
-
-
-TargetPart ::= SEQUENCE{
-  updateStatus    [1] IMPLICIT INTEGER{
-                  success  (1),
-                  partial  (2),
-                  failure  (3)},
-  globalDiagnostics  [2] IMPLICIT SEQUENCE OF DiagRec OPTIONAL,
-                -- These are non-surrogate diagnostics relating to the task, 
-                -- not to individual records.
-  taskPackageRecords  [3] IMPLICIT SEQUENCE OF TaskPackageRecordStructure
-                -- There should be a TaskPackageRecordStructure for every record
-                -- supplied. The target should create such a structure for every
-                      -- record immediately upon creating the task package to include
-                -- correlation information and status. The record itself would not
-                -- be included until processing for that record is complete.
-            }
-
--- Auxiliary definitions for Update
-SuppliedRecords ::= SEQUENCE OF SEQUENCE{
-  recordId    [1] CHOICE{
-              number  [1] IMPLICIT INTEGER,
-              string  [2] IMPLICIT InternationalString,
-              opaque  [3]  IMPLICIT OCTET STRING} OPTIONAL,
-  supplementalId  [2] CHOICE{
-              timeStamp    [1] IMPLICIT GeneralizedTime,
-              versionNumber  [2] IMPLICIT InternationalString,
-              previousVersion  [3] IMPLICIT EXTERNAL} OPTIONAL,
-  correlationInfo  [3] IMPLICIT CorrelationInfo OPTIONAL,
-  record      [4] IMPLICIT EXTERNAL}
-
-CorrelationInfo ::= SEQUENCE{
-          -- origin may supply one or both for any record:
-  note  [1] IMPLICIT InternationalString OPTIONAL,
-  id    [2] IMPLICIT INTEGER OPTIONAL}
-
-TaskPackageRecordStructure ::= SEQUENCE{
-    recordOrSurDiag  [1] CHOICE {
-                record    [1] IMPLICIT EXTERNAL,
-                        -- Choose 'record' if recordStatus is 'success', and
-                        -- elementSetName was supplied.
-                diagnostic  [2] DiagRec
-                        -- Choose 'diagnostic', if RecordStatus is failure.
-                                } OPTIONAL,
-                -- The parameter recordOrSurDiag will thus be omitted only if
-                -- 'elementSetName' was omitted and recordStatus is
-                -- 'success'; or if record status is 'queued' or in 'process'.
-    correlationInfo    [2] IMPLICIT CorrelationInfo OPTIONAL,
-                -- This should be included if it was supplied by the origin.
-    recordStatus      [3] IMPLICIT INTEGER{
-                  success    (1),
-                  queued    (2),
-                  inProcess  (3),
-                  failure    (4)}}
-END
-
-
-ESFormat-ExportSpecification
-{Z39-50-extendedService ExportSpecification (6)} DEFINITIONS ::=
-BEGIN
-EXPORTS ExportSpecification, Destination; IMPORTS CompSpec, InternationalString FROM Z39-50-APDU-1995;
-ExportSpecification ::= CHOICE{
-    esRequest    [1] IMPLICIT SEQUENCE{
-        toKeep    [1] OriginPartToKeep,
-        notToKeep  [2] IMPLICIT NULL},
-    taskPackage    [2] IMPLICIT SEQUENCE{
-        originPart  [1] OriginPartToKeep,
-        targetPart  [2] IMPLICIT NULL}}
-OriginPartToKeep ::= SEQUENCE{
-  composition        [1] IMPLICIT CompSpec,
-  exportDestination    [2] Destination}
-
-  Destination ::= CHOICE{
-  phoneNumber    [1]    IMPLICIT InternationalString,
-  faxNumber      [2]   IMPLICIT InternationalString,
-  x400address      [3]   IMPLICIT InternationalString,
-  emailAddress    [4]   IMPLICIT InternationalString,
-  pagerNumber    [5]   IMPLICIT InternationalString,
-  ftpAddress      [6]   IMPLICIT InternationalString,
-  ftamAddress    [7]   IMPLICIT InternationalString,
-  printerAddress    [8]   IMPLICIT InternationalString,
-  other        [100]  IMPLICIT SEQUENCE{
-                  vehicle      [1]  IMPLICIT InternationalString  OPTIONAL,
-                  destination    [2] IMPLICIT InternationalString}}
-END
-
-
-
-
-ESFormat-ExportInvocation
-{Z39-50-extendedService ExportInvocation (7)} DEFINITIONS ::=
-BEGIN
-IMPORTS InternationalString, IntUnit FROM Z39-50-APDU-1995 
-ExportSpecification FROM ESFormat-ExportSpecification;
-ExportInvocation ::= CHOICE{
-    esRequest    [1] IMPLICIT SEQUENCE{
-        toKeep    [1] OriginPartToKeep,
-        notToKeep  [2] OriginPartNotToKeep},
-    taskPackage    [2] IMPLICIT SEQUENCE{
-        originPart  [1] OriginPartToKeep,
-        targetPart  [2] TargetPart OPTIONAL}}
-
-OriginPartToKeep ::= SEQUENCE{
-  exportSpec    [1] CHOICE{
-              packageName    [1] IMPLICIT InternationalString,
-              packageSpec    [2] ExportSpecification},
-  numberOfCopies  [2] IMPLICIT INTEGER}
-
-
-
-
-
-OriginPartNotToKeep  ::= SEQUENCE{
-  resultSetId      [1] IMPLICIT InternationalString,
-  records        [2] CHOICE{
-                all    [1] IMPLICIT NULL,
-                ranges  [2]   IMPLICIT SEQUENCE OF SEQUENCE{
-                        start  [1] IMPLICIT INTEGER,
-                        count  [2] IMPLICIT INTEGER OPTIONAL
-                          -- Count may be omitted only on last range, to indicate
-                          -- "all remaining records beginning with 'start'."
-                    }}}
-
-TargetPart   ::= SEQUENCE{
-    estimatedQuantity    [1] IMPLICIT IntUnit OPTIONAL,
-    quantitySoFar      [2] IMPLICIT IntUnit OPTIONAL,
-    estimatedCost      [3] IMPLICIT IntUnit OPTIONAL,
-    costSoFar        [4] IMPLICIT IntUnit OPTIONAL}
-END
-
-
-
-UserInfoFormat-searchResult-1
-{Z39-50-userInfoFormat searchResult-1 (1)} DEFINITIONS ::=
-BEGIN
-IMPORTS DatabaseName, Term, Query, IntUnit, InternationalString FROM Z39-50-APDU-1995;
-SearchInfoReport ::= SEQUENCE OF SEQUENCE{
-  subqueryId      [1] IMPLICIT InternationalString OPTIONAL, 
-                           -- shorthand identifier of subquery
-  fullQuery        [2] IMPLICIT BOOLEAN,     -- 'true' means this is the full query; 'false',
-                          -- a sub-query 
-  subqueryExpression    [3] QueryExpression OPTIONAL,  -- A subquery of the query as
-                          -- submitted. May be whole query;
-                          -- if so, "fullQuery" should be 'true'.
-  subqueryInterpretation  [4] QueryExpression OPTIONAL,  -- how target interpreted subquery
-  subqueryRecommendation  [5] QueryExpression OPTIONAL,  -- target-recommended alternative
-  subqueryCount      [6] IMPLICIT INTEGER OPTIONAL,  -- Number of records for this
-                          -- subQuery, across all of the specified
-                          -- databases. (If during search, via resource
-                           -- control, number of records so far).
-  subqueryWeight     [7] IMPLICIT IntUnit OPTIONAL,  -- relative weight of this subquery
-  resultsByDB          [8] IMPLICIT ResultsByDB OPTIONAL}
-
-ResultsByDB ::= SEQUENCE OF SEQUENCE{
-  databases      [1] CHOICE{
-            all     [1] IMPLICIT NULL,
-                  -- applies across all of the databases in Search PDU
-            list    [2]  IMPLICIT SEQUENCE OF DatabaseName
-                  -- applies across all databases in this list
-              },
-  count        [2] IMPLICIT INTEGER OPTIONAL,
-            -- Number of records for query component (and, as above, if during search,
-             -- via resource control, number of records so far).
-  resultSetName    [3] IMPLICIT InternationalString OPTIONAL
-                        -- Target-assigned result set by which subQuery is available. Should not
-             -- be provided unless processing for this query component is concluded (i.e.,
-            -- when this report comes during search, via resource control, as opposed
-            -- to after search, via additionalSearchInfo).
-              }
-
-QueryExpression ::=  CHOICE {
-                term   [1] IMPLICIT SEQUENCE{
-              queryTerm  [1]  Term,
-              termComment            [2] IMPLICIT InternationalString OPTIONAL},
-           query  [2] Query}
-END
-
-
-
-ElementSpecificationFormat-eSpec-1
-{Z39-50-elementSpec eSpec-1 (1)} DEFINITIONS ::=
-BEGIN
-IMPORTS Variant FROM RecordSyntax-generic
-StringOrNumeric, InternationalString FROM Z39-50-APDU-1995;
---
-Espec-1 ::= SEQUENCE{
-  elementSetNames    [1] IMPLICIT SEQUENCE OF InternationalString OPTIONAL,
-                  -- Origin may include one or more element set names, each
-                  -- specifying a set of elements. Each of the elements is to be
-                  -- treated as an elementRequest in the form of simpleElement,
-                  -- where occurrence is 1. 
-  defaultVariantSetId    [2] IMPLICIT OBJECT IDENTIFIER OPTIONAL,
-                  -- If supplied, applies whenever variantRequest 
-                  -- does not include variantSetId. 
-  defaultVariantRequest  [3] IMPLICIT Variant OPTIONAL,
-                  -- If supplied, then for each simple elementRequest that does not
-                   -- include a variantRequest, the defaultVariantRequest applies.
-                  -- (defaultVariantRequest does not apply to a compositeRequest.)
-  defaultTagType      [4] IMPLICIT INTEGER OPTIONAL,
-                  -- If supplied, applies whenever 'tagType' (within 'tag' within TagPath) 
-                  -- is omitted.
-  elements        [5] IMPLICIT SEQUENCE OF ElementRequest OPTIONAL}
---
-
-ElementRequest::= CHOICE{
-  simpleElement    [1]   IMPLICIT SimpleElement,
-  compositeElement  [2] IMPLICIT SEQUENCE{
-            elementList    [1] CHOICE{
-                  primitives    [1]   IMPLICIT SEQUENCE OF InternationalString,
-                              -- Origin may specify one or more element
-                              -- set names, each identifying a set of elements,
-                              -- and the composite element is the union.
-                  specs      [2] IMPLICIT SEQUENCE OF SimpleElement},
-
-            deliveryTag    [2] IMPLICIT TagPath,
-                          -- DeliveryTag tagPath for compositeElement may not
-                          -- include wildThing or wildPath.
-            variantRequest  [3] IMPLICIT Variant OPTIONAL}}
-
-SimpleElement ::= SEQUENCE{
-      path        [1] IMPLICIT TagPath,
-      variantRequest  [2] IMPLICIT Variant OPTIONAL}
-  
-
-TagPath ::= SEQUENCE OF CHOICE{  
-  specificTag  [1] IMPLICIT SEQUENCE{
-            tagType  [1] IMPLICIT INTEGER OPTIONAL,
-                      -- If omitted, then 'defaultTagType' (above) applies, if supplied, and
-                      -- if not supplied, then default listed in schema applies.
-            tagValue  [2] StringOrNumeric,
-             occurrence  [3] Occurrences OPTIONAL 
-                      -- default is "first occurrence"
-                  },
-  wildThing  [2] Occurrences,
-              -- Get Nth "thing" at this level, regardless of tag, for each N specified by
-            -- "Occurrences" (which may be 'all' meaning match every element at this level).
-            -- E.g., if "Occurrences" is 3, get third element regardless of its tag or the tag of
-            -- the first two elements.
-  wildPath  [3] IMPLICIT NULL
-              -- Match any tag, at this level or below, that is on a path for which next tag in this 
-              -- TagPath sequence occurs. WildPath may not be last member of the TagPath
-            -- sequence.
-                      }
---
-
-Occurrences ::= CHOICE{
-  all    [1] IMPLICIT NULL,
-  last    [2] IMPLICIT NULL,
-  values  [3] IMPLICIT SEQUENCE{
-          start    [1] IMPLICIT INTEGER,
-                  -- if 'start' alone is included, then single occurrence is requested
-          howMany  [2] IMPLICIT INTEGER OPTIONAL
-                  -- For example, if 'start' is 5 and 'howMany' is 6, then request is for
-                  -- "occurrences 5 through 10."
-                  }}
-END
-
index 7943906..5304e72 100644 (file)
@@ -1,4 +1,4 @@
-## $Id: Makefile.am,v 1.11 2003-03-11 11:09:17 adam Exp $
+## $Id: Makefile.am,v 1.12 2003-10-27 12:21:45 adam Exp $
 ## Copyright (C) 2001, Index Data
 
 AM_CPPFLAGS = -I$(top_srcdir)/include
 ## Copyright (C) 2001, Index Data
 
 AM_CPPFLAGS = -I$(top_srcdir)/include
@@ -6,7 +6,7 @@ AM_CPPFLAGS = -I$(top_srcdir)/include
 EXTRA_PROGRAMS = zoomtst1 zoomtst2 zoomtst3 zoomtst4 zoomtst5 zoomtst6 zoomtst7 zoomtst8
 bin_PROGRAMS = zoomsh
 
 EXTRA_PROGRAMS = zoomtst1 zoomtst2 zoomtst3 zoomtst4 zoomtst5 zoomtst6 zoomtst7 zoomtst8
 bin_PROGRAMS = zoomsh
 
-LDADD = ../lib/libyazmalloc.la ../lib/libyaz.la $(READLINE_LIBS)
+LDADD = ../src/libyaz.la $(READLINE_LIBS)
 
 zoomtst1_SOURCES = zoomtst1.c
 zoomtst2_SOURCES = zoomtst2.c
 
 zoomtst1_SOURCES = zoomtst1.c
 zoomtst2_SOURCES = zoomtst2.c
index 21b2e8a..0886187 100644 (file)
@@ -1,4 +1,4 @@
-## $Id: Makefile.am,v 1.14 2003-02-18 10:37:08 adam Exp $
+## $Id: Makefile.am,v 1.15 2003-10-27 12:21:45 adam Exp $
 
 if ISSSL
 sslbin=yaz-ztest-ssl
 
 if ISSSL
 sslbin=yaz-ztest-ssl
@@ -12,13 +12,13 @@ yaz_ztest_ssl_SOURCES=$(yaz_ztest_SOURCES)
 EXTRA_DIST=dummy-records dummy-words dummy-grs
 
 if ISTHR
 EXTRA_DIST=dummy-records dummy-words dummy-grs
 
 if ISTHR
-extra=../lib/libyazthread.la
+extra=../src/libyazthread.la
 endif
 
 endif
 
-yaz_ztest_LDADD=$(extra) ../lib/libyaz.la \
+yaz_ztest_LDADD=$(extra) ../src/libyaz.la \
  $(LIBTHREAD)
 
  $(LIBTHREAD)
 
-yaz_ztest_ssl_LDADD=$(extra) ../lib/libyazssl.la ../lib/libyaz.la \
+yaz_ztest_ssl_LDADD=$(extra) ../src/libyazssl.la ../src/libyaz.la \
  $(SSL_LIBS) $(LIBTHREAD)
 
 AM_CFLAGS=@CFLAGSTHREADS@
  $(SSL_LIBS) $(LIBTHREAD)
 
 AM_CFLAGS=@CFLAGSTHREADS@
diff --git a/zutil/.cvsignore b/zutil/.cvsignore
deleted file mode 100644 (file)
index 32ca3eb..0000000
+++ /dev/null
@@ -1,6 +0,0 @@
-.deps
-.libs
-Makefile
-Makefile.in
-libzutil.la
-*.lo
diff --git a/zutil/Makefile.am b/zutil/Makefile.am
deleted file mode 100644 (file)
index 23b4653..0000000
+++ /dev/null
@@ -1,13 +0,0 @@
-## $Id: Makefile.am,v 1.20 2003-04-23 12:31:07 adam Exp $
-noinst_LTLIBRARIES = libzutil.la
-
-AM_CPPFLAGS=-I$(top_srcdir)/include $(XML2_CFLAGS)
-
-libzutil_la_SOURCES = zget.c yaz-ccl.c diagbib1.c logrpn.c \
-  otherinfo.c pquery.c sortspec.c z3950oid.c charneg.c \
-  zoom-c.c zoom-opt.c zoom-p.h grs1disp.c zgdu.c soap.c srw.c opacdisp.c
-
-srwtst_LDADD = ../odr/libodr.la libzutil.la ../util/libutil.la
-srwtst_SOURCES = srwtst.c
-
-EXTRA_PROGRAMS = srwtst
diff --git a/zutil/charneg.c b/zutil/charneg.c
deleted file mode 100644 (file)
index dbcedd4..0000000
+++ /dev/null
@@ -1,376 +0,0 @@
-/* 
- $ $Id: charneg.c,v 1.8 2003-09-02 12:12:13 adam Exp $
- * Helper functions for Character Set and Language Negotiation - 3
- */
-
-#include <stdio.h>
-#include <yaz/otherinfo.h>
-#include <yaz/z-charneg.h>
-#include <yaz/charneg.h>
-#include <yaz/yaz-util.h>
-
-static Z_External* z_ext_record2(ODR o, int oid_class, int oid_value,
-                                 const char *buf)
-{
-    Z_External *p;
-    oident oid;
-    int len = strlen(buf);
-    
-    if (!(p = (Z_External *)odr_malloc(o, sizeof(*p)))) return 0;
-    
-    p->descriptor = 0;
-    p->indirect_reference = 0;
-    
-    oid.proto = PROTO_Z3950;
-    oid.oclass = (enum oid_class) oid_class;
-    oid.value = (enum oid_value) oid_value;
-    p->direct_reference = odr_oiddup(o, oid_getoidbyent(&oid));
-    
-    p->which = Z_External_octet;
-    if (!(p->u.octet_aligned = (Odr_oct *)odr_malloc(o, sizeof(Odr_oct)))) {
-        return 0;
-    }
-    if (!(p->u.octet_aligned->buf = (unsigned char *)odr_malloc(o, len))) {
-        return 0;
-    }
-    p->u.octet_aligned->len = p->u.octet_aligned->size = len;
-    memcpy(p->u.octet_aligned->buf, buf, len);
-       
-    return p;
-}
-
-static int get_form(const char *charset)
-{
-    int form = -1;
-
-
-    if (!yaz_matchstr(charset, "UCS-2"))
-        form = 2;
-    if (!yaz_matchstr(charset, "UCS-4"))
-        form = 4;
-    if (!yaz_matchstr(charset, "UTF-16"))
-        form = 5;
-    if (!yaz_matchstr(charset, "UTF-8"))
-        form = 8;
-
-    return form;
-}
-
-static char *set_form (Odr_oid *encoding)
-{
-    static char *charset = 0;
-    if ( oid_oidlen(encoding) != 6)
-        return 0;
-    if (encoding[5] == 2)
-        charset = "UCS-2";
-    if (encoding[5] == 4)
-        charset = "UCS-4";
-    if (encoding[5] == 5)
-        charset = "UTF-16";
-    if (encoding[5] == 8)
-        charset = "UTF-8";
-    return charset;
-}
-
-static Z_OriginProposal_0 *z_get_OriginProposal_0(ODR o, const char *charset)
-{
-    int form = get_form (charset);
-    Z_OriginProposal_0 *p0 =
-        (Z_OriginProposal_0*)odr_malloc(o, sizeof(*p0));
-
-    memset(p0, 0, sizeof(*p0));
-
-    if (form > 0)
-    {   /* ISO 10646 (UNICODE) */
-        char oidname[20];
-
-        Z_Iso10646 *is = (Z_Iso10646 *) odr_malloc (o, sizeof(*is));
-        p0->which = Z_OriginProposal_0_iso10646;
-        p0->u.iso10646 = is;
-        is->collections = 0;
-        sprintf (oidname, "1.0.10646.1.0.%d", form);
-        is->encodingLevel = odr_getoidbystr (o, oidname);
-    }
-    else
-    {   /* private ones */
-        Z_PrivateCharacterSet *pc =
-            (Z_PrivateCharacterSet *)odr_malloc(o, sizeof(*pc));
-
-        memset(pc, 0, sizeof(*pc));
-        
-        p0->which = Z_OriginProposal_0_private;
-        p0->u.zprivate = pc;
-       
-        pc->which = Z_PrivateCharacterSet_externallySpecified;
-        pc->u.externallySpecified =
-            z_ext_record2(o, CLASS_NEGOT, VAL_ID_CHARSET, charset);
-    }
-    return p0;
-}
-
-static Z_OriginProposal *z_get_OriginProposal(
-    ODR o, const char **charsets, int num_charsets,
-    const char **langs, int num_langs, int selected)
-{      
-    int i;
-    Z_OriginProposal *p = (Z_OriginProposal *) odr_malloc(o, sizeof(*p));
-               
-    memset(p, 0, sizeof(*p));
-
-    p->recordsInSelectedCharSets = (bool_t *)odr_malloc(o, sizeof(bool_t));
-    *p->recordsInSelectedCharSets = (selected) ? 1:0;
-
-    if (charsets && num_charsets) {            
-       
-        p->num_proposedCharSets = num_charsets;
-        p->proposedCharSets = 
-            (Z_OriginProposal_0**)
-            odr_malloc(o, num_charsets*sizeof(Z_OriginProposal_0*));
-
-        for (i = 0; i<num_charsets; i++)
-            p->proposedCharSets[i] =
-                z_get_OriginProposal_0(o, charsets[i]);
-    }
-    if (langs && num_langs) {
-       
-        p->num_proposedlanguages = num_langs;
-
-        p->proposedlanguages = 
-            (char **) odr_malloc(o, num_langs*sizeof(char *));
-
-        for (i = 0; i<num_langs; i++) {
-
-            p->proposedlanguages[i] = (char *)langs[i];
-                       
-        }
-    }
-    return p;
-}
-
-static Z_CharSetandLanguageNegotiation *z_get_CharSetandLanguageNegotiation(
-    ODR o)
-{
-    Z_CharSetandLanguageNegotiation *p =
-        (Z_CharSetandLanguageNegotiation *) odr_malloc(o, sizeof(*p));
-    
-    memset(p, 0, sizeof(*p));
-       
-    return p;
-}
-
-/* Create EXTERNAL for negotation proposal. Client side */
-Z_External *yaz_set_proposal_charneg(ODR o,
-                                     const char **charsets, int num_charsets,
-                                     const char **langs, int num_langs,
-                                     int selected)
-{
-    Z_External *p = (Z_External *)odr_malloc(o, sizeof(*p));
-    oident oid;
-       
-    p->descriptor = 0;
-    p->indirect_reference = 0; 
-
-    oid.proto = PROTO_Z3950;
-    oid.oclass = CLASS_NEGOT;
-    oid.value = VAL_CHARNEG3;
-    p->direct_reference = odr_oiddup(o, oid_getoidbyent(&oid));
-
-    p->which = Z_External_charSetandLanguageNegotiation;
-    p->u.charNeg3 = z_get_CharSetandLanguageNegotiation(o);
-    p->u.charNeg3->which = Z_CharSetandLanguageNegotiation_proposal;
-    p->u.charNeg3->u.proposal =
-        z_get_OriginProposal(o, charsets, num_charsets,
-                             langs, num_langs, selected);
-
-    return p;
-}
-
-/* used by yaz_set_response_charneg */
-static Z_TargetResponse *z_get_TargetResponse(ODR o, const char *charset,
-                                              const char *lang, int selected)
-{      
-    Z_TargetResponse *p = (Z_TargetResponse *) odr_malloc(o, sizeof(*p));
-    int form = get_form(charset);
-
-    memset(p, 0, sizeof(*p));
-
-    if (form > 0)
-    {
-        char oidname[20];
-
-        Z_Iso10646 *is = (Z_Iso10646 *) odr_malloc (o, sizeof(*is));
-        p->which = Z_TargetResponse_iso10646;
-        p->u.iso10646 = is;
-        is->collections = 0;
-        sprintf (oidname, "1.0.10646.1.0.%d", form);
-        is->encodingLevel = odr_getoidbystr (o, oidname);
-    }
-    else
-    {
-        Z_PrivateCharacterSet *pc =
-            (Z_PrivateCharacterSet *)odr_malloc(o, sizeof(*pc));
-        
-        memset(pc, 0, sizeof(*pc));
-       
-        p->which = Z_TargetResponse_private;
-        p->u.zprivate = pc;
-       
-        pc->which = Z_PrivateCharacterSet_externallySpecified;
-        pc->u.externallySpecified =
-           z_ext_record2(o, CLASS_NEGOT, VAL_ID_CHARSET, charset);
-    }
-    p->recordsInSelectedCharSets = (bool_t *)odr_malloc(o, sizeof(bool_t));
-    *p->recordsInSelectedCharSets = (selected) ? 1:0;
-    
-    p->selectedLanguage = lang ? (char *)odr_strdup(o, lang) : 0;
-    return p;
-}
-
-/* Create charset response. Server side */
-Z_External *yaz_set_response_charneg(ODR o, const char *charset,
-                                     const char *lang, int selected)
-{
-    Z_External *p = (Z_External *)odr_malloc(o, sizeof(*p));
-    oident oid;
-       
-    p->descriptor = 0;
-    p->indirect_reference = 0; 
-
-    oid.proto = PROTO_Z3950;
-    oid.oclass = CLASS_NEGOT;
-    oid.value = VAL_CHARNEG3;
-    p->direct_reference = odr_oiddup(o, oid_getoidbyent(&oid));
-
-    p->which = Z_External_charSetandLanguageNegotiation;
-    p->u.charNeg3 = z_get_CharSetandLanguageNegotiation(o);
-    p->u.charNeg3->which = Z_CharSetandLanguageNegotiation_response;
-    p->u.charNeg3->u.response = z_get_TargetResponse(o, charset, lang, selected);
-
-    return p;
-}
-
-/* Get negotiation from OtherInformation. Client&Server side */
-Z_CharSetandLanguageNegotiation *yaz_get_charneg_record(Z_OtherInformation *p)
-{
-    Z_External *pext;
-    int i;
-       
-    if(!p)
-        return 0;
-       
-    for (i=0; i<p->num_elements; i++) {
-       
-        if ((p->list[i]->which == Z_OtherInfo_externallyDefinedInfo) &&
-            (pext = p->list[i]->information.externallyDefinedInfo)) {
-                                       
-            oident *ent = oid_getentbyoid(pext->direct_reference);
-                       
-            if (ent && ent->value == VAL_CHARNEG3 && ent->oclass == CLASS_NEGOT &&
-                pext->which == Z_External_charSetandLanguageNegotiation) {
-                               
-                return pext->u.charNeg3;
-            }
-        }
-    }
-    return 0;
-}
-
-/* Get charsets, langs, selected from negotiation.. Server side */
-void yaz_get_proposal_charneg(NMEM mem, Z_CharSetandLanguageNegotiation *p,
-                              char ***charsets, int *num_charsets,
-                              char ***langs, int *num_langs, int *selected)
-{
-    int i;
-    Z_OriginProposal *pro = p->u.proposal;
-    
-    if (num_charsets && charsets)
-    {
-        if (pro->num_proposedCharSets)
-        {
-            *num_charsets = pro->num_proposedCharSets;
-            
-            (*charsets) = (char **)
-                nmem_malloc(mem, pro->num_proposedCharSets * sizeof(char *));
-            
-            for (i=0; i<pro->num_proposedCharSets; i++) 
-            {
-                (*charsets)[i] = 0;
-                
-                if (pro->proposedCharSets[i]->which ==
-                    Z_OriginProposal_0_private &&
-                    pro->proposedCharSets[i]->u.zprivate->which ==
-                    Z_PrivateCharacterSet_externallySpecified) {
-                    
-                    Z_External *pext =
-                        pro->proposedCharSets[i]->u.zprivate->u.externallySpecified;
-                    
-                    if (pext->which == Z_External_octet) {
-                        
-                        (*charsets)[i] = (char *)
-                            nmem_malloc(mem, (1+pext->u.octet_aligned->len) *
-                                        sizeof(char));
-                        
-                        memcpy ((*charsets)[i], pext->u.octet_aligned->buf,
-                                pext->u.octet_aligned->len);
-                        (*charsets)[i][pext->u.octet_aligned->len] = 0;
-                        
-                    }
-                }
-                else if (pro->proposedCharSets[i]->which ==
-                         Z_OriginProposal_0_iso10646)
-                    (*charsets)[i] = set_form (
-                        pro->proposedCharSets[i]->u.iso10646->encodingLevel);
-            }
-        }
-        else
-            *num_charsets = 0;
-    }
-    
-    if (langs && num_langs)
-    {
-        if (pro->num_proposedlanguages)
-        {
-            *num_langs = pro->num_proposedlanguages;
-            
-            (*langs) = (char **)
-                nmem_malloc(mem, pro->num_proposedlanguages * sizeof(char *));
-            
-            for (i=0; i<pro->num_proposedlanguages; i++)
-                (*langs)[i] = nmem_strdup(mem, pro->proposedlanguages[i]);
-        }
-        else
-            *num_langs = 0;
-    }
-    
-    if(pro->recordsInSelectedCharSets && selected)
-        *selected = *pro->recordsInSelectedCharSets;
-}
-
-/* Return charset, lang, selected from negotiation.. Client side */
-void yaz_get_response_charneg(NMEM mem, Z_CharSetandLanguageNegotiation *p,
-                              char **charset, char **lang, int *selected)
-{
-    Z_TargetResponse *res = p->u.response;
-       
-    if (charset && res->which == Z_TargetResponse_private &&
-        res->u.zprivate->which == Z_PrivateCharacterSet_externallySpecified) {
-
-        Z_External *pext = res->u.zprivate->u.externallySpecified;
-        
-        if (pext->which == Z_External_octet) {
-            
-            *charset = (char *)
-                nmem_malloc(mem, (1+pext->u.octet_aligned->len)*sizeof(char));
-            memcpy (*charset, pext->u.octet_aligned->buf,
-                    pext->u.octet_aligned->len);
-            (*charset)[pext->u.octet_aligned->len] = 0;
-        }      
-    }
-    if (charset && res->which == Z_TargetResponse_iso10646)
-        *charset = set_form (res->u.iso10646->encodingLevel);
-    if (lang && res->selectedLanguage)
-        *lang = nmem_strdup (mem, res->selectedLanguage);
-
-    if(selected && res->recordsInSelectedCharSets)
-        *selected = *res->recordsInSelectedCharSets;
-}
diff --git a/zutil/diagbib1.c b/zutil/diagbib1.c
deleted file mode 100644 (file)
index 8da3884..0000000
+++ /dev/null
@@ -1,233 +0,0 @@
-/*
- * Copyright (c) 1995-2003, Index Data
- * See the file LICENSE for details.
- * Sebastian Hammer, Adam Dickmeiss
- *
- * $Id: diagbib1.c,v 1.6 2003-01-06 08:20:29 adam Exp $
- */
-
-#include <stdio.h>
-
-#include <yaz/diagbib1.h>
-
-static struct {
-    int code;
-    char *msg;
-} msg_tab[] = {
-{ 1, "Permanent system error" },
-{ 2, "Temporary system error" },
-{ 3, "Unsupported search" },
-{ 4, "Terms only exclusion (stop) words" },
-{ 5, "Too many argument words" },
-{ 6, "Too many boolean operators" },
-{ 7, "Too many truncated words" },
-{ 8, "Too many incomplete subfields" },
-{ 9, "Truncated words too short" },
-{ 10, "Invalid format for record number (search term)" },
-{ 11, "Too many characters in search statement" },
-{ 12, "Too many records retrieved" },
-{ 13, "Present request out of range" },
-{ 14, "System error in presenting records" },
-{ 15, "Record no authorized to be sent intersystem" },
-{ 16, "Record exceeds Preferred-message-size" },
-{ 17, "Record exceeds Maximum-record-size" },
-{ 18, "Result set not supported as a search term" },
-{ 19, "Only single result set as search term supported" },
-{ 20, "Only ANDing of a single result set as search term supported" },
-{ 21, "Result set exists and replace indicator off" },
-{ 22, "Result set naming not supported" },
-{ 23, "Combination of specified databases not supported" },
-{ 24, "Element set names not supported" },
-{ 25, "Specified element set name not valid for specified database" },
-{ 26, "Only a single element set name supported" },
-{ 27, "Result set no longer exists - unilaterally deleted by target" },
-{ 28, "Result set is in use" },
-{ 29, "One of the specified databases is locked" },
-{ 30, "Specified result set does not exist" },
-{ 31, "Resources exhausted - no results available" },
-{ 32, "Resources exhausted - unpredictable partial results available" },
-{ 33, "Resources exhausted - valid subset of results available" },
-{ 100, "Unspecified error" },
-{ 101, "Access-control failure" },
-{ 102, "Security challenge required but could not be issued -"
-" request terminated" },
-{ 103, "Security challenge required but could not be issued -"
-" record not included" },
-{ 104, "Security challenge failed - record not included" },
-{ 105, "Terminated by negative continue response" },
-{ 106, "No abstract syntaxes agreed to for this record" },
-{ 107, "Query type not supported" },
-{ 108, "Malformed query" },
-{ 109, "Database unavailable" },
-{ 110, "Operator unsupported" },
-{ 111, "Too many databases specified" },
-{ 112, "Too many result sets created" },
-{ 113, "Unsupported attribute type" },
-{ 114, "Unsupported Use attribute" },
-{ 115, "Unsupported value for Use attribute" },
-{ 116, "Use attribute required but not supplied" },
-{ 117, "Unsupported Relation attribute" },
-{ 118, "Unsupported Structure attribute" },
-{ 119, "Unsupported Position attribute" },
-{ 120, "Unsupported Truncation attribute" },
-{ 121, "Unsupported Attribute Set" },
-{ 122, "Unsupported Completeness attribute" },
-{ 123, "Unsupported attribute combination" },
-{ 124, "Unsupported coded value for term" },
-{ 125, "Malformed search term" },
-{ 126, "Illegal term value for attribute" },
-{ 127, "Unparsable format for un-normalized value" },
-{ 128, "Illegal result set name" },
-{ 129, "Proximity search of sets not supported" },
-{ 130, "Illegal result set in proximity search" },
-{ 131, "Unsupported proximity relation" },
-{ 132, "Unsupported proximity unit code" },
-{ 201, "Proximity not supported with this attribute combination" },
-{ 202, "Unsupported distance for proximity" },
-{ 203, "Ordered flag not supported for proximity" },
-{ 205, "Only zero step size supported for Scan" },
-{ 206, "Specified step size not supported for Scan" },
-{ 207, "Cannot sort according to sequence" },
-{ 208, "No result set name supplied on Sort" },
-{ 209, "Generic sort not supported (database-specific sort only supported)" },
-{ 210, "Database specific sort not supported" },
-{ 211, "Too many sort keys" },
-{ 212, "Duplicate sort keys" },
-{ 213, "Unsupported missing data action" },
-{ 214, "Illegal sort relation" },
-{ 215, "Illegal case value" },
-{ 216, "Illegal missing data action" },
-{ 217, "Segmentation: Cannot guarantee records will fit in specified segments"
-},
-{ 218, "ES: Package name already in use" },
-{ 219, "ES: no such package, on modify/delete" },
-{ 220, "ES: quota exceeded" },
-{ 221, "ES: extended service type not supported" },
-{ 222, "ES: permission denied on ES - id not authorized" },
-{ 223, "ES: permission denied on ES - cannot modify or delete" },
-{ 224, "ES: immediate execution failed" },
-{ 225, "ES: immediate execution not supported for this service" },
-{ 226, "ES: immediate execution not supported for these parameters" },
-{ 227, "No data available in requested record syntax" },
-{ 228, "Scan: malformed scan" },
-{ 229, "Term type not supported" },
-{ 230, "Sort: too many input results" },
-{ 231, "Sort: incompatible record formats" },
-{ 232, "Scan: term list not supported" },
-{ 233, "Scan: unsupported value of position-in-response" },
-{ 234, "Too many index terms processed" },
-{ 235, "Database does not exist" },
-{ 236, "Access to specified database denied" },
-{ 237, "Sort: illegal sort" },
-{ 238, "Record not available in requested syntax" },
-{ 239, "Record syntax not supported" },
-{ 240, "Scan: Resources exhausted looking for satisfying terms" },
-{ 241, "Scan: Beginning or end of term list" },
-{ 242, "Segmentation: max-segment-size too small to segment record" },
-{ 243, "Present:  additional-ranges parameter not supported" },
-{ 244, "Present:  comp-spec parameter not supported" },
-{ 245, "Type-1 query: restriction ('resultAttr') operand not supported" },
-{ 246, "Type-1 query: 'complex' attributeValue not supported" },
-{ 247, "Type-1 query: 'attributeSet' as part of AttributeElement not supported" },
-{ 1001, "Malformed APDU"}, 
-{ 1002, "ES: EXTERNAL form of Item Order request not supported" },
-{ 1003, "ES: Result set item form of Item Order request not supported" },
-{ 1004, "ES: Extended services not supported unless access control is in effect" },
-{ 1005, "Response records in Search response not supported" },
-{ 1006, "Response records in Search response not possible for specified database (or database combination)" },
-{ 1007, "No Explain server. Addinfo: pointers to servers that have a surrogate Explain database for this server" },
-{ 1008, "ES: missing mandatory parameter for specified function. Addinfo: parameter" },
-{ 1009, "ES: Item Order, unsupported OID in itemRequest. Addinfo: OID" },
-{ 1010, "Init/AC: Bad Userid" },
-{ 1011, "Init/AC: Bad Userid and/or Password" },
-{ 1012, "Init/AC: No searches remaining (pre-purchased searches exhausted)" },
-{ 1013, "Init/AC: Incorrect interface type (specified id valid only when used with a particular access method or client)" },
-{ 1014, "Init/AC: Authentication System error" },
-{ 1015, "Init/AC: Maximum number of simultaneous sessions for Userid" },
-{ 1016, "Init/AC: Blocked network address"},
-{ 1017, "Init/AC: No databases available for specified userId"},
-{ 1018, "Init/AC: System temporarily out of resources"},
-{ 1019, "Init/AC: System not available due to maintenance" },
-{ 1020, "Init/AC: System temporarily unavailable (Addinfo: when it's expected back up)"},
-{ 1021, "Init/AC: Account has expired"},
-{ 1022, "Init/AC: Password has expired so a new one must be supplied"},
-{ 1023, "Init/AC: Password has been changed by an administrator so a new one must be supplied"},
-{ 1024, "Unsupported Attribute" },
-{ 1025, "Service not supported for this database" },
-{ 1026, "Record cannot be opened because it is locked"},
-{ 1027, "SQL error" },
-{ 1028, "Record deleted" },
-{ 1029, "Scan: too many terms requested. Addinfo: max terms supported" },
-/* 1030 - 1039 /currently unnassigned */
-    
-/* The following, 1040 - 1047, were approved at the June 1998 ZIG meeting.
-   These were originally proposed for addition to the Extended Services
-   diagnostic set. */
-{ 1040, "ES: Invalid function" },
-{ 1041, "ES: Error in retention time" },
-{ 1042, "ES: Permissions data not understood" },
-{ 1043, "ES: Invalid OID for task specific parameters" },
-{ 1044, "ES: Invalid action" },
-{ 1045, "ES: Unknown schema" },
-{ 1046, "ES: Too many records in package" },
-{ 1047, "ES: Invalid wait action" },
-/* The following, 1048 - 1053, were approved at the October 1998 ZIG
-   meeting. */
-{ 1048, "ES: Cannot create task package -- exceeds maximum permissable size"},
-{ 1049, "ES: Cannot return task package -- exceeds maximum permissable size"},
-{ 1050, "ES: Extended services request too large"},
-{ 1051, "Scan: Attribute set id required -- not supplied"},
-{ 1052, "ES: Cannot process task package record -- exceeds maximum "
-      "permissible record size for ES" },
-{ 1053, "ES: Cannot return task package record -- exceeds maximum "
-      "permissible record size for ES response" },
-/* The following, 1054 - 1057, were approved at the March 1999 ZIG
-   meeting. 1054 and 1055 are added for support of the Model for Z39.50
-   Negotiation During Initialization
-   <http://lcweb.loc.gov/z3950/agency/nego.html>. 1056 was added in
-   conjunction with the clarification Single-PDU, Multi-database Searching
-   -- Status <http://lcweb.loc.gov/z3950/agency/clarify/db-status.html> */
-{ 1054, "Init: Required negotiation record not included"},
-{ 1055, "Init: negotiation option required"},
-{ 1056, "Attribute not supported for database" },
-{ 1057, "ES: Unsupported value of task package parameter"},
-/* The following, 1058 - 1066, were approved at the August 1999 ZIG
-   meeting. 1058 through 1065 are added for support of the Z39.50 Duplicate
-   Detection Service <http://lcweb.loc.gov/z3950/agency/amend/dedup.html>. */
-{ 1058, "Duplicate Detection: Cannot dedup on requested record portion" },  
-{ 1059, "Duplicate Detection: Requested detection criterion not supported" },
-{ 1060, "Duplicate Detection: Requested level of match not supported" },
-{ 1061, "Duplicate Detection: Requested regular expression not supported" },
-{ 1062, "Duplicate Detection: Cannot do clustering" },
-{ 1063, "Duplicate Detection: Retention criterion not supported"},
-{ 1064, "Duplicate Detection: Requested number (or percentage) of entries "
-      "for retention too large" },
-{ 1065, "Duplicate Detection: Requested sort criterion not supported" },
-{ 1066, "CompSpec: Unknown schema, or schema not supported."},
-/* The following, 1067 - 1069, were approved at the January 2000 ZIG
-   meeting. 1067 and 1068 are added for support of encapsulation
-   <http://lcweb.loc.gov/z3950/agency/amend/encapsulation.html> . */
-{ 1067, "Encapsulation: Encapsulated sequence of PDUs not supported" },
-{ 1068, "Encapsulation: Base operation (and encapsulated PDUs) not executed "
-      "based on pre-screening analysis" },
-{ 1069, "No syntaxes available for this request" },
-/* The following, 1070-1071, were approved at the July 2000 ZIG meeting.
-   These are defined in conjunction with the clarification Server Selected
-   Record Syntax <http://lcweb.loc.gov/z3950/agency/clarify/altsyntax.html> */
-{ 1070, "user not authorized to receive record(s) in requested syntax" },
-{ 1071, "preferredRecordSyntax not supplied" },
-/* The following diagnostic was approved at the October 2001 ZIG meeting.
-   See http://lists.w3.org/Archives/Public/www-zig/2001Jun/0006.html */
-{ 1072, "Query term includes characters that do not translate into the "
-      "target character set"},
-{ 0, NULL} 
-};
-
-const char *diagbib1_str (int code)
-{
-    int i;
-    for (i=0; msg_tab[i].msg; i++)
-        if (msg_tab[i].code == code)
-            return msg_tab[i].msg;
-    return "Unknown error";
-}
diff --git a/zutil/grs1disp.c b/zutil/grs1disp.c
deleted file mode 100644 (file)
index 21221b5..0000000
+++ /dev/null
@@ -1,117 +0,0 @@
-/*
- * Copyright (c) 2002, Index Data.
- * See the file LICENSE for details.
- *
- * $Id: grs1disp.c,v 1.1 2002-10-22 10:29:58 adam Exp $
- */
-
-#include <stdio.h>
-#include <string.h>
-#include <stdlib.h>
-#include <ctype.h>
-
-#include <yaz/proto.h>
-
-static void display_variant(WRBUF w, Z_Variant *v, int level)
-{
-    int i;
-
-    for (i = 0; i < v->num_triples; i++)
-    {
-        printf("%*sclass=%d,type=%d", level * 4, "", *v->triples[i]->zclass,
-            *v->triples[i]->type);
-        if (v->triples[i]->which == Z_Triple_internationalString)
-            printf(",value=%s\n", v->triples[i]->value.internationalString);
-        else
-            printf("\n");
-    }
-}
-
-static void display_grs1(WRBUF w, Z_GenericRecord *r, int level)
-{
-    int i;
-
-    if (!r)
-    {
-        return;
-    }
-    for (i = 0; i < r->num_elements; i++)
-    {
-        Z_TaggedElement *t;
-
-        wrbuf_printf(w, "%*s", level * 4, "");
-        t = r->elements[i];
-        wrbuf_printf(w, "(");
-        if (t->tagType)
-            wrbuf_printf(w, "%d,", *t->tagType);
-        else
-            wrbuf_printf(w, "?,");
-        if (t->tagValue->which == Z_StringOrNumeric_numeric)
-            wrbuf_printf(w, "%d) ", *t->tagValue->u.numeric);
-        else
-            wrbuf_printf(w, "%s) ", t->tagValue->u.string);
-        if (t->content->which == Z_ElementData_subtree)
-        {
-            if (!t->content->u.subtree)
-                printf (" (no subtree)\n");
-            else
-            {
-                wrbuf_printf(w, "\n");
-                display_grs1(w, t->content->u.subtree, level+1);
-            }
-        }
-        else if (t->content->which == Z_ElementData_string)
-            wrbuf_printf(w, "%s\n", t->content->u.string);
-        else if (t->content->which == Z_ElementData_numeric)
-            wrbuf_printf(w, "%d\n", *t->content->u.numeric);
-        else if (t->content->which == Z_ElementData_oid)
-        {
-            int *ip = t->content->u.oid;
-            oident *oent;
-            
-            if ((oent = oid_getentbyoid(t->content->u.oid)))
-                wrbuf_printf(w, "OID: %s\n", oent->desc);
-            else
-            {
-                wrbuf_printf(w, "{");
-                while (ip && *ip >= 0)
-                    wrbuf_printf(w, " %d", *(ip++));
-                wrbuf_printf(w, " }\n");
-            }
-        }
-        else if (t->content->which == Z_ElementData_noDataRequested)
-            wrbuf_printf(w, "[No data requested]\n");
-        else if (t->content->which == Z_ElementData_elementEmpty)
-            wrbuf_printf(w, "[Element empty]\n");
-        else if (t->content->which == Z_ElementData_elementNotThere)
-            wrbuf_printf(w, "[Element not there]\n");
-        else if (t->content->which == Z_ElementData_date)
-            wrbuf_printf(w, "Date: %s\n", t->content->u.date);
-        else if (t->content->which == Z_ElementData_ext)
-        {
-            printf ("External\n");
-            /* we cannot print externals here. Srry */
-        } 
-        else
-            wrbuf_printf(w, "? type = %d\n",t->content->which);
-        if (t->appliedVariant)
-            display_variant(w, t->appliedVariant, level+1);
-        if (t->metaData && t->metaData->supportedVariants)
-        {
-            int c;
-
-            wrbuf_printf(w, "%*s---- variant list\n", (level+1)*4, "");
-            for (c = 0; c < t->metaData->num_supportedVariants; c++)
-            {
-                wrbuf_printf(w, "%*svariant #%d\n", (level+1)*4, "", c);
-                display_variant(w, t->metaData->supportedVariants[c], level+2);
-            }
-        }
-    }
-}
-
-void yaz_display_grs1(WRBUF wrbuf, Z_GenericRecord *r, int flags)
-{
-    display_grs1 (wrbuf, r, 0);
-}
-
diff --git a/zutil/logrpn.c b/zutil/logrpn.c
deleted file mode 100644 (file)
index 6da0070..0000000
+++ /dev/null
@@ -1,368 +0,0 @@
-/*
- * Copyright (C) 1995-2003, Index Data
- * All rights reserved.
- *
- * $Id: logrpn.c,v 1.11 2003-02-27 19:56:00 adam Exp $
- */
-#include <stdio.h>
-
-#include <yaz/log.h>
-#include <yaz/logrpn.h>
-
-static const char *relToStr(int v)
-{
-    const char *str = 0;
-    switch (v)
-    {
-    case 1: str = "Less than"; break;
-    case 2: str = "Less than or equal"; break;
-    case 3: str = "Equal"; break;
-    case 4: str = "Greater or equal"; break;
-    case 5: str = "Greater than"; break;
-    case 6: str = "Not equal"; break;
-    case 100: str = "Phonetic"; break;
-    case 101: str = "Stem"; break;
-    case 102: str = "Relevance"; break;
-    case 103: str = "AlwaysMatches"; break;
-    }
-    return str;
-}
-static void attrStr (int type, int value, enum oid_value ast, char *str)
-{
-    const char *rstr;
-    *str = '\0';
-    switch (ast)
-    {
-    case VAL_BIB1:
-    case VAL_EXP1:
-    case VAL_GILS:
-        switch (type)
-        {
-        case 1:
-            sprintf (str, "use");
-            break;
-        case 2:
-            rstr = relToStr(value);
-            if (rstr)
-                sprintf (str, "relation=%s", rstr);
-            else
-                sprintf (str, "relation=%d", value);
-            break;
-        case 3:
-            switch (value)
-            {
-            case 1:
-                sprintf (str, "position=First in field");
-                break;
-            case 2:
-                sprintf (str, "position=First in any subfield");
-                break;
-            case 3:
-                sprintf (str, "position=Any position in field");
-                break;
-            default:
-                sprintf (str, "position");
-            }
-            break;
-        case 4:
-            switch (value)
-            {
-            case 1:
-                sprintf (str, "structure=Phrase");
-                break;
-            case 2:
-                sprintf (str, "structure=Word");
-                break;
-            case 3:
-                sprintf (str, "structure=Key");
-                break;
-            case 4:
-                sprintf (str, "structure=Year");
-                break;
-            case 5:
-                sprintf (str, "structure=Date");
-                break;
-            case 6:
-                sprintf (str, "structure=Word list");
-                break;
-            case 100:
-                sprintf (str, "structure=Date (un)");
-                break;
-            case 101:
-                sprintf (str, "structure=Name (norm)");
-                break;
-            case 102:
-                sprintf (str, "structure=Name (un)");
-                break;
-            case 103:
-                sprintf (str, "structure=Structure");
-                break;
-            case 104:
-                sprintf (str, "structure=urx");
-                break;
-            case 105:
-                sprintf (str, "structure=free-form-text");
-                break;
-            case 106:
-                sprintf (str, "structure=document-text");
-                break;
-            case 107:
-                sprintf (str, "structure=local-number");
-                break;
-            case 108:
-                sprintf (str, "structure=string");
-                break;
-            case 109:
-                sprintf (str, "structure=numeric string");
-                break;
-            default:
-                sprintf (str, "structure");
-            }
-            break;
-        case 5:
-            switch (value)
-            {
-            case 1:
-                sprintf (str, "truncation=Right");
-                break;
-            case 2:
-                sprintf (str, "truncation=Left");
-                break;
-            case 3:
-                sprintf (str, "truncation=Left&right");
-                break;
-            case 100:
-                sprintf (str, "truncation=Do not truncate");
-                break;
-            case 101:
-                sprintf (str, "truncation=Process #");
-                break;
-            case 102:
-                sprintf (str, "truncation=re-1");
-                break;
-            case 103:
-                sprintf (str, "truncation=re-2");
-                break;
-            case 104:
-                sprintf (str, "truncation=CCL");
-                break;
-            default:
-                sprintf (str, "truncation");
-            }
-            break;
-        case 6:
-            switch (value)
-            {
-            case 1:
-                sprintf (str, "completeness=Incomplete subfield");
-                break;
-            case 2:
-                sprintf (str, "completeness=Complete subfield");
-                break;
-            case 3:
-                sprintf (str, "completeness=Complete field");
-                break;
-            default:
-                sprintf (str, "completeness");
-            }
-            break;
-        }
-        break;
-    default:
-        break;
-    }
-    if (*str)
-        sprintf (str + strlen(str), " (%d=%d)", type, value);
-    else
-        sprintf (str, "%d=%d", type, value);
-}
-
-/*
- * zlog_attributes: print attributes of term
- */
-static void zlog_attributes (Z_AttributesPlusTerm *t, int level,
-                             enum oid_value ast)
-{
-    int of, i;
-    char str[80];
-    int num_attributes = t->attributes->num_attributes;
-    
-    for (of = 0; of < num_attributes; of++)
-    {
-       const char *attset_name = "";
-        Z_AttributeElement *element;
-       element = t->attributes->attributes[of];
-       if (element->attributeSet)
-       {
-           oident *attrset;
-           attrset = oid_getentbyoid (element->attributeSet);
-           attset_name = attrset->desc;
-       }
-        switch (element->which) 
-        {
-        case Z_AttributeValue_numeric:
-           attrStr (*element->attributeType,
-                    *element->value.numeric, ast, str);
-            yaz_log (LOG_LOG, "%*.0s%s %s", level, "", attset_name, str);
-            break;
-        case Z_AttributeValue_complex:
-            yaz_log (LOG_LOG, "%*.0s%s attributeType=%d complex",
-                 level, "", attset_name, *element->attributeType);
-            for (i = 0; i<element->value.complex->num_list; i++)
-            {
-                if (element->value.complex->list[i]->which ==
-                    Z_StringOrNumeric_string)
-                    yaz_log (LOG_LOG, "%*.0s  string: '%s'", level, "",
-                            element->value.complex->list[i]->u.string);
-                else if (element->value.complex->list[i]->which ==
-                         Z_StringOrNumeric_numeric)
-                    yaz_log (LOG_LOG, "%*.0s  numeric: '%d'", level, "",
-                            *element->value.complex->list[i]->u.numeric);
-            }
-            break;
-        default:
-            yaz_log (LOG_LOG, "%.*s%s attribute unknown",
-                    level, "", attset_name);
-        }
-    }
-}
-
-static void zlog_structure (Z_RPNStructure *zs, int level, enum oid_value ast)
-{
-    if (zs->which == Z_RPNStructure_complex)
-    {
-        Z_Operator *op = zs->u.complex->roperator;
-        const char *rstr = 0;
-        const char *unit = "private";
-        switch (op->which)
-        {
-        case Z_Operator_and:
-            yaz_log (LOG_LOG, "%*.0s and", level, "");
-            break;
-        case Z_Operator_or:
-            yaz_log (LOG_LOG, "%*.0s or", level, "");
-            break;
-        case Z_Operator_and_not:
-            yaz_log (LOG_LOG, "%*.0s and-not", level, "");
-            break;
-       case Z_Operator_prox:
-            if (op->u.prox->which == Z_ProximityOperator_known)
-            {
-                switch(*op->u.prox->u.known)
-                {
-                case Z_ProxUnit_character: unit = "character"; break;
-                case Z_ProxUnit_word: unit = "word"; break;
-                case Z_ProxUnit_sentence: unit = "sentence"; break;
-                case Z_ProxUnit_paragraph: unit = "paragraph"; break;
-                case Z_ProxUnit_section: unit = "section"; break;
-                case Z_ProxUnit_chapter: unit = "chapter"; break;
-                case Z_ProxUnit_document: unit = "document"; break;
-                case Z_ProxUnit_element: unit = "element"; break;
-                case Z_ProxUnit_subelement: unit = "subelement"; break;
-                case Z_ProxUnit_elementType: unit = "elementType"; break;
-                case Z_ProxUnit_byte: unit = "byte"; break;
-                default: unit = "unknown"; break;
-                }
-            }
-            rstr = relToStr(*op->u.prox->relationType);
-            yaz_log (LOG_LOG, "%*.0s prox excl=%s dist=%d order=%s "
-                     "rel=%s unit=%s",
-                     level, "", op->u.prox->exclusion ?
-                     (*op->u.prox->exclusion ? "T" : "F") : "N", 
-                     *op->u.prox->distance,
-                     *op->u.prox->ordered ? "T" : "F",
-                     rstr ? rstr : "unknown",
-                     unit);
-           break;
-        default:
-            yaz_log (LOG_LOG, "%*.0s unknown complex", level, "");
-            return;
-        }
-        zlog_structure (zs->u.complex->s1, level+2, ast);
-        zlog_structure (zs->u.complex->s2, level+2, ast);
-    }
-    else if (zs->which == Z_RPNStructure_simple)
-    {
-        if (zs->u.simple->which == Z_Operand_APT)
-        {
-            Z_AttributesPlusTerm *zapt = zs->u.simple->u.attributesPlusTerm;
-
-            switch (zapt->term->which)
-            {
-            case Z_Term_general:
-                yaz_log (LOG_LOG, "%*.0s term '%.*s' (general)", level, "",
-                        zapt->term->u.general->len,
-                        zapt->term->u.general->buf);
-                break;
-            case Z_Term_characterString:
-                yaz_log (LOG_LOG, "%*.0s term '%s' (string)", level, "",
-                        zapt->term->u.characterString);
-                break;
-            case Z_Term_numeric:
-                yaz_log (LOG_LOG, "%*.0s term '%d' (numeric)", level, "",
-                        *zapt->term->u.numeric);
-                break;
-            case Z_Term_null:
-                yaz_log (LOG_LOG, "%*.0s term (null)", level, "");
-                break;
-            default:
-                yaz_log (LOG_LOG, "%*.0s term (not general)", level, "");
-            }
-            zlog_attributes (zapt, level+2, ast);
-        }
-        else if (zs->u.simple->which == Z_Operand_resultSetId)
-        {
-            yaz_log (LOG_LOG, "%*.0s set '%s'", level, "",
-                    zs->u.simple->u.resultSetId);
-        }
-        else
-            yaz_log (LOG_LOG, "%*.0s unknown simple structure", level, "");
-    }
-    else
-        yaz_log (LOG_LOG, "%*.0s unknown structure", level, "");
-}
-
-void log_rpn_query (Z_RPNQuery *rpn)
-{
-    oident *attrset;
-    enum oid_value ast;
-    
-    attrset = oid_getentbyoid (rpn->attributeSetId);
-    if (attrset)
-    {
-        ast = attrset->value;
-       yaz_log (LOG_LOG, "RPN query. Type: %s", attrset->desc);
-    } 
-    else
-    {
-       ast = VAL_NONE;
-       yaz_log (LOG_LOG, "RPN query. Unknown type");
-    }
-    zlog_structure (rpn->RPNStructure, 0, ast);
-}
-
-void log_scan_term (Z_AttributesPlusTerm *zapt, oid_value ast)
-{
-    int level = 0;
-    if (zapt->term->which == Z_Term_general) 
-    {
-       yaz_log (LOG_LOG, "%*.0s term '%.*s' (general)", level, "",
-                zapt->term->u.general->len, zapt->term->u.general->buf);
-    }
-    else
-       yaz_log (LOG_LOG, "%*.0s term (not general)", level, "");
-    zlog_attributes (zapt, level+2, ast);
-}
-
-void yaz_log_zquery (Z_Query *q)
-{
-    switch (q->which)
-    {
-    case Z_Query_type_1: case Z_Query_type_101:
-       log_rpn_query (q->u.type_1);
-        break;
-    case Z_Query_type_104:
-        if (q->u.type_104->which == Z_External_CQL)
-            yaz_log (LOG_LOG, "CQL: %s", q->u.type_104->u.cql);
-    }
-}
diff --git a/zutil/opacdisp.c b/zutil/opacdisp.c
deleted file mode 100644 (file)
index e1dcec2..0000000
+++ /dev/null
@@ -1,135 +0,0 @@
-/*
- * Copyright (c) 2003, Index Data.
- * See the file LICENSE for details.
- *
- * $Id: opacdisp.c,v 1.4 2003-07-30 10:00:27 adam Exp $
- */
-
-#include <stdio.h>
-#include <string.h>
-#include <stdlib.h>
-#include <ctype.h>
-
-#include <yaz/proto.h>
-
-static void opac_element_str(WRBUF wrbuf, int l, const char *elem,
-                            const char *data)
-{
-    if (data)
-    {
-       while (--l >= 0)
-           wrbuf_puts(wrbuf, " ");
-       wrbuf_puts(wrbuf, "<");
-       wrbuf_puts(wrbuf, elem);
-       wrbuf_puts(wrbuf, ">");
-       wrbuf_xmlputs(wrbuf, data);
-       wrbuf_puts(wrbuf, "</");
-       wrbuf_puts(wrbuf, elem);
-       wrbuf_puts(wrbuf, ">\n");
-    }
-}
-
-static void opac_element_bool(WRBUF wrbuf, int l, const char *elem, int *data)
-{
-    if (data)
-    {
-       while (--l >= 0)
-           wrbuf_puts(wrbuf, " ");
-       wrbuf_puts(wrbuf, "<");
-       wrbuf_puts(wrbuf, elem);
-       if (*data)
-            wrbuf_puts(wrbuf, " value=\"1\"");
-       else
-            wrbuf_puts(wrbuf, " value=\"0\"");
-       wrbuf_puts(wrbuf, "/>\n");
-    }
-}
-
-void yaz_display_OPAC(WRBUF wrbuf, Z_OPACRecord *r, int flags)
-{
-    int i;
-    wrbuf_puts(wrbuf, "<holdings>\n");
-
-    for (i = 0; i < r->num_holdingsData; i++)
-    {
-       Z_HoldingsRecord *h = r->holdingsData[i];
-       wrbuf_puts(wrbuf, " <holding>\n");
-
-       if (h->which == Z_HoldingsRecord_marcHoldingsRecord)
-       {
-           wrbuf_puts (wrbuf, "  <marc/>\n");
-       /*  h->u.marcHoldingsRecord) */
-       }
-       else if (h->which == Z_HoldingsRecord_holdingsAndCirc)
-       {
-           int j;
-           
-           Z_HoldingsAndCircData *d = h->u.holdingsAndCirc;
-       
-           opac_element_str(wrbuf, 2, "typeOfRecord", d->typeOfRecord);
-           opac_element_str(wrbuf, 2, "encodingLevel", d->encodingLevel);
-           opac_element_str(wrbuf, 2, "format", d->format);
-           opac_element_str(wrbuf, 2, "receiptAcqStatus", d->receiptAcqStatus);
-           opac_element_str (wrbuf, 2, "generalRetention", d->generalRetention);
-           opac_element_str (wrbuf, 2, "completeness", d->completeness);
-           opac_element_str (wrbuf, 2, "dateOfReport", d->dateOfReport);
-           opac_element_str (wrbuf, 2, "nucCode", d->nucCode);
-           opac_element_str (wrbuf, 2, "localLocation", d->localLocation);
-           opac_element_str (wrbuf, 2, "shelvingLocation", d->shelvingLocation);
-           opac_element_str (wrbuf, 2, "callNumber", d->callNumber);
-           opac_element_str (wrbuf, 2, "copyNumber", d->copyNumber);
-           opac_element_str (wrbuf, 2, "publicNote", d->publicNote);
-           opac_element_str (wrbuf, 2, "reproductionNote", d->reproductionNote);
-           opac_element_str (wrbuf, 2, "termsUseRepro", d->termsUseRepro);
-           opac_element_str (wrbuf, 2, "enumAndChron", d->enumAndChron);
-           if (d->num_volumes)
-           {
-               wrbuf_puts (wrbuf, "  <volumes>\n");
-               for (j = 0; j<d->num_volumes; j++)
-               {
-                   wrbuf_puts (wrbuf, "   <volume>\n");
-                   opac_element_str (wrbuf, 4, "enumeration",
-                                     d->volumes[j]->enumeration);
-                   opac_element_str (wrbuf, 4, "chronology",
-                                     d->volumes[j]->chronology);
-                   opac_element_str (wrbuf, 4, "enumAndChron",
-                                     d->volumes[j]->enumAndChron);
-                   wrbuf_puts (wrbuf, "   </volume>\n");
-               }
-               wrbuf_puts (wrbuf, "  </volumes>\n");
-           }
-           if (d->num_circulationData)
-           {
-               wrbuf_puts (wrbuf, "  <circulations>\n");
-               for (j = 0; j<d->num_circulationData; j++)
-               {
-                   wrbuf_puts (wrbuf,"   <circulation>\n");
-                   opac_element_bool (wrbuf, 4, "availableNow",
-                                      d->circulationData[j]->availableNow);
-                   opac_element_str (wrbuf, 4, "availabiltyDate",
-                                     d->circulationData[j]->availablityDate);
-                   opac_element_str (wrbuf, 4, "availableThru",
-                                     d->circulationData[j]->availableThru);
-                   opac_element_str (wrbuf, 4, "restrictions",
-                                     d->circulationData[j]->restrictions);
-                   opac_element_str (wrbuf, 4, "itemId",
-                                     d->circulationData[j]->itemId);
-                   opac_element_bool (wrbuf, 4, "renewable",
-                                      d->circulationData[j]->renewable);
-                   opac_element_bool (wrbuf, 4, "onHold",
-                                      d->circulationData[j]->onHold);
-                   opac_element_str (wrbuf, 4, "enumAndChron",
-                                     d->circulationData[j]->enumAndChron);
-                   opac_element_str (wrbuf, 4, "midspine",
-                                     d->circulationData[j]->midspine);
-                   opac_element_str (wrbuf, 4, "temporaryLocation",
-                                     d->circulationData[j]->temporaryLocation);
-                   wrbuf_puts (wrbuf, "   </circulation>\n");
-               }
-               wrbuf_puts (wrbuf, "  </circulations>\n");
-           }
-       }
-       wrbuf_puts(wrbuf, " </holding>\n");
-    }
-    wrbuf_puts(wrbuf, "</holdings>\n");
-}
diff --git a/zutil/otherinfo.c b/zutil/otherinfo.c
deleted file mode 100644 (file)
index 9ee8550..0000000
+++ /dev/null
@@ -1,211 +0,0 @@
-/*
- * Copyright (c) 1999-2003, Index Data
- * See the file LICENSE for details.
- * Sebastian Hammer, Adam Dickmeiss
- *
- * $Id: otherinfo.c,v 1.7 2003-01-06 08:20:29 adam Exp $
- */
-
-#include <stdio.h>
-#include <string.h>
-
-#include <yaz/otherinfo.h>
-
-void yaz_oi_APDU(Z_APDU *apdu, Z_OtherInformation ***oip)
-{
-    switch (apdu->which)
-    {
-    case Z_APDU_initRequest:
-       *oip = &apdu->u.initRequest->otherInfo;
-       break;
-    case Z_APDU_searchRequest:
-       *oip = &apdu->u.searchRequest->otherInfo;
-       break;
-    case Z_APDU_presentRequest:
-       *oip = &apdu->u.presentRequest->otherInfo;
-       break;
-    case Z_APDU_sortRequest:
-       *oip = &apdu->u.sortRequest->otherInfo;
-       break;
-    case Z_APDU_scanRequest:
-       *oip = &apdu->u.scanRequest->otherInfo;
-       break;
-    case Z_APDU_extendedServicesRequest:
-       *oip = &apdu->u.extendedServicesRequest->otherInfo;
-       break;
-    case Z_APDU_deleteResultSetRequest:
-       *oip = &apdu->u.deleteResultSetRequest->otherInfo;
-       break;
-    case Z_APDU_initResponse:
-       *oip = &apdu->u.initResponse->otherInfo;
-       break;
-    case Z_APDU_searchResponse:
-       *oip = &apdu->u.searchResponse->otherInfo;
-       break;
-    case Z_APDU_presentResponse:
-       *oip = &apdu->u.presentResponse->otherInfo;
-       break;
-    case Z_APDU_sortResponse:
-       *oip = &apdu->u.sortResponse->otherInfo;
-       break;
-    case Z_APDU_scanResponse:
-       *oip = &apdu->u.scanResponse->otherInfo;
-       break;
-    case Z_APDU_extendedServicesResponse:
-       *oip = &apdu->u.extendedServicesResponse->otherInfo;
-       break;
-    case Z_APDU_deleteResultSetResponse:
-       *oip = &apdu->u.deleteResultSetResponse->otherInfo;
-       break;
-    case Z_APDU_duplicateDetectionRequest:
-       *oip = &apdu->u.duplicateDetectionRequest->otherInfo;
-       break;
-    case Z_APDU_duplicateDetectionResponse:
-       *oip = &apdu->u.duplicateDetectionResponse->otherInfo;
-       break;
-    default:
-       *oip = 0;
-       break;
-    }
-}
-
-Z_OtherInformationUnit *yaz_oi_update (
-    Z_OtherInformation **otherInformationP, ODR odr,
-    int *oid, int categoryValue, int delete_flag)
-{
-    int i;
-    Z_OtherInformation *otherInformation;
-
-    if (!otherInformationP)
-        return 0;
-    otherInformation = *otherInformationP;
-    if (!otherInformation)
-    {
-       if (!odr)
-           return 0;
-       otherInformation = *otherInformationP = (Z_OtherInformation *)
-           odr_malloc (odr, sizeof(*otherInformation));
-       otherInformation->num_elements = 0;
-       otherInformation->list = 0;
-    }
-    for (i = 0; i<otherInformation->num_elements; i++)
-    {
-       if (!oid)
-       {
-           if (!otherInformation->list[i]->category)
-               return otherInformation->list[i];
-       }
-       else
-       {
-           if (otherInformation->list[i]->category &&
-               categoryValue ==
-               *otherInformation->list[i]->category->categoryValue &&
-               !oid_oidcmp (oid, otherInformation->list[i]->category->
-                            categoryTypeId))
-           {
-               Z_OtherInformationUnit *this_list = otherInformation->list[i];
-
-               if (delete_flag)
-               {
-                   (otherInformation->num_elements)--;
-                   while (i < otherInformation->num_elements)
-                   {
-                       otherInformation->list[i] =
-                           otherInformation->list[i+1];
-                       i++;
-                   }
-               }
-               return this_list;
-           }
-       }
-    }
-    if (!odr)
-       return 0;
-    else
-    {
-       Z_OtherInformationUnit **newlist = (Z_OtherInformationUnit**)
-           odr_malloc(odr, (otherInformation->num_elements+1) *
-                      sizeof(*newlist));
-       for (i = 0; i<otherInformation->num_elements; i++)
-           newlist[i] = otherInformation->list[i];
-       otherInformation->list = newlist;
-       
-       otherInformation->list[i] = (Z_OtherInformationUnit*)
-           odr_malloc (odr, sizeof(Z_OtherInformationUnit));
-       if (oid)
-       {
-           otherInformation->list[i]->category = (Z_InfoCategory*)
-               odr_malloc (odr, sizeof(Z_InfoCategory));
-           otherInformation->list[i]->category->categoryTypeId = (int*)
-               odr_oiddup (odr, oid);
-           otherInformation->list[i]->category->categoryValue = (int*)
-               odr_malloc (odr, sizeof(int));
-           *otherInformation->list[i]->category->categoryValue =
-               categoryValue;
-       }
-       else
-           otherInformation->list[i]->category = 0;
-       otherInformation->list[i]->which = Z_OtherInfo_characterInfo;
-       otherInformation->list[i]->information.characterInfo = 0;
-       
-       otherInformation->num_elements = i+1;
-       return otherInformation->list[i];
-    }
-}
-
-void yaz_oi_set_string_oid (
-    Z_OtherInformation **otherInformation, ODR odr,
-    int *oid, int categoryValue,
-    const char *str)
-{
-    Z_OtherInformationUnit *oi =
-       yaz_oi_update(otherInformation, odr, oid, categoryValue, 0);
-    if (!oi)
-       return;
-    oi->which = Z_OtherInfo_characterInfo;
-    oi->information.characterInfo = odr_strdup (odr, str);
-}
-
-void yaz_oi_set_string_oidval (
-    Z_OtherInformation **otherInformation, ODR odr,
-    int oidval, int categoryValue,
-    const char *str)
-{
-    int oid[OID_SIZE];
-    struct oident ent;
-    ent.proto = PROTO_Z3950;
-    ent.oclass = CLASS_USERINFO;
-    ent.value = (oid_value) oidval;
-    if (!oid_ent_to_oid (&ent, oid))
-       return ;
-    yaz_oi_set_string_oid(otherInformation,
-                         odr, oid, categoryValue, str);
-}
-
-char *yaz_oi_get_string_oid (
-    Z_OtherInformation **otherInformation,
-    int *oid, int categoryValue, int delete_flag)
-{
-    Z_OtherInformationUnit *oi;
-    
-    if ((oi = yaz_oi_update(otherInformation, 0, oid, 1, delete_flag)) &&
-       oi->which == Z_OtherInfo_characterInfo)
-       return oi->information.characterInfo;
-    return 0;
-}
-
-char *yaz_oi_get_string_oidval(Z_OtherInformation **otherInformation,
-                              int oidval, int categoryValue, int delete_flag)
-{
-    int oid[OID_SIZE];
-    struct oident ent;
-    ent.proto = PROTO_Z3950;
-    ent.oclass = CLASS_USERINFO;
-    ent.value = (oid_value) oidval;
-
-    if (!oid_ent_to_oid (&ent, oid))
-       return 0;
-    return yaz_oi_get_string_oid (otherInformation, oid, categoryValue,
-                                 delete_flag);
-}
-
diff --git a/zutil/pquery.c b/zutil/pquery.c
deleted file mode 100644 (file)
index 2840557..0000000
+++ /dev/null
@@ -1,817 +0,0 @@
-/*
- * Copyright (c) 1995-2003, Index Data.
- * See the file LICENSE for details.
- *
- * $Id: pquery.c,v 1.20 2003-01-06 08:20:29 adam Exp $
- */
-
-#include <stdio.h>
-#include <string.h>
-#include <stdlib.h>
-#include <ctype.h>
-
-#include <yaz/proto.h>
-#include <yaz/oid.h>
-#include <yaz/pquery.h>
-
-static oid_value p_query_dfset = VAL_NONE;
-
-struct yaz_pqf_parser {
-    const char *query_buf;
-    const char *query_ptr;
-    const char *lex_buf;
-    size_t lex_len;
-    int query_look;
-    char *left_sep;
-    char *right_sep;
-    int escape_char;
-    int term_type;
-    int external_type;
-    int error;
-};
-
-static Z_RPNStructure *rpn_structure (struct yaz_pqf_parser *li, ODR o,
-                                      oid_proto, 
-                                      int num_attr, int max_attr, 
-                                      int *attr_list, char **attr_clist,
-                                     oid_value *attr_set);
-
-static enum oid_value query_oid_getvalbyname (struct yaz_pqf_parser *li)
-{
-    enum oid_value value;
-    char buf[32];
-
-    if (li->lex_len > 31)
-        return VAL_NONE;
-    memcpy (buf, li->lex_buf, li->lex_len);
-    buf[li->lex_len] = '\0';
-    value = oid_getvalbyname (buf);
-    return value;
-}
-
-static int compare_term (struct yaz_pqf_parser *li, const char *src,
-                         size_t off)
-{
-    size_t len=strlen(src);
-    
-    if (li->lex_len == len+off && !memcmp (li->lex_buf+off, src, len-off))
-       return 1;
-    return 0;
-}
-
-static int query_token (struct yaz_pqf_parser *li)
-{
-    int sep_char = ' ';
-    const char *sep_match;
-    const char **qptr = &li->query_ptr;
-
-    while (**qptr == ' ')
-        (*qptr)++;
-    if (**qptr == '\0')
-        return 0;
-    li->lex_len = 0;
-    if ((sep_match = strchr (li->left_sep, **qptr)))
-    {
-       sep_char = li->right_sep[sep_match - li->left_sep];
-        ++(*qptr);
-    }
-    li->lex_buf = *qptr;
-   
-    if (**qptr == li->escape_char && isdigit ((*qptr)[1]))
-    {
-       ++(li->lex_len);
-       ++(*qptr);
-       return 'l';
-    }
-    while (**qptr && **qptr != sep_char)
-    {
-       if (**qptr == '\\')
-       {
-           ++(li->lex_len);
-           ++(*qptr);
-       }
-       ++(li->lex_len);
-       ++(*qptr);
-    }
-    if (**qptr)
-       ++(*qptr);
-    if (sep_char == ' ' &&
-        li->lex_len >= 1 && li->lex_buf[0] == li->escape_char)
-    {
-       if (compare_term (li, "and", 1))
-           return 'a';
-        if (compare_term (li, "or", 1))
-            return 'o';
-        if (compare_term (li, "not", 1))
-            return 'n';
-        if (compare_term (li, "attr", 1))
-            return 'l';
-        if (compare_term (li, "set", 1))
-            return 's';
-        if (compare_term (li, "attrset", 1))
-            return 'r';
-        if (compare_term (li, "prox", 1))
-            return 'p';
-        if (compare_term (li, "term", 1))
-            return 'y';
-    }
-    return 't';
-}
-
-static int lex (struct yaz_pqf_parser *li)
-{
-    return li->query_look = query_token (li);
-}
-
-static int escape_string(char *out_buf, const char *in, int len)
-{
-
-    char *out = out_buf;
-    while (--len >= 0)
-       if (*in == '\\' && len > 0)
-       {
-           --len;
-           switch (*++in)
-           {
-           case 't':
-               *out++ = '\t';
-               break;
-           case 'n':
-               *out++ = '\n';
-               break;
-           case 'r':
-               *out++ = '\r';
-               break;
-           case 'f':
-               *out++ = '\f';
-               break;
-           case 'x':
-               if (len > 1)
-               {
-                   char s[4];
-                   int n = 0;
-                   s[0] = *++in;
-                   s[1] = *++in;
-                   s[2] = '\0';
-                   len = len - 2;
-                   sscanf (s, "%x", &n);
-                   *out++ = n;
-               }
-               break;
-           case '0':
-           case '1':
-           case '2':
-           case '3':
-               if (len > 1)
-               {
-                   char s[4];
-                   int n = 0;
-                   s[0] = *in;
-                   s[1] = *++in;                   
-                   s[2] = *++in;
-                   s[3] = '\0';
-                   len = len - 2;
-                   sscanf (s, "%o", &n);
-                   *out++ = n;
-               }
-               break;
-           default:
-               *out++ = *in;
-               break;
-           }
-           in++;
-       }
-       else
-           *out++ = *in++;
-    return out - out_buf;
-}
-
-static int p_query_parse_attr(struct yaz_pqf_parser *li, ODR o,
-                             int num_attr, int *attr_list,
-                             char **attr_clist, oid_value *attr_set)
-{
-    const char *cp;
-    if (!(cp = strchr (li->lex_buf, '=')) ||
-       (size_t) (cp-li->lex_buf) > li->lex_len)
-    {
-       attr_set[num_attr] = query_oid_getvalbyname (li);
-       if (attr_set[num_attr] == VAL_NONE)
-        {
-            li->error = YAZ_PQF_ERROR_ATTSET;
-           return 0;
-        }
-       if (!lex (li))
-        {
-            li->error = YAZ_PQF_ERROR_MISSING;
-            return 0;
-        }
-       if (!(cp = strchr (li->lex_buf, '=')))
-        {
-            li->error = YAZ_PQF_ERROR_BADATTR;
-           return 0;
-        }
-    }
-    else 
-    {
-       if (num_attr > 0)
-           attr_set[num_attr] = attr_set[num_attr-1];
-       else
-           attr_set[num_attr] = VAL_NONE;
-    }
-    attr_list[2*num_attr] = atoi(li->lex_buf);
-       cp++;
-    if (*cp >= '0' && *cp <= '9')
-    {
-       attr_list[2*num_attr+1] = atoi (cp);
-       attr_clist[num_attr] = 0;
-    }
-    else
-    {
-       int len = li->lex_len - (cp - li->lex_buf);
-       attr_list[2*num_attr+1] = 0;
-       attr_clist[num_attr] = (char *) odr_malloc (o, len+1);
-       len = escape_string(attr_clist[num_attr], cp, len);
-       attr_clist[num_attr][len] = '\0';
-    }
-    return 1;
-}
-
-static Z_AttributesPlusTerm *rpn_term (struct yaz_pqf_parser *li, ODR o,
-                                       oid_proto proto, 
-                                       int num_attr, int *attr_list,
-                                      char **attr_clist, oid_value *attr_set)
-{
-    Z_AttributesPlusTerm *zapt;
-    Odr_oct *term_octet;
-    Z_Term *term;
-    Z_AttributeElement **elements;
-
-    zapt = (Z_AttributesPlusTerm *)odr_malloc (o, sizeof(*zapt));
-    term_octet = (Odr_oct *)odr_malloc (o, sizeof(*term_octet));
-    term = (Z_Term *)odr_malloc (o, sizeof(*term));
-
-    if (!num_attr)
-        elements = (Z_AttributeElement**)odr_nullval();
-    else
-    {
-        int i, k = 0;
-        int *attr_tmp;
-
-        elements = (Z_AttributeElement**)
-           odr_malloc (o, num_attr * sizeof(*elements));
-
-        attr_tmp = (int *)odr_malloc (o, num_attr * 2 * sizeof(int));
-        memcpy (attr_tmp, attr_list, num_attr * 2 * sizeof(int));
-        for (i = num_attr; --i >= 0; )
-        {
-            int j;
-            for (j = i+1; j<num_attr; j++)
-                if (attr_tmp[2*j] == attr_tmp[2*i])
-                    break;
-            if (j < num_attr)
-                continue;
-            elements[k] =
-                (Z_AttributeElement*)odr_malloc (o,sizeof(**elements));
-            elements[k]->attributeType = &attr_tmp[2*i];
-           elements[k]->attributeSet =
-               yaz_oidval_to_z3950oid(o, CLASS_ATTSET, attr_set[i]);
-
-           if (attr_clist[i])
-           {
-               elements[k]->which = Z_AttributeValue_complex;
-               elements[k]->value.complex = (Z_ComplexAttribute *)
-                   odr_malloc (o, sizeof(Z_ComplexAttribute));
-               elements[k]->value.complex->num_list = 1;
-               elements[k]->value.complex->list =
-                   (Z_StringOrNumeric **)
-                   odr_malloc (o, 1 * sizeof(Z_StringOrNumeric *));
-               elements[k]->value.complex->list[0] =
-                   (Z_StringOrNumeric *)
-                   odr_malloc (o, sizeof(Z_StringOrNumeric));
-               elements[k]->value.complex->list[0]->which =
-                   Z_StringOrNumeric_string;
-               elements[k]->value.complex->list[0]->u.string =
-                   attr_clist[i];
-               elements[k]->value.complex->semanticAction = (int **)
-                   odr_nullval();
-               elements[k]->value.complex->num_semanticAction = 0;
-           }
-           else
-           {
-               elements[k]->which = Z_AttributeValue_numeric;
-               elements[k]->value.numeric = &attr_tmp[2*i+1];
-           }
-            k++;
-        }
-        num_attr = k;
-    }
-    zapt->attributes = (Z_AttributeList *)
-       odr_malloc (o, sizeof(*zapt->attributes));
-    zapt->attributes->num_attributes = num_attr;
-    zapt->attributes->attributes = elements;
-
-    zapt->term = term;
-
-    term_octet->buf = (unsigned char *)odr_malloc (o, 1 + li->lex_len);
-    term_octet->size = term_octet->len =
-        escape_string ((char *) (term_octet->buf), li->lex_buf, li->lex_len);
-    term_octet->buf[term_octet->size] = 0;  /* null terminate */
-    
-    switch (li->term_type)
-    {
-    case Z_Term_general:
-        term->which = Z_Term_general;
-        term->u.general = term_octet;
-        break;
-    case Z_Term_characterString:
-        term->which = Z_Term_characterString;
-        term->u.characterString = (char*) term_octet->buf; 
-                                    /* null terminated above */
-        break;
-    case Z_Term_numeric:
-        term->which = Z_Term_numeric;
-        term->u.numeric = odr_intdup (o, atoi((char*) (term_octet->buf)));
-        break;
-    case Z_Term_null:
-        term->which = Z_Term_null;
-        term->u.null = odr_nullval();
-        break;
-    case Z_Term_external:
-        term->which = Z_Term_external;
-       term->u.external = 0;
-       break;
-    default:
-        term->which = Z_Term_null;
-        term->u.null = odr_nullval();
-        break;
-    }
-    return zapt;
-}
-
-static Z_Operand *rpn_simple (struct yaz_pqf_parser *li, ODR o, oid_proto proto,
-                              int num_attr, int *attr_list, char **attr_clist,
-                              oid_value *attr_set)
-{
-    Z_Operand *zo;
-
-    zo = (Z_Operand *)odr_malloc (o, sizeof(*zo));
-    switch (li->query_look)
-    {
-    case 't':
-        zo->which = Z_Operand_APT;
-        if (!(zo->u.attributesPlusTerm =
-              rpn_term (li, o, proto, num_attr, attr_list, attr_clist,
-                       attr_set)))
-            return 0;
-        lex (li);
-        break;
-    case 's':
-        lex (li);
-        if (!li->query_look)
-        {
-            li->error = YAZ_PQF_ERROR_MISSING;
-            return 0;
-        }
-        zo->which = Z_Operand_resultSetId;
-        zo->u.resultSetId = (char *)odr_malloc (o, li->lex_len+1);
-        memcpy (zo->u.resultSetId, li->lex_buf, li->lex_len);
-        zo->u.resultSetId[li->lex_len] = '\0';
-        lex (li);
-        break;
-    default:
-        /* we're only called if one of the above types are seens so
-           this shouldn't happen */
-        li->error = YAZ_PQF_ERROR_INTERNAL;
-        return 0;
-    }
-    return zo;
-}
-
-static Z_ProximityOperator *rpn_proximity (struct yaz_pqf_parser *li, ODR o)
-{
-    Z_ProximityOperator *p = (Z_ProximityOperator *)odr_malloc (o, sizeof(*p));
-
-    if (!lex (li))
-    {
-        li->error = YAZ_PQF_ERROR_MISSING;
-        return NULL;
-    }
-    if (*li->lex_buf == '1')
-    {
-        p->exclusion = (int *)odr_malloc (o, sizeof(*p->exclusion));
-        *p->exclusion = 1;
-    } 
-    else if (*li->lex_buf == '0')
-    {
-        p->exclusion = (int *)odr_malloc (o, sizeof(*p->exclusion));
-        *p->exclusion = 0;
-    }
-    else
-        p->exclusion = NULL;
-
-    if (!lex (li))
-    {
-        li->error = YAZ_PQF_ERROR_MISSING;
-        return NULL;
-    }
-    p->distance = (int *)odr_malloc (o, sizeof(*p->distance));
-    *p->distance = atoi (li->lex_buf);
-
-    if (!lex (li))
-    {
-        li->error = YAZ_PQF_ERROR_MISSING;
-        return NULL;
-    }
-    p->ordered = (int *)odr_malloc (o, sizeof(*p->ordered));
-    *p->ordered = atoi (li->lex_buf);
-    
-    if (!lex (li))
-    {
-        li->error = YAZ_PQF_ERROR_MISSING;
-        return NULL;
-    }
-    p->relationType = (int *)odr_malloc (o, sizeof(*p->relationType));
-    *p->relationType = atoi (li->lex_buf);
-
-    if (!lex (li))
-    {
-        li->error = YAZ_PQF_ERROR_MISSING;
-        return NULL;
-    }
-    if (*li->lex_buf == 'k')
-        p->which = 0;
-    else if (*li->lex_buf == 'p')
-        p->which = 1;
-    else
-        p->which = atoi (li->lex_buf);
-
-    if (!lex (li))
-    {
-        li->error = YAZ_PQF_ERROR_MISSING;
-        return NULL;
-    }
-    p->which = Z_ProximityOperator_known;
-    p->u.known = (int *)odr_malloc (o, sizeof(*p->u.known));
-    *p->u.known = atoi (li->lex_buf);
-    return p;
-}
-
-static Z_Complex *rpn_complex (struct yaz_pqf_parser *li, ODR o, oid_proto proto,
-                               int num_attr, int max_attr, 
-                               int *attr_list, char **attr_clist,
-                              oid_value *attr_set)
-{
-    Z_Complex *zc;
-    Z_Operator *zo;
-
-    zc = (Z_Complex *)odr_malloc (o, sizeof(*zc));
-    zo = (Z_Operator *)odr_malloc (o, sizeof(*zo));
-    zc->roperator = zo;
-    switch (li->query_look)
-    {
-    case 'a':
-        zo->which = Z_Operator_and;
-        zo->u.and_not = odr_nullval();
-        break;
-    case 'o':
-        zo->which = Z_Operator_or;
-        zo->u.and_not = odr_nullval();
-        break;
-    case 'n':
-        zo->which = Z_Operator_and_not;
-        zo->u.and_not = odr_nullval();
-        break;
-    case 'p':
-        zo->which = Z_Operator_prox;
-        zo->u.prox = rpn_proximity (li, o);
-        if (!zo->u.prox)
-            return NULL;
-        break;
-    default:
-        /* we're only called if one of the above types are seens so
-           this shouldn't happen */
-        li->error = YAZ_PQF_ERROR_INTERNAL;
-        return NULL;
-    }
-    lex (li);
-    if (!(zc->s1 =
-          rpn_structure (li, o, proto, num_attr, max_attr, attr_list,
-                        attr_clist, attr_set)))
-        return NULL;
-    if (!(zc->s2 =
-          rpn_structure (li, o, proto, num_attr, max_attr, attr_list,
-                         attr_clist, attr_set)))
-        return NULL;
-    return zc;
-}
-
-static void rpn_term_type (struct yaz_pqf_parser *li, ODR o)
-{
-    if (!li->query_look)
-        return ;
-    if (compare_term (li, "general", 0))
-        li->term_type = Z_Term_general;
-    else if (compare_term (li, "numeric", 0))
-        li->term_type = Z_Term_numeric;
-    else if (compare_term (li, "string", 0))
-        li->term_type = Z_Term_characterString;
-    else if (compare_term (li, "oid", 0))
-        li->term_type = Z_Term_oid;
-    else if (compare_term (li, "datetime", 0))
-        li->term_type = Z_Term_dateTime;
-    else if (compare_term (li, "null", 0))
-        li->term_type = Z_Term_null;
-    else if (compare_term(li, "range", 0))
-    {
-       /* prepare for external: range search .. */
-        li->term_type = Z_Term_external;
-       li->external_type = VAL_MULTISRCH2;
-    }
-    lex (li);
-}
-                           
-static Z_RPNStructure *rpn_structure (struct yaz_pqf_parser *li, ODR o,
-                                      oid_proto proto, 
-                                      int num_attr, int max_attr, 
-                                      int *attr_list,
-                                     char **attr_clist,
-                                     oid_value *attr_set)
-{
-    Z_RPNStructure *sz;
-
-    sz = (Z_RPNStructure *)odr_malloc (o, sizeof(*sz));
-    switch (li->query_look)
-    {
-    case 'a':
-    case 'o':
-    case 'n':
-    case 'p':
-        sz->which = Z_RPNStructure_complex;
-        if (!(sz->u.complex =
-              rpn_complex (li, o, proto, num_attr, max_attr, attr_list,
-                           attr_clist, attr_set)))
-            return NULL;
-        break;
-    case 't':
-    case 's':
-        sz->which = Z_RPNStructure_simple;
-        if (!(sz->u.simple =
-              rpn_simple (li, o, proto, num_attr, attr_list,
-                          attr_clist, attr_set)))
-            return NULL;
-        break;
-    case 'l':
-        lex (li);
-        if (!li->query_look)
-        {
-            li->error = YAZ_PQF_ERROR_MISSING;
-            return 0;
-        }
-        if (num_attr >= max_attr)
-        {
-            li->error = YAZ_PQF_ERROR_TOOMANY;
-            return 0;
-        }
-       if (!p_query_parse_attr(li, o, num_attr, attr_list,
-                                attr_clist, attr_set))
-            return 0;
-       num_attr++;
-        lex (li);
-        return
-            rpn_structure (li, o, proto, num_attr, max_attr, attr_list,
-                          attr_clist,  attr_set);
-    case 'y':
-       lex (li);
-        rpn_term_type (li, o);
-        return
-            rpn_structure (li, o, proto, num_attr, max_attr, attr_list,
-                          attr_clist, attr_set);
-    case 0:                /* operator/operand expected! */
-        li->error = YAZ_PQF_ERROR_MISSING;
-        return 0;
-    }
-    return sz;
-}
-
-Z_RPNQuery *p_query_rpn_mk (ODR o, struct yaz_pqf_parser *li, oid_proto proto,
-                            const char *qbuf)
-{
-    Z_RPNQuery *zq;
-    int attr_array[1024];
-    char *attr_clist[512];
-    oid_value attr_set[512];
-    oid_value topSet = VAL_NONE;
-
-    zq = (Z_RPNQuery *)odr_malloc (o, sizeof(*zq));
-    lex (li);
-    if (li->query_look == 'r')
-    {
-        lex (li);
-        topSet = query_oid_getvalbyname (li);
-        if (topSet == VAL_NONE)
-        {
-            li->error = YAZ_PQF_ERROR_ATTSET;
-            return NULL;
-        }
-
-        lex (li);
-    }
-    if (topSet == VAL_NONE)
-        topSet = p_query_dfset;
-    if (topSet == VAL_NONE)
-        topSet = VAL_BIB1;
-
-    zq->attributeSetId = yaz_oidval_to_z3950oid(o, CLASS_ATTSET, topSet);
-
-    if (!zq->attributeSetId)
-    {
-        li->error = YAZ_PQF_ERROR_ATTSET;
-       return 0;
-    }
-
-    if (!(zq->RPNStructure = rpn_structure (li, o, proto, 0, 512,
-                                            attr_array, attr_clist, attr_set)))
-        return 0;
-    if (li->query_look)
-    {
-        li->error = YAZ_PQF_ERROR_EXTRA;
-        return 0;
-    }
-    return zq;
-}
-
-Z_RPNQuery *p_query_rpn (ODR o, oid_proto proto,
-                         const char *qbuf)
-{
-    struct yaz_pqf_parser li;
-
-    li.error = 0;
-    li.left_sep = "{\"";
-    li.right_sep = "}\"";
-    li.escape_char = '@';
-    li.term_type = Z_Term_general;
-    li.query_buf = li.query_ptr = qbuf;
-    li.lex_buf = 0;
-    return p_query_rpn_mk (o, &li, proto, qbuf);
-}
-
-
-Z_AttributesPlusTerm *p_query_scan_mk (struct yaz_pqf_parser *li,
-                                       ODR o, oid_proto proto,
-                                       Odr_oid **attributeSetP,
-                                       const char *qbuf)
-{
-    int attr_list[1024];
-    char *attr_clist[512];
-    oid_value attr_set[512];
-    int num_attr = 0;
-    int max_attr = 512;
-    oid_value topSet = VAL_NONE;
-    Z_AttributesPlusTerm *apt;
-
-    lex (li);
-    if (li->query_look == 'r')
-    {
-        lex (li);
-        topSet = query_oid_getvalbyname (li);
-
-        lex (li);
-    }
-    if (topSet == VAL_NONE)
-        topSet = p_query_dfset;
-    if (topSet == VAL_NONE)
-        topSet = VAL_BIB1;
-
-    *attributeSetP = yaz_oidval_to_z3950oid (o, CLASS_ATTSET, topSet);
-
-    while (1)
-    {
-        if (li->query_look == 'l')
-        {
-            lex (li);
-            if (!li->query_look)
-            {
-                li->error = YAZ_PQF_ERROR_MISSING;
-                return 0;
-            }
-            if (num_attr >= max_attr)
-            {
-                li->error = YAZ_PQF_ERROR_TOOMANY;
-                return 0;
-            }
-            if (!p_query_parse_attr(li, o, num_attr, attr_list,
-                                    attr_clist, attr_set))
-                return 0;
-            num_attr++;
-            lex (li);
-        }
-        else if (li->query_look == 'y')
-        {
-            lex (li);
-            rpn_term_type (li, o);
-        }
-        else
-            break;
-    }
-    if (!li->query_look)
-    {
-        li->error = YAZ_PQF_ERROR_MISSING;
-        return 0;
-    }
-    apt = rpn_term (li, o, proto, num_attr, attr_list, attr_clist, attr_set);
-
-    lex (li);
-
-    if (li->query_look != 0)
-    {
-        li->error = YAZ_PQF_ERROR_EXTRA;
-        return 0;
-    }
-    return apt;
-}
-
-Z_AttributesPlusTerm *p_query_scan (ODR o, oid_proto proto,
-                                    Odr_oid **attributeSetP,
-                                    const char *qbuf)
-{
-    struct yaz_pqf_parser li;
-
-    li.error = 0;
-    li.left_sep = "{\"";
-    li.right_sep = "}\"";
-    li.escape_char = '@';
-    li.term_type = Z_Term_general;
-    li.query_buf = li.query_ptr = qbuf;
-    li.lex_buf = 0;
-
-    return p_query_scan_mk (&li, o, proto, attributeSetP, qbuf);
-}
-
-int p_query_attset (const char *arg)
-{
-    p_query_dfset = oid_getvalbyname (arg);
-    return (p_query_dfset == VAL_NONE) ? -1 : 0;
-}
-
-YAZ_PQF_Parser yaz_pqf_create (void)
-{
-    YAZ_PQF_Parser p = (YAZ_PQF_Parser) xmalloc (sizeof(*p));
-
-    p->error = 0;
-    p->left_sep = "{\"";
-    p->right_sep = "}\"";
-    p->escape_char = '@';
-    p->term_type = Z_Term_general;
-
-    return p;
-}
-
-void yaz_pqf_destroy (YAZ_PQF_Parser p)
-{
-    xfree (p);
-}
-
-Z_RPNQuery *yaz_pqf_parse (YAZ_PQF_Parser p, ODR o, const char *qbuf)
-{
-    if (!p)
-        return 0;
-    p->query_buf = p->query_ptr = qbuf;
-    p->lex_buf = 0;
-    return p_query_rpn_mk (o, p, PROTO_Z3950, qbuf);
-}
-
-Z_AttributesPlusTerm *yaz_pqf_scan (YAZ_PQF_Parser p, ODR o,
-                                    Odr_oid **attributeSetP,
-                                    const char *qbuf)
-{
-    if (!p)
-        return 0;
-    p->query_buf = p->query_ptr = qbuf;
-    p->lex_buf = 0;
-    return p_query_scan_mk (p, o, PROTO_Z3950, attributeSetP, qbuf);
-}
-
-int yaz_pqf_error (YAZ_PQF_Parser p, const char **msg, size_t *off)
-{
-    switch (p->error)
-    {
-    case YAZ_PQF_ERROR_NONE:
-        *msg = "no error"; break;
-    case YAZ_PQF_ERROR_EXTRA:
-        *msg = "extra token"; break;
-    case YAZ_PQF_ERROR_MISSING:
-        *msg = "missing token"; break;
-    case YAZ_PQF_ERROR_ATTSET:
-        *msg = "unknown attribute set"; break;
-    case YAZ_PQF_ERROR_TOOMANY:
-        *msg = "too many attributes"; break;
-    case YAZ_PQF_ERROR_BADATTR:
-        *msg = "bad attribute specification"; break;
-    case YAZ_PQF_ERROR_INTERNAL:
-        *msg = "internal error"; break;
-    default:
-        *msg = "unknown error"; break;
-    }
-    *off = p->query_ptr - p->query_buf;
-    return p->error;
-}
diff --git a/zutil/query.c b/zutil/query.c
deleted file mode 100644 (file)
index a3b8338..0000000
+++ /dev/null
@@ -1,116 +0,0 @@
-/*
- * Copyright (c) 1995-2001, Index Data
- * See the file LICENSE for details.
- *
- * $Id: query.c,v 1.4 2001-11-13 23:00:43 adam Exp $
- */
-
-#include <stdio.h>
-#include <ctype.h>
-#include <string.h>
-
-#include <yaz/odr.h>
-#include <yaz/proto.h>
-
-static Z_Complex *makecomplex(ODR o, char **buf);
-static Z_Operand *makesimple(ODR o, char **buf);
-Z_RPNStructure *makerpn(ODR o, char **buf);
-
-void skip_spaces(char**p)
-{
-    while (**p && isspace(**p))
-       (*p)++;
-}
-
-static Z_Operand *makesimple(ODR o, char **buf)
-{
-    Z_Operand *r;
-    Z_AttributesPlusTerm *t;
-    char *b;
-
-    r = odr_malloc(o, sizeof(*r));
-    if (**buf == 's' && *((*buf) + 1) == '=')
-    {
-       char *b = odr_malloc(o, 100);
-
-       r->which = Z_Operand_resultSetId;
-       r->u.resultSetId = b;
-       (*buf)++;
-       (*buf)++;
-       while (**buf && !isspace(**buf))
-           *(b++) = *((*buf)++);
-       *b = 0;
-       return r;
-    }
-    else if (**buf != '"')
-       return 0;
-    (*buf)++;
-    r->which = Z_Operand_APT;
-    r->u.attributesPlusTerm = t = odr_malloc(o, sizeof(*t));
-    t->attributes = odr_malloc(o, sizeof(*t));
-    t->attributes->num_attributes = 0;
-    t->attributes->attributes = 0;
-    t->term = odr_malloc(o, sizeof(*t->term));
-    t->term->which = Z_Term_general;
-    t->term->u.general = odr_malloc(o, sizeof(Odr_oct));
-    t->term->u.general->buf = odr_malloc(o, 100);
-    t->term->u.general->size = 100;
-    t->term->u.general->len = 0;
-    b = (char*) t->term->u.general->buf;
-    while (**buf && **buf != '"')
-    {
-       *(b++) = *((*buf)++);
-       t->term->u.general->len++;
-    }
-    if (**buf != '"')
-       return 0;
-    (*buf)++;
-    return r;
-}
-
-static Z_Complex *makecomplex(ODR o, char **buf)
-{
-    Z_Complex *r;
-    char op[100], *b;
-
-    r = odr_malloc(o, sizeof(*r));
-    r->roperator = odr_malloc(o, sizeof(*r->roperator));
-
-    b = op;
-    while (**buf && !isspace(**buf))
-       *(b++) = *((*buf)++);
-    *b = 0;
-    if (!strcmp(op, "and"))
-       r->roperator->which = Z_Operator_and;
-    else if (!strcmp(op, "or"))
-       r->roperator->which = Z_Operator_or;
-    else if (!strcmp(op, "not"))
-       r->roperator->which = Z_Operator_and_not;
-    r->roperator->u.and = "";
-    while (**buf && !isspace(**buf))
-       (*buf)++;
-    if (!(r->s1 = makerpn(o, buf)))
-       return 0;
-    if (!(r->s2 = makerpn(o, buf)))
-       return 0;
-    return r;
-}
-    
-Z_RPNStructure *makerpn(ODR o, char **buf)
-{
-    Z_RPNStructure *r;
-
-    r = odr_malloc(o, sizeof(*r));
-    skip_spaces(buf);
-    if (**buf == '"' || **buf == 's')
-    {
-       r->which = Z_RPNStructure_simple;
-       if (!(r->u.simple = makesimple(o, buf)))
-           return 0;
-       return r;
-    }
-    r->which = Z_RPNStructure_complex;
-    if (!(r->u.complex = makecomplex(o, buf)))
-       return 0;
-    return r;
-}
diff --git a/zutil/soap.c b/zutil/soap.c
deleted file mode 100644 (file)
index 2fbbc17..0000000
+++ /dev/null
@@ -1,262 +0,0 @@
-/*
- * Copyright (c) 2002-2003, Index Data.
- * See the file LICENSE for details.
- *
- * $Id: soap.c,v 1.9 2003-04-23 20:36:05 adam Exp $
- */
-
-#include <yaz/soap.h>
-
-#if HAVE_XML2
-#include <libxml/parser.h>
-#include <libxml/tree.h>
-
-static const char *soap_v1_1 = "http://schemas.xmlsoap.org/soap/envelope/";
-static const char *soap_v1_2 = "http://www.w3.org/2001/06/soap-envelope";
-
-int z_soap_error(ODR o, Z_SOAP *p,
-                 const char *fault_code, const char *fault_string,
-                 const char *details)
-{
-    p->which = Z_SOAP_error;
-    p->u.soap_error = (Z_SOAP_Fault *) 
-        odr_malloc(o, sizeof(*p->u.soap_error));
-    p->u.soap_error->fault_code = odr_strdup(o, fault_code);
-    p->u.soap_error->fault_string = odr_strdup(o, fault_string);
-    if (details)
-        p->u.soap_error->details = odr_strdup(o, details);
-    else
-        p->u.soap_error->details = 0;
-    return -1;
-}
-
-int z_soap_codec_enc(ODR o, Z_SOAP **pp, 
-                 char **content_buf, int *content_len,
-                 Z_SOAP_Handler *handlers,
-                const char *encoding)
-{
-    if (o->direction == ODR_DECODE)
-    {
-        Z_SOAP *p;
-        xmlNodePtr ptr, pptr;
-        xmlDocPtr doc;
-        int i, ret;
-
-        if (!content_buf || !*content_buf || !content_len)
-            return -1;
-
-        *pp = p = (Z_SOAP *) odr_malloc(o, sizeof(*p));
-        p->ns = soap_v1_1;
-
-        doc = xmlParseMemory(*content_buf, *content_len);
-        if (!doc)
-            return z_soap_error(o, p, "SOAP-ENV:Client",
-                                "Bad XML Document", 0);
-        /* check that root node is Envelope */
-        ptr = xmlDocGetRootElement(doc);
-        if (!ptr || ptr->type != XML_ELEMENT_NODE ||
-            strcmp(ptr->name, "Envelope") || !ptr->ns)
-        {
-            xmlFreeDoc(doc);
-            return z_soap_error(o, p, "SOAP-ENV:Client",
-                                "No Envelope element", 0);
-        }
-        else
-        {
-            /* determine SOAP version */
-            const char * ns_envelope = ptr->ns->href;
-            if (!strcmp(ns_envelope, soap_v1_1))
-                p->ns = soap_v1_1;
-            else if (!strcmp(ns_envelope, soap_v1_2))
-                p->ns = soap_v1_2;
-            else
-            {
-                xmlFreeDoc(doc);
-                return z_soap_error(o, p, "SOAP-ENV:Client",
-                                    "Bad SOAP version", 0);
-            }
-        }
-        ptr = ptr->children;
-        while(ptr && ptr->type == XML_TEXT_NODE)
-            ptr = ptr->next;
-        if (ptr && ptr->type == XML_ELEMENT_NODE &&
-            !strcmp(ptr->ns->href, p->ns) &&
-            !strcmp(ptr->name, "Header"))
-        {
-            ptr = ptr->next;
-            while(ptr && ptr->type == XML_TEXT_NODE)
-                ptr = ptr->next;
-        }
-        /* check that Body is present */
-        if (!ptr || ptr->type != XML_ELEMENT_NODE || 
-            strcmp(ptr->name, "Body"))
-        {
-            xmlFreeDoc(doc);
-            return z_soap_error(o, p, "SOAP-ENV:Client",
-                                "SOAP Body element not found", 0);
-        }
-        if (strcmp(ptr->ns->href, p->ns))
-        {
-            xmlFreeDoc(doc);
-            return z_soap_error(o, p, "SOAP-ENV:Client",
-                                "SOAP bad NS for Body element", 0);
-        }
-        pptr = ptr;
-        ptr = ptr->children;
-        while (ptr && ptr->type == XML_TEXT_NODE)
-            ptr = ptr->next;
-        if (!ptr || ptr->type != XML_ELEMENT_NODE)
-        {
-            xmlFreeDoc(doc);
-            return z_soap_error(o, p, "SOAP-ENV:Client",
-                                "SOAP No content for Body", 0);
-        }
-        /* check for fault package */
-        if (!strcmp(ptr->ns->href, p->ns)
-            && !strcmp(ptr->name, "Fault") && ptr->children)
-        {
-            ptr = ptr->children;
-
-            p->which = Z_SOAP_fault;
-            p->u.fault = odr_malloc(o, sizeof(*p->u.fault));
-            p->u.fault->fault_code = 0;
-            p->u.fault->fault_string = 0;
-            p->u.fault->details = 0;
-            while (ptr)
-            {
-                if (ptr->children && ptr->children->type == XML_TEXT_NODE)
-                {
-                    if (!strcmp(ptr->name, "faultcode"))
-                        p->u.fault->fault_code =
-                            odr_strdup(o, ptr->children->content);
-                    if (!strcmp(ptr->name, "faultstring"))
-                        p->u.fault->fault_string =
-                            odr_strdup(o, ptr->children->content);
-                    if (!strcmp(ptr->name, "details"))
-                        p->u.fault->details =
-                            odr_strdup(o, ptr->children->content);
-                }
-                ptr = ptr->next;
-            }
-            ret = 0;
-        }
-        else
-        {
-            for (i = 0; handlers[i].ns; i++)
-                if (!strcmp(ptr->ns->href, handlers[i].ns))
-                    break;
-            if (handlers[i].ns)
-            {
-                void *handler_data = 0;
-                ret = (*handlers[i].f)(o, pptr, &handler_data,
-                                       handlers[i].client_data,
-                                       handlers[i].ns);
-                if (ret || !handler_data)
-                    z_soap_error(o, p, "SOAP-ENV:Client",
-                                 "SOAP Handler returned error", 0);
-                else
-                {
-                    p->which = Z_SOAP_generic;
-                    p->u.generic = odr_malloc(o, sizeof(*p->u.generic));
-                    p->u.generic->no = i;
-                    p->u.generic->ns = handlers[i].ns;
-                    p->u.generic->p = handler_data;
-                }
-            }
-            else
-            {
-                ret = z_soap_error(o, p, "SOAP-ENV:Client", 
-                                   "No handler for NS", ptr->ns->href);
-            }
-        }
-        xmlFreeDoc(doc);
-        return ret;
-    }
-    else if (o->direction == ODR_ENCODE)
-    {
-        Z_SOAP *p = *pp;
-        xmlNsPtr ns_env;
-        xmlNodePtr envelope_ptr, body_ptr;
-
-        xmlDocPtr doc = xmlNewDoc("1.0");
-
-        envelope_ptr = xmlNewNode(0, "Envelope");
-        ns_env = xmlNewNs(envelope_ptr, p->ns, "SOAP-ENV");
-        xmlSetNs(envelope_ptr, ns_env);
-
-        body_ptr = xmlNewChild(envelope_ptr, ns_env, "Body", 0);
-        xmlDocSetRootElement(doc, envelope_ptr);
-
-        if (p->which == Z_SOAP_fault || p->which == Z_SOAP_error)
-        {
-            Z_SOAP_Fault *f = p->u.fault;
-            xmlNodePtr fault_ptr = xmlNewChild(body_ptr, ns_env, "Fault", 0);
-            xmlNewChild(fault_ptr, ns_env, "faultcode",  f->fault_code);
-            xmlNewChild(fault_ptr, ns_env, "faultstring", f->fault_string);
-            if (f->details)
-                xmlNewChild(fault_ptr, ns_env, "details", f->details);
-        }
-        else if (p->which == Z_SOAP_generic)
-        {
-            int ret, no = p->u.generic->no;
-            
-            ret = (*handlers[no].f)(o, body_ptr, &p->u.generic->p,
-                                    handlers[no].client_data,
-                                    handlers[no].ns);
-            if (ret)
-                return ret;
-        }
-        if (p->which == Z_SOAP_generic && !strcmp(p->ns, "SRU"))
-        {
-            xmlDocSetRootElement(doc, body_ptr->children);
-        }
-        if (1)
-        {
-            xmlChar *buf_out;
-            int len_out;
-            if (encoding)
-                xmlDocDumpMemoryEnc(doc, &buf_out, &len_out, encoding);
-            else
-                xmlDocDumpMemory(doc, &buf_out, &len_out);
-            *content_buf = (char *) odr_malloc(o, len_out);
-            *content_len = len_out;
-            memcpy(*content_buf, buf_out, len_out);
-            xmlFree(buf_out);
-        }
-        xmlFreeDoc(doc);
-        return 0;
-    }
-    return 0;
-}
-#else
-int z_soap_codec_enc(ODR o, Z_SOAP **pp, 
-                     char **content_buf, int *content_len,
-                     Z_SOAP_Handler *handlers, const char *encoding)
-{
-    static char *err_xml =
-        "<?xml version=\"1.0\"?>\n"
-        "<SOAP-ENV:Envelope"
-        " xmlns:SOAP-ENV=\"http://schemas.xmlsoap.org/soap/envelope/\">\n"
-        "\t<SOAP-ENV:Body>\n"
-        "\t\t<SOAP-ENV:Fault>\n"
-        "\t\t\t<faultcode>SOAP-ENV:Server</faultcode>\n"
-        "\t\t\t<faultstring>HTTP error</faultstring>\n"
-        "\t\t\t<detail>SOAP not supported in this YAZ configuration</detail>\n"
-        "\t\t</SOAP-ENV:Fault>\n"
-        "\t</SOAP-ENV:Body>\n"
-        "</SOAP-ENV:Envelope>\n";
-    if (o->direction == ODR_ENCODE)
-    {
-        *content_buf = err_xml;
-        *content_len = strlen(err_xml);
-    }
-    return -1;
-}
-#endif
-int z_soap_codec(ODR o, Z_SOAP **pp, 
-                 char **content_buf, int *content_len,
-                 Z_SOAP_Handler *handlers)
-{
-    return z_soap_codec_enc(o, pp, content_buf, content_len, handlers, 0);
-}
-
diff --git a/zutil/sortspec.c b/zutil/sortspec.c
deleted file mode 100644 (file)
index 3ffee80..0000000
+++ /dev/null
@@ -1,114 +0,0 @@
-/*
- * Copyright (c) 1995-2001, Index Data.
- * See the file LICENSE for details.
- *
- * $Id: sortspec.c,v 1.4 2001-11-13 23:00:43 adam Exp $
- */
-
-#include <stdio.h>
-#include <string.h>
-#include <stdlib.h>
-
-#include <yaz/proto.h>
-#include <yaz/oid.h>
-#include <yaz/sortspec.h>
-
-Z_SortKeySpecList *yaz_sort_spec (ODR out, const char *arg)
-{
-    char sort_string_buf[32], sort_flags[32];
-    Z_SortKeySpecList *sksl = (Z_SortKeySpecList *)
-        odr_malloc (out, sizeof(*sksl));
-    int off;
-    
-    sksl->num_specs = 0;
-    sksl->specs = (Z_SortKeySpec **)odr_malloc (out, sizeof(sksl->specs) * 20);
-    
-    while ((sscanf (arg, "%31s %31s%n", sort_string_buf,
-                   sort_flags, &off)) == 2  && off > 1)
-    {
-        int i;
-        char *sort_string_sep;
-       char *sort_string = sort_string_buf;
-        Z_SortKeySpec *sks = (Z_SortKeySpec *)odr_malloc (out, sizeof(*sks));
-        Z_SortKey *sk = (Z_SortKey *)odr_malloc (out, sizeof(*sk));
-       
-        arg += off;
-        sksl->specs[sksl->num_specs++] = sks;
-        sks->sortElement = (Z_SortElement *)
-           odr_malloc (out, sizeof(*sks->sortElement));
-        sks->sortElement->which = Z_SortElement_generic;
-        sks->sortElement->u.generic = sk;
-        
-        if ((sort_string_sep = strchr (sort_string, '=')))
-        {
-           int i = 0;
-            sk->which = Z_SortKey_sortAttributes;
-            sk->u.sortAttributes = (Z_SortAttributes *)
-               odr_malloc (out, sizeof(*sk->u.sortAttributes));
-            sk->u.sortAttributes->id = 
-               yaz_oidval_to_z3950oid(out, CLASS_ATTSET, VAL_BIB1);
-            sk->u.sortAttributes->list = (Z_AttributeList *)
-               odr_malloc (out, sizeof(*sk->u.sortAttributes->list));
-            sk->u.sortAttributes->list->attributes = (Z_AttributeElement **)
-               odr_malloc (out, 10 * 
-                           sizeof(*sk->u.sortAttributes->list->attributes));
-           while (i < 10 && sort_string && sort_string_sep)
-           {
-               Z_AttributeElement *el = (Z_AttributeElement *)
-                   odr_malloc (out, sizeof(*el));
-               sk->u.sortAttributes->list->attributes[i] = el;
-               el->attributeSet = 0;
-               el->attributeType = odr_intdup (out, atoi (sort_string));
-               el->which = Z_AttributeValue_numeric;
-               el->value.numeric =
-                   odr_intdup (out, atoi (sort_string_sep + 1));
-               i++;
-               sort_string = strchr(sort_string, ',');
-               if (sort_string)
-               {
-                   sort_string++;
-                   sort_string_sep = strchr (sort_string, '=');
-               }
-           }
-            sk->u.sortAttributes->list->num_attributes = i;
-        }
-        else
-        {
-            sk->which = Z_SortKey_sortField;
-            sk->u.sortField = odr_strdup (out, sort_string);
-        }
-        sks->sortRelation = odr_intdup (out, Z_SortRelation_ascending);
-        sks->caseSensitivity = odr_intdup (out, Z_SortCase_caseSensitive);
-
-        sks->which = Z_SortKeySpec_null;
-        sks->u.null = odr_nullval ();
-       
-        for (i = 0; sort_flags[i]; i++)
-        {
-            switch (sort_flags[i])
-            {
-            case 'd':
-            case 'D':
-            case '>':
-                *sks->sortRelation = Z_SortRelation_descending;
-                break;
-            case 'a':
-            case 'A':
-            case '<':
-                *sks->sortRelation = Z_SortRelation_ascending;
-                break;
-            case 'i':
-            case 'I':
-                *sks->caseSensitivity = Z_SortCase_caseInsensitive;
-                break;
-            case 'S':
-            case 's':
-                *sks->caseSensitivity = Z_SortCase_caseSensitive;
-                break;
-            }
-        }
-    }
-    if (!sksl->num_specs)
-       return 0;
-    return sksl;
-}
diff --git a/zutil/srw.c b/zutil/srw.c
deleted file mode 100644 (file)
index 5b6657e..0000000
+++ /dev/null
@@ -1,855 +0,0 @@
-/*
- * Copyright (c) 2002-2003, Index Data.
- * See the file LICENSE for details.
- *
- * $Id: srw.c,v 1.15 2003-05-12 22:36:10 adam Exp $
- */
-
-#include <yaz/srw.h>
-
-#if HAVE_XML2
-#include <libxml/parser.h>
-#include <libxml/tree.h>
-
-static void add_XML_n(xmlNodePtr ptr, const char *elem, char *val, int len)
-{
-    if (val)
-    {
-        xmlDocPtr doc = xmlParseMemory(val,len);
-        if (doc)
-        {
-            xmlNodePtr c = xmlNewChild(ptr, 0, elem, 0);
-            xmlNodePtr t = xmlDocGetRootElement(doc);
-            xmlAddChild(c, xmlCopyNode(t,1));
-            xmlFreeDoc(doc);
-        }
-    }
-}
-
-static void add_xsd_string_n(xmlNodePtr ptr, const char *elem, char *val,
-                             int len)
-{
-    if (val)
-    {
-        xmlNodePtr c = xmlNewChild(ptr, 0, elem, 0);
-        xmlNodePtr t = xmlNewTextLen(val, len);
-        xmlAddChild(c, t);
-    }
-}
-
-static void add_xsd_string(xmlNodePtr ptr, const char *elem, char *val)
-{
-    if (val)
-        xmlNewChild(ptr, 0, elem, val);
-}
-
-static void add_xsd_integer(xmlNodePtr ptr, const char *elem, int *val)
-{
-    if (val)
-    {
-        char str[30];
-        sprintf(str, "%d", *val);
-        xmlNewChild(ptr, 0, elem, str);
-    }
-}
-
-static int match_element(xmlNodePtr ptr, const char *elem)
-{
-    if (ptr->type == XML_ELEMENT_NODE && !strcmp(ptr->name, elem))
-        return 1;
-    return 0;
-}
-
-#define CHECK_TYPE 0
-
-static int match_xsd_string_n(xmlNodePtr ptr, const char *elem, ODR o,
-                              char **val, int *len)
-{
-#if CHECK_TYPE
-    struct _xmlAttr *attr;
-#endif
-    if (!match_element(ptr, elem))
-        return 0;
-#if CHECK_TYPE
-    for (attr = ptr->properties; attr; attr = attr->next)
-        if (!strcmp(attr->name, "type") &&
-            attr->children && attr->children->type == XML_TEXT_NODE)
-        {
-            const char *t = strchr(attr->children->content, ':');
-            if (t)
-                t = t + 1;
-            else
-                t = attr->children->content;
-            if (!strcmp(t, "string"))
-                break;
-        }
-    if (!attr)
-        return 0;
-#endif
-    ptr = ptr->children;
-    if (!ptr || ptr->type != XML_TEXT_NODE)
-        return 0;
-    *val = odr_strdup(o, ptr->content);
-    if (len)
-        *len = strlen(ptr->content);
-    return 1;
-}
-
-
-static int match_xsd_string(xmlNodePtr ptr, const char *elem, ODR o,
-                            char **val)
-{
-    return match_xsd_string_n(ptr, elem, o, val, 0);
-}
-
-static int match_xsd_XML_n(xmlNodePtr ptr, const char *elem, ODR o,
-                           char **val, int *len)
-{
-    xmlBufferPtr buf;
-
-    if (!match_element(ptr, elem))
-        return 0;
-    ptr = ptr->children;
-    if (!ptr)
-        return 0;
-    buf = xmlBufferCreate();
-
-    xmlNodeDump(buf, ptr->doc, ptr, 0, 0);
-
-    *val = odr_malloc(o, buf->use+1);
-    memcpy (*val, buf->content, buf->use);
-    (*val)[buf->use] = '\0';
-
-    if (len)
-        *len = buf->use;
-
-    xmlBufferFree(buf);
-
-    return 1;
-}
-
-                     
-static int match_xsd_integer(xmlNodePtr ptr, const char *elem, ODR o, int **val)
-{
-#if CHECK_TYPE
-    struct _xmlAttr *attr;
-#endif
-    if (!match_element(ptr, elem))
-        return 0;
-#if CHECK_TYPE
-    for (attr = ptr->properties; attr; attr = attr->next)
-        if (!strcmp(attr->name, "type") &&
-            attr->children && attr->children->type == XML_TEXT_NODE)
-        {
-            const char *t = strchr(attr->children->content, ':');
-            if (t)
-                t = t + 1;
-            else
-                t = attr->children->content;
-            if (!strcmp(t, "integer"))
-                break;
-        }
-    if (!attr)
-        return 0;
-#endif
-    ptr = ptr->children;
-    if (!ptr || ptr->type != XML_TEXT_NODE)
-        return 0;
-    *val = odr_intdup(o, atoi(ptr->content));
-    return 1;
-}
-
-static int yaz_srw_records(ODR o, xmlNodePtr pptr, Z_SRW_record **recs,
-                           int *num, void *client_data, const char *ns)
-{
-    if (o->direction == ODR_DECODE)
-    {
-        int i;
-        xmlNodePtr ptr;
-        *num = 0;
-        for (ptr = pptr->children; ptr; ptr = ptr->next)
-        {
-            if (ptr->type == XML_ELEMENT_NODE &&
-                !strcmp(ptr->name, "record"))
-                (*num)++;
-        }
-        if (!*num)
-            return 1;
-        *recs = odr_malloc(o, *num * sizeof(**recs));
-        for (i = 0, ptr = pptr->children; ptr; ptr = ptr->next, i++)
-        {
-            if (ptr->type == XML_ELEMENT_NODE &&
-                !strcmp(ptr->name, "record"))
-            {
-                xmlNodePtr rptr;
-                (*recs)[i].recordSchema = 0;
-                (*recs)[i].recordPacking = Z_SRW_recordPacking_string;
-                (*recs)[i].recordData_buf = 0;
-                (*recs)[i].recordData_len = 0;
-                (*recs)[i].recordPosition = 0;
-                for (rptr = ptr->children; rptr; rptr = rptr->next)
-                {
-                    if (match_xsd_string(rptr, "recordSchema", o, 
-                                         &(*recs)[i].recordSchema))
-                        ;
-                    else if (match_xsd_string_n(rptr, "recordData", o, 
-                                                &(*recs)[i].recordData_buf,
-                                                &(*recs)[i].recordData_len))
-                        ;
-                    else if (match_xsd_XML_n(rptr, "recordXML", o, 
-                                             &(*recs)[i].recordData_buf,
-                                             &(*recs)[i].recordData_len))
-                        (*recs)[i].recordPacking = Z_SRW_recordPacking_XML;
-                    else if (match_xsd_integer(rptr, "recordPosition", o, 
-                                               &(*recs)[i].recordPosition))
-                        ;
-                }
-            }
-        }
-    }
-    else if (o->direction == ODR_ENCODE)
-    {
-        int i;
-        for (i = 0; i < *num; i++)
-        {
-            xmlNodePtr rptr = xmlNewChild(pptr, 0, "record", 0);
-            add_xsd_string(rptr, "recordSchema", (*recs)[i].recordSchema);
-            switch((*recs)[i].recordPacking)
-            {
-            case Z_SRW_recordPacking_string:
-                add_xsd_string_n(rptr, "recordData", (*recs)[i].recordData_buf,
-                                 (*recs)[i].recordData_len);
-                break;
-            case Z_SRW_recordPacking_XML:
-                add_XML_n(rptr, "recordXML", (*recs)[i].recordData_buf,
-                          (*recs)[i].recordData_len);
-                break;
-            }
-            add_xsd_integer(rptr, "recordPosition", (*recs)[i].recordPosition);
-        }
-    }
-    return 0;
-}
-
-static int yaz_srw_diagnostics(ODR o, xmlNodePtr pptr, Z_SRW_diagnostic **recs,
-                               int *num, void *client_data, const char *ns)
-{
-    if (o->direction == ODR_DECODE)
-    {
-        int i;
-        xmlNodePtr ptr;
-        *num = 0;
-        for (ptr = pptr->children; ptr; ptr = ptr->next)
-        {
-            if (ptr->type == XML_ELEMENT_NODE &&
-                !strcmp(ptr->name, "diagnostic"))
-                (*num)++;
-        }
-        if (!*num)
-            return 1;
-        *recs = odr_malloc(o, *num * sizeof(**recs));
-        for (i = 0, ptr = pptr->children; ptr; ptr = ptr->next, i++)
-        {
-            if (ptr->type == XML_ELEMENT_NODE &&
-                !strcmp(ptr->name, "diagnostic"))
-            {
-                xmlNodePtr rptr;
-                (*recs)[i].code = 0;
-                (*recs)[i].details = 0;
-                for (rptr = ptr->children; rptr; rptr = rptr->next)
-                {
-                    if (match_xsd_integer(rptr, "code", o, 
-                                               &(*recs)[i].code))
-                        ;
-                    else if (match_xsd_string(rptr, "details", o, 
-                                              &(*recs)[i].details))
-                        ;
-                }
-                i++;
-            }
-        }
-    }
-    else if (o->direction == ODR_ENCODE)
-    {
-        int i;
-        for (i = 0; i < *num; i++)
-        {
-            xmlNodePtr rptr = xmlNewChild(pptr, 0, "diagnostic", 0);
-            add_xsd_integer(rptr, "code", (*recs)[i].code);
-            add_xsd_string(rptr, "details", (*recs)[i].details);
-        }
-    }
-    return 0;
-}
-
-
-int yaz_srw_codec(ODR o, void * vptr, Z_SRW_PDU **handler_data,
-                  void *client_data, const char *ns)
-{
-    xmlNodePtr pptr = vptr;
-    if (o->direction == ODR_DECODE)
-    {
-        xmlNodePtr method = pptr->children;
-
-        while (method && method->type == XML_TEXT_NODE)
-            method = method->next;
-        
-        if (!method || method->type != XML_ELEMENT_NODE)
-            return -1;
-        if (!strcmp(method->name, "searchRetrieveRequest"))
-        {
-            Z_SRW_PDU **p = handler_data;
-            xmlNodePtr ptr = method->children;
-            Z_SRW_searchRetrieveRequest *req;
-
-            *p = odr_malloc(o, sizeof(**p));
-            (*p)->which = Z_SRW_searchRetrieve_request;
-            req = (*p)->u.request = odr_malloc(o, sizeof(*req));
-            req->query_type = Z_SRW_query_type_cql;
-            req->query.cql = 0;
-            req->sort_type = Z_SRW_sort_type_none;
-            req->sort.none = 0;
-            req->startRecord = 0;
-            req->maximumRecords = 0;
-            req->recordSchema = 0;
-            req->recordPacking = 0;
-            req->database = 0;
-
-            for (; ptr; ptr = ptr->next)
-            {
-                if (match_xsd_string(ptr, "query", o, 
-                                     &req->query.cql))
-                    req->query_type = Z_SRW_query_type_cql;
-                else if (match_xsd_string(ptr, "pQuery", o, 
-                                     &req->query.pqf))
-                    req->query_type = Z_SRW_query_type_pqf;
-                else if (match_xsd_string(ptr, "xQuery", o, 
-                                     &req->query.xcql))
-                    req->query_type = Z_SRW_query_type_xcql;
-                else if (match_xsd_string(ptr, "sortKeys", o, 
-                                          &req->sort.sortKeys))
-                    req->sort_type = Z_SRW_sort_type_sort;
-                else if (match_xsd_string(ptr, "recordSchema", o, 
-                                          &req->recordSchema))
-                    ;
-                else if (match_xsd_string(ptr, "recordPacking", o,
-                                          &req->recordPacking))
-                    ;
-                else if (match_xsd_integer(ptr, "startRecord", o,
-                                           &req->startRecord))
-                    ;
-                else if (match_xsd_integer(ptr, "maximumRecords", o,
-                                           &req->maximumRecords))
-                    ;
-                else if (match_xsd_string(ptr, "database", o,
-                                           &req->database))
-                    ;
-                /* missing is xQuery, xSortKeys .. */
-            }
-        }
-        else if (!strcmp(method->name, "searchRetrieveResponse"))
-        {
-            Z_SRW_PDU **p = handler_data;
-            xmlNodePtr ptr = method->children;
-            Z_SRW_searchRetrieveResponse *res;
-
-            *p = odr_malloc(o, sizeof(**p));
-            (*p)->which = Z_SRW_searchRetrieve_response;
-            res = (*p)->u.response = odr_malloc(o, sizeof(*res));
-
-            res->numberOfRecords = 0;
-            res->resultSetId = 0;
-            res->resultSetIdleTime = 0;
-            res->records = 0;
-            res->num_records = 0;
-            res->diagnostics = 0;
-            res->num_diagnostics = 0;
-            res->nextRecordPosition = 0;
-
-            for (; ptr; ptr = ptr->next)
-            {
-                if (match_xsd_integer(ptr, "numberOfRecords", o, 
-                                      &res->numberOfRecords))
-                    ;
-                else if (match_xsd_string(ptr, "resultSetId", o, 
-                                          &res->resultSetId))
-                    ;
-                else if (match_xsd_integer(ptr, "resultSetIdleTime", o, 
-                                           &res->resultSetIdleTime))
-                    ;
-                else if (match_element(ptr, "records"))
-                    yaz_srw_records(o, ptr, &res->records,
-                                    &res->num_records, client_data,
-                                    ns);
-                else if (match_element(ptr, "diagnostics"))
-                    yaz_srw_diagnostics(o, ptr, &res->diagnostics,
-                                        &res->num_diagnostics,
-                                        client_data, ns);
-                else if (match_xsd_integer(ptr, "nextRecordPosition", o,
-                                           &res->nextRecordPosition))
-                    ;
-            }
-        }
-        else if (!strcmp(method->name, "explainRequest"))
-        {
-            Z_SRW_PDU **p = handler_data;
-            Z_SRW_explainRequest *req;
-            
-            *p = odr_malloc(o, sizeof(**p));
-            (*p)->which = Z_SRW_explain_request;
-            req = (*p)->u.explain_request = odr_malloc(o, sizeof(*req));
-            req->dummy = 0;
-        }
-        else if (!strcmp(method->name, "explainResponse"))
-        {
-            Z_SRW_PDU **p = handler_data;
-            Z_SRW_explainResponse *res;
-            xmlNodePtr ptr = method->children;
-
-            *p = odr_malloc(o, sizeof(**p));
-            (*p)->which = Z_SRW_explain_response;
-            res = (*p)->u.explain_response = odr_malloc(o, sizeof(*res));
-            res->explainData_buf = 0;
-            res->explainData_len = 0;
-            res->explainPacking = Z_SRW_recordPacking_string;
-            for (; ptr; ptr = ptr->next)
-            {
-                match_xsd_string_n(ptr, "Explain", o, 
-                                   &res->explainData_buf,
-                                   &res->explainData_len);
-            }
-        }
-        else
-            return -1;
-
-    }
-    else if (o->direction == ODR_ENCODE)
-    {
-        Z_SRW_PDU **p = handler_data;
-        if ((*p)->which == Z_SRW_searchRetrieve_request)
-        {
-            Z_SRW_searchRetrieveRequest *req = (*p)->u.request;
-            xmlNodePtr ptr = xmlNewChild(pptr, 0,
-                                         "searchRetrieveRequest", 0);
-            xmlNsPtr ns_srw = xmlNewNs(ptr, ns, "zs");
-
-            xmlSetNs(ptr, ns_srw);
-
-            switch(req->query_type)
-            {
-            case Z_SRW_query_type_cql:
-                add_xsd_string(ptr, "query", req->query.cql);
-                break;
-            case Z_SRW_query_type_xcql:
-                add_xsd_string(ptr, "xQuery", req->query.xcql);
-                break;
-            case Z_SRW_query_type_pqf:
-                add_xsd_string(ptr, "pQuery", req->query.pqf);
-                break;
-            }
-            switch(req->sort_type)
-            {
-            case Z_SRW_sort_type_none:
-                break;
-            case Z_SRW_sort_type_sort:
-                add_xsd_string(ptr, "sortKeys", req->sort.sortKeys);
-                break;
-            case Z_SRW_sort_type_xSort:
-                add_xsd_string(ptr, "xSortKeys", req->sort.xSortKeys);
-                break;
-            }
-            add_xsd_integer(ptr, "startRecord", req->startRecord);
-            add_xsd_integer(ptr, "maximumRecords", req->maximumRecords);
-            add_xsd_string(ptr, "recordSchema", req->recordSchema);
-            add_xsd_string(ptr, "recordPacking", req->recordPacking);
-            add_xsd_string(ptr, "database", req->database);
-        }
-        else if ((*p)->which == Z_SRW_searchRetrieve_response)
-        {
-            Z_SRW_searchRetrieveResponse *res = (*p)->u.response;
-            xmlNodePtr ptr = xmlNewChild(pptr, 0,
-                                         "searchRetrieveResponse", 0);
-            xmlNsPtr ns_srw = xmlNewNs(ptr, ns, "zs");
-
-            xmlSetNs(ptr, ns_srw);
-            add_xsd_integer(ptr, "numberOfRecords", res->numberOfRecords);
-            add_xsd_string(ptr, "resultSetId", res->resultSetId);
-            add_xsd_integer(ptr, "resultSetIdleTime", res->resultSetIdleTime);
-            if (res->num_records)
-            {
-                xmlNodePtr rptr = xmlNewChild(ptr, 0, "records", 0);
-                yaz_srw_records(o, rptr, &res->records, &res->num_records,
-                                client_data, ns);
-            }
-            if (res->num_diagnostics)
-            {
-                xmlNodePtr rptr = xmlNewChild(ptr, 0, "diagnostics", 0);
-                yaz_srw_diagnostics(o, rptr, &res->diagnostics,
-                                    &res->num_diagnostics, client_data, ns);
-            }
-            add_xsd_integer(ptr, "nextRecordPosition", res->nextRecordPosition);
-        }
-        else if ((*p)->which == Z_SRW_explain_request)
-        {
-            xmlNodePtr ptr = xmlNewChild(pptr, 0, "explainRequest", 0);
-            xmlNsPtr ns_srw = xmlNewNs(ptr, ns, "zs");
-
-            xmlSetNs(ptr, ns_srw);
-        }
-        else if ((*p)->which == Z_SRW_explain_response)
-        {
-            Z_SRW_explainResponse *res = (*p)->u.explain_response;
-            xmlNodePtr ptr = xmlNewChild(pptr, 0, "explainResponse", 0);
-            xmlNsPtr ns_srw = xmlNewNs(ptr, ns, "zs");
-
-            xmlSetNs(ptr, ns_srw);
-
-            add_xsd_string_n(ptr, "Explain", res->explainData_buf,
-                             res->explainData_len);
-        }
-        else
-            return -1;
-
-    }
-    return 0;
-}
-
-Z_SRW_PDU *yaz_srw_get(ODR o, int which)
-{
-    Z_SRW_PDU *sr = odr_malloc(o, sizeof(*o));
-    sr->which = which;
-    switch(which)
-    {
-    case Z_SRW_searchRetrieve_request:
-        sr->u.request = (Z_SRW_searchRetrieveRequest *)
-            odr_malloc(o, sizeof(*sr->u.request));
-        sr->u.request->query_type = Z_SRW_query_type_cql;
-        sr->u.request->query.cql = 0;
-        sr->u.request->sort_type = Z_SRW_sort_type_none;
-        sr->u.request->sort.none = 0;
-        sr->u.request->startRecord = 0;
-        sr->u.request->maximumRecords = 0;
-        sr->u.request->recordSchema = 0;
-        sr->u.request->recordPacking = 0;
-        sr->u.request->database = 0;
-        break;
-    case Z_SRW_searchRetrieve_response:
-        sr->u.response = (Z_SRW_searchRetrieveResponse *)
-            odr_malloc(o, sizeof(*sr->u.response));
-        sr->u.response->numberOfRecords = 0;
-        sr->u.response->resultSetId = 0;
-        sr->u.response->resultSetIdleTime = 0;
-        sr->u.response->records = 0;
-        sr->u.response->num_records = 0;
-        sr->u.response->diagnostics = 0;
-        sr->u.response->num_diagnostics = 0;
-        sr->u.response->nextRecordPosition = 0;
-        break;
-    case Z_SRW_explain_request:
-        sr->u.explain_request = (Z_SRW_explainRequest *)
-            odr_malloc(o, sizeof(*sr->u.explain_request));
-        sr->u.explain_request->dummy = 0;
-        break;
-    case Z_SRW_explain_response:
-        sr->u.explain_response = (Z_SRW_explainResponse *)
-            odr_malloc(o, sizeof(*sr->u.explain_response));
-        sr->u.explain_response->explainPacking = 0; 
-        sr->u.explain_response->explainData_buf = 0;
-        sr->u.explain_response->explainData_len = 0;
-    }
-    return sr;
-}
-
-#endif
-
-
-static struct {
-    int code;
-    const char *msg;
-} yaz_srw_codes [] = {
-{1, "Permanent system error"}, 
-{2, "System temporarily unavailable"}, 
-{3, "Authentication error"}, 
-/* Diagnostics Relating to CQL */
-{10, "Illegal query"}, 
-{11, "Unsupported query type (XCQL vs CQL)"}, 
-{12, "Too many characters in query"}, 
-{13, "Unbalanced or illegal use of parentheses"}, 
-{14, "Unbalanced or illegal use of quotes"}, 
-{15, "Illegal or unsupported index set"}, 
-{16, "Illegal or unsupported index"}, 
-{17, "Illegal or unsupported combination of index and index set"}, 
-{18, "Illegal or unsupported combination of indexes"}, 
-{19, "Illegal or unsupported relation"}, 
-{20, "Illegal or unsupported relation modifier"}, 
-{21, "Illegal or unsupported combination of relation modifers"}, 
-{22, "Illegal or unsupported combination of relation and index"}, 
-{23, "Too many characters in term"}, 
-{24, "Illegal combination of relation and term"}, 
-{25, "Special characters not quoted in term"}, 
-{26, "Non special character escaped in term"}, 
-{27, "Empty term unsupported"}, 
-{28, "Masking character not supported"}, 
-{29, "Masked words too short"}, 
-{30, "Too many masking characters in term"}, 
-{31, "Anchoring character not supported"}, 
-{32, "Anchoring character in illegal or unsupported position"}, 
-{33, "Combination of proximity/adjacency and masking characters not supported"}, 
-{34, "Combination of proximity/adjacency and anchoring characters not supported"}, 
-{35, "Terms only exclusion (stop) words"}, 
-{36, "Term in invalid format for index or relation"}, 
-{37, "Illegal or unsupported boolean operator"}, 
-{38, "Too many boolean operators in query"}, 
-{39, "Proximity not supported"}, 
-{40, "Illegal or unsupported proximity relation"}, 
-{41, "Illegal or unsupported proximity distance"}, 
-{42, "Illegal or unsupported proximity unit"}, 
-{43, "Illegal or unsupported proximity ordering"}, 
-{44, "Illegal or unsupported combination of proximity modifiers"}, 
-{45, "Index set name (prefix) assigned to multiple identifiers"}, 
-/* Diagnostics Relating to Result Sets */
-{50, "Result sets not supported"}, 
-{51, "Result set does not exist"}, 
-{52, "Result set temporarily unavailable"}, 
-{53, "Result sets only supported for retrieval"}, 
-{54, "Retrieval may only occur from an existing result set"}, 
-{55, "Combination of result sets with search terms not supported"}, 
-{56, "Only combination of single result set with search terms supported"}, 
-{57, "Result set created but no records available"}, 
-{58, "Result set created with unpredictable partial results available"}, 
-{59, "Result set created with valid partial results available"}, 
-/* Diagnostics Relating to Records */
-{60, "Too many records retrieved"}, 
-{61, "First record position out of range"}, 
-{62, "Negative number of records requested"}, 
-{63, "System error in retrieving records"}, 
-{64, "Record temporarily unavailable"}, 
-{65, "Record does not exist"}, 
-{66, "Unknown schema for retrieval"}, 
-{67, "Record not available in this schema"}, 
-{68, "Not authorised to send record"}, 
-{69, "Not authorised to send record in this schema"}, 
-{70, "Record too large to send"}, 
-/* Diagnostics Relating to Sorting */
-{80, "Sort not supported"}, 
-{81, "Unsupported sort type (sortKeys vs xSortKeys)"}, 
-{82, "Illegal or unsupported sort sequence"}, 
-{83, "Too many records"}, 
-{84, "Too many sort keys"}, 
-{85, "Duplicate sort keys"}, 
-{86, "Incompatible record formats"}, 
-{87, "Unsupported schema for sort"}, 
-{88, "Unsupported tag path for sort"}, 
-{89, "Tag path illegal or unsupported for schema"}, 
-{90, "Illegal or unsupported direction value"}, 
-{91, "Illegal or unsupported case value"}, 
-{92, "Illegal or unsupported missing value action"}, 
-/* Diagnostics Relating to Explain */
-{100, "Explain not supported"}, 
-{101, "Explain request type not supported (SOAP vs GET)"}, 
-{102, "Explain record temporarily unavailable"},
-{0, 0}
-};
-
-const char *yaz_diag_srw_str (int code)
-{
-    int i;
-    for (i = 0; yaz_srw_codes[i].code; i++)
-        if (yaz_srw_codes[i].code == code)
-            return yaz_srw_codes[i].msg;
-    return 0;
-}
-
-
-/* bib1:srw */
-static int srw_bib1_map[] = {
-    1, 1,
-    2, 2,
-    3, 11,
-    4, 35,
-    5, 12,
-    6, 38,
-    7, 30,
-    8, 32,
-    9, 29,
-    10, 10,
-    11, 12,
-    11, 23,
-    12, 60,
-    13, 61,
-    13, 62,
-    14, 63,
-    14, 64,
-    14, 65,
-    15, 68,
-    15, 69,
-    16, 70,
-    17, 70,
-    18, 50,
-    19, 55,
-    20, 56, 
-    21, 52,
-    22, 50,
-    23, 1,  /* bad map */
-    24, 63, /* bad map */
-    25, 63, /* bad map */
-    26, 63, /* bad map */
-    27, 51,
-    28, 52,
-    29, 52,
-    30, 51,
-    31, 57,
-    32, 58,
-    33, 59,
-    100, 1, /* bad map */
-    101, 3,
-    102, 3,
-    103, 3,
-    104, 3,
-    105, 3, 
-    106, 66,
-    107, 11,
-    108, 10,
-    108, 13,
-    108, 14,
-    108, 25,
-    108, 26,
-    108, 27,
-    108, 45,
-        
-    109, 1,
-    110, 37,
-    111, 1,
-    112, 58,
-    113, 10,
-    114, 16,
-    115, 16,
-    116, 16,
-    117, 19,
-    118, 22,
-    119, 32,
-    119, 31,
-    120, 28,
-    121, 15,
-    122, 32,
-    123, 22,
-    123, 17,
-    123, 18,
-    124, 24,
-    125, 36,
-    126, 36, 
-    127, 36,
-    128, 51,
-    129, 39,
-    130, 43,
-    131, 40,
-    132, 42,
-    201, 44,
-    201, 33,
-    201, 34,
-    202, 41,
-    203, 43,
-    205, 1,  /* bad map */
-    206, 1,  /* bad map */
-    207, 89,
-    208, 1,  /* bad map */
-    209, 80,
-    210, 80,
-    210, 81,
-    211, 84,
-    212, 85,
-    213, 92,
-    214, 90,
-    215, 91,
-    216, 92,
-    217, 63,
-    218, 1,  /* bad map */
-    219, 1,  /* bad map */
-    220, 1,  /* bad map */
-    221, 1,  /* bad map */
-    222, 1,  /* bad map */
-    223, 1,  /* bad map */
-    224, 1,  /* bad map */
-    225, 1,  /* bad map */
-    226, 1,  /* bad map */
-    227, 66,
-    228, 1,  /* bad map */
-    229, 36,
-    230, 83,
-    231, 89,
-    232, 1,
-    233, 1, /* bad map */
-    234, 1, /* bad map */
-    235, 2,
-    236, 3, 
-    237, 82,
-    238, 67,
-    239, 66,
-    240, 1, /* bad map */
-    241, 1, /* bad map */
-    242, 70,
-    243, 1, /* bad map */
-    244, 66,
-    245, 10,
-    246, 10,
-    247, 10,
-    1001, 1, /* bad map */
-    1002, 1, /* bad map */
-    1003, 1, /* bad map */
-    1004, 1, /* bad map */
-    1005, 1, /* bad map */
-    1006, 1, /* bad map */
-    1007, 100,
-    1008, 1, 
-    1009, 1,
-    1010, 3,
-    1011, 3,
-    1012, 3,
-    1013, 3,
-    1014, 3,
-    1015, 3,
-    1015, 3,
-    1016, 3,
-    1017, 3,
-    1018, 2,
-    1019, 2,
-    1020, 2,
-    1021, 3,
-    1022, 3,
-    1023, 3,
-    1024, 16,
-    1025, 3,
-    1026, 64,
-    1027, 1,
-    1028, 65,
-    1029, 1,
-    1040, 1,
-    /* 1041-1065 */
-    1066, 66,
-    1066, 67,
-    0
-};
-
-int yaz_diag_bib1_to_srw (int code)
-{
-    const int *p = srw_bib1_map;
-    while (*p)
-    {
-        if (code == p[0])
-            return p[1];
-        p += 2;
-    }
-    return 1;
-}
-
-int yaz_diag_srw_to_bib1(int code)
-{
-    const int *p = srw_bib1_map;
-    while (*p)
-    {
-        if (code == p[1])
-            return p[0];
-        p += 2;
-    }
-    return 1;
-}
diff --git a/zutil/srwtst.c b/zutil/srwtst.c
deleted file mode 100644 (file)
index be4cad7..0000000
+++ /dev/null
@@ -1,107 +0,0 @@
-/*
- * Copyright (c) 2002-2003, Index Data.
- * See the file LICENSE for details.
- *
- * $Id: srwtst.c,v 1.5 2003-03-03 19:57:37 adam Exp $
- */
-
-#include <yaz/srw.h>
-
-#if HAVE_XML2
-Z_SOAP_Handler h[2] = {
-    {"http://www.loc.gov/zing/srw/v1.0/", 0, (Z_SOAP_fun) yaz_srw_codec},
-    {0, 0, 0}
-};
-
-int main(int argc, char **argv)
-{
-    char buf[163840];
-    char *content_buf = buf;
-    int content_len;
-    int ret;
-    size_t no;
-    Z_SOAP *soap_package = 0;
-    ODR decode, encode;
-    int debug = 0;
-
-    nmem_init();
-    if (argc == 2 && !strcmp(argv[1], "debug"))
-        debug = 1;
-    no = fread(buf, 1, sizeof(buf), stdin);
-    if (no < 1 || no == sizeof(buf))
-    {
-        fprintf(stderr, "Bad file or too big\n");
-        exit (1);
-    }
-    decode = odr_createmem(ODR_DECODE);
-    encode = odr_createmem(ODR_ENCODE);
-    content_len = no;
-    ret = z_soap_codec(decode, &soap_package, 
-                       &content_buf, &content_len, h);
-    if (!soap_package)
-    {
-        fprintf(stderr, "Decoding seriously failed\n");
-        exit(1);
-    }
-    if (debug)
-    {
-        fprintf(stderr, "got NS = %s\n", soap_package->ns);
-        if (soap_package->which == Z_SOAP_generic &&
-            soap_package->u.generic->no == 0)
-        {
-            Z_SRW_PDU *sr = soap_package->u.generic->p;
-            if (sr->which == Z_SRW_searchRetrieve_request)
-            { 
-                Z_SRW_searchRetrieveRequest *req = sr->u.request;
-                switch(req->query_type)
-                {
-                case Z_SRW_query_type_cql:
-                    fprintf(stderr, "CQL: %s\n", req->query.cql);
-                    break;
-                case Z_SRW_query_type_xcql:
-                    fprintf(stderr, "XCQL\n");
-                    break;
-                case Z_SRW_query_type_pqf:
-                    fprintf(stderr, "PQF: %s\n", req->query.pqf);
-                    break;
-                }
-            }
-            else if (sr->which == Z_SRW_searchRetrieve_response)
-            {
-                Z_SRW_searchRetrieveResponse *res = sr->u.response;
-                if (res->records && res->num_records)
-                {
-                    int i;
-                    for (i = 0; i<res->num_records; i++)
-                    {
-                        fprintf (stderr, "%d\n", i);
-                        if (res->records[i].recordData_buf)
-                            fwrite(res->records[i].recordData_buf, 1,
-                                   res->records[i].recordData_len, stderr);
-                    }
-                }
-            }
-
-        }
-    }
-    ret = z_soap_codec(encode, &soap_package,
-                       &content_buf, &content_len, h);
-    if (content_buf && content_len)
-        fwrite (content_buf, content_len, 1, stdout);
-    else
-    {
-        fprintf(stderr, "No output!\n");
-        exit(1);
-    }
-    odr_destroy(decode);
-    odr_destroy(encode);
-    nmem_exit();
-    exit(0);
-}
-#else
-int main(int argc, char **argv)
-{
-    fprintf(stderr, "SOAP disabled\n");
-    exit(1);
-}
-#endif
diff --git a/zutil/yaz-ccl.c b/zutil/yaz-ccl.c
deleted file mode 100644 (file)
index 0aa4c5a..0000000
+++ /dev/null
@@ -1,46 +0,0 @@
-/*
- * Copyright (c) 1996-2003, Index Data.
- * See the file LICENSE for details.
- *
- * $Id: yaz-ccl.c,v 1.23 2003-06-24 23:03:04 adam Exp $
- */
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <ctype.h>
-
-#include <yaz/yaz-ccl.h>
-#include <yaz/pquery.h>
-
-Z_RPNQuery *ccl_rpn_query (ODR o, struct ccl_rpn_node *p)
-{
-    YAZ_PQF_Parser parser = yaz_pqf_create();
-    WRBUF wr = wrbuf_alloc();
-    Z_RPNQuery *q;
-
-    ccl_pquery(wr, p);
-
-    q = yaz_pqf_parse(parser, o, wrbuf_buf(wr));
-
-    wrbuf_free(wr, 1);
-    yaz_pqf_destroy(parser);
-    return q;
-}
-
-Z_AttributesPlusTerm *ccl_scan_query (ODR o, struct ccl_rpn_node *p)
-{
-    YAZ_PQF_Parser parser = yaz_pqf_create();
-    WRBUF wr = wrbuf_alloc();
-    Z_AttributesPlusTerm *q;
-    Odr_oid *setp;
-
-    ccl_pquery(wr, p);
-
-    q = yaz_pqf_scan(parser, o, &setp, wrbuf_buf(wr));
-
-    wrbuf_free(wr, 1);
-    yaz_pqf_destroy(parser);
-    return q;
-}
-
diff --git a/zutil/z3950oid.c b/zutil/z3950oid.c
deleted file mode 100644 (file)
index 95687a0..0000000
+++ /dev/null
@@ -1,82 +0,0 @@
-/*
- * Copyright (c) 1995-2003, Index Data
- * See the file LICENSE for details.
- *
- * $Id: z3950oid.c,v 1.5 2003-01-06 08:20:29 adam Exp $
- */
-
-#if HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#include <yaz/proto.h>
-
-Odr_oid *yaz_oidval_to_z3950oid (ODR o, int oid_class, int oid_value)
-{
-    oident ident;
-    int oid[OID_SIZE];
-
-    ident.proto = PROTO_Z3950;
-    ident.oclass = (enum oid_class) oid_class;
-    ident.value = (enum oid_value) oid_value;
-
-    if (ident.value == VAL_NONE)
-       return 0;
-
-    return odr_oiddup(o, oid_ent_to_oid(&ident, oid));
-}
-
-Odr_oid *yaz_str_to_z3950oid (ODR o, int oid_class, const char *str)
-{
-    struct oident ident;
-    int oid[OID_SIZE];
-
-    ident.proto = PROTO_Z3950;
-    ident.oclass = (enum oid_class) oid_class;
-    ident.value = oid_getvalbyname(str);
-
-    if (ident.value == VAL_NONE)
-       return 0;
-
-    return odr_oiddup(o, oid_ent_to_oid(&ident, oid));
-}
-
-const char *yaz_z3950oid_to_str (Odr_oid *oid, int *oid_class)
-{
-    struct oident *ident = oid_getentbyoid(oid);
-
-    if (!ident || ident->value == VAL_NONE)
-       return 0;
-    *oid_class = ident->oclass;
-    return ident->desc;
-}
-
-
-const char* yaz_z3950_oid_value_to_str(oid_value ov, oid_class oc)
-{
-    struct oident tmpentry;
-    int tmp_oid[OID_SIZE];
-     
-    tmpentry.proto = PROTO_Z3950;
-    tmpentry.oclass = oc;
-    tmpentry.value = ov; 
-    
-    if( oid_ent_to_oid(&tmpentry,tmp_oid) ) 
-    {
-        return tmpentry.desc;
-    } 
-    else 
-    {
-        return "";
-    }
-}
-
-
-/*
- * Local variables:
- * tab-width: 8
- * c-basic-offset: 4
- * End:
- * vim600: sw=4 ts=8 fdm=marker
- * vim<600: sw=4 ts=8
- */
diff --git a/zutil/zgdu.c b/zutil/zgdu.c
deleted file mode 100644 (file)
index dbd921e..0000000
+++ /dev/null
@@ -1,364 +0,0 @@
-/*
- * Copyright (c) 2002-2003, Index Data.
- * See the file LICENSE for details.
- *
- * $Id: zgdu.c,v 1.9 2003-03-11 11:09:17 adam Exp $
- */
-
-#include <yaz/odr.h>
-#include <yaz/yaz-version.h>
-#include <yaz/zgdu.h>
-
-static int decode_headers_content(ODR o, int off, Z_HTTP_Header **headers,
-                                  char **content_buf, int *content_len)
-{
-    int i = off;
-
-    *headers = 0;
-    while (i < o->size-1 && o->buf[i] == '\r')
-    {
-        int po;
-        i++;
-        if (o->buf[i] != '\n')
-        {
-            o->error = OHTTP;
-            return 0;
-        }
-       i++;
-       if (o->buf[i] == '\r')
-            break;
-        for (po = i; ; i++)
-        {
-            if (i == o->size)
-            {
-                o->error = OHTTP;
-                return 0;
-            }
-            else if (o->buf[i] == ':')
-                break;
-        }
-        *headers = (Z_HTTP_Header *) odr_malloc(o, sizeof(**headers));
-        (*headers)->name = (char*) odr_malloc(o, i - po + 1);
-        memcpy ((*headers)->name, o->buf + po, i - po);
-        (*headers)->name[i - po] = '\0';
-        i++;
-        while (i < o->size-1 && o->buf[i] == ' ')
-            i++;
-        for (po = i; i < o->size-1 && o->buf[i] != '\r' ; i++)
-           ;
-        
-        (*headers)->value = (char*) odr_malloc(o, i - po + 1);
-        memcpy ((*headers)->value, o->buf + po, i - po);
-        (*headers)->value[i - po] = '\0';
-        
-        headers = &(*headers)->next;
-    }
-    *headers = 0;
-    i++;
-    if (o->buf[i] != '\n')
-    {
-        o->error = OHTTP;
-        return 0;
-    }
-    i++;
-
-    if (i > o->size)
-    {
-        o->error = OHTTP;
-        return 0;
-    }
-    else if (i == o->size)
-    {
-        *content_buf = 0;
-        *content_len = 0;
-    }
-    else 
-    {
-        *content_len = o->size - i;
-        *content_buf = (char*) odr_malloc(o, *content_len + 1);
-        memcpy(*content_buf, o->buf + i, *content_len);
-        (*content_buf)[*content_len] = '\0';
-    }
-    return 1;
-}
-
-void z_HTTP_header_add(ODR o, Z_HTTP_Header **hp, const char *n,
-                       const char *v)
-{
-    while (*hp)
-        hp = &(*hp)->next;
-    *hp = (Z_HTTP_Header *) odr_malloc(o, sizeof(**hp));
-    (*hp)->name = odr_strdup(o, n);
-    (*hp)->value = odr_strdup(o, v);
-    (*hp)->next = 0;
-}
-
-const char *z_HTTP_header_lookup(Z_HTTP_Header *hp, const char *n)
-{
-    for (; hp; hp = hp->next)
-        if (!strcmp(hp->name, n))
-            return hp->value;
-    return 0;
-}
-
-
-Z_GDU *z_get_HTTP_Request(ODR o)
-{
-    Z_GDU *p = (Z_GDU *) odr_malloc(o, sizeof(*p));
-    Z_HTTP_Request *hreq;
-
-    p->which = Z_GDU_HTTP_Request;
-    p->u.HTTP_Request = (Z_HTTP_Request *) odr_malloc(o, sizeof(*hreq));
-    hreq = p->u.HTTP_Request;
-    hreq->headers = 0;
-    hreq->content_len = 0;
-    hreq->content_buf = 0;
-    hreq->version = "1.1";
-    hreq->method = "POST";
-    hreq->path = "/";
-    z_HTTP_header_add(o, &hreq->headers, "User-Agent",
-                      "YAZ/" YAZ_VERSION);
-    return p;
-}
-
-Z_GDU *z_get_HTTP_Response(ODR o, int code)
-{
-    Z_GDU *p = (Z_GDU *) odr_malloc(o, sizeof(*p));
-    Z_HTTP_Response *hres;
-
-    p->which = Z_GDU_HTTP_Response;
-    p->u.HTTP_Response = (Z_HTTP_Response *) odr_malloc(o, sizeof(*hres));
-    hres = p->u.HTTP_Response;
-    hres->headers = 0;
-    hres->content_len = 0;
-    hres->content_buf = 0;
-    hres->code = code;
-    hres->version = "1.1";
-    z_HTTP_header_add(o, &hres->headers, "Server",
-                      "YAZ/" YAZ_VERSION);
-    if (code != 200)
-    {
-        hres->content_buf = (char*) odr_malloc(o, 400);
-        sprintf (hres->content_buf, 
-                 "<!DOCTYPE HTML PUBLIC \"-//IETF//DTD HTML 2.0//EN\">\n"
-                 "<HTML>\n"
-                 " <HEAD>\n"
-                 "  <TITLE>YAZ " YAZ_VERSION "</TITLE>\n"
-                 " </HEAD>\n"
-                 " <BODY>\n"
-                 "  <P><A HREF=\"http://www.indexdata.dk/yaz/\">YAZ</A> " 
-                 YAZ_VERSION "</P>\n"
-                 "  <P>Error: %d</P>\n"
-                 "  <P>Description: %.50s</P>\n"
-                 " </BODY>\n"
-                 "</HTML>\n",
-                 code, z_HTTP_errmsg(code));
-        hres->content_len = strlen(hres->content_buf);
-        z_HTTP_header_add(o, &hres->headers, "Content-Type", "text/html");
-    }
-    return p;
-}
-
-const char *z_HTTP_errmsg(int code)
-{
-    if (code == 200)
-        return "OK";
-    else if (code == 400)
-        return "Bad Request";
-    else if (code == 404)
-        return "Not Found";
-    else if (code == 405)
-        return "Method Not Allowed";
-    else if (code == 500)
-        return "Internal Error";
-    else
-        return "Unknown Error";
-}
-
-int z_GDU (ODR o, Z_GDU **p, int opt, const char *name)
-{
-    if (o->direction == ODR_DECODE) {
-        *p = (Z_GDU *) odr_malloc(o, sizeof(**p));
-        if (o->size > 10 && !memcmp(o->buf, "HTTP/", 5))
-        {
-            int i, po;
-            Z_HTTP_Response *hr;
-           (*p)->which = Z_GDU_HTTP_Response;
-
-            hr = (*p)->u.HTTP_Response = (Z_HTTP_Response *)
-                odr_malloc(o, sizeof(*hr));
-            po = i = 5;
-            while (i < o->size-2 && o->buf[i] != ' ' && o->buf[i] != '\r')
-                i++;
-            hr->version = (char *) odr_malloc(o, i - po + 1);
-            if (i - po)
-                memcpy(hr->version, o->buf + po, i - po);
-            hr->version[i-po] = 0;
-            if (o->buf[i] != ' ')
-            {
-                o->error = OHTTP;
-                return 0;
-            }
-            i++;
-            hr->code = 0;
-            while (i < o->size-2 && o->buf[i] >= '0' && o->buf[i] <= '9')
-            {
-                hr->code = hr->code*10 + (o->buf[i] - '0');
-                i++;
-            }
-            while (i < o->size-1 && o->buf[i] != '\r')
-                i++;
-            return decode_headers_content(o, i, &hr->headers,
-                                          &hr->content_buf, &hr->content_len);            
-        }
-        else if (o->size > 5 &&
-            o->buf[0] >= 0x20 && o->buf[0] < 0x7f
-            && o->buf[1] >= 0x20 && o->buf[1] < 0x7f
-            && o->buf[2] >= 0x20 && o->buf[2] < 0x7f
-            && o->buf[3] >= 0x20 && o->buf[3] < 0x7f)
-        {
-            int i, po;
-            Z_HTTP_Request *hr;
-
-           (*p)->which = Z_GDU_HTTP_Request;
-            hr = (*p)->u.HTTP_Request = 
-                (Z_HTTP_Request *) odr_malloc(o, sizeof(*hr));
-
-            /* method .. */
-            for (i = 0; o->buf[i] != ' '; i++)
-                if (i >= o->size-5 || i > 30)
-                {
-                    o->error = OHTTP;
-                    return 0;
-                }
-            hr->method = (char *) odr_malloc(o, i+1);
-            memcpy (hr->method, o->buf, i);
-            hr->method[i] = '\0';
-            /* path */
-            po = i+1;
-            for (i = po; o->buf[i] != ' '; i++)
-                if (i >= o->size-5)
-                {
-                    o->error = OHTTP;
-                    return 0;
-                }
-            hr->path = (char *) odr_malloc(o, i - po + 1);
-            memcpy (hr->path, o->buf+po, i - po);
-            hr->path[i - po] = '\0';
-            /* HTTP version */
-            i++;
-            if (i > o->size-5 || memcmp(o->buf+i, "HTTP/", 5))
-            {
-                o->error = OHTTP;
-                return 0;
-            }
-            i+= 5;
-            po = i;
-            while (o->buf[i] != '\r')
-            {
-                if (i >= o->size-1)
-                {
-                    o->error = OHTTP;
-                    return 0;
-                }
-                i++;
-            }
-            hr->version = (char *) odr_malloc(o, i - po + 1);
-            memcpy(hr->version, o->buf + po, i - po);
-            hr->version[i - po] = '\0';
-            /* headers */
-            return decode_headers_content(o, i, &hr->headers,
-                                          &hr->content_buf, &hr->content_len);
-
-        }
-        else
-        {
-           (*p)->which = Z_GDU_Z3950;
-            return z_APDU(o, &(*p)->u.z3950, opt, 0);
-        }
-    }
-    else /* ENCODE or PRINT */
-    {
-        int top0 = o->top;
-        char sbuf[80];
-        Z_HTTP_Header *h;
-        switch((*p)->which)
-        {
-        case Z_GDU_HTTP_Response:
-            sprintf(sbuf, "HTTP/%s %d %s\r\n", (*p)->u.HTTP_Response->version,
-                    (*p)->u.HTTP_Response->code,
-                    z_HTTP_errmsg((*p)->u.HTTP_Response->code));
-            odr_write(o, (unsigned char *) sbuf, strlen(sbuf));
-            /* apply Content-Length if not already applied */
-            if (!z_HTTP_header_lookup((*p)->u.HTTP_Response->headers,
-                                      "Content-Length"))
-            {
-                char lstr[20];
-                sprintf(lstr, "%d", (*p)->u.HTTP_Response->content_len);
-                z_HTTP_header_add(o,
-                                  &(*p)->u.HTTP_Response->headers,
-                                  "Content-Length", lstr);
-            }
-            for (h = (*p)->u.HTTP_Response->headers; h; h = h->next)
-            {
-                odr_write(o, (unsigned char *) h->name, strlen(h->name));
-                odr_write(o, (unsigned char *) ": ", 2);
-                odr_write(o, (unsigned char *) h->value, strlen(h->value));
-                odr_write(o, (unsigned char *) "\r\n", 2);
-            }
-            odr_write(o, (unsigned char *) "\r\n", 2);
-            if ((*p)->u.HTTP_Response->content_buf)
-                odr_write(o, (unsigned char *) 
-                          (*p)->u.HTTP_Response->content_buf,
-                          (*p)->u.HTTP_Response->content_len);
-            if (o->direction == ODR_PRINT)
-            {
-                fprintf(o->print, "-- HTTP response:\n%.*s\n", o->top - top0,
-                        o->buf + top0);
-                fprintf(o->print, "-- \n");
-            }
-            break;
-        case Z_GDU_HTTP_Request:
-            odr_write(o, (unsigned char *) (*p)->u.HTTP_Request->method,
-                      strlen((*p)->u.HTTP_Request->method));
-            odr_write(o, (unsigned char *) " ", 1);
-            odr_write(o, (unsigned char *) (*p)->u.HTTP_Request->path,
-                      strlen((*p)->u.HTTP_Request->path));
-            odr_write(o, (unsigned char *) " HTTP/", 6);
-            odr_write(o, (unsigned char *) (*p)->u.HTTP_Request->version,
-                      strlen((*p)->u.HTTP_Request->version));
-            odr_write(o, (unsigned char *) "\r\n", 2);
-            if ((*p)->u.HTTP_Request->content_len &&
-                !z_HTTP_header_lookup((*p)->u.HTTP_Request->headers,
-                                      "Content-Length"))
-            {
-                char lstr[20];
-                sprintf(lstr, "%d", (*p)->u.HTTP_Request->content_len);
-                z_HTTP_header_add(o,
-                                  &(*p)->u.HTTP_Request->headers,
-                                  "Content-Length", lstr);
-            }
-            for (h = (*p)->u.HTTP_Request->headers; h; h = h->next)
-            {
-                odr_write(o, (unsigned char *) h->name, strlen(h->name));
-                odr_write(o, (unsigned char *) ": ", 2);
-                odr_write(o, (unsigned char *) h->value, strlen(h->value));
-                odr_write(o, (unsigned char *) "\r\n", 2);
-            }
-            odr_write(o, (unsigned char *) "\r\n", 2);
-            if ((*p)->u.HTTP_Request->content_buf)
-                odr_write(o, (unsigned char *)
-                          (*p)->u.HTTP_Request->content_buf,
-                          (*p)->u.HTTP_Request->content_len);
-            if (o->direction == ODR_PRINT)
-            {
-                fprintf(o->print, "-- HTTP request:\n%.*s\n", o->top, o->buf);
-            }
-            break;
-        case Z_GDU_Z3950:
-            return z_APDU(o, &(*p)->u.z3950, opt, 0);
-        }
-    }
-    return 1;
-}
-
diff --git a/zutil/zget.c b/zutil/zget.c
deleted file mode 100644 (file)
index 629f082..0000000
+++ /dev/null
@@ -1,498 +0,0 @@
-/*
- * Copyright (c) 1995-2003, Index Data.
- * See the file LICENSE for details.
- * Sebastian Hammer, Adam Dickmeiss
- *
- * $Id: zget.c,v 1.15 2003-10-08 21:48:19 adam Exp $
- */
-
-#include <yaz/proto.h>
-
-Z_InitRequest *zget_InitRequest(ODR o)
-{
-    Z_InitRequest *r = (Z_InitRequest *)odr_malloc(o, sizeof(*r));
-
-    r->referenceId = 0;
-    r->options = (Odr_bitmask *)odr_malloc(o, sizeof(*r->options));
-    ODR_MASK_ZERO(r->options);
-    r->protocolVersion = (Odr_bitmask *)
-       odr_malloc(o, sizeof(*r->protocolVersion));
-
-    ODR_MASK_SET(r->options, Z_Options_search);
-    ODR_MASK_SET(r->options, Z_Options_present);
-
-    ODR_MASK_ZERO(r->protocolVersion);
-
-    ODR_MASK_SET(r->protocolVersion, Z_ProtocolVersion_1);
-    ODR_MASK_SET(r->protocolVersion, Z_ProtocolVersion_2);
-
-    r->preferredMessageSize = odr_intdup(o, 30*1024);
-    r->maximumRecordSize = odr_intdup(o, 30*1024);
-    r->idAuthentication = 0;
-    r->implementationId = "81";
-    r->implementationName = "Index Data/YAZ";
-    r->implementationVersion = YAZ_VERSION
-#ifdef YAZ_DATE_STR
-    " (" YAZ_DATE_STR ")"
-#endif
-#ifdef YAZ_OS
-    " " YAZ_OS
-#endif
-       ;
-    r->userInformationField = 0;
-    r->otherInfo = 0;
-    return r;
-}
-
-Z_InitResponse *zget_InitResponse(ODR o)
-{
-    Z_InitResponse *r = (Z_InitResponse *)odr_malloc(o, sizeof(*r));
-
-    r->referenceId = 0;
-    r->options = (Odr_bitmask *)odr_malloc(o, sizeof(*r->options));
-    ODR_MASK_ZERO(r->options);
-    r->protocolVersion = (Odr_bitmask *)odr_malloc(o, sizeof(*r->protocolVersion));
-    ODR_MASK_ZERO(r->protocolVersion);
-    r->preferredMessageSize = odr_intdup(o, 30*1024);
-    r->maximumRecordSize = odr_intdup(o, 30*1024);
-    r->result = odr_intdup(o, 1);
-    r->implementationId = "81";
-    r->implementationName = "Index Data/YAZ";
-    r->implementationVersion = YAZ_VERSION
-#ifdef YAZ_DATE_STR
-    " (" YAZ_DATE_STR ")"
-#endif
-#ifdef YAZ_OS
-    " " YAZ_OS
-#endif
-       ;
-    r->userInformationField = 0;
-    r->otherInfo = 0;
-    return r;
-}
-
-Z_SearchRequest *zget_SearchRequest(ODR o)
-{
-    Z_SearchRequest *r = (Z_SearchRequest *)odr_malloc(o, sizeof(*r));
-
-    r->referenceId = 0;
-    r->smallSetUpperBound = odr_intdup(o, 0);
-    r->largeSetLowerBound = odr_intdup(o, 1);
-    r->mediumSetPresentNumber = odr_intdup(o, 0);
-    r->replaceIndicator = odr_intdup(o, 1);
-    r->resultSetName = "default";
-    r->num_databaseNames = 0;
-    r->databaseNames = 0;
-    r->smallSetElementSetNames = 0;
-    r->mediumSetElementSetNames = 0;
-    r->preferredRecordSyntax = 0;
-    r->query = 0;
-    r->additionalSearchInfo = 0;
-    r->otherInfo = 0;
-    return r;
-}
-
-Z_SearchResponse *zget_SearchResponse(ODR o)
-{
-    Z_SearchResponse *r = (Z_SearchResponse *)odr_malloc(o, sizeof(*r));
-
-    r->referenceId = 0;
-    r->resultCount = odr_intdup(o, 0);
-    r->numberOfRecordsReturned = odr_intdup(o, 0);
-    r->nextResultSetPosition = odr_intdup(o, 0);
-    r->searchStatus = odr_intdup(o, 1);
-    r->resultSetStatus = 0;
-    r->presentStatus = 0;
-    r->records = 0;
-    r->additionalSearchInfo = 0;
-    r->otherInfo = 0;
-    return r;
-}
-
-Z_PresentRequest *zget_PresentRequest(ODR o)
-{
-    Z_PresentRequest *r = (Z_PresentRequest *)odr_malloc(o, sizeof(*r));
-
-    r->referenceId = 0;
-    r->resultSetId = "default";
-    r->resultSetStartPoint = odr_intdup(o, 1);
-    r->numberOfRecordsRequested = odr_intdup(o, 10);
-    r->num_ranges = 0;
-    r->additionalRanges = 0;
-    r->recordComposition = 0;
-    r->preferredRecordSyntax = 0;
-    r->maxSegmentCount = 0;
-    r->maxRecordSize = 0;
-    r->maxSegmentSize = 0;
-    r->otherInfo = 0;
-    return r;
-}
-
-Z_PresentResponse *zget_PresentResponse(ODR o)
-{
-    Z_PresentResponse *r = (Z_PresentResponse *)odr_malloc(o, sizeof(*r));
-
-    r->referenceId = 0;
-    r->numberOfRecordsReturned = odr_intdup(o, 0);
-    r->nextResultSetPosition = odr_intdup(o, 0);
-    r->presentStatus = odr_intdup(o, Z_PresentStatus_success);
-    r->records = 0;
-    r->otherInfo = 0;
-    return r;
-}
-
-Z_DeleteResultSetRequest *zget_DeleteResultSetRequest(ODR o)
-{
-    Z_DeleteResultSetRequest *r = (Z_DeleteResultSetRequest *)
-       odr_malloc(o, sizeof(*r));
-
-    r->referenceId = 0;
-    r->deleteFunction = odr_intdup(o, Z_DeleteRequest_list);
-    r->num_resultSetList = 0;
-    r->resultSetList = 0;
-    r->otherInfo = 0;
-    return r;
-}
-
-Z_DeleteResultSetResponse *zget_DeleteResultSetResponse(ODR o)
-{
-    Z_DeleteResultSetResponse *r = (Z_DeleteResultSetResponse *)
-       odr_malloc(o, sizeof(*r));
-    
-    r->referenceId = 0;
-    r->deleteOperationStatus = odr_intdup(o, Z_DeleteStatus_success);
-    r->deleteListStatuses = 0;
-    r->numberNotDeleted = 0;
-    r->bulkStatuses = 0;
-    r->deleteMessage = 0;
-    r->otherInfo = 0;
-    return r;
-}
-
-Z_ScanRequest *zget_ScanRequest(ODR o)
-{
-    Z_ScanRequest *r = (Z_ScanRequest *)odr_malloc(o, sizeof(*r));
-    
-    r->referenceId = 0;
-    r->num_databaseNames = 0;
-    r->databaseNames = 0;
-    r->attributeSet = 0;
-    r->termListAndStartPoint = 0;
-    r->stepSize = 0;
-    r->numberOfTermsRequested = odr_intdup(o, 20);
-    r->preferredPositionInResponse = 0;
-    r->otherInfo = 0;
-    return r;
-}
-
-Z_ScanResponse *zget_ScanResponse(ODR o)
-{
-    Z_ScanResponse *r = (Z_ScanResponse *)odr_malloc(o, sizeof(*r));
-    
-    r->referenceId = 0;
-    r->stepSize = 0;
-    r->scanStatus = odr_intdup(o, Z_Scan_success);
-    r->numberOfEntriesReturned = odr_intdup(o, 0);
-    r->positionOfTerm =0;
-    r->entries = 0;
-    r->attributeSet = 0;
-    r->otherInfo = 0;
-    return r;
-}
-
-Z_TriggerResourceControlRequest *zget_TriggerResourceControlRequest(ODR o)
-{
-    Z_TriggerResourceControlRequest *r = (Z_TriggerResourceControlRequest *)
-       odr_malloc(o, sizeof(*r));
-    
-    r->referenceId = 0;
-    r->requestedAction = odr_intdup(o, Z_TriggerResourceCtrl_resourceReport);
-    r->prefResourceReportFormat = 0;
-    r->resultSetWanted = 0;
-    r->otherInfo = 0;
-    return r;
-}
-
-Z_ResourceControlRequest *zget_ResourceControlRequest(ODR o)
-{
-    Z_ResourceControlRequest *r = (Z_ResourceControlRequest *)
-       odr_malloc(o, sizeof(*r));
-
-    r->referenceId = 0;
-    r->suspendedFlag = 0;
-    r->resourceReport = 0;
-    r->partialResultsAvailable = 0;
-    r->responseRequired = odr_intdup(o, 0);
-    r->triggeredRequestFlag = 0;
-    r->otherInfo = 0;
-    return r;
-}
-
-Z_ResourceControlResponse *zget_ResourceControlResponse(ODR o)
-{
-    Z_ResourceControlResponse *r = (Z_ResourceControlResponse *)
-       odr_malloc(o, sizeof(*r));
-
-    r->referenceId = 0;
-    r->continueFlag = odr_intdup(o, 1);
-    r->resultSetWanted = 0;
-    r->otherInfo = 0;
-    return r;
-}
-
-Z_AccessControlRequest *zget_AccessControlRequest(ODR o)
-{
-    Z_AccessControlRequest *r = (Z_AccessControlRequest *)
-       odr_malloc(o, sizeof(*r));
-
-    r->referenceId = 0;
-    r->which = Z_AccessRequest_simpleForm;
-    r->u.simpleForm = 0;
-    r->otherInfo = 0;
-    return r;
-}
-
-Z_AccessControlResponse *zget_AccessControlResponse(ODR o)
-{
-    Z_AccessControlResponse *r = (Z_AccessControlResponse *)
-       odr_malloc(o, sizeof(*r));
-
-    r->referenceId = 0;
-    r->which = Z_AccessResponse_simpleForm;
-    r->u.simpleForm = 0;
-    r->diagnostic = 0;
-    r->otherInfo = 0;
-    return r;
-}
-
-Z_Segment *zget_Segment(ODR o)
-{
-    Z_Segment *r = (Z_Segment *)odr_malloc(o, sizeof(*r));
-
-    r->referenceId = 0;
-    r->numberOfRecordsReturned = odr_intdup(o, 0);
-    r->num_segmentRecords = 0;
-    r->segmentRecords = (Z_NamePlusRecord **) odr_nullval();
-    r->otherInfo = 0;
-    return r;
-}
-
-Z_Close *zget_Close(ODR o)
-{
-    Z_Close *r = (Z_Close *)odr_malloc(o, sizeof(*r));
-
-    r->referenceId = 0;
-    r->closeReason = odr_intdup(o, Z_Close_finished);
-    r->diagnosticInformation = 0;
-    r->resourceReportFormat = 0;
-    r->resourceReport = 0;
-    r->otherInfo = 0;
-    return r;
-}
-
-Z_ResourceReportRequest *zget_ResourceReportRequest(ODR o)
-{
-    Z_ResourceReportRequest *r = (Z_ResourceReportRequest *)
-       odr_malloc(o, sizeof(*r));
-
-    r->referenceId = 0;
-    r->opId = 0;
-    r->prefResourceReportFormat = 0;
-    r->otherInfo = 0;
-    return r;
-}
-
-Z_ResourceReportResponse *zget_ResourceReportResponse(ODR o)
-{
-    Z_ResourceReportResponse *r = (Z_ResourceReportResponse *)
-       odr_malloc(o, sizeof(*r));
-
-    r->referenceId = 0;
-    r->resourceReportStatus = odr_intdup(o, Z_ResourceReportStatus_success);
-    r->resourceReport = 0;
-    r->otherInfo = 0;
-    return r;
-}
-
-Z_SortRequest *zget_SortRequest(ODR o)
-{
-    Z_SortRequest *r = (Z_SortRequest *)odr_malloc(o, sizeof(*r));
-
-    r->referenceId = 0;
-    r->inputResultSetNames = 0;
-    r->sortedResultSetName = 0;
-    r->sortSequence = 0;
-    r->otherInfo = 0;
-    return r;
-}
-
-Z_SortResponse *zget_SortResponse(ODR o)
-{
-    Z_SortResponse *r = (Z_SortResponse *)odr_malloc(o, sizeof(*r));
-
-    r->referenceId = 0;
-    r->sortStatus = odr_intdup(o, Z_SortStatus_success);
-    r->resultSetStatus = odr_intdup(o, Z_SortResultSetStatus_empty);
-    r->diagnostics = 0;
-    r->resultCount = 0;
-    r->otherInfo = 0;
-    return r;
-}
-
-Z_ExtendedServicesRequest *zget_ExtendedServicesRequest(ODR o)
-{
-    Z_ExtendedServicesRequest *r = (Z_ExtendedServicesRequest *)
-       odr_malloc(o, sizeof(*r));
-
-    r->referenceId = 0;
-    r->function = odr_intdup(o, Z_ExtendedServicesRequest_create);
-    r->packageType = 0;
-    r->packageName = 0;
-    r->userId = 0;
-    r->retentionTime = 0;
-    r->permissions = 0;
-    r->description = 0;
-    r->taskSpecificParameters = 0;
-    r->waitAction = odr_intdup(o, Z_ExtendedServicesRequest_waitIfPossible);
-    r->elements = 0;
-    r->otherInfo = 0;
-    return r;
-}
-
-Z_ExtendedServicesResponse *zget_ExtendedServicesResponse(ODR o)
-{
-    Z_ExtendedServicesResponse *r = (Z_ExtendedServicesResponse *)
-       odr_malloc(o, sizeof(*r));
-
-    r->referenceId = 0;
-    r->operationStatus = odr_intdup(o, Z_ExtendedServicesResponse_done);
-    r->num_diagnostics = 0;
-    r->diagnostics = 0;
-    r->taskPackage = 0;
-    r->otherInfo = 0;
-    return r;
-}
-
-Z_DuplicateDetectionRequest *zget_DuplicateDetectionRequest(ODR o)
-{
-    Z_DuplicateDetectionRequest *r = (Z_DuplicateDetectionRequest *)
-        odr_malloc(o, sizeof(*r));
-    
-    r->referenceId = 0;
-    r->num_inputResultSetIds = 0;
-    r->inputResultSetIds = 0;
-    r->outputResultSetName = 0;
-    r->applicablePortionOfRecord = 0;
-    r->num_duplicateDetectionCriteria = 0;
-    r->duplicateDetectionCriteria = 0;
-    r->clustering = 0;
-    r->num_retentionCriteria = 0;
-    r->retentionCriteria = 0;
-    r->num_sortCriteria = 0;
-    r->sortCriteria = 0;
-    r->otherInfo = 0;
-    return r;
-}
-
-Z_DuplicateDetectionResponse *zget_DuplicateDetectionResponse(ODR o)
-{
-    Z_DuplicateDetectionResponse *r = (Z_DuplicateDetectionResponse *)
-        odr_malloc(o, sizeof(*r));
-    r->referenceId = 0;
-    r->status = odr_intdup(o, Z_DuplicateDetectionResponse_success);
-    r->resultSetCount = 0;
-    r->num_diagnostics = 0;
-    r->diagnostics = 0;
-    r->otherInfo = 0;
-    return r;
-}
-Z_APDU *zget_APDU(ODR o, int which)
-{
-    Z_APDU *r = (Z_APDU *)odr_malloc(o, sizeof(*r));
-    
-    switch (r->which = which)
-    {
-    case Z_APDU_initRequest:
-        r->u.initRequest = zget_InitRequest(o);
-        break;
-    case Z_APDU_initResponse:
-        r->u.initResponse = zget_InitResponse(o);
-        break;
-    case Z_APDU_searchRequest:
-        r->u.searchRequest = zget_SearchRequest(o);
-        break;
-    case Z_APDU_searchResponse:
-        r->u.searchResponse = zget_SearchResponse(o);
-        break;
-    case Z_APDU_presentRequest:
-        r->u.presentRequest = zget_PresentRequest(o);
-        break;
-    case Z_APDU_presentResponse:
-        r->u.presentResponse = zget_PresentResponse(o);
-        break;
-    case Z_APDU_deleteResultSetRequest:
-        r->u.deleteResultSetRequest = zget_DeleteResultSetRequest(o);
-        break;
-    case Z_APDU_deleteResultSetResponse:
-        r->u.deleteResultSetResponse = zget_DeleteResultSetResponse(o);
-        break;
-    case Z_APDU_scanRequest:
-        r->u.scanRequest = zget_ScanRequest(o);
-        break;
-    case Z_APDU_scanResponse:
-        r->u.scanResponse = zget_ScanResponse(o);
-        break;
-    case Z_APDU_triggerResourceControlRequest:
-        r->u.triggerResourceControlRequest =
-            zget_TriggerResourceControlRequest(o);
-        break;
-    case Z_APDU_resourceControlRequest:
-        r->u.resourceControlRequest = zget_ResourceControlRequest(o);
-        break;
-    case Z_APDU_resourceControlResponse:
-        r->u.resourceControlResponse = zget_ResourceControlResponse(o);
-        break;
-    case Z_APDU_segmentRequest:
-        r->u.segmentRequest = zget_Segment(o);
-        break;
-    case Z_APDU_close:
-        r->u.close = zget_Close(o);
-        break;
-    case Z_APDU_accessControlRequest:
-        r->u.accessControlRequest = zget_AccessControlRequest(o);
-        break;
-    case Z_APDU_accessControlResponse:
-        r->u.accessControlResponse = zget_AccessControlResponse(o);
-        break;
-    case Z_APDU_resourceReportRequest:
-        r->u.resourceReportRequest = zget_ResourceReportRequest(o);
-        break;
-    case Z_APDU_resourceReportResponse:
-        r->u.resourceReportResponse = zget_ResourceReportResponse(o);
-        break;
-    case Z_APDU_sortRequest:
-        r->u.sortRequest = zget_SortRequest(o);
-        break;
-    case Z_APDU_sortResponse:
-        r->u.sortResponse = zget_SortResponse(o);
-        break;
-    case Z_APDU_extendedServicesRequest:
-        r->u.extendedServicesRequest = zget_ExtendedServicesRequest(o);
-        break;
-    case Z_APDU_extendedServicesResponse:
-        r->u.extendedServicesResponse = zget_ExtendedServicesResponse(o);
-       break;
-    case Z_APDU_duplicateDetectionRequest:
-        r->u.duplicateDetectionRequest = zget_DuplicateDetectionRequest(o);
-        break;
-    case Z_APDU_duplicateDetectionResponse:
-        r->u.duplicateDetectionResponse = zget_DuplicateDetectionResponse(o);
-        break;
-    default:
-        fprintf(stderr, "Bad APDU-type to zget_APDU");
-        exit(1);
-    }
-    return r;
-}
diff --git a/zutil/zoom-c.c b/zutil/zoom-c.c
deleted file mode 100644 (file)
index 59b051d..0000000
+++ /dev/null
@@ -1,3224 +0,0 @@
-/*
- * Copyright (c) 2000-2003, Index Data
- * See the file LICENSE for details.
- *
- * $Id: zoom-c.c,v 1.41 2003-08-19 12:32:29 adam Exp $
- *
- * ZOOM layer for C, connections, result sets, queries.
- */
-#include <assert.h>
-#include <string.h>
-#include "zoom-p.h"
-
-#include <yaz/yaz-util.h>
-#include <yaz/xmalloc.h>
-#include <yaz/otherinfo.h>
-#include <yaz/log.h>
-#include <yaz/pquery.h>
-#include <yaz/marcdisp.h>
-#include <yaz/diagbib1.h>
-#include <yaz/charneg.h>
-#include <yaz/ill.h>
-#include <yaz/srw.h>
-
-#if HAVE_SYS_POLL_H
-#include <sys/poll.h>
-#endif
-
-typedef enum {
-    zoom_pending,
-    zoom_complete
-} zoom_ret;
-
-static zoom_ret ZOOM_connection_send_init (ZOOM_connection c);
-static zoom_ret do_write_ex (ZOOM_connection c, char *buf_out, int len_out);
-
-static ZOOM_Event ZOOM_Event_create (int kind)
-{
-    ZOOM_Event event = (ZOOM_Event) xmalloc (sizeof(*event));
-    event->kind = kind;
-    event->next = 0;
-    event->prev = 0;
-    return event;
-}
-
-static void ZOOM_Event_destroy (ZOOM_Event event)
-{
-    xfree (event);
-}
-
-static void ZOOM_connection_put_event (ZOOM_connection c, ZOOM_Event event)
-{
-    if (c->m_queue_back)
-    {
-       c->m_queue_back->prev = event;
-       assert (c->m_queue_front);
-    }
-    else
-    {
-       assert (!c->m_queue_front);
-       c->m_queue_front = event;
-    }
-    event->next = c->m_queue_back;
-    event->prev = 0;
-    c->m_queue_back = event;
-}
-
-static ZOOM_Event ZOOM_connection_get_event(ZOOM_connection c)
-{
-    ZOOM_Event event = c->m_queue_front;
-    if (!event)
-    {
-        c->last_event = ZOOM_EVENT_NONE;
-       return 0;
-    }
-    assert (c->m_queue_back);
-    c->m_queue_front = event->prev;
-    if (c->m_queue_front)
-    {
-       assert (c->m_queue_back);
-       c->m_queue_front->next = 0;
-    }
-    else
-       c->m_queue_back = 0;
-    c->last_event = event->kind;
-    return event;
-}
-
-
-static void set_dset_error (ZOOM_connection c, int error,
-                            const char *dset,
-                            const char *addinfo, const char *addinfo2)
-{
-    xfree (c->addinfo);
-    c->addinfo = 0;
-    c->error = error;
-    c->diagset = dset;
-    if (addinfo && addinfo2)
-    {
-        c->addinfo = xmalloc(strlen(addinfo) + strlen(addinfo2) + 2);
-        strcpy(c->addinfo, addinfo);
-        strcat(c->addinfo, addinfo2);
-    }
-    else if (addinfo)
-        c->addinfo = xstrdup(addinfo);
-    if (error)
-        yaz_log(LOG_DEBUG, "Error %s %s:%d %s %s",
-                c->host_port ? c->host_port : "<>", dset, error,
-                addinfo ? addinfo : "",
-                addinfo2 ? addinfo2 : "");
-}
-
-#if HAVE_XML2
-static void set_HTTP_error (ZOOM_connection c, int error,
-                            const char *addinfo, const char *addinfo2)
-{
-    set_dset_error(c, error, "HTTP", addinfo, addinfo2);
-}
-#endif
-
-static void set_ZOOM_error (ZOOM_connection c, int error,
-                           const char *addinfo)
-{
-    set_dset_error(c, error, "ZOOM", addinfo, 0);
-}
-
-static void clear_error (ZOOM_connection c)
-{
-
-    switch (c->error)
-    {
-    case ZOOM_ERROR_CONNECT:
-    case ZOOM_ERROR_MEMORY:
-    case ZOOM_ERROR_DECODE:
-    case ZOOM_ERROR_CONNECTION_LOST:
-    case ZOOM_ERROR_INIT:
-    case ZOOM_ERROR_INTERNAL:
-    case ZOOM_ERROR_UNSUPPORTED_PROTOCOL:
-        break;
-    default:
-        set_ZOOM_error(c, ZOOM_ERROR_NONE, 0);
-    }
-}
-
-ZOOM_task ZOOM_connection_add_task (ZOOM_connection c, int which)
-{
-    ZOOM_task *taskp = &c->tasks;
-    while (*taskp)
-       taskp = &(*taskp)->next;
-    *taskp = (ZOOM_task) xmalloc (sizeof(**taskp));
-    (*taskp)->running = 0;
-    (*taskp)->which = which;
-    (*taskp)->next = 0;
-    clear_error (c);
-    return *taskp;
-}
-
-ZOOM_task ZOOM_connection_insert_task (ZOOM_connection c, int which)
-{
-    ZOOM_task task = (ZOOM_task) xmalloc (sizeof(*task));
-
-    task->next = c->tasks;
-    c->tasks = task;
-
-    task->running = 0;
-    task->which = which;
-    clear_error (c);
-    return task;
-}
-
-void ZOOM_connection_remove_task (ZOOM_connection c)
-{
-    ZOOM_task task = c->tasks;
-
-    if (task)
-    {
-       c->tasks = task->next;
-       switch (task->which)
-       {
-       case ZOOM_TASK_SEARCH:
-
-           ZOOM_resultset_destroy (task->u.search.resultset);
-           break;
-       case ZOOM_TASK_RETRIEVE:
-           ZOOM_resultset_destroy (task->u.retrieve.resultset);
-           break;
-        case ZOOM_TASK_CONNECT:
-            break;
-        case ZOOM_TASK_SCAN:
-            ZOOM_scanset_destroy (task->u.scan.scan);
-            break;
-        case ZOOM_TASK_PACKAGE:
-            ZOOM_package_destroy (task->u.package);
-            break;
-       default:
-           assert (0);
-       }
-       xfree (task);
-    }
-}
-
-static int ZOOM_connection_exec_task (ZOOM_connection c);
-
-void ZOOM_connection_remove_tasks (ZOOM_connection c)
-{
-    while (c->tasks)
-       ZOOM_connection_remove_task(c);
-}
-
-static ZOOM_record record_cache_lookup (ZOOM_resultset r, int pos);
-
-ZOOM_API(ZOOM_connection)
-ZOOM_connection_create (ZOOM_options options)
-{
-    ZOOM_connection c = (ZOOM_connection) xmalloc (sizeof(*c));
-
-    c->proto = PROTO_Z3950;
-    c->cs = 0;
-    c->mask = 0;
-    c->reconnect_ok = 0;
-    c->state = STATE_IDLE;
-    c->addinfo = 0;
-    set_ZOOM_error(c, ZOOM_ERROR_NONE, 0);
-    c->buf_in = 0;
-    c->len_in = 0;
-    c->buf_out = 0;
-    c->len_out = 0;
-    c->resultsets = 0;
-
-    c->options = ZOOM_options_create_with_parent(options);
-
-    c->host_port = 0;
-    c->path = 0;
-    c->proxy = 0;
-    
-    c->charset = c->lang = 0;
-
-    c->cookie_out = 0;
-    c->cookie_in = 0;
-    c->client_IP = 0;
-    c->tasks = 0;
-
-    c->odr_in = odr_createmem (ODR_DECODE);
-    c->odr_out = odr_createmem (ODR_ENCODE);
-
-    c->async = 0;
-    c->support_named_resultsets = 0;
-    c->last_event = ZOOM_EVENT_NONE;
-
-    c->m_queue_front = 0;
-    c->m_queue_back = 0;
-    return c;
-}
-
-/* set database names. Take local databases (if set); otherwise
-   take databases given in ZURL (if set); otherwise use Default */
-static char **set_DatabaseNames (ZOOM_connection con, ZOOM_options options,
-                                 int *num)
-{
-    char **databaseNames;
-    const char *c;
-    int no = 2;
-    const char *cp = ZOOM_options_get (options, "databaseName");
-    
-    if (!cp || !*cp)
-    {
-        if (strncmp (con->host_port, "unix:", 5) == 0)
-           cp = strchr (con->host_port+5, ':');
-       else
-           cp = strchr (con->host_port, '/');
-       if (cp)
-           cp++;
-    }
-    if (cp)
-    {
-       c = cp;
-       while ((c = strchr(c, '+')))
-       {
-           c++;
-           no++;
-       }
-    }
-    else
-       cp = "Default";
-    databaseNames = (char**)
-        odr_malloc (con->odr_out, no * sizeof(*databaseNames));
-    no = 0;
-    while (*cp)
-    {
-       c = strchr (cp, '+');
-       if (!c)
-           c = cp + strlen(cp);
-       else if (c == cp)
-       {
-           cp++;
-           continue;
-       }
-       /* cp ptr to first char of db name, c is char
-          following db name */
-       databaseNames[no] = (char*) odr_malloc (con->odr_out, 1+c-cp);
-       memcpy (databaseNames[no], cp, c-cp);
-       databaseNames[no++][c-cp] = '\0';
-       cp = c;
-       if (*cp)
-           cp++;
-    }
-    databaseNames[no] = NULL;
-    *num = no;
-    return databaseNames;
-}
-
-ZOOM_API(ZOOM_connection)
-ZOOM_connection_new (const char *host, int portnum)
-{
-    ZOOM_connection c = ZOOM_connection_create (0);
-
-    ZOOM_connection_connect (c, host, portnum);
-    return c;
-}
-
-ZOOM_API(void)
-ZOOM_connection_connect(ZOOM_connection c,
-                        const char *host, int portnum)
-{
-    const char *val;
-    ZOOM_task task;
-
-    if (c->cs)
-    {
-        yaz_log (LOG_DEBUG, "reconnect");
-        c->reconnect_ok = 1;
-        return;
-    }
-    yaz_log(LOG_DEBUG, "connect");
-    xfree (c->proxy);
-    val = ZOOM_options_get (c->options, "proxy");
-    if (val && *val)
-       c->proxy = xstrdup (val);
-    else
-       c->proxy = 0;
-
-    xfree (c->charset);
-    val = ZOOM_options_get (c->options, "charset");
-    if (val && *val)
-       c->charset = xstrdup (val);
-    else
-       c->charset = 0;
-
-    xfree (c->lang);
-    val = ZOOM_options_get (c->options, "lang");
-    if (val && *val)
-       c->lang = xstrdup (val);
-    else
-       c->lang = 0;
-
-    xfree (c->host_port);
-    if (portnum)
-    {
-       char hostn[128];
-       sprintf (hostn, "%.80s:%d", host, portnum);
-       c->host_port = xstrdup(hostn);
-    }
-    else
-       c->host_port = xstrdup(host);
-
-    ZOOM_options_set(c->options, "host", c->host_port);
-
-    val = ZOOM_options_get (c->options, "cookie");
-    if (val && *val)
-        c->cookie_out = xstrdup (val);
-
-    val = ZOOM_options_get (c->options, "clientIP");
-    if (val && *val)
-        c->client_IP = xstrdup (val);
-
-    c->async = ZOOM_options_get_bool (c->options, "async", 0);
-    set_ZOOM_error(c, ZOOM_ERROR_NONE, 0);
-
-    task = ZOOM_connection_add_task (c, ZOOM_TASK_CONNECT);
-
-    if (!c->async)
-    {
-       while (ZOOM_event (1, &c))
-           ;
-    }
-}
-
-ZOOM_API(ZOOM_query)
-ZOOM_query_create(void)
-{
-    ZOOM_query s = (ZOOM_query) xmalloc (sizeof(*s));
-
-    s->refcount = 1;
-    s->z_query = 0;
-    s->sort_spec = 0;
-    s->odr = odr_createmem (ODR_ENCODE);
-    s->query_string = 0;
-
-    return s;
-}
-
-ZOOM_API(void)
-ZOOM_query_destroy(ZOOM_query s)
-{
-    if (!s)
-       return;
-
-    (s->refcount)--;
-    yaz_log (LOG_DEBUG, "ZOOM_query_destroy count=%d", s->refcount);
-    if (s->refcount == 0)
-    {
-       odr_destroy (s->odr);
-       xfree (s);
-    }
-}
-
-ZOOM_API(int)
-ZOOM_query_prefix(ZOOM_query s, const char *str)
-{
-    s->query_string = odr_strdup(s->odr, str);
-    s->z_query = (Z_Query *) odr_malloc (s->odr, sizeof(*s->z_query));
-    s->z_query->which = Z_Query_type_1;
-    s->z_query->u.type_1 =  p_query_rpn(s->odr, PROTO_Z3950, str);
-    if (!s->z_query->u.type_1)
-       return -1;
-    return 0;
-}
-
-ZOOM_API(int)
-ZOOM_query_cql(ZOOM_query s, const char *str)
-{
-    Z_External *ext;
-
-    s->query_string = odr_strdup(s->odr, str);
-
-    ext = (Z_External *) odr_malloc(s->odr, sizeof(*ext));
-    ext->direct_reference = odr_getoidbystr(s->odr, "1.2.840.10003.16.2");
-    ext->indirect_reference = 0;
-    ext->descriptor = 0;
-    ext->which = Z_External_CQL;
-    ext->u.cql = s->query_string;
-    
-    s->z_query = (Z_Query *) odr_malloc (s->odr, sizeof(*s->z_query));
-    s->z_query->which = Z_Query_type_104;
-    s->z_query->u.type_104 =  ext;
-
-    return 0;
-}
-
-ZOOM_API(int)
-ZOOM_query_sortby(ZOOM_query s, const char *criteria)
-{
-    s->sort_spec = yaz_sort_spec (s->odr, criteria);
-    if (!s->sort_spec)
-       return -1;
-    return 0;
-}
-
-static zoom_ret do_write(ZOOM_connection c);
-
-ZOOM_API(void)
-ZOOM_connection_destroy(ZOOM_connection c)
-{
-    ZOOM_resultset r;
-    if (!c)
-       return;
-    if (c->cs)
-       cs_close (c->cs);
-    for (r = c->resultsets; r; r = r->next)
-       r->connection = 0;
-
-    xfree (c->buf_in);
-    xfree (c->addinfo);
-    odr_destroy (c->odr_in);
-    odr_destroy (c->odr_out);
-    ZOOM_options_destroy (c->options);
-    ZOOM_connection_remove_tasks (c);
-    xfree (c->host_port);
-    xfree (c->path);
-    xfree (c->proxy);
-    xfree (c->charset);
-    xfree (c->lang);
-    xfree (c->cookie_out);
-    xfree (c->cookie_in);
-    xfree (c->client_IP);
-    xfree (c);
-}
-
-void ZOOM_resultset_addref (ZOOM_resultset r)
-{
-    if (r)
-    {
-       (r->refcount)++;
-        yaz_log (LOG_DEBUG, "ZOOM_resultset_addref r=%p count=%d",
-                 r, r->refcount);
-    }
-}
-ZOOM_resultset ZOOM_resultset_create ()
-{
-    ZOOM_resultset r = (ZOOM_resultset) xmalloc (sizeof(*r));
-
-    yaz_log (LOG_DEBUG, "ZOOM_resultset_create r = %p", r);
-    r->refcount = 1;
-    r->size = 0;
-    r->odr = odr_createmem (ODR_ENCODE);
-    r->start = 0;
-    r->piggyback = 1;
-    r->setname = 0;
-    r->schema = 0;
-    r->count = 0;
-    r->step = 0;
-    r->record_cache = 0;
-    r->r_sort_spec = 0;
-    r->query = 0;
-    r->connection = 0;
-    r->next = 0;
-    return r;
-}
-
-ZOOM_API(ZOOM_resultset)
-ZOOM_connection_search_pqf(ZOOM_connection c, const char *q)
-{
-    ZOOM_resultset r;
-    ZOOM_query s = ZOOM_query_create();
-
-    ZOOM_query_prefix (s, q);
-
-    r = ZOOM_connection_search (c, s);
-    ZOOM_query_destroy (s);
-    return r;
-}
-
-ZOOM_API(ZOOM_resultset)
-ZOOM_connection_search(ZOOM_connection c, ZOOM_query q)
-{
-    ZOOM_resultset r = ZOOM_resultset_create ();
-    ZOOM_task task;
-    const char *cp;
-
-    r->r_sort_spec = q->sort_spec;
-    r->query = q;
-
-    r->options = ZOOM_options_create_with_parent(c->options);
-
-    r->start = ZOOM_options_get_int(r->options, "start", 0);
-    r->count = ZOOM_options_get_int(r->options, "count", 0);
-    r->step = ZOOM_options_get_int(r->options, "step", 0);
-    r->piggyback = ZOOM_options_get_bool (r->options, "piggyback", 1);
-    cp = ZOOM_options_get (r->options, "setname");
-    if (cp)
-        r->setname = xstrdup(cp);
-    cp = ZOOM_options_get (r->options, "schema");
-    if (cp)
-        r->schema = xstrdup(cp);
-    
-    r->connection = c;
-
-    r->next = c->resultsets;
-    c->resultsets = r;
-
-    if (c->host_port && c->proto == PROTO_HTTP)
-    {
-        if (!c->cs)
-        {
-            yaz_log(LOG_DEBUG, "NO COMSTACK");
-            ZOOM_connection_add_task(c, ZOOM_TASK_CONNECT);
-        }
-        else
-        {
-            yaz_log(LOG_DEBUG, "PREPARE FOR RECONNECT");
-            c->reconnect_ok = 1;
-        }
-    }
-
-    task = ZOOM_connection_add_task (c, ZOOM_TASK_SEARCH);
-    task->u.search.resultset = r;
-    ZOOM_resultset_addref (r);  
-
-    (q->refcount)++;
-
-    if (!c->async)
-    {
-       while (ZOOM_event (1, &c))
-           ;
-    }
-    return r;
-}
-
-ZOOM_API(void)
-ZOOM_resultset_destroy(ZOOM_resultset r)
-{
-    if (!r)
-        return;
-    (r->refcount)--;
-    yaz_log (LOG_DEBUG, "ZOOM_resultset_destroy r = %p count=%d",
-             r, r->refcount);
-    if (r->refcount == 0)
-    {
-        ZOOM_record_cache rc;
-
-        for (rc = r->record_cache; rc; rc = rc->next)
-       {
-            if (rc->rec.wrbuf_marc)
-                wrbuf_free (rc->rec.wrbuf_marc, 1);
-            if (rc->rec.wrbuf_iconv)
-                wrbuf_free (rc->rec.wrbuf_iconv, 1);
-            if (rc->rec.wrbuf_opac)
-                wrbuf_free (rc->rec.wrbuf_opac, 1);
-       }
-       if (r->connection)
-       {
-           /* remove ourselves from the resultsets in connection */
-           ZOOM_resultset *rp = &r->connection->resultsets;
-           while (1)
-           {
-               assert (*rp);   /* we must be in this list!! */
-               if (*rp == r)
-               {   /* OK, we're here - take us out of it */
-                   *rp = (*rp)->next;
-                   break;
-               }
-               rp = &(*rp)->next;
-           }
-       }
-       ZOOM_query_destroy (r->query);
-       ZOOM_options_destroy (r->options);
-       odr_destroy (r->odr);
-        xfree (r->setname);
-        xfree (r->schema);
-       xfree (r);
-    }
-}
-
-ZOOM_API(size_t)
-ZOOM_resultset_size (ZOOM_resultset r)
-{
-    return r->size;
-}
-
-static void do_close (ZOOM_connection c)
-{
-    if (c->cs)
-       cs_close(c->cs);
-    c->cs = 0;
-    c->mask = 0;
-    c->state = STATE_IDLE;
-}
-
-static void ZOOM_resultset_retrieve (ZOOM_resultset r,
-                                     int force_sync, int start, int count)
-{
-    ZOOM_task task;
-    ZOOM_connection c;
-    const char *cp;
-
-    if (!r)
-       return;
-    c = r->connection;
-    if (!c)
-       return;
-
-    if (c->host_port && c->proto == PROTO_HTTP)
-    {
-        if (!c->cs)
-        {
-            yaz_log(LOG_DEBUG, "NO COMSTACK");
-            ZOOM_connection_add_task(c, ZOOM_TASK_CONNECT);
-        }
-        else
-        {
-            yaz_log(LOG_DEBUG, "PREPARE FOR RECONNECT");
-            c->reconnect_ok = 1;
-        }
-    }
-    task = ZOOM_connection_add_task (c, ZOOM_TASK_RETRIEVE);
-    task->u.retrieve.resultset = r;
-    task->u.retrieve.start = start;
-    task->u.retrieve.count = count;
-
-    cp = ZOOM_options_get (r->options, "schema");
-    if (cp)
-    {
-        if (!r->schema || strcmp(r->schema, cp))
-        {
-            xfree(r->schema);
-            r->schema = xstrdup(cp);
-        }
-    }
-
-    ZOOM_resultset_addref (r);
-
-    if (!r->connection->async || force_sync)
-       while (r->connection && ZOOM_event (1, &r->connection))
-           ;
-}
-
-ZOOM_API(void)
-ZOOM_resultset_records (ZOOM_resultset r, ZOOM_record *recs,
-                        size_t start, size_t count)
-{
-    int force_present = 0;
-
-    if (!r)
-       return ;
-    if (count && recs)
-        force_present = 1;
-    ZOOM_resultset_retrieve (r, force_present, start, count);
-    if (force_present)
-    {
-        size_t i;
-        for (i = 0; i< count; i++)
-            recs[i] = ZOOM_resultset_record_immediate (r, i+start);
-    }
-}
-
-static zoom_ret do_connect (ZOOM_connection c)
-{
-    void *add;
-    const char *effective_host;
-
-    if (c->proxy)
-       effective_host = c->proxy;
-    else
-       effective_host = c->host_port;
-
-    yaz_log (LOG_DEBUG, "do_connect host=%s", effective_host);
-
-    assert (!c->cs);
-    c->cs = cs_create_host (effective_host, 0, &add);
-
-    if (c->cs && c->cs->protocol == PROTO_HTTP)
-    {
-#if HAVE_XML2
-        const char *path = 0;
-
-        c->proto = PROTO_HTTP;
-        cs_get_host_args(c->host_port, &path);
-        xfree(c->path);
-        c->path = xmalloc(strlen(path)+2);
-        c->path[0] = '/';
-        strcpy (c->path+1, path);
-#else
-        set_ZOOM_error(c, ZOOM_ERROR_UNSUPPORTED_PROTOCOL, "SRW");
-        do_close(c);
-        return zoom_complete;
-#endif
-    }
-    if (c->cs)
-    {
-        int ret = cs_connect (c->cs, add);
-        if (ret == 0)
-        {
-            ZOOM_Event event = ZOOM_Event_create(ZOOM_EVENT_CONNECT);
-            ZOOM_connection_put_event(c, event);
-            if (c->proto == PROTO_Z3950)
-                ZOOM_connection_send_init(c);
-            else
-            {
-                /* no init request for SRW .. */
-                assert (c->tasks->which == ZOOM_TASK_CONNECT);
-                ZOOM_connection_remove_task (c);
-                c->mask = 0;
-                ZOOM_connection_exec_task (c);
-            }
-            c->state = STATE_ESTABLISHED;
-            return zoom_pending;
-        }
-        else if (ret > 0)
-        {
-            c->state = STATE_CONNECTING; 
-            c->mask = ZOOM_SELECT_EXCEPT;
-            if (c->cs->io_pending & CS_WANT_WRITE)
-                c->mask += ZOOM_SELECT_WRITE;
-            if (c->cs->io_pending & CS_WANT_READ)
-                c->mask += ZOOM_SELECT_READ;
-            return zoom_pending;
-        }
-    }
-    c->state = STATE_IDLE;
-    set_ZOOM_error(c, ZOOM_ERROR_CONNECT, effective_host);
-    return zoom_complete;
-}
-
-int z3950_connection_socket(ZOOM_connection c)
-{
-    if (c->cs)
-       return cs_fileno(c->cs);
-    return -1;
-}
-
-int z3950_connection_mask(ZOOM_connection c)
-{
-    if (c->cs)
-       return c->mask;
-    return 0;
-}
-
-static void otherInfo_attach (ZOOM_connection c, Z_APDU *a, ODR out)
-{
-    int i;
-    for (i = 0; i<200; i++)
-    {
-        size_t len;
-       Z_OtherInformation **oi;
-        char buf[80];
-        const char *val;
-        const char *cp;
-        int oidval;
-
-        sprintf (buf, "otherInfo%d", i);
-        val = ZOOM_options_get (c->options, buf);
-        if (!val)
-            break;
-        cp = strchr (val, ':');
-        if (!cp)
-            continue;
-        len = cp - val;
-        if (len >= sizeof(buf))
-            len = sizeof(buf)-1;
-        memcpy (buf, val, len);
-        buf[len] = '\0';
-        oidval = oid_getvalbyname (buf);
-        if (oidval == VAL_NONE)
-            continue;
-        
-       yaz_oi_APDU(a, &oi);
-       yaz_oi_set_string_oidval(oi, out, oidval, 1, cp+1);
-    }
-}
-
-static int encode_APDU(ZOOM_connection c, Z_APDU *a, ODR out)
-{
-    assert (a);
-    if (c->cookie_out)
-    {
-       Z_OtherInformation **oi;
-       yaz_oi_APDU(a, &oi);
-       yaz_oi_set_string_oidval(oi, out, VAL_COOKIE, 1, c->cookie_out);
-    }
-    if (c->client_IP)
-    {
-       Z_OtherInformation **oi;
-       yaz_oi_APDU(a, &oi);
-       yaz_oi_set_string_oidval(oi, out, VAL_CLIENT_IP, 1, c->client_IP);
-    }
-    otherInfo_attach (c, a, out);
-    if (!z_APDU(out, &a, 0, 0))
-    {
-       FILE *outf = fopen("/tmp/apdu.txt", "a");
-       if (a && outf)
-       {
-           ODR odr_pr = odr_createmem(ODR_PRINT);
-           fprintf (outf, "a=%p\n", a);
-           odr_setprint(odr_pr, outf);
-           z_APDU(odr_pr, &a, 0, 0);
-           odr_destroy(odr_pr);
-       }
-        yaz_log (LOG_DEBUG, "encoding failed");
-        set_ZOOM_error(c, ZOOM_ERROR_ENCODE, 0);
-       odr_reset(out);
-       return -1;
-    }
-    
-    return 0;
-}
-
-static zoom_ret send_APDU (ZOOM_connection c, Z_APDU *a)
-{
-    ZOOM_Event event;
-    assert (a);
-    if (encode_APDU(c, a, c->odr_out))
-       return zoom_complete;
-    yaz_log(LOG_DEBUG, "send APDU type=%d", a->which);
-    c->buf_out = odr_getbuf(c->odr_out, &c->len_out, 0);
-    event = ZOOM_Event_create (ZOOM_EVENT_SEND_APDU);
-    ZOOM_connection_put_event (c, event);
-    odr_reset(c->odr_out);
-    return do_write (c);
-}
-
-/* returns 1 if PDU was sent OK (still pending )
-           0 if PDU was not sent OK (nothing to wait for) 
-*/
-
-static zoom_ret ZOOM_connection_send_init (ZOOM_connection c)
-{
-    const char *impname;
-    Z_APDU *apdu = zget_APDU(c->odr_out, Z_APDU_initRequest);
-    Z_InitRequest *ireq = apdu->u.initRequest;
-    Z_IdAuthentication *auth = (Z_IdAuthentication *)
-        odr_malloc(c->odr_out, sizeof(*auth));
-    const char *auth_groupId = ZOOM_options_get (c->options, "group");
-    const char *auth_userId = ZOOM_options_get (c->options, "user");
-    const char *auth_password = ZOOM_options_get (c->options, "pass");
-    
-    ODR_MASK_SET(ireq->options, Z_Options_search);
-    ODR_MASK_SET(ireq->options, Z_Options_present);
-    ODR_MASK_SET(ireq->options, Z_Options_scan);
-    ODR_MASK_SET(ireq->options, Z_Options_sort);
-    ODR_MASK_SET(ireq->options, Z_Options_extendedServices);
-    ODR_MASK_SET(ireq->options, Z_Options_namedResultSets);
-    
-    ODR_MASK_SET(ireq->protocolVersion, Z_ProtocolVersion_1);
-    ODR_MASK_SET(ireq->protocolVersion, Z_ProtocolVersion_2);
-    ODR_MASK_SET(ireq->protocolVersion, Z_ProtocolVersion_3);
-    
-    impname = ZOOM_options_get (c->options, "implementationName");
-    ireq->implementationName =
-       (char *) odr_malloc (c->odr_out, 15 + (impname ? strlen(impname) : 0));
-    strcpy (ireq->implementationName, "");
-    if (impname)
-    {
-       strcat (ireq->implementationName, impname);
-       strcat (ireq->implementationName, "/");
-    }                                         
-    strcat (ireq->implementationName, "ZOOM-C/YAZ");
-    
-    *ireq->maximumRecordSize =
-       ZOOM_options_get_int (c->options, "maximumRecordSize", 1024*1024);
-    *ireq->preferredMessageSize =
-       ZOOM_options_get_int (c->options, "preferredMessageSize", 1024*1024);
-    
-    if (auth_groupId || auth_password)
-    {
-       Z_IdPass *pass = (Z_IdPass *) odr_malloc(c->odr_out, sizeof(*pass));
-       int i = 0;
-       pass->groupId = 0;
-       if (auth_groupId && *auth_groupId)
-       {
-           pass->groupId = (char *)
-                odr_malloc(c->odr_out, strlen(auth_groupId)+1);
-           strcpy(pass->groupId, auth_groupId);
-           i++;
-       }
-       pass->userId = 0;
-       if (auth_userId && *auth_userId)
-       {
-           pass->userId = (char *)
-                odr_malloc(c->odr_out, strlen(auth_userId)+1);
-           strcpy(pass->userId, auth_userId);
-           i++;
-       }
-       pass->password = 0;
-       if (auth_password && *auth_password)
-       {
-           pass->password = (char *)
-                odr_malloc(c->odr_out, strlen(auth_password)+1);
-           strcpy(pass->password, auth_password);
-           i++;
-       }
-       if (i)
-       {
-           auth->which = Z_IdAuthentication_idPass;
-           auth->u.idPass = pass;
-           ireq->idAuthentication = auth;
-       }
-    }
-    else if (auth_userId)
-    {
-       auth->which = Z_IdAuthentication_open;
-       auth->u.open = (char *)
-            odr_malloc(c->odr_out, strlen(auth_userId)+1);
-       strcpy(auth->u.open, auth_userId);
-       ireq->idAuthentication = auth;
-    }
-    if (c->proxy)
-       yaz_oi_set_string_oidval(&ireq->otherInfo, c->odr_out,
-                                VAL_PROXY, 1, c->host_port);
-    if (c->charset||c->lang)
-    {
-       Z_OtherInformation **oi;
-       Z_OtherInformationUnit *oi_unit;
-       
-       yaz_oi_APDU(apdu, &oi);
-       
-       if ((oi_unit = yaz_oi_update(oi, c->odr_out, NULL, 0, 0)))
-       {
-            ODR_MASK_SET(ireq->options, Z_Options_negotiationModel);
-            
-            oi_unit->which = Z_OtherInfo_externallyDefinedInfo;
-            oi_unit->information.externallyDefinedInfo =
-                yaz_set_proposal_charneg
-                (c->odr_out,
-                 (const char **)&c->charset, (c->charset) ? 1:0,
-                 (const char **)&c->lang, (c->lang) ? 1:0, 1);
-       }
-    }
-    assert (apdu);
-    return send_APDU (c, apdu);
-}
-
-#if HAVE_XML2
-static zoom_ret send_srw (ZOOM_connection c, Z_SRW_PDU *sr)
-{
-    char ctype[50];
-    Z_SOAP_Handler h[2] = {
-        {"http://www.loc.gov/zing/srw/v1.0/", 0, (Z_SOAP_fun) yaz_srw_codec},
-        {0, 0, 0}
-    };
-    ODR o = odr_createmem(ODR_ENCODE);
-    int ret;
-    Z_SOAP *p = odr_malloc(o, sizeof(*p));
-    Z_GDU *gdu;
-    ZOOM_Event event;
-
-    gdu = z_get_HTTP_Request(c->odr_out);
-    gdu->u.HTTP_Request->path = c->path;
-
-    if (c->host_port)
-    {
-        const char *cp0 = strstr(c->host_port, "://");
-        const char *cp1 = 0;
-        if (cp0)
-            cp0 = cp0+3;
-        else
-            cp0 = c->host_port;
-
-        cp1 = strchr(cp0, '/');
-        if (!cp1)
-            cp1 = cp0+strlen(cp0);
-
-        if (cp0 && cp1)
-        {
-            char *h = odr_malloc(c->odr_out, cp1 - cp0 + 1);
-            memcpy (h, cp0, cp1 - cp0);
-            h[cp1-cp0] = '\0';
-            z_HTTP_header_add(c->odr_out, &gdu->u.HTTP_Request->headers,
-                              "host", h);
-        }
-    }
-
-    strcpy(ctype, "text/xml");
-    if (c->charset && strlen(c->charset) < 20)
-    {
-        strcat(ctype, "; charset=");
-        strcat(ctype, c->charset);
-    }
-    z_HTTP_header_add(c->odr_out, &gdu->u.HTTP_Request->headers,
-                      "Content-Type", ctype);
-    z_HTTP_header_add(c->odr_out, &gdu->u.HTTP_Request->headers,
-                      "SOAPAction", "\"\"");
-    p->which = Z_SOAP_generic;
-    p->u.generic = odr_malloc(o, sizeof(*p->u.generic));
-    p->u.generic->no = 0;
-    p->u.generic->ns = 0;
-    p->u.generic->p = sr;
-    p->ns = "http://schemas.xmlsoap.org/soap/envelope/";
-
-    ret = z_soap_codec_enc(o, &p,
-                           &gdu->u.HTTP_Request->content_buf,
-                           &gdu->u.HTTP_Request->content_len, h,
-                           c->charset);
-
-    if (!z_GDU(c->odr_out, &gdu, 0, 0))
-        return zoom_complete;
-    c->buf_out = odr_getbuf(c->odr_out, &c->len_out, 0);
-
-    odr_destroy(o);
-
-    event = ZOOM_Event_create (ZOOM_EVENT_SEND_APDU);
-    ZOOM_connection_put_event (c, event);
-    odr_reset(c->odr_out);
-    return do_write (c);
-}
-#endif
-
-#if HAVE_XML2
-static zoom_ret ZOOM_connection_srw_send_search(ZOOM_connection c)
-{
-    int i;
-    ZOOM_resultset resultset = 0;
-    Z_SRW_PDU *sr = 0;
-    const char *recordPacking = 0;
-
-    if (c->error)                  /* don't continue on error */
-       return zoom_complete;
-    assert (c->tasks);
-    if (c->tasks->which == ZOOM_TASK_SEARCH)
-    {
-        resultset = c->tasks->u.search.resultset;
-        resultset->setname = xstrdup ("default");
-        ZOOM_options_set (resultset->options, "setname", resultset->setname);
-    }
-    else if(c->tasks->which == ZOOM_TASK_RETRIEVE)
-    {
-        resultset = c->tasks->u.retrieve.resultset;
-
-        resultset->start = c->tasks->u.retrieve.start;
-        resultset->count = c->tasks->u.retrieve.count;
-        
-        if (resultset->start >= resultset->size)
-            return zoom_complete;
-        if (resultset->start + resultset->count > resultset->size)
-            resultset->count = resultset->size - resultset->start;
-
-        for (i = 0; i<resultset->count; i++)
-        {
-            ZOOM_record rec =
-                record_cache_lookup (resultset, i + resultset->start);
-            if (!rec)
-                break;
-        }
-        if (i == resultset->count)
-            return zoom_complete;
-    }
-    assert(resultset->query);
-        
-    sr = yaz_srw_get(c->odr_out, Z_SRW_searchRetrieve_request);
-
-    if (resultset->query->z_query->which == Z_Query_type_104
-        && resultset->query->z_query->u.type_104->which == Z_External_CQL)
-    {
-
-        sr->u.request->query_type = Z_SRW_query_type_cql;
-        sr->u.request->query.cql =resultset->query->z_query->u.type_104->u.cql;
-    }
-    else if (resultset->query->z_query->which == Z_Query_type_1 &&
-             resultset->query->z_query->u.type_1)
-    {
-        sr->u.request->query_type = Z_SRW_query_type_pqf;
-        sr->u.request->query.pqf = resultset->query->query_string;
-    }
-    else
-    {
-        set_ZOOM_error(c, ZOOM_ERROR_UNSUPPORTED_QUERY, 0);
-        return zoom_complete;
-    }
-    sr->u.request->startRecord = odr_intdup (c->odr_out, resultset->start + 1);
-    sr->u.request->maximumRecords = odr_intdup (
-        c->odr_out, resultset->step>0 ? resultset->step : resultset->count);
-    sr->u.request->recordSchema = resultset->schema;
-
-    recordPacking = ZOOM_resultset_option_get (resultset, "recordPacking");
-
-    if (recordPacking)
-        sr->u.request->recordPacking = odr_strdup(c->odr_out, recordPacking);
-    
-    return send_srw(c, sr);
-}
-#else
-static zoom_ret ZOOM_connection_srw_send_search(ZOOM_connection c)
-{
-    return zoom_complete;
-}
-#endif
-
-static zoom_ret ZOOM_connection_send_search (ZOOM_connection c)
-{
-    ZOOM_resultset r;
-    int lslb, ssub, mspn;
-    const char *syntax;
-    Z_APDU *apdu = zget_APDU(c->odr_out, Z_APDU_searchRequest);
-    Z_SearchRequest *search_req = apdu->u.searchRequest;
-    const char *elementSetName;
-    const char *smallSetElementSetName;
-    const char *mediumSetElementSetName;
-
-    assert (c->tasks);
-    assert (c->tasks->which == ZOOM_TASK_SEARCH);
-
-    r = c->tasks->u.search.resultset;
-
-    elementSetName =
-       ZOOM_options_get (r->options, "elementSetName");
-    smallSetElementSetName  =
-       ZOOM_options_get (r->options, "smallSetElementSetName");
-    mediumSetElementSetName =
-       ZOOM_options_get (r->options, "mediumSetElementSetName");
-
-    if (!smallSetElementSetName)
-       smallSetElementSetName = elementSetName;
-
-    if (!mediumSetElementSetName)
-       mediumSetElementSetName = elementSetName;
-
-    assert (r);
-    assert (r->query);
-
-    /* prepare query for the search request */
-    search_req->query = r->query->z_query;
-
-    search_req->databaseNames =
-       set_DatabaseNames (c, r->options, &search_req->num_databaseNames);
-
-    /* get syntax (no need to provide unless piggyback is in effect) */
-    syntax = ZOOM_options_get (r->options, "preferredRecordSyntax");
-
-    lslb = ZOOM_options_get_int (r->options, "largeSetLowerBound", -1);
-    ssub = ZOOM_options_get_int (r->options, "smallSetUpperBound", -1);
-    mspn = ZOOM_options_get_int (r->options, "mediumSetPresentNumber", -1);
-    if (lslb != -1 && ssub != -1 && mspn != -1)
-    {
-       /* So're a Z39.50 expert? Let's hope you don't do sort */
-       *search_req->largeSetLowerBound = lslb;
-       *search_req->smallSetUpperBound = ssub;
-       *search_req->mediumSetPresentNumber = mspn;
-    }
-    else if (r->start == 0 && r->count > 0
-            && r->piggyback && !r->r_sort_spec && !r->schema)
-    {
-       /* Regular piggyback - do it unless we're going to do sort */
-       *search_req->largeSetLowerBound = 2000000000;
-       *search_req->smallSetUpperBound = 1;
-       *search_req->mediumSetPresentNumber = r->step>0 ? r->step : r->count;
-    }
-    else
-    {
-       /* non-piggyback. Need not provide elementsets or syntaxes .. */
-       smallSetElementSetName = 0;
-       mediumSetElementSetName = 0;
-       syntax = 0;
-    }
-    if (smallSetElementSetName && *smallSetElementSetName)
-    {
-       Z_ElementSetNames *esn = (Z_ElementSetNames *)
-            odr_malloc (c->odr_out, sizeof(*esn));
-       
-       esn->which = Z_ElementSetNames_generic;
-       esn->u.generic = odr_strdup (c->odr_out, smallSetElementSetName);
-       search_req->smallSetElementSetNames = esn;
-    }
-    if (mediumSetElementSetName && *mediumSetElementSetName)
-    {
-       Z_ElementSetNames *esn = (Z_ElementSetNames *)
-            odr_malloc (c->odr_out, sizeof(*esn));
-       
-       esn->which = Z_ElementSetNames_generic;
-       esn->u.generic = odr_strdup (c->odr_out, mediumSetElementSetName);
-       search_req->mediumSetElementSetNames = esn;
-    }
-    if (syntax)
-       search_req->preferredRecordSyntax =
-           yaz_str_to_z3950oid (c->odr_out, CLASS_RECSYN, syntax);
-    
-    if (!r->setname)
-    {
-        if (c->support_named_resultsets)
-        {
-            char setname[14];
-            int ord;
-            /* find the lowest unused ordinal so that we re-use
-               result sets on the server. */
-            for (ord = 1; ; ord++)
-            {
-                ZOOM_resultset rp;
-                sprintf (setname, "%d", ord);
-                for (rp = c->resultsets; rp; rp = rp->next)
-                    if (rp->setname && !strcmp (rp->setname, setname))
-                        break;
-                if (!rp)
-                    break;
-            }
-            r->setname = xstrdup (setname);
-            yaz_log (LOG_DEBUG, "allocating set %s", r->setname);
-        }
-        else
-            r->setname = xstrdup ("default");
-        ZOOM_options_set (r->options, "setname", r->setname);
-    }
-    search_req->resultSetName = odr_strdup(c->odr_out, r->setname);
-    /* send search request */
-    return send_APDU (c, apdu);
-}
-
-static void response_diag (ZOOM_connection c, Z_DiagRec *p)
-{
-    int oclass;
-    Z_DefaultDiagFormat *r;
-    char *addinfo = 0;
-    
-    xfree (c->addinfo);
-    c->addinfo = 0;
-    if (p->which != Z_DiagRec_defaultFormat)
-    {
-        set_ZOOM_error(c, ZOOM_ERROR_DECODE, 0);
-       return;
-    }
-    r = p->u.defaultFormat;
-    switch (r->which)
-    {
-    case Z_DefaultDiagFormat_v2Addinfo:
-       addinfo = r->u.v2Addinfo;
-       break;
-    case Z_DefaultDiagFormat_v3Addinfo:
-       addinfo = r->u.v3Addinfo;
-       break;
-    }
-    set_dset_error(c, *r->condition,
-                   yaz_z3950oid_to_str(r->diagnosticSetId, &oclass),
-                   addinfo, 0);
-}
-
-ZOOM_API(ZOOM_record)
-ZOOM_record_clone (ZOOM_record srec)
-{
-    char *buf;
-    int size;
-    ODR odr_enc;
-    ZOOM_record nrec;
-
-    odr_enc = odr_createmem(ODR_ENCODE);
-    if (!z_NamePlusRecord (odr_enc, &srec->npr, 0, 0))
-       return 0;
-    buf = odr_getbuf (odr_enc, &size, 0);
-    
-    nrec = (ZOOM_record) xmalloc (sizeof(*nrec));
-    nrec->odr = odr_createmem(ODR_DECODE);
-    nrec->wrbuf_marc = 0;
-    nrec->wrbuf_iconv = 0;
-    nrec->wrbuf_opac = 0;
-    odr_setbuf (nrec->odr, buf, size, 0);
-    z_NamePlusRecord (nrec->odr, &nrec->npr, 0, 0);
-    
-    odr_destroy (odr_enc);
-    return nrec;
-}
-
-ZOOM_API(ZOOM_record)
-ZOOM_resultset_record_immediate (ZOOM_resultset s,size_t pos)
-{
-    return record_cache_lookup (s, pos);
-}
-
-ZOOM_API(ZOOM_record)
-ZOOM_resultset_record (ZOOM_resultset r, size_t pos)
-{
-    ZOOM_record rec = ZOOM_resultset_record_immediate(r, pos);
-
-    if (!rec)
-    {
-        ZOOM_resultset_retrieve (r, 1, pos, 1);
-        rec = ZOOM_resultset_record_immediate (r, pos);
-    }
-    return rec;
-}
-
-ZOOM_API(void)
-ZOOM_record_destroy (ZOOM_record rec)
-{
-    if (!rec)
-       return;
-    if (rec->wrbuf_marc)
-       wrbuf_free (rec->wrbuf_marc, 1);
-    if (rec->wrbuf_iconv)
-       wrbuf_free (rec->wrbuf_iconv, 1);
-    if (rec->wrbuf_opac)
-       wrbuf_free (rec->wrbuf_opac, 1);
-    odr_destroy (rec->odr);
-    xfree (rec);
-}
-
-static const char *record_iconv_return(ZOOM_record rec, int *len,
-                                      const char *buf, int sz,
-                                      const char *record_charset)
-{
-    char to[40];
-    char from[40];
-    yaz_iconv_t cd = 0;
-
-    *from = '\0';
-    strcpy(to, "UTF-8");
-    if (record_charset && *record_charset)
-    {
-       /* Use "from,to" or just "from" */
-       const char *cp =strchr(record_charset, ',');
-       int clen = strlen(record_charset);
-       if (cp && cp[1])
-       {
-           strncpy( to, cp+1, sizeof(to)-1);
-           to[sizeof(to)-1] = '\0';
-           clen = cp - record_charset;
-       }
-       if (clen > sizeof(from)-1)
-           clen = sizeof(from)-1;
-       
-       if (clen)
-           strncpy(from, record_charset, clen);
-       from[clen] = '\0';
-    }
-
-    if (*from && *to && (cd = yaz_iconv_open(to, from)))
-    {
-       char outbuf[12];
-       size_t inbytesleft = sz;
-       const char *inp = buf;
-       
-       if (!rec->wrbuf_iconv)
-           rec->wrbuf_iconv = wrbuf_alloc();
-
-       wrbuf_rewind(rec->wrbuf_iconv);
-
-       while (inbytesleft)
-       {
-           size_t outbytesleft = sizeof(outbuf);
-           char *outp = outbuf;
-           size_t r = yaz_iconv (cd, (char**) &inp,
-                                 &inbytesleft, 
-                                 &outp, &outbytesleft);
-           if (r == (size_t) (-1))
-           {
-               int e = yaz_iconv_error(cd);
-               if (e != YAZ_ICONV_E2BIG)
-                   break;
-           }
-           wrbuf_write(rec->wrbuf_iconv, outbuf, outp - outbuf);
-       }
-       wrbuf_puts(rec->wrbuf_iconv, "");
-       buf = wrbuf_buf(rec->wrbuf_iconv);
-       sz = wrbuf_len(rec->wrbuf_iconv);
-       yaz_iconv_close(cd);
-    }
-    if (len)
-       *len = sz;
-    return buf;
-}
-
-ZOOM_API(const char *)
-ZOOM_record_get (ZOOM_record rec, const char *type_spec, int *len)
-{
-    char type[40];
-    char charset[40];
-    const char *cp;
-    int i;
-    Z_NamePlusRecord *npr;
-    
-    if (len)
-       *len = 0; /* default return */
-       
-    if (!rec)
-       return 0;
-    npr = rec->npr;
-    if (!npr)
-       return 0;
-
-    cp = type_spec;
-    for (i = 0; cp[i] && i < sizeof(type)-1; i++)
-    {
-       if (cp[i] == ';' || cp[i] == ' ')
-           break;
-       type[i] = cp[i];
-    }
-    type[i] = '\0';
-    charset[0] = '\0';
-    if (type_spec[i] == ';')
-    {
-       i++;
-       while (type_spec[i] == ' ')
-           i++;
-       if (!strncmp(type_spec+i, "charset=", 8))
-       {
-           cp = type_spec+i+8;
-           for (i = 0; cp[i] && i < sizeof(charset)-1; i++)
-           {
-               if (cp[i] == ';' || cp[i] == ' ')
-                   break;
-               charset[i] = cp[i];
-           }
-           charset[i] = '\0';
-       }
-    }  
-
-    if (!strcmp (type, "database"))
-    {
-       if (len)
-            *len = (npr->databaseName ? strlen(npr->databaseName) : 0);
-       return npr->databaseName;
-    }
-    else if (!strcmp (type, "syntax"))
-    {
-        const char *desc = 0;  
-       if (npr->which == Z_NamePlusRecord_databaseRecord)
-       {
-           Z_External *r = (Z_External *) npr->u.databaseRecord;
-           oident *ent = oid_getentbyoid(r->direct_reference);
-           if (ent)
-               desc = ent->desc;
-       }
-       if (!desc)
-            desc = "none";
-       if (len)
-            *len = strlen(desc);
-       return desc;
-    }
-    else if (!strcmp (type, "render") && 
-             npr->which == Z_NamePlusRecord_databaseRecord)
-    {
-        Z_External *r = (Z_External *) npr->u.databaseRecord;
-        oident *ent = oid_getentbyoid(r->direct_reference);
-
-       /* render bibliographic record .. */
-       if (r->which == Z_External_OPAC)
-       {
-           r = r->u.opac->bibliographicRecord;
-           if (!r)
-               return 0;
-           ent = oid_getentbyoid(r->direct_reference);
-       }
-        if (r->which == Z_External_sutrs)
-           return record_iconv_return(rec, len,
-                                      r->u.sutrs->buf, r->u.sutrs->len,
-                                      charset);
-        else if (r->which == Z_External_octet)
-        {
-            yaz_marc_t mt;
-            switch (ent->value)
-            {
-            case VAL_SOIF:
-            case VAL_HTML:
-            case VAL_SUTRS:
-                break;
-            case VAL_TEXT_XML:
-            case VAL_APPLICATION_XML:
-                break;
-            default:
-                if (!rec->wrbuf_marc)
-                    rec->wrbuf_marc = wrbuf_alloc();
-
-                mt = yaz_marc_create();
-                wrbuf_rewind (rec->wrbuf_marc);
-                if (yaz_marc_decode_wrbuf (
-                        mt, (const char *) r->u.octet_aligned->buf,
-                        r->u.octet_aligned->len,
-                        rec->wrbuf_marc) > 0)
-                {
-                    yaz_marc_destroy(mt);
-                   return record_iconv_return(rec, len,
-                                              wrbuf_buf(rec->wrbuf_marc),
-                                              wrbuf_len(rec->wrbuf_marc),
-                                              charset);
-                }
-                yaz_marc_destroy(mt);
-            }
-           return record_iconv_return(rec, len,
-                                      (const char *) r->u.octet_aligned->buf,
-                                      r->u.octet_aligned->len,
-                                      charset);
-        }
-        else if (r->which == Z_External_grs1)
-        {
-            if (!rec->wrbuf_marc)
-                rec->wrbuf_marc = wrbuf_alloc();
-            wrbuf_rewind (rec->wrbuf_marc);
-            yaz_display_grs1(rec->wrbuf_marc, r->u.grs1, 0);
-           return record_iconv_return(rec, len,
-                                      wrbuf_buf(rec->wrbuf_marc),
-                                      wrbuf_len(rec->wrbuf_marc),
-                                      charset);
-        }
-       return 0;
-    }
-    else if (npr->which == Z_NamePlusRecord_databaseRecord &&
-             (!strcmp (type, "xml") || !strcmp(type, "oai")))
-    {
-        Z_External *r = (Z_External *) npr->u.databaseRecord;
-        oident *ent = oid_getentbyoid(r->direct_reference);
-
-       /* render bibliographic record .. */
-       if (r->which == Z_External_OPAC)
-       {
-           r = r->u.opac->bibliographicRecord;
-           if (!r)
-               return 0;
-           ent = oid_getentbyoid(r->direct_reference);
-       }
-        
-        if (r->which == Z_External_sutrs)
-           return record_iconv_return(rec, len,
-                                      (const char *) r->u.sutrs->buf,
-                                      r->u.sutrs->len,
-                                      charset);
-        else if (r->which == Z_External_octet)
-        {
-            yaz_marc_t mt;
-            int marc_decode_type = YAZ_MARC_MARCXML;
-
-            if (!strcmp(type, "oai"))
-                marc_decode_type = YAZ_MARC_OAIMARC;
-            switch (ent->value)
-            {
-            case VAL_SOIF:
-            case VAL_HTML:
-            case VAL_SUTRS:
-                break;
-            case VAL_TEXT_XML:
-            case VAL_APPLICATION_XML:
-                break;
-            default:
-                if (!rec->wrbuf_marc)
-                    rec->wrbuf_marc = wrbuf_alloc();
-                wrbuf_rewind (rec->wrbuf_marc);
-                mt = yaz_marc_create();
-
-                yaz_marc_xml(mt, YAZ_MARC_MARCXML);
-                if (yaz_marc_decode_wrbuf (
-                        mt, (const char *) r->u.octet_aligned->buf,
-                        r->u.octet_aligned->len,
-                        rec->wrbuf_marc) > 0)
-                {
-                    yaz_marc_destroy(mt);
-                   return record_iconv_return(rec, len,
-                                              wrbuf_buf(rec->wrbuf_marc),
-                                              wrbuf_len(rec->wrbuf_marc),
-                                              charset);
-                }
-                yaz_marc_destroy(mt);
-            }
-           return record_iconv_return(rec, len,
-                                      (const char *) r->u.octet_aligned->buf,
-                                      r->u.octet_aligned->len,
-                                      charset);
-        }
-        else if (r->which == Z_External_grs1)
-        {
-            if (len) *len = 5;
-            return "GRS-1";
-        }
-       return 0;
-    }
-    else if (!strcmp (type, "raw"))
-    {
-       if (npr->which == Z_NamePlusRecord_databaseRecord)
-       {
-           Z_External *r = (Z_External *) npr->u.databaseRecord;
-           
-           if (r->which == Z_External_sutrs)
-           {
-               if (len) *len = r->u.sutrs->len;
-               return (const char *) r->u.sutrs->buf;
-           }
-           else if (r->which == Z_External_octet)
-           {
-               if (len) *len = r->u.octet_aligned->len;
-               return (const char *) r->u.octet_aligned->buf;
-           }
-           else /* grs-1, explain, OPAC, ... */
-           {
-               if (len) *len = -1;
-                return (const char *) npr->u.databaseRecord;
-           }
-       }
-       return 0;
-    }
-    else if (!strcmp (type, "ext"))
-    {
-       if (npr->which == Z_NamePlusRecord_databaseRecord)
-            return (const char *) npr->u.databaseRecord;
-       return 0;
-    }
-    else if (npr->which == Z_NamePlusRecord_databaseRecord &&
-             !strcmp (type, "opac"))
-            
-    {
-       Z_External *r = (Z_External *) npr->u.databaseRecord;
-       if (r->which == Z_External_OPAC)
-       {
-           if (!rec->wrbuf_opac)
-               rec->wrbuf_opac = wrbuf_alloc();
-           wrbuf_rewind (rec->wrbuf_opac);
-           yaz_display_OPAC(rec->wrbuf_opac, r->u.opac, 0);
-           return record_iconv_return(rec, len,
-                                      wrbuf_buf(rec->wrbuf_opac),
-                                      wrbuf_len(rec->wrbuf_opac),
-                                      charset);
-       }
-    }
-    return 0;
-}
-
-static int strcmp_null(const char *v1, const char *v2)
-{
-    if (!v1 && !v2)
-        return 0;
-    if (!v1 || !v2)
-        return -1;
-    return strcmp(v1, v2);
-}
-
-static void record_cache_add (ZOOM_resultset r, Z_NamePlusRecord *npr, 
-                              int pos)
-{
-    ZOOM_record_cache rc;
-    const char *elementSetName =
-        ZOOM_resultset_option_get (r, "elementSetName");
-    const char *syntax = 
-        ZOOM_resultset_option_get (r, "preferredRecordSyntax");
-    
-    ZOOM_Event event = ZOOM_Event_create(ZOOM_EVENT_RECV_RECORD);
-    ZOOM_connection_put_event(r->connection, event);
-
-    for (rc = r->record_cache; rc; rc = rc->next)
-    {
-       if (pos == rc->pos)
-       {
-           if (strcmp_null(r->schema, rc->schema))
-                continue;
-           if (strcmp_null(elementSetName,rc->elementSetName))
-                continue;
-            if (strcmp_null(syntax, rc->syntax))
-                continue;
-            /* not destroying rc->npr (it's handled by nmem )*/
-            rc->rec.npr = npr;
-            /* keeping wrbuf_marc too */
-            return;
-       }
-    }
-    rc = (ZOOM_record_cache) odr_malloc (r->odr, sizeof(*rc));
-    rc->rec.npr = npr; 
-    rc->rec.odr = 0;
-    rc->rec.wrbuf_marc = 0;
-    rc->rec.wrbuf_iconv = 0;
-    rc->rec.wrbuf_opac = 0;
-    if (elementSetName)
-       rc->elementSetName = odr_strdup (r->odr, elementSetName);
-    else
-       rc->elementSetName = 0;
-
-    if (syntax)
-       rc->syntax = odr_strdup (r->odr, syntax);
-    else
-       rc->syntax = 0;
-
-    if (r->schema)
-       rc->schema = odr_strdup (r->odr, r->schema);
-    else
-       rc->schema = 0;
-
-    rc->pos = pos;
-    rc->next = r->record_cache;
-    r->record_cache = rc;
-}
-
-static ZOOM_record record_cache_lookup (ZOOM_resultset r, int pos)
-{
-    ZOOM_record_cache rc;
-    const char *elementSetName =
-        ZOOM_resultset_option_get (r, "elementSetName");
-    const char *syntax = 
-        ZOOM_resultset_option_get (r, "preferredRecordSyntax");
-    
-    for (rc = r->record_cache; rc; rc = rc->next)
-    {
-       if (pos == rc->pos)
-       {
-           if (strcmp_null(r->schema, rc->schema))
-                continue;
-           if (strcmp_null(elementSetName,rc->elementSetName))
-                continue;
-            if (strcmp_null(syntax, rc->syntax))
-                continue;
-            return &rc->rec;
-       }
-    }
-    return 0;
-}
-                                            
-static void handle_records (ZOOM_connection c, Z_Records *sr,
-                           int present_phase)
-{
-    ZOOM_resultset resultset;
-
-    if (!c->tasks)
-       return ;
-    switch (c->tasks->which)
-    {
-    case ZOOM_TASK_SEARCH:
-        resultset = c->tasks->u.search.resultset;
-        break;
-    case ZOOM_TASK_RETRIEVE:
-        resultset = c->tasks->u.retrieve.resultset;        
-       break;
-    default:
-        return;
-    }
-    if (sr && sr->which == Z_Records_NSD)
-    {
-       Z_DiagRec dr, *dr_p = &dr;
-       dr.which = Z_DiagRec_defaultFormat;
-       dr.u.defaultFormat = sr->u.nonSurrogateDiagnostic;
-       
-       response_diag (c, dr_p);
-    }
-    else if (sr && sr->which == Z_Records_multipleNSD)
-    {
-       if (sr->u.multipleNonSurDiagnostics->num_diagRecs >= 1)
-           response_diag(c, sr->u.multipleNonSurDiagnostics->diagRecs[0]);
-       else
-            set_ZOOM_error(c, ZOOM_ERROR_DECODE, 0);
-    }
-    else 
-    {
-       if (resultset->count + resultset->start > resultset->size)
-           resultset->count = resultset->size - resultset->start;
-       if (resultset->count < 0)
-           resultset->count = 0;
-       if (sr && sr->which == Z_Records_DBOSD)
-       {
-           int i;
-           NMEM nmem = odr_extract_mem (c->odr_in);
-           Z_NamePlusRecordList *p =
-               sr->u.databaseOrSurDiagnostics;
-           for (i = 0; i<p->num_records; i++)
-           {
-               record_cache_add (resultset, p->records[i],
-                                  i+ resultset->start);
-           }
-           /* transfer our response to search_nmem .. we need it later */
-           nmem_transfer (resultset->odr->mem, nmem);
-           nmem_destroy (nmem);
-           if (present_phase && p->num_records == 0)
-           {
-               /* present response and we didn't get any records! */
-                set_ZOOM_error(c, ZOOM_ERROR_DECODE, 0);
-           }
-       }
-       else if (present_phase)
-       {
-           /* present response and we didn't get any records! */
-            set_ZOOM_error(c, ZOOM_ERROR_DECODE, 0);
-       }
-    }
-}
-
-static void handle_present_response (ZOOM_connection c, Z_PresentResponse *pr)
-{
-    handle_records (c, pr->records, 1);
-}
-
-static void handle_search_response (ZOOM_connection c, Z_SearchResponse *sr)
-{
-    ZOOM_resultset resultset;
-    ZOOM_Event event;
-    
-    yaz_log (LOG_DEBUG, "got search response");
-    
-    if (!c->tasks || c->tasks->which != ZOOM_TASK_SEARCH)
-       return ;
-    
-    event = ZOOM_Event_create(ZOOM_EVENT_RECV_SEARCH);
-    ZOOM_connection_put_event(c, event);
-
-    resultset = c->tasks->u.search.resultset;
-
-    resultset->size = *sr->resultCount;
-    handle_records (c, sr->records, 0);
-}
-
-static void sort_response (ZOOM_connection c, Z_SortResponse *res)
-{
-    if (res->diagnostics && res->num_diagnostics > 0)
-       response_diag (c, res->diagnostics[0]);
-}
-
-static int scan_response (ZOOM_connection c, Z_ScanResponse *res)
-{
-    NMEM nmem = odr_extract_mem (c->odr_in);
-    ZOOM_scanset scan;
-
-    if (!c->tasks || c->tasks->which != ZOOM_TASK_SCAN)
-        return 0;
-    scan = c->tasks->u.scan.scan;
-
-    if (res->entries && res->entries->nonsurrogateDiagnostics)
-        response_diag(c, res->entries->nonsurrogateDiagnostics[0]);
-    scan->scan_response = res;
-    nmem_transfer (scan->odr->mem, nmem);
-    if (res->stepSize)
-        ZOOM_options_set_int (scan->options, "stepSize", *res->stepSize);
-    if (res->positionOfTerm)
-        ZOOM_options_set_int (scan->options, "position", *res->positionOfTerm);
-    if (res->scanStatus)
-        ZOOM_options_set_int (scan->options, "scanStatus", *res->scanStatus);
-    if (res->numberOfEntriesReturned)
-        ZOOM_options_set_int (scan->options, "number",
-                              *res->numberOfEntriesReturned);
-    nmem_destroy (nmem);
-    return 1;
-}
-
-static zoom_ret send_sort (ZOOM_connection c)
-{
-    ZOOM_resultset  resultset;
-
-    if (!c->tasks || c->tasks->which != ZOOM_TASK_SEARCH)
-       return zoom_complete;
-
-    resultset = c->tasks->u.search.resultset;
-
-    if (c->error)
-    {
-       resultset->r_sort_spec = 0;
-       return zoom_complete;
-    }
-    if (resultset->r_sort_spec)
-    {
-       Z_APDU *apdu = zget_APDU(c->odr_out, Z_APDU_sortRequest);
-       Z_SortRequest *req = apdu->u.sortRequest;
-       
-       req->num_inputResultSetNames = 1;
-       req->inputResultSetNames = (Z_InternationalString **)
-           odr_malloc (c->odr_out, sizeof(*req->inputResultSetNames));
-       req->inputResultSetNames[0] =
-            odr_strdup (c->odr_out, resultset->setname);
-       req->sortedResultSetName = odr_strdup (c->odr_out, resultset->setname);
-       req->sortSequence = resultset->r_sort_spec;
-       resultset->r_sort_spec = 0;
-       return send_APDU (c, apdu);
-    }
-    return zoom_complete;
-}
-
-static zoom_ret send_present (ZOOM_connection c)
-{
-    Z_APDU *apdu = 0;
-    Z_PresentRequest *req = 0;
-    int i = 0;
-    const char *syntax = 0;
-    const char *elementSetName = 0;
-    ZOOM_resultset  resultset;
-
-    if (!c->tasks)
-       return zoom_complete;
-
-    switch (c->tasks->which)
-    {
-    case ZOOM_TASK_SEARCH:
-        resultset = c->tasks->u.search.resultset;
-        break;
-    case ZOOM_TASK_RETRIEVE:
-        resultset = c->tasks->u.retrieve.resultset;
-        resultset->start = c->tasks->u.retrieve.start;
-        resultset->count = c->tasks->u.retrieve.count;
-
-        if (resultset->start >= resultset->size)
-            return zoom_complete;
-        if (resultset->start + resultset->count > resultset->size)
-            resultset->count = resultset->size - resultset->start;
-       break;
-    default:
-        return zoom_complete;
-    }
-
-    syntax = ZOOM_resultset_option_get (resultset, "preferredRecordSyntax");
-    elementSetName = ZOOM_resultset_option_get (resultset, "elementSetName");
-
-    if (c->error)                  /* don't continue on error */
-       return zoom_complete;
-    if (resultset->start < 0)
-       return zoom_complete;
-    for (i = 0; i<resultset->count; i++)
-    {
-       ZOOM_record rec =
-           record_cache_lookup (resultset, i + resultset->start);
-       if (!rec)
-           break;
-    }
-    if (i == resultset->count)
-       return zoom_complete;
-
-    apdu = zget_APDU(c->odr_out, Z_APDU_presentRequest);
-    req = apdu->u.presentRequest;
-
-    resultset->start += i;
-    resultset->count -= i;
-    *req->resultSetStartPoint = resultset->start + 1;
-    *req->numberOfRecordsRequested = resultset->step>0 ?
-        resultset->step : resultset->count;
-    assert (*req->numberOfRecordsRequested > 0);
-
-    if (syntax && *syntax)
-       req->preferredRecordSyntax =
-           yaz_str_to_z3950oid (c->odr_out, CLASS_RECSYN, syntax);
-
-    if (resultset->schema && *resultset->schema)
-    {
-       Z_RecordComposition *compo = (Z_RecordComposition *)
-            odr_malloc (c->odr_out, sizeof(*compo));
-
-        req->recordComposition = compo;
-        compo->which = Z_RecordComp_complex;
-        compo->u.complex = (Z_CompSpec *)
-            odr_malloc(c->odr_out, sizeof(*compo->u.complex));
-        compo->u.complex->selectAlternativeSyntax = (bool_t *) 
-            odr_malloc(c->odr_out, sizeof(bool_t));
-        *compo->u.complex->selectAlternativeSyntax = 0;
-
-        compo->u.complex->generic = (Z_Specification *)
-            odr_malloc(c->odr_out, sizeof(*compo->u.complex->generic));
-
-        compo->u.complex->generic->which = Z_Schema_oid;
-        compo->u.complex->generic->schema.oid = (Odr_oid *)
-            yaz_str_to_z3950oid (c->odr_out, CLASS_SCHEMA, resultset->schema);
-
-        if (!compo->u.complex->generic->schema.oid)
-        {
-            /* OID wasn't a schema! Try record syntax instead. */
-
-            compo->u.complex->generic->schema.oid = (Odr_oid *)
-                yaz_str_to_z3950oid (c->odr_out, CLASS_RECSYN, resultset->schema);
-        }
-        if (elementSetName && *elementSetName)
-        {
-            compo->u.complex->generic->elementSpec = (Z_ElementSpec *)
-                odr_malloc(c->odr_out, sizeof(Z_ElementSpec));
-            compo->u.complex->generic->elementSpec->which =
-                Z_ElementSpec_elementSetName;
-            compo->u.complex->generic->elementSpec->u.elementSetName =
-                odr_strdup (c->odr_out, elementSetName);
-        }
-        else
-            compo->u.complex->generic->elementSpec = 0;
-        compo->u.complex->num_dbSpecific = 0;
-        compo->u.complex->dbSpecific = 0;
-        compo->u.complex->num_recordSyntax = 0;
-        compo->u.complex->recordSyntax = 0;
-    }
-    else if (elementSetName && *elementSetName)
-    {
-       Z_ElementSetNames *esn = (Z_ElementSetNames *)
-            odr_malloc (c->odr_out, sizeof(*esn));
-       Z_RecordComposition *compo = (Z_RecordComposition *)
-            odr_malloc (c->odr_out, sizeof(*compo));
-       
-       esn->which = Z_ElementSetNames_generic;
-       esn->u.generic = odr_strdup (c->odr_out, elementSetName);
-       compo->which = Z_RecordComp_simple;
-       compo->u.simple = esn;
-       req->recordComposition = compo;
-    }
-    req->resultSetId = odr_strdup(c->odr_out, resultset->setname);
-    return send_APDU (c, apdu);
-}
-
-ZOOM_API(ZOOM_scanset)
-ZOOM_connection_scan (ZOOM_connection c, const char *start)
-{
-    ZOOM_scanset scan = (ZOOM_scanset) xmalloc (sizeof(*scan));
-
-    scan->connection = c;
-    scan->odr = odr_createmem (ODR_DECODE);
-    scan->options = ZOOM_options_create_with_parent (c->options);
-    scan->refcount = 1;
-    scan->scan_response = 0;
-
-    if ((scan->termListAndStartPoint =
-         p_query_scan(scan->odr, PROTO_Z3950, &scan->attributeSet,
-                      start)))
-    {
-        ZOOM_task task = ZOOM_connection_add_task (c, ZOOM_TASK_SCAN);
-        task->u.scan.scan = scan;
-        
-        (scan->refcount)++;
-        if (!c->async)
-        {
-            while (ZOOM_event (1, &c))
-                ;
-        }
-    }
-    return scan;
-}
-
-ZOOM_API(void)
-ZOOM_scanset_destroy (ZOOM_scanset scan)
-{
-    if (!scan)
-        return;
-    (scan->refcount)--;
-    if (scan->refcount == 0)
-    {
-        odr_destroy (scan->odr);
-        
-        ZOOM_options_destroy (scan->options);
-        xfree (scan);
-    }
-}
-
-static zoom_ret send_package (ZOOM_connection c)
-{
-    ZOOM_Event event;
-    if (!c->tasks)
-        return zoom_complete;
-    assert (c->tasks->which == ZOOM_TASK_PACKAGE);
-    
-    event = ZOOM_Event_create (ZOOM_EVENT_SEND_APDU);
-    ZOOM_connection_put_event (c, event);
-    
-    return do_write_ex (c, c->tasks->u.package->buf_out,
-                        c->tasks->u.package->len_out);
-}
-
-static zoom_ret send_scan (ZOOM_connection c)
-{
-    ZOOM_scanset scan;
-    Z_APDU *apdu = zget_APDU(c->odr_out, Z_APDU_scanRequest);
-    Z_ScanRequest *req = apdu->u.scanRequest;
-    if (!c->tasks)
-        return zoom_complete;
-    assert (c->tasks->which == ZOOM_TASK_SCAN);
-    scan = c->tasks->u.scan.scan;
-
-    req->termListAndStartPoint = scan->termListAndStartPoint;
-    req->attributeSet = scan->attributeSet;
-
-    *req->numberOfTermsRequested =
-        ZOOM_options_get_int(scan->options, "number", 10);
-
-    req->preferredPositionInResponse =
-        odr_intdup (c->odr_out,
-                    ZOOM_options_get_int(scan->options, "position", 1));
-
-    req->stepSize =
-        odr_intdup (c->odr_out,
-                    ZOOM_options_get_int(scan->options, "stepSize", 0));
-    
-    req->databaseNames = set_DatabaseNames (c, scan->options, 
-                                            &req->num_databaseNames);
-
-    return send_APDU (c, apdu);
-}
-
-ZOOM_API(size_t)
-ZOOM_scanset_size (ZOOM_scanset scan)
-{
-    if (!scan || !scan->scan_response || !scan->scan_response->entries)
-        return 0;
-    return scan->scan_response->entries->num_entries;
-}
-
-ZOOM_API(const char *)
-ZOOM_scanset_term (ZOOM_scanset scan, size_t pos,
-                               int *occ, int *len)
-{
-    const char *term = 0;
-    size_t noent = ZOOM_scanset_size (scan);
-    Z_ScanResponse *res = scan->scan_response;
-    
-    *len = 0;
-    *occ = 0;
-    if (pos >= noent)
-        return 0;
-    if (res->entries->entries[pos]->which == Z_Entry_termInfo)
-    {
-        Z_TermInfo *t = res->entries->entries[pos]->u.termInfo;
-        
-        if (t->term->which == Z_Term_general)
-        {
-            term = (const char *) t->term->u.general->buf;
-            *len = t->term->u.general->len;
-        }
-        *occ = t->globalOccurrences ? *t->globalOccurrences : 0;
-    }
-    return term;
-}
-
-ZOOM_API(const char *)
-ZOOM_scanset_option_get (ZOOM_scanset scan, const char *key)
-{
-    return ZOOM_options_get (scan->options, key);
-}
-
-ZOOM_API(void)
-ZOOM_scanset_option_set (ZOOM_scanset scan, const char *key,
-                              const char *val)
-{
-    ZOOM_options_set (scan->options, key, val);
-}
-
-static Z_APDU *create_es_package (ZOOM_package p, int type)
-{
-    const char *str;
-    Z_APDU *apdu = zget_APDU(p->odr_out, Z_APDU_extendedServicesRequest);
-    Z_ExtendedServicesRequest *req = apdu->u.extendedServicesRequest;
-    
-    *req->function = Z_ExtendedServicesRequest_create;
-    
-    str = ZOOM_options_get(p->options, "package-name");
-    if (str && *str)
-        req->packageName = nmem_strdup (p->odr_out->mem, str);
-    
-    str = ZOOM_options_get(p->options, "user-id");
-    if (str)
-        req->userId = nmem_strdup (p->odr_out->mem, str);
-    
-    req->packageType = yaz_oidval_to_z3950oid(p->odr_out, CLASS_EXTSERV,
-                                              type);
-
-    str = ZOOM_options_get(p->options, "function");
-    if (str)
-    {
-        if (!strcmp (str, "create"))
-            *req->function = 1;
-        if (!strcmp (str, "delete"))
-            *req->function = 2;
-        if (!strcmp (str, "modify"))
-            *req->function = 3;
-    }
-    return apdu;
-}
-
-static const char *ill_array_lookup (void *clientData, const char *idx)
-{
-    ZOOM_package p = (ZOOM_package) clientData;
-    return ZOOM_options_get (p->options, idx+4);
-}
-
-static Z_External *encode_ill_request (ZOOM_package p)
-{
-    ODR out = p->odr_out;
-    ILL_Request *req;
-    Z_External *r = 0;
-    struct ill_get_ctl ctl;
-       
-    ctl.odr = p->odr_out;
-    ctl.clientData = p;
-    ctl.f = ill_array_lookup;
-       
-    req = ill_get_ILLRequest(&ctl, "ill", 0);
-       
-    if (!ill_Request (out, &req, 0, 0))
-    {
-        int ill_request_size;
-        char *ill_request_buf = odr_getbuf (out, &ill_request_size, 0);
-        if (ill_request_buf)
-            odr_setbuf (out, ill_request_buf, ill_request_size, 1);
-        return 0;
-    }
-    else
-    {
-        oident oid;
-        int illRequest_size = 0;
-        char *illRequest_buf = odr_getbuf (out, &illRequest_size, 0);
-               
-        oid.proto = PROTO_GENERAL;
-        oid.oclass = CLASS_GENERAL;
-        oid.value = VAL_ISO_ILL_1;
-               
-        r = (Z_External *) odr_malloc (out, sizeof(*r));
-        r->direct_reference = odr_oiddup(out,oid_getoidbyent(&oid)); 
-        r->indirect_reference = 0;
-        r->descriptor = 0;
-        r->which = Z_External_single;
-               
-        r->u.single_ASN1_type = (Odr_oct *)
-            odr_malloc (out, sizeof(*r->u.single_ASN1_type));
-        r->u.single_ASN1_type->buf = (unsigned char*)
-            odr_malloc (out, illRequest_size);
-        r->u.single_ASN1_type->len = illRequest_size;
-        r->u.single_ASN1_type->size = illRequest_size;
-        memcpy (r->u.single_ASN1_type->buf, illRequest_buf, illRequest_size);
-    }
-    return r;
-}
-
-static Z_ItemOrder *encode_item_order(ZOOM_package p)
-{
-    Z_ItemOrder *req = (Z_ItemOrder *) odr_malloc (p->odr_out, sizeof(*req));
-    const char *str;
-    
-    req->which=Z_IOItemOrder_esRequest;
-    req->u.esRequest = (Z_IORequest *) 
-        odr_malloc(p->odr_out,sizeof(Z_IORequest));
-
-    /* to keep part ... */
-    req->u.esRequest->toKeep = (Z_IOOriginPartToKeep *)
-       odr_malloc(p->odr_out,sizeof(Z_IOOriginPartToKeep));
-    req->u.esRequest->toKeep->supplDescription = 0;
-    req->u.esRequest->toKeep->contact = (Z_IOContact *)
-        odr_malloc (p->odr_out, sizeof(*req->u.esRequest->toKeep->contact));
-       
-    str = ZOOM_options_get(p->options, "contact-name");
-    req->u.esRequest->toKeep->contact->name = str ?
-        nmem_strdup (p->odr_out->mem, str) : 0;
-       
-    str = ZOOM_options_get(p->options, "contact-phone");
-    req->u.esRequest->toKeep->contact->phone = str ?
-        nmem_strdup (p->odr_out->mem, str) : 0;
-       
-    str = ZOOM_options_get(p->options, "contact-email");
-    req->u.esRequest->toKeep->contact->email = str ?
-        nmem_strdup (p->odr_out->mem, str) : 0;
-       
-    req->u.esRequest->toKeep->addlBilling = 0;
-       
-    /* not to keep part ... */
-    req->u.esRequest->notToKeep = (Z_IOOriginPartNotToKeep *)
-        odr_malloc(p->odr_out,sizeof(Z_IOOriginPartNotToKeep));
-       
-    str = ZOOM_options_get(p->options, "itemorder-setname");
-    if (!str)
-        str = "default";
-
-    if (!*str) 
-        req->u.esRequest->notToKeep->resultSetItem = 0;
-    else
-    {
-        req->u.esRequest->notToKeep->resultSetItem = (Z_IOResultSetItem *)
-           odr_malloc(p->odr_out, sizeof(Z_IOResultSetItem));
-
-        req->u.esRequest->notToKeep->resultSetItem->resultSetId =
-           nmem_strdup (p->odr_out->mem, str);
-        req->u.esRequest->notToKeep->resultSetItem->item =
-            (int *) odr_malloc(p->odr_out, sizeof(int));
-       
-        str = ZOOM_options_get(p->options, "itemorder-item");
-        *req->u.esRequest->notToKeep->resultSetItem->item =
-            (str ? atoi(str) : 1);
-    }
-    req->u.esRequest->notToKeep->itemRequest = encode_ill_request(p);
-    
-    return req;
-}
-
-ZOOM_API(void)
-    ZOOM_package_send (ZOOM_package p, const char *type)
-{
-    Z_APDU *apdu = 0;
-    ZOOM_connection c;
-    if (!p)
-        return;
-    c = p->connection;
-    odr_reset (p->odr_out);
-    xfree (p->buf_out);
-    p->buf_out = 0;
-    if (!strcmp(type, "itemorder"))
-    {
-        Z_External *r;
-        apdu = create_es_package (p, VAL_ITEMORDER);
-        if (apdu)
-        {
-            r = (Z_External *) odr_malloc (p->odr_out, sizeof(*r));
-            
-            r->direct_reference =
-                yaz_oidval_to_z3950oid(p->odr_out, CLASS_EXTSERV,
-                                       VAL_ITEMORDER);
-            r->descriptor = 0;
-            r->which = Z_External_itemOrder;
-            r->indirect_reference = 0;
-            r->u.itemOrder = encode_item_order (p);
-
-            apdu->u.extendedServicesRequest->taskSpecificParameters = r;
-        }
-    }
-    if (apdu)
-    {
-        if (encode_APDU(p->connection, apdu, p->odr_out) == 0)
-        {
-            char *buf;
-
-            ZOOM_task task = ZOOM_connection_add_task (c, ZOOM_TASK_PACKAGE);
-            task->u.package = p;
-            buf = odr_getbuf(p->odr_out, &p->len_out, 0);
-            p->buf_out = (char *) xmalloc (p->len_out);
-            memcpy (p->buf_out, buf, p->len_out);
-            
-            (p->refcount)++;
-            if (!c->async)
-            {
-                while (ZOOM_event (1, &c))
-                    ;
-            }
-        }
-    }
-}
-
-ZOOM_API(ZOOM_package)
-    ZOOM_connection_package (ZOOM_connection c, ZOOM_options options)
-{
-    ZOOM_package p = (ZOOM_package) xmalloc (sizeof(*p));
-
-    p->connection = c;
-    p->odr_out = odr_createmem (ODR_ENCODE);
-    p->options = ZOOM_options_create_with_parent2 (options, c->options);
-    p->refcount = 1;
-    p->buf_out = 0;
-    p->len_out = 0;
-    return p;
-}
-
-ZOOM_API(void)
-    ZOOM_package_destroy(ZOOM_package p)
-{
-    if (!p)
-        return;
-    (p->refcount)--;
-    if (p->refcount == 0)
-    {
-        odr_destroy (p->odr_out);
-        xfree (p->buf_out);
-        
-        ZOOM_options_destroy (p->options);
-        xfree (p);
-    }
-}
-
-ZOOM_API(const char *)
-ZOOM_package_option_get (ZOOM_package p, const char *key)
-{
-    return ZOOM_options_get (p->options, key);
-}
-
-
-ZOOM_API(void)
-ZOOM_package_option_set (ZOOM_package p, const char *key,
-                              const char *val)
-{
-    ZOOM_options_set (p->options, key, val);
-}
-
-static int ZOOM_connection_exec_task (ZOOM_connection c)
-{
-    ZOOM_task task = c->tasks;
-    zoom_ret ret = zoom_complete;
-
-    if (!task)
-    {
-        yaz_log (LOG_DEBUG, "ZOOM_connection_exec_task task=<null>");
-       return 0;
-    }
-    yaz_log (LOG_DEBUG, "ZOOM_connection_exec_task type=%d run=%d",
-             task->which, task->running);
-    if (c->error != ZOOM_ERROR_NONE)
-    {
-        yaz_log (LOG_DEBUG, "remove tasks because of error = %d", c->error);
-        ZOOM_connection_remove_tasks (c);
-        return 0;
-    }
-    if (task->running)
-    {
-        yaz_log (LOG_DEBUG, "task already running");
-       return 0;
-    }
-    task->running = 1;
-    ret = zoom_complete;
-    if (c->cs || task->which == ZOOM_TASK_CONNECT)
-    {
-        switch (task->which)
-        {
-        case ZOOM_TASK_SEARCH:
-            if (c->proto == PROTO_HTTP)
-                ret = ZOOM_connection_srw_send_search(c);
-            else
-                ret = ZOOM_connection_send_search(c);
-            break;
-        case ZOOM_TASK_RETRIEVE:
-            if (c->proto == PROTO_HTTP)
-                ret = ZOOM_connection_srw_send_search(c);
-            else
-                ret = send_present (c);
-            break;
-        case ZOOM_TASK_CONNECT:
-            ret = do_connect(c);
-            break;
-        case ZOOM_TASK_SCAN:
-            ret = send_scan(c);
-            break;
-        case ZOOM_TASK_PACKAGE:
-            ret = send_package(c);
-            break;
-        }
-    }
-    else
-    {
-        yaz_log (LOG_DEBUG, "remove tasks because no connection exist");
-        ZOOM_connection_remove_tasks (c);
-    }
-    if (ret == zoom_complete)
-    {
-        yaz_log (LOG_DEBUG, "task removed (complete)");
-        ZOOM_connection_remove_task (c);
-        return 0;
-    }
-    yaz_log (LOG_DEBUG, "task pending");
-    return 1;
-}
-
-static zoom_ret send_sort_present (ZOOM_connection c)
-{
-    zoom_ret r = send_sort (c);
-    if (r == zoom_complete)
-       r = send_present (c);
-    return r;
-}
-
-static int es_response (ZOOM_connection c,
-                        Z_ExtendedServicesResponse *res)
-{
-    if (!c->tasks || c->tasks->which != ZOOM_TASK_PACKAGE)
-        return 0;
-    if (res->diagnostics && res->num_diagnostics > 0)
-        response_diag(c, res->diagnostics[0]);
-    if (res->taskPackage &&
-        res->taskPackage->which == Z_External_extendedService)
-    {
-        Z_TaskPackage *taskPackage = res->taskPackage->u.extendedService;
-        Odr_oct *id = taskPackage->targetReference;
-        
-        if (id)
-            ZOOM_options_setl (c->tasks->u.package->options,
-                               "targetReference", (char*) id->buf, id->len);
-    }
-    return 1;
-}
-
-
-static void handle_apdu (ZOOM_connection c, Z_APDU *apdu)
-{
-    Z_InitResponse *initrs;
-    
-    c->mask = 0;
-    yaz_log (LOG_DEBUG, "recv APDU type=%d", apdu->which);
-    switch(apdu->which)
-    {
-    case Z_APDU_initResponse:
-       initrs = apdu->u.initResponse;
-        ZOOM_connection_option_set(c, "targetImplementationId",
-                                   initrs->implementationId ?
-                                   initrs->implementationId : "");
-        ZOOM_connection_option_set(c, "targetImplementationName",
-                                   initrs->implementationName ?
-                                   initrs->implementationName : "");
-        ZOOM_connection_option_set(c, "targetImplementationVersion",
-                                   initrs->implementationVersion ?
-                                   initrs->implementationVersion : "");
-       if (!*initrs->result)
-       {
-            set_ZOOM_error(c, ZOOM_ERROR_INIT, 0);
-       }
-       else
-       {
-           char *cookie =
-               yaz_oi_get_string_oidval (&apdu->u.initResponse->otherInfo,
-                                         VAL_COOKIE, 1, 0);
-           xfree (c->cookie_in);
-           c->cookie_in = 0;
-           if (cookie)
-               c->cookie_in = xstrdup(cookie);
-            if (ODR_MASK_GET(initrs->options, Z_Options_namedResultSets) &&
-                ODR_MASK_GET(initrs->protocolVersion, Z_ProtocolVersion_3))
-                c->support_named_resultsets = 1;
-            if (c->tasks)
-            {
-                assert (c->tasks->which == ZOOM_TASK_CONNECT);
-                ZOOM_connection_remove_task (c);
-            }
-           ZOOM_connection_exec_task (c);
-       }
-       if (ODR_MASK_GET(initrs->options, Z_Options_negotiationModel))
-       {
-            NMEM tmpmem = nmem_create();
-            Z_CharSetandLanguageNegotiation *p =
-                yaz_get_charneg_record(initrs->otherInfo);
-            
-            if (p)
-            {
-                char *charset=NULL, *lang=NULL;
-                int sel;
-                
-                yaz_get_response_charneg(tmpmem, p, &charset, &lang, &sel);
-                yaz_log(LOG_DEBUG, "Target accepted: charset %s, "
-                        "language %s, select %d",
-                        charset ? charset : "none", lang ? lang : "none", sel);
-                if (charset)
-                    ZOOM_connection_option_set (c, "negotiation-charset",
-                                                charset);
-                if (lang)
-                    ZOOM_connection_option_set (c, "negotiation-lang",
-                                                lang);
-                nmem_destroy(tmpmem);
-            }
-       }       
-       break;
-    case Z_APDU_searchResponse:
-       handle_search_response (c, apdu->u.searchResponse);
-       if (send_sort_present (c) == zoom_complete)
-           ZOOM_connection_remove_task (c);
-       break;
-    case Z_APDU_presentResponse:
-       handle_present_response (c, apdu->u.presentResponse);
-       if (send_present (c) == zoom_complete)
-           ZOOM_connection_remove_task (c);
-       break;
-    case Z_APDU_sortResponse:
-       sort_response (c, apdu->u.sortResponse);
-       if (send_present (c) == zoom_complete)
-           ZOOM_connection_remove_task (c);
-        break;
-    case Z_APDU_scanResponse:
-        scan_response (c, apdu->u.scanResponse);
-        ZOOM_connection_remove_task (c);
-        break;
-    case Z_APDU_extendedServicesResponse:
-        es_response (c, apdu->u.extendedServicesResponse);
-        ZOOM_connection_remove_task (c);
-        break;
-    case Z_APDU_close:
-        if (c->reconnect_ok)
-        {
-            do_close(c);
-            c->tasks->running = 0;
-            ZOOM_connection_insert_task (c, ZOOM_TASK_CONNECT);
-        }
-        else
-        {
-            set_ZOOM_error(c, ZOOM_ERROR_CONNECTION_LOST, 0);
-            do_close(c);
-        }
-        break;
-    default:
-        set_ZOOM_error(c, ZOOM_ERROR_DECODE, 0);
-        do_close(c);
-    }
-}
-
-#if HAVE_XML2
-static void handle_srw_response(ZOOM_connection c,
-                                Z_SRW_searchRetrieveResponse *res)
-{
-    ZOOM_resultset resultset = 0;
-    int i;
-    NMEM nmem;
-    ZOOM_Event event;
-
-    if (!c->tasks)
-        return;
-
-    if (c->tasks->which == ZOOM_TASK_SEARCH)
-        resultset = c->tasks->u.search.resultset;
-    else if (c->tasks->which == ZOOM_TASK_RETRIEVE)
-        resultset = c->tasks->u.retrieve.resultset;
-    else
-       return ;
-
-    event = ZOOM_Event_create(ZOOM_EVENT_RECV_SEARCH);
-    ZOOM_connection_put_event(c, event);
-
-    resultset->size = 0;
-
-    yaz_log(LOG_DEBUG, "got SRW response OK");
-    
-    if (res->numberOfRecords)
-        resultset->size = *res->numberOfRecords;
-
-    for (i = 0; i<res->num_records; i++)
-    {
-        int pos;
-
-        Z_NamePlusRecord *npr = (Z_NamePlusRecord *)
-            odr_malloc(c->odr_in, sizeof(Z_NamePlusRecord));
-
-        if (res->records[i].recordPosition && 
-            *res->records[i].recordPosition > 0)
-            pos = *res->records[i].recordPosition - 1;
-        else
-            pos = resultset->start + i;
-        
-        npr->databaseName = 0;
-        npr->which = Z_NamePlusRecord_databaseRecord;
-        npr->u.databaseRecord = (Z_External *)
-            odr_malloc(c->odr_in, sizeof(Z_External));
-        npr->u.databaseRecord->descriptor = 0;
-        npr->u.databaseRecord->direct_reference =
-            yaz_oidval_to_z3950oid(c->odr_in, CLASS_RECSYN, VAL_TEXT_XML);
-        npr->u.databaseRecord->which = Z_External_octet;
-        npr->u.databaseRecord->u.octet_aligned = (Odr_oct *)
-            odr_malloc(c->odr_in, sizeof(Odr_oct));
-        npr->u.databaseRecord->u.octet_aligned->buf = 
-            res->records[i].recordData_buf;
-        npr->u.databaseRecord->u.octet_aligned->len = 
-            npr->u.databaseRecord->u.octet_aligned->size = 
-            res->records[i].recordData_len;
-        record_cache_add (resultset, npr, pos);
-    }
-    if (res->num_diagnostics > 0)
-    {
-        set_dset_error(c, *res->diagnostics[0].code, "SRW",
-                       res->diagnostics[0].details, 0);
-    }
-    nmem = odr_extract_mem(c->odr_in);
-    nmem_transfer(resultset->odr->mem, nmem);
-    nmem_destroy(nmem);
-}
-#endif
-
-#if HAVE_XML2
-static void handle_http(ZOOM_connection c, Z_HTTP_Response *hres)
-{
-    int ret = -1;
-    const char *content_type = z_HTTP_header_lookup(hres->headers,
-                                                    "Content-Type");
-    const char *connection_head = z_HTTP_header_lookup(hres->headers,
-                                                       "Connection");
-    c->mask = 0;
-    yaz_log (LOG_DEBUG, "handle_http");
-
-    if (content_type && !yaz_strcmp_del("text/xml", content_type, "; "))
-    {
-        Z_SOAP *soap_package = 0;
-        ODR o = odr_createmem(ODR_DECODE);
-        Z_SOAP_Handler soap_handlers[2] = {
-            {"http://www.loc.gov/zing/srw/v1.0/", 0,
-             (Z_SOAP_fun) yaz_srw_codec},
-            {0, 0, 0}
-        };
-        ret = z_soap_codec(o, &soap_package,
-                           &hres->content_buf, &hres->content_len,
-                           soap_handlers);
-        if (!ret && soap_package->which == Z_SOAP_generic &&
-            soap_package->u.generic->no == 0)
-        {
-            Z_SRW_PDU *sr = soap_package->u.generic->p;
-            if (sr->which == Z_SRW_searchRetrieve_response)
-                handle_srw_response(c, sr->u.response);
-            else
-                ret = -1;
-        }
-        else if (!ret && (soap_package->which == Z_SOAP_fault
-                          || soap_package->which == Z_SOAP_error))
-        {
-            set_HTTP_error(c, hres->code,
-                           soap_package->u.fault->fault_code,
-                           soap_package->u.fault->fault_string);
-        }
-        else
-            ret = -1;
-        odr_destroy(o);
-    }
-    if (ret)
-    {
-        if (hres->code != 200)
-            set_HTTP_error(c, hres->code, 0, 0);
-        else
-            set_ZOOM_error(c, ZOOM_ERROR_DECODE, 0);
-        do_close (c);
-    }
-    ZOOM_connection_remove_task(c);
-    if (!strcmp(hres->version, "1.0"))
-    {
-        /* HTTP 1.0: only if Keep-Alive we stay alive.. */
-        if (!connection_head || strcmp(connection_head, "Keep-Alive"))
-            do_close(c);
-    }
-    else 
-    {
-        /* HTTP 1.1: only if no close we stay alive .. */
-        if (connection_head && !strcmp(connection_head, "close"))
-            do_close(c);
-    }
-}
-#endif
-
-static int do_read (ZOOM_connection c)
-{
-    int r, more;
-    ZOOM_Event event;
-    
-    event = ZOOM_Event_create (ZOOM_EVENT_RECV_DATA);
-    ZOOM_connection_put_event (c, event);
-    
-
-    r = cs_get (c->cs, &c->buf_in, &c->len_in);
-    more = cs_more(c->cs);
-    yaz_log (LOG_DEBUG, "do_read len=%d more=%d", r, more);
-    if (r == 1)
-       return 0;
-    if (r <= 0)
-    {
-        if (c->reconnect_ok)
-        {
-            do_close (c);
-            c->reconnect_ok = 0;
-            yaz_log (LOG_DEBUG, "reconnect read");
-            c->tasks->running = 0;
-            ZOOM_connection_insert_task (c, ZOOM_TASK_CONNECT);
-        }
-        else
-        {
-            set_ZOOM_error(c, ZOOM_ERROR_CONNECTION_LOST, 0);
-            do_close (c);
-        }
-    }
-    else
-    {
-        Z_GDU *gdu;
-        ZOOM_Event event;
-
-       odr_reset (c->odr_in);
-       odr_setbuf (c->odr_in, c->buf_in, r, 0);
-        event = ZOOM_Event_create (ZOOM_EVENT_RECV_APDU);
-        ZOOM_connection_put_event (c, event);
-
-       if (!z_GDU (c->odr_in, &gdu, 0, 0))
-       {
-            set_ZOOM_error(c, ZOOM_ERROR_DECODE, 0);
-           do_close (c);
-       }
-       else if (gdu->which == Z_GDU_Z3950)
-           handle_apdu (c, gdu->u.z3950);
-        else if (gdu->which == Z_GDU_HTTP_Response)
-        {
-#if HAVE_XML2
-            handle_http (c, gdu->u.HTTP_Response);
-#else
-            set_ZOOM_error(c, ZOOM_ERROR_DECODE, 0);
-           do_close (c);
-#endif
-        }
-        c->reconnect_ok = 0;
-    }
-    return 1;
-}
-
-static zoom_ret do_write_ex (ZOOM_connection c, char *buf_out, int len_out)
-{
-    int r;
-    ZOOM_Event event;
-    
-    event = ZOOM_Event_create(ZOOM_EVENT_SEND_DATA);
-    ZOOM_connection_put_event (c, event);
-
-    yaz_log (LOG_DEBUG, "do_write_ex len=%d", len_out);
-    if ((r=cs_put (c->cs, buf_out, len_out)) < 0)
-    {
-        if (c->reconnect_ok)
-        {
-            do_close (c);
-            c->reconnect_ok = 0;
-            yaz_log (LOG_DEBUG, "reconnect write");
-            c->tasks->running = 0;
-            ZOOM_connection_insert_task (c, ZOOM_TASK_CONNECT);
-            return zoom_pending;
-        }
-       if (c->state == STATE_CONNECTING)
-           set_ZOOM_error(c, ZOOM_ERROR_CONNECT, 0);
-       else
-            set_ZOOM_error(c, ZOOM_ERROR_CONNECTION_LOST, 0);
-       do_close (c);
-       return zoom_complete;
-    }
-    else if (r == 1)
-    {    
-        c->mask = ZOOM_SELECT_EXCEPT;
-        if (c->cs->io_pending & CS_WANT_WRITE)
-            c->mask += ZOOM_SELECT_WRITE;
-        if (c->cs->io_pending & CS_WANT_READ)
-            c->mask += ZOOM_SELECT_READ;
-        yaz_log (LOG_DEBUG, "do_write_ex 1 mask=%d", c->mask);
-    }
-    else
-    {
-        c->mask = ZOOM_SELECT_READ|ZOOM_SELECT_EXCEPT;
-        yaz_log (LOG_DEBUG, "do_write_ex 2 mask=%d", c->mask);
-    }
-    return zoom_pending;
-}
-
-static zoom_ret do_write(ZOOM_connection c)
-{
-    return do_write_ex (c, c->buf_out, c->len_out);
-}
-
-
-ZOOM_API(const char *)
-ZOOM_connection_option_get (ZOOM_connection c, const char *key)
-{
-    return ZOOM_options_get (c->options, key);
-}
-
-ZOOM_API(void)
-ZOOM_connection_option_set (ZOOM_connection c, const char *key,
-                                  const char *val)
-{
-    ZOOM_options_set (c->options, key, val);
-}
-
-ZOOM_API(const char *)
-ZOOM_resultset_option_get (ZOOM_resultset r, const char *key)
-{
-    return ZOOM_options_get (r->options, key);
-}
-
-ZOOM_API(void)
-ZOOM_resultset_option_set (ZOOM_resultset r, const char *key,
-                                  const char *val)
-{
-    ZOOM_options_set (r->options, key, val);
-}
-
-
-ZOOM_API(int)
-ZOOM_connection_errcode (ZOOM_connection c)
-{
-    return ZOOM_connection_error (c, 0, 0);
-}
-
-ZOOM_API(const char *)
-ZOOM_connection_errmsg (ZOOM_connection c)
-{
-    const char *msg;
-    ZOOM_connection_error (c, &msg, 0);
-    return msg;
-}
-
-ZOOM_API(const char *)
-ZOOM_connection_addinfo (ZOOM_connection c)
-{
-    const char *addinfo;
-    ZOOM_connection_error (c, 0, &addinfo);
-    return addinfo;
-}
-
-ZOOM_API(const char *)
-ZOOM_diag_str (int error)
-{
-    switch (error)
-    {
-    case ZOOM_ERROR_NONE:
-       return "No error";
-    case ZOOM_ERROR_CONNECT:
-       return "Connect failed";
-    case ZOOM_ERROR_MEMORY:
-       return "Out of memory";
-    case ZOOM_ERROR_ENCODE:
-       return "Encoding failed";
-    case ZOOM_ERROR_DECODE:
-       return "Decoding failed";
-    case ZOOM_ERROR_CONNECTION_LOST:
-       return "Connection lost";
-    case ZOOM_ERROR_INIT:
-       return "Init rejected";
-    case ZOOM_ERROR_INTERNAL:
-       return "Internal failure";
-    case ZOOM_ERROR_TIMEOUT:
-       return "Timeout";
-    case ZOOM_ERROR_UNSUPPORTED_PROTOCOL:
-       return "Unsupported protocol";
-    case ZOOM_ERROR_UNSUPPORTED_QUERY:
-       return "Unsupported query type";
-    default:
-       return diagbib1_str (error);
-    }
-}
-
-ZOOM_API(int)
-ZOOM_connection_error_x (ZOOM_connection c, const char **cp,
-                         const char **addinfo, const char **diagset)
-{
-    int error = c->error;
-    if (cp)
-    {
-        if (!c->diagset || !strcmp(c->diagset, "ZOOM"))
-            *cp = ZOOM_diag_str(error);
-        else if (!strcmp(c->diagset, "HTTP"))
-            *cp = z_HTTP_errmsg(c->error);
-        else if (!strcmp(c->diagset, "Bib-1"))
-            *cp = ZOOM_diag_str(error);
-        else if (!strcmp(c->diagset, "SRW"))
-            *cp = yaz_diag_srw_str(c->error);
-        else
-            *cp = "Unknown error and diagnostic set";
-    }
-    if (addinfo)
-        *addinfo = c->addinfo ? c->addinfo : "";
-    if (diagset)
-        *diagset = c->diagset ? c->diagset : "";
-    return c->error;
-}
-
-ZOOM_API(int)
-ZOOM_connection_error (ZOOM_connection c, const char **cp,
-                       const char **addinfo)
-{
-    return ZOOM_connection_error_x(c, cp, addinfo, 0);
-}
-
-static int ZOOM_connection_do_io(ZOOM_connection c, int mask)
-{
-    ZOOM_Event event = 0;
-    int r = cs_look(c->cs);
-    yaz_log (LOG_DEBUG, "ZOOM_connection_do_io c=%p mask=%d cs_look=%d",
-            c, mask, r);
-    
-    if (r == CS_NONE)
-    {
-        event = ZOOM_Event_create (ZOOM_EVENT_CONNECT);
-       set_ZOOM_error(c, ZOOM_ERROR_CONNECT, 0);
-       do_close (c);
-        ZOOM_connection_put_event (c, event);
-    }
-    else if (r == CS_CONNECT)
-    {
-        int ret;
-        event = ZOOM_Event_create (ZOOM_EVENT_CONNECT);
-
-        ret = cs_rcvconnect (c->cs);
-        yaz_log (LOG_DEBUG, "cs_rcvconnect returned %d", ret);
-        if (ret == 1)
-        {
-            c->mask = ZOOM_SELECT_EXCEPT;
-            if (c->cs->io_pending & CS_WANT_WRITE)
-                c->mask += ZOOM_SELECT_WRITE;
-            if (c->cs->io_pending & CS_WANT_READ)
-                c->mask += ZOOM_SELECT_READ;
-            ZOOM_connection_put_event (c, event);
-        }
-        else if (ret == 0)
-        {
-            ZOOM_connection_put_event (c, event);
-            if (c->proto == PROTO_Z3950)
-                ZOOM_connection_send_init(c);
-            else
-            {
-                /* no init request for SRW .. */
-                assert (c->tasks->which == ZOOM_TASK_CONNECT);
-                ZOOM_connection_remove_task (c);
-                c->mask = 0;
-                ZOOM_connection_exec_task (c);
-            }
-            c->state = STATE_ESTABLISHED;
-        }
-        else
-        {
-            set_ZOOM_error(c, ZOOM_ERROR_CONNECT, 0);
-            do_close (c);
-            ZOOM_connection_put_event (c, event);
-        }
-    }
-    else
-    {
-        if (mask & ZOOM_SELECT_READ)
-            do_read (c);
-        if (c->cs && (mask & ZOOM_SELECT_WRITE))
-            do_write (c);
-    }
-    return 1;
-}
-
-ZOOM_API(int)
-ZOOM_connection_last_event(ZOOM_connection cs)
-{
-    if (!cs)
-        return ZOOM_EVENT_NONE;
-    return cs->last_event;
-}
-
-ZOOM_API(int)
-ZOOM_event (int no, ZOOM_connection *cs)
-{
-    int timeout = 5000;
-#if HAVE_SYS_POLL_H
-    struct pollfd pollfds[1024];
-    ZOOM_connection poll_cs[1024];
-#else
-    struct timeval tv;
-    fd_set input, output, except;
-#endif
-    int i, r, nfds;
-    int max_fd = 0;
-
-    for (i = 0; i<no; i++)
-    {
-       ZOOM_connection c = cs[i];
-        ZOOM_Event event;
-       if (c && (event = ZOOM_connection_get_event(c)))
-        {
-            ZOOM_Event_destroy (event);
-           return i+1;
-        }
-    }
-    for (i = 0; i<no; i++)
-    {
-        ZOOM_connection c = cs[i];
-        ZOOM_Event event;
-        if (c && ZOOM_connection_exec_task (c))
-        {
-            if ((event = ZOOM_connection_get_event(c)))
-            {
-                ZOOM_Event_destroy (event);
-                return i+1;
-            }
-        }
-    }
-#if HAVE_SYS_POLL_H
-
-#else
-    FD_ZERO (&input);
-    FD_ZERO (&output);
-    FD_ZERO (&except);
-#endif
-    nfds = 0;
-    for (i = 0; i<no; i++)
-    {
-       ZOOM_connection c = cs[i];
-       int fd, mask;
-        int this_timeout;
-       
-       if (!c)
-           continue;
-       fd = z3950_connection_socket(c);
-       mask = z3950_connection_mask(c);
-
-       if (fd == -1)
-           continue;
-       if (max_fd < fd)
-           max_fd = fd;
-
-        this_timeout = ZOOM_options_get_int (c->options, "timeout", -1);
-        if (this_timeout != -1 && this_timeout < timeout)
-            timeout = this_timeout;
-#if HAVE_SYS_POLL_H
-        if (mask)
-        {
-            short poll_events = 0;
-
-            if (mask & ZOOM_SELECT_READ)
-                poll_events += POLLIN;
-            if (mask & ZOOM_SELECT_WRITE)
-                poll_events += POLLOUT;
-            if (mask & ZOOM_SELECT_EXCEPT)
-                poll_events += POLLERR;
-            pollfds[nfds].fd = fd;
-            pollfds[nfds].events = poll_events;
-            pollfds[nfds].revents = 0;
-            poll_cs[nfds] = c;
-            nfds++;
-        }
-#else
-       if (mask & ZOOM_SELECT_READ)
-       {
-           FD_SET (fd, &input);
-           nfds++;
-       }
-       if (mask & ZOOM_SELECT_WRITE)
-       {
-           FD_SET (fd, &output);
-           nfds++;
-       }
-       if (mask & ZOOM_SELECT_EXCEPT)
-       {
-           FD_SET (fd, &except);
-           nfds++;
-       }
-#endif
-    }
-    if (timeout >= 5000)
-        timeout = 30;
-
-    if (!nfds)
-        return 0;
-
-#if HAVE_SYS_POLL_H
-    r = poll (pollfds, nfds, timeout * 1000);
-    for (i = 0; i<nfds; i++)
-    {
-        ZOOM_connection c = poll_cs[i];
-        if (r && c->mask)
-        {
-            int mask = 0;
-            if (pollfds[i].revents & POLLIN)
-                mask += ZOOM_SELECT_READ;
-            if (pollfds[i].revents & POLLOUT)
-                mask += ZOOM_SELECT_WRITE;
-            if (pollfds[i].revents & POLLERR)
-                mask += ZOOM_SELECT_EXCEPT;
-            if (mask)
-                ZOOM_connection_do_io(c, mask);
-        }
-        else if (r == 0 && c->mask)
-        {
-            ZOOM_Event event = ZOOM_Event_create(ZOOM_EVENT_TIMEOUT);
-           /* timeout and this connection was waiting */
-           set_ZOOM_error(c, ZOOM_ERROR_TIMEOUT, 0);
-            do_close (c);
-            ZOOM_connection_put_event(c, event);
-        }
-    }
-#else
-    tv.tv_sec = timeout;
-    tv.tv_usec = 0;
-    yaz_log (LOG_DEBUG, "select start");
-    r = select (max_fd+1, &input, &output, &except, &tv);
-    yaz_log (LOG_DEBUG, "select stop, returned r=%d", r);
-    for (i = 0; i<no; i++)
-    {
-       ZOOM_connection c = cs[i];
-       int fd, mask;
-
-       if (!c)
-           continue;
-       fd = z3950_connection_socket(c);
-       mask = 0;
-       if (r && c->mask)
-       {
-           /* no timeout and real socket */
-           if (FD_ISSET(fd, &input))
-               mask += ZOOM_SELECT_READ;
-           if (FD_ISSET(fd, &output))
-               mask += ZOOM_SELECT_WRITE;
-           if (FD_ISSET(fd, &except))
-               mask += ZOOM_SELECT_EXCEPT;
-           if (mask)
-               ZOOM_connection_do_io(c, mask);
-       }
-       if (r == 0 && c->mask)
-       {
-            ZOOM_Event event = ZOOM_Event_create(ZOOM_EVENT_TIMEOUT);
-           /* timeout and this connection was waiting */
-           set_ZOOM_error(c, ZOOM_ERROR_TIMEOUT, 0);
-            do_close (c);
-            yaz_log (LOG_DEBUG, "timeout");
-            ZOOM_connection_put_event(c, event);
-       }
-    }
-#endif
-    for (i = 0; i<no; i++)
-    {
-       ZOOM_connection c = cs[i];
-        ZOOM_Event event;
-       if (c && (event = ZOOM_connection_get_event(c)))
-        {
-            ZOOM_Event_destroy (event);
-           return i+1;
-        }
-    }
-    return 0;
-}
diff --git a/zutil/zoom-opt.c b/zutil/zoom-opt.c
deleted file mode 100644 (file)
index 02a7ae0..0000000
+++ /dev/null
@@ -1,183 +0,0 @@
-/*
- * $Id: zoom-opt.c,v 1.3 2003-01-06 08:20:29 adam Exp $
- *
- * ZOOM layer for C, options handling
- */
-#include <assert.h>
-#include "zoom-p.h"
-
-#include <yaz/xmalloc.h>
-
-ZOOM_API(ZOOM_options)
-ZOOM_options_create_with_parent (ZOOM_options parent)
-{
-    return ZOOM_options_create_with_parent2(parent, 0);
-}
-
-ZOOM_API(ZOOM_options)
-ZOOM_options_create (void)
-{
-    return ZOOM_options_create_with_parent (0);
-}
-
-
-ZOOM_API(ZOOM_options)
-ZOOM_options_create_with_parent2 (ZOOM_options parent1, ZOOM_options parent2)
-{
-    ZOOM_options opt = (ZOOM_options) xmalloc (sizeof(*opt));
-
-    opt->refcount = 1;
-    opt->callback_func = 0;
-    opt->callback_handle = 0;
-    opt->entries = 0;
-    opt->parent1= parent1;
-    if (parent1)
-       (parent1->refcount)++;
-    opt->parent2= parent2;
-    if (parent2)
-       (parent2->refcount)++;
-    return opt;
-}
-
-
-void ZOOM_options_addref (ZOOM_options opt)
-{
-    (opt->refcount)++;
-}
-
-ZOOM_API(ZOOM_options_callback)
-ZOOM_options_set_callback (
-    ZOOM_options opt,
-    ZOOM_options_callback callback_func,
-    void *callback_handle)
-{
-    ZOOM_options_callback callback_old;
-
-    assert (opt);
-    callback_old = opt->callback_func;
-    opt->callback_func = callback_func;
-    opt->callback_handle = callback_handle;
-    return callback_old;
-}
-
-ZOOM_API(void)
-ZOOM_options_destroy (ZOOM_options opt)
-{
-    if (!opt)
-       return;
-    (opt->refcount)--;
-    if (opt->refcount == 0)
-    {
-       struct ZOOM_options_entry *e;
-       
-       ZOOM_options_destroy (opt->parent1);
-       ZOOM_options_destroy (opt->parent2);
-       e = opt->entries;
-       while (e)
-       {
-           struct ZOOM_options_entry *e0 = e;
-           xfree (e->name);
-           xfree (e->value);
-           e = e->next;
-           xfree (e0);
-       }
-       xfree (opt);
-    }
-}
-
-ZOOM_API(void)
-ZOOM_options_setl (ZOOM_options opt, const char *name, const char *value,
-                   int len)
-{
-    struct ZOOM_options_entry **e;
-
-    e = &opt->entries;
-    while (*e)
-    {
-       if (!strcmp((*e)->name, name))
-       {
-           xfree ((*e)->value);
-            (*e)->value = 0;
-            if (value)
-            {
-                (*e)->value = (char *) xmalloc (len+1);
-                memcpy ((*e)->value, value, len);
-                (*e)->value[len] = '\0';
-            }
-           return;
-       }
-       e = &(*e)->next;
-    }
-    *e = (struct ZOOM_options_entry *) xmalloc (sizeof(**e));
-    (*e)->name = xstrdup (name);
-    (*e)->value = 0;
-    if (value)
-    {
-        (*e)->value = (char *) xmalloc (len+1);
-        memcpy ((*e)->value, value, len);
-        (*e)->value[len] = '\0';
-    }
-    (*e)->next = 0;
-}
-
-ZOOM_API(void)
-ZOOM_options_set (ZOOM_options opt, const char *name, const char *value)
-{
-    ZOOM_options_setl (opt, name, value, value ? strlen(value): 0);
-}
-
-ZOOM_API(const char *)
-ZOOM_options_get (ZOOM_options opt, const char *name)
-{
-    const char *v = 0;
-    if (!opt)
-       return 0;
-    if (opt->callback_func)
-       v = (*opt->callback_func)(opt->callback_handle, name);
-    if (!v)
-    {
-       struct ZOOM_options_entry *e;
-       for (e = opt->entries; e; e = e->next)
-           if (!strcmp(e->name, name))
-           {
-               v = e->value;
-               break;
-           }
-    }
-    if (!v)
-       v = ZOOM_options_get(opt->parent1, name);
-    if (!v)
-       v = ZOOM_options_get(opt->parent2, name);
-    return v;
-}
-
-ZOOM_API(int)
-ZOOM_options_get_bool (ZOOM_options opt, const char *name, int defa)
-{
-    const char *v = ZOOM_options_get (opt, name);
-
-    if (!v)
-       return defa;
-    if (!strcmp (v, "1") || !strcmp(v, "T"))
-       return 1;
-    return 0;
-}
-
-ZOOM_API(int)
-ZOOM_options_get_int (ZOOM_options opt, const char *name, int defa)
-{
-    const char *v = ZOOM_options_get (opt, name);
-
-    if (!v || !*v)
-       return defa;
-    return atoi(v);
-}
-
-ZOOM_API(void)
-ZOOM_options_set_int(ZOOM_options opt, const char *name, int value)
-{
-    char s[40];
-
-    sprintf (s, "%d", value);
-    ZOOM_options_set (opt, name, s);
-}
diff --git a/zutil/zoom-p.h b/zutil/zoom-p.h
deleted file mode 100644 (file)
index 0e136ee..0000000
+++ /dev/null
@@ -1,168 +0,0 @@
-/*
- * Private C header for ZOOM C.
- * $Id: zoom-p.h,v 1.10 2003-07-14 12:59:23 adam Exp $
- */
-
-#if HAVE_XSLT
-#include <yaz/srw.h>
-#endif
-
-#include <yaz/proto.h>
-#include <yaz/comstack.h>
-#include <yaz/wrbuf.h>
-#include <yaz/zoom.h>
-#include <yaz/sortspec.h>
-typedef struct ZOOM_Event_p *ZOOM_Event;
-
-struct ZOOM_query_p {
-    Z_Query *z_query;
-    Z_SortKeySpecList *sort_spec;
-    int refcount;
-    ODR odr;
-    char *query_string;
-};
-
-#define STATE_IDLE 0
-#define STATE_CONNECTING 1
-#define STATE_ESTABLISHED 2
-
-#define ZOOM_SELECT_READ 1
-#define ZOOM_SELECT_WRITE 2
-#define ZOOM_SELECT_EXCEPT 4
-
-struct ZOOM_connection_p {
-    enum oid_proto proto;
-    COMSTACK cs;
-    char *host_port;
-    char *path;
-    int error;
-    char *addinfo;
-    const char *diagset;
-    int state;
-    int mask;
-    int reconnect_ok;
-    ODR odr_in;
-    ODR odr_out;
-    char *buf_in;
-    int len_in;
-    char *buf_out;
-    int len_out;
-    char *proxy;
-    char *charset;
-    char *lang;
-    char *cookie_out;
-    char *cookie_in;
-    char *client_IP;
-    int async;
-    int support_named_resultsets;
-    int last_event;
-    ZOOM_task tasks;
-    ZOOM_options options;
-    ZOOM_resultset resultsets;
-    ZOOM_Event m_queue_front;
-    ZOOM_Event m_queue_back;
-};
-
-struct ZOOM_options_entry {
-    char *name;
-    char *value;
-    struct ZOOM_options_entry *next;
-};
-
-struct ZOOM_options_p {
-    int refcount;
-    void *callback_handle;
-    ZOOM_options_callback callback_func;
-    struct ZOOM_options_entry *entries;
-    ZOOM_options parent1;
-    ZOOM_options parent2;
-};
-
-typedef struct ZOOM_record_cache_p *ZOOM_record_cache;
-
-struct ZOOM_resultset_p {
-    Z_SortKeySpecList *r_sort_spec;
-    ZOOM_query query;
-    int refcount;
-    int size;
-    int start;
-    int count;
-    int step;
-    int piggyback;
-    char *setname;
-    char *schema;
-    ODR odr;
-    ZOOM_record_cache record_cache;
-    ZOOM_options options;
-    ZOOM_connection connection;
-    ZOOM_resultset next;
-};
-
-struct ZOOM_record_p {
-    ODR odr;
-    WRBUF wrbuf_marc;
-    WRBUF wrbuf_iconv;
-    WRBUF wrbuf_opac;
-    Z_NamePlusRecord *npr;
-};
-
-struct ZOOM_record_cache_p {
-    struct ZOOM_record_p rec;
-    char *elementSetName;
-    char *syntax;
-    char *schema;
-    int pos;
-    ZOOM_record_cache next;
-};
-
-struct ZOOM_scanset_p {
-    int refcount;
-    ODR odr;
-    ZOOM_options options;
-    ZOOM_connection connection;
-    Z_AttributesPlusTerm *termListAndStartPoint;
-    Z_AttributeSetId *attributeSet;
-    Z_ScanResponse *scan_response;
-};
-
-struct ZOOM_package_p {
-    int refcount;
-    ODR odr_out;
-    ZOOM_options options;
-    ZOOM_connection connection;
-    char *buf_out;
-    int len_out;
-};
-
-struct ZOOM_task_p {
-    int running;
-    int which;
-    union {
-#define ZOOM_TASK_SEARCH 1
-        struct {
-            ZOOM_resultset resultset;
-        } search;
-#define ZOOM_TASK_RETRIEVE 2
-        struct {
-            int start;
-            ZOOM_resultset resultset;
-            int count;
-        } retrieve;
-#define ZOOM_TASK_CONNECT 3
-#define ZOOM_TASK_SCAN 4
-        struct {
-            ZOOM_scanset scan;
-        } scan;
-#define ZOOM_TASK_PACKAGE 5
-        ZOOM_package package;
-    } u;
-    ZOOM_task next;
-};
-
-struct ZOOM_Event_p {
-    int kind;
-    ZOOM_Event next;
-    ZOOM_Event prev;
-};
-
-void ZOOM_options_addref (ZOOM_options opt);